From c12f7c71287ced429db4036678b254a967da3dea Mon Sep 17 00:00:00 2001 From: Lubos Date: Thu, 28 Aug 2025 20:37:54 +0800 Subject: [PATCH 1/3] fix(client): pass fetch option to sse client --- .changeset/cyan-crabs-vanish.md | 5 ++++ .../client/client.gen.ts | 9 ++++++ .../client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../2.0.x/form-data/client/client.gen.ts | 9 ++++++ .../2.0.x/form-data/client/types.gen.ts | 2 +- .../form-data/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../client/client.gen.ts | 9 ++++++ .../client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../sdk-nested-classes/client/client.gen.ts | 9 ++++++ .../sdk-nested-classes/client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../@hey-api/sdk/default/client/client.gen.ts | 9 ++++++ .../@hey-api/sdk/default/client/types.gen.ts | 2 +- .../sdk/default/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../sdk/instance/client/client.gen.ts | 9 ++++++ .../@hey-api/sdk/instance/client/types.gen.ts | 2 +- .../sdk/instance/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../sdk/throwOnError/client/client.gen.ts | 9 ++++++ .../sdk/throwOnError/client/types.gen.ts | 2 +- .../throwOnError/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../type-format-valibot/client/client.gen.ts | 9 ++++++ .../type-format-valibot/client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../type-format-zod/client/client.gen.ts | 9 ++++++ .../type-format-zod/client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../client/client.gen.ts | 9 ++++++ .../client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../client/client.gen.ts | 9 ++++++ .../client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../@pinia/colada/fetch/client/client.gen.ts | 9 ++++++ .../@pinia/colada/fetch/client/types.gen.ts | 2 +- .../colada/fetch/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../colada/group-by-tag/client/client.gen.ts | 9 ++++++ .../colada/group-by-tag/client/types.gen.ts | 2 +- .../group-by-tag/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../asClass/client/client.gen.ts | 9 ++++++ .../asClass/client/types.gen.ts | 2 +- .../asClass/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../axios/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../fetch/client/client.gen.ts | 9 ++++++ .../fetch/client/types.gen.ts | 2 +- .../fetch/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../name-builder/client/client.gen.ts | 9 ++++++ .../name-builder/client/types.gen.ts | 2 +- .../name-builder/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../react-query/asClass/client/client.gen.ts | 9 ++++++ .../react-query/asClass/client/types.gen.ts | 2 +- .../asClass/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../axios/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../react-query/fetch/client/client.gen.ts | 9 ++++++ .../react-query/fetch/client/types.gen.ts | 2 +- .../fetch/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../name-builder/client/client.gen.ts | 9 ++++++ .../name-builder/client/types.gen.ts | 2 +- .../name-builder/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../solid-query/asClass/client/client.gen.ts | 9 ++++++ .../solid-query/asClass/client/types.gen.ts | 2 +- .../asClass/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../axios/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../solid-query/fetch/client/client.gen.ts | 9 ++++++ .../solid-query/fetch/client/types.gen.ts | 2 +- .../fetch/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../name-builder/client/client.gen.ts | 9 ++++++ .../name-builder/client/types.gen.ts | 2 +- .../name-builder/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../svelte-query/asClass/client/client.gen.ts | 9 ++++++ .../svelte-query/asClass/client/types.gen.ts | 2 +- .../asClass/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../axios/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../svelte-query/fetch/client/client.gen.ts | 9 ++++++ .../svelte-query/fetch/client/types.gen.ts | 2 +- .../fetch/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../name-builder/client/client.gen.ts | 9 ++++++ .../name-builder/client/types.gen.ts | 2 +- .../name-builder/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../vue-query/asClass/client/client.gen.ts | 9 ++++++ .../vue-query/asClass/client/types.gen.ts | 2 +- .../asClass/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../axios/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../vue-query/fetch/client/client.gen.ts | 9 ++++++ .../vue-query/fetch/client/types.gen.ts | 2 +- .../fetch/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../name-builder/client/client.gen.ts | 9 ++++++ .../name-builder/client/types.gen.ts | 2 +- .../name-builder/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../2.0.x/schema-unknown/client/client.gen.ts | 9 ++++++ .../2.0.x/schema-unknown/client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../security-api-key/client/client.gen.ts | 9 ++++++ .../security-api-key/client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../2.0.x/security-basic/client/client.gen.ts | 9 ++++++ .../2.0.x/security-basic/client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../2.0.x/security-false/client/client.gen.ts | 9 ++++++ .../2.0.x/security-false/client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../security-oauth2/client/client.gen.ts | 9 ++++++ .../2.0.x/security-oauth2/client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../servers-base-path/client/client.gen.ts | 9 ++++++ .../servers-base-path/client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../2.0.x/servers-host/client/client.gen.ts | 9 ++++++ .../2.0.x/servers-host/client/types.gen.ts | 2 +- .../servers-host/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../2.0.x/servers/client/client.gen.ts | 9 ++++++ .../2.0.x/servers/client/types.gen.ts | 2 +- .../servers/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../client/client.gen.ts | 9 ++++++ .../transforms-read-write/client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../client/client.gen.ts | 9 ++++++ .../client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../client/client.gen.ts | 9 ++++++ .../client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../client/client.gen.ts | 9 ++++++ .../client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../client/client.gen.ts | 9 ++++++ .../client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../sdk-nested-classes/client/client.gen.ts | 9 ++++++ .../sdk-nested-classes/client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../@hey-api/sdk/default/client/client.gen.ts | 9 ++++++ .../@hey-api/sdk/default/client/types.gen.ts | 2 +- .../sdk/default/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../sdk/instance/client/client.gen.ts | 9 ++++++ .../@hey-api/sdk/instance/client/types.gen.ts | 2 +- .../sdk/instance/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../sdk/throwOnError/client/client.gen.ts | 9 ++++++ .../sdk/throwOnError/client/types.gen.ts | 2 +- .../throwOnError/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../type-format-valibot/client/client.gen.ts | 9 ++++++ .../type-format-valibot/client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../type-format-zod/client/client.gen.ts | 9 ++++++ .../type-format-zod/client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../client/client.gen.ts | 9 ++++++ .../client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../client/client.gen.ts | 9 ++++++ .../client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../@pinia/colada/fetch/client/client.gen.ts | 9 ++++++ .../@pinia/colada/fetch/client/types.gen.ts | 2 +- .../colada/fetch/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../colada/group-by-tag/client/client.gen.ts | 9 ++++++ .../colada/group-by-tag/client/types.gen.ts | 2 +- .../group-by-tag/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../asClass/client/client.gen.ts | 9 ++++++ .../asClass/client/types.gen.ts | 2 +- .../asClass/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../axios/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../fetch/client/client.gen.ts | 9 ++++++ .../fetch/client/types.gen.ts | 2 +- .../fetch/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../name-builder/client/client.gen.ts | 9 ++++++ .../name-builder/client/types.gen.ts | 2 +- .../name-builder/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../react-query/asClass/client/client.gen.ts | 9 ++++++ .../react-query/asClass/client/types.gen.ts | 2 +- .../asClass/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../axios/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../react-query/fetch/client/client.gen.ts | 9 ++++++ .../react-query/fetch/client/types.gen.ts | 2 +- .../fetch/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../name-builder/client/client.gen.ts | 9 ++++++ .../name-builder/client/types.gen.ts | 2 +- .../name-builder/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../solid-query/asClass/client/client.gen.ts | 9 ++++++ .../solid-query/asClass/client/types.gen.ts | 2 +- .../asClass/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../axios/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../solid-query/fetch/client/client.gen.ts | 9 ++++++ .../solid-query/fetch/client/types.gen.ts | 2 +- .../fetch/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../name-builder/client/client.gen.ts | 9 ++++++ .../name-builder/client/types.gen.ts | 2 +- .../name-builder/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../svelte-query/asClass/client/client.gen.ts | 9 ++++++ .../svelte-query/asClass/client/types.gen.ts | 2 +- .../asClass/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../axios/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../svelte-query/fetch/client/client.gen.ts | 9 ++++++ .../svelte-query/fetch/client/types.gen.ts | 2 +- .../fetch/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../name-builder/client/client.gen.ts | 9 ++++++ .../name-builder/client/types.gen.ts | 2 +- .../name-builder/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../vue-query/asClass/client/client.gen.ts | 9 ++++++ .../vue-query/asClass/client/types.gen.ts | 2 +- .../asClass/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../axios/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../vue-query/fetch/client/client.gen.ts | 9 ++++++ .../vue-query/fetch/client/types.gen.ts | 2 +- .../fetch/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../name-builder/client/client.gen.ts | 9 ++++++ .../name-builder/client/types.gen.ts | 2 +- .../name-builder/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../security-api-key/client/client.gen.ts | 9 ++++++ .../security-api-key/client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../3.0.x/security-false/client/client.gen.ts | 9 ++++++ .../3.0.x/security-false/client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../security-http-bearer/client/client.gen.ts | 9 ++++++ .../security-http-bearer/client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../security-oauth2/client/client.gen.ts | 9 ++++++ .../3.0.x/security-oauth2/client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../client/client.gen.ts | 9 ++++++ .../client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../3.0.x/servers/client/client.gen.ts | 9 ++++++ .../3.0.x/servers/client/types.gen.ts | 2 +- .../servers/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../transformers-all-of/client/client.gen.ts | 9 ++++++ .../transformers-all-of/client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../client/client.gen.ts | 9 ++++++ .../client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../transformers-array/client/client.gen.ts | 9 ++++++ .../transformers-array/client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../client/client.gen.ts | 9 ++++++ .../transforms-read-write/client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../client/client.gen.ts | 9 ++++++ .../client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../default/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../base-url-false/client/client.gen.ts | 9 ++++++ .../base-url-false/client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../base-url-number/client/client.gen.ts | 9 ++++++ .../base-url-number/client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../base-url-strict/client/client.gen.ts | 9 ++++++ .../base-url-strict/client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../base-url-string/client/client.gen.ts | 9 ++++++ .../base-url-string/client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../client-fetch/default/client/client.gen.ts | 9 ++++++ .../client-fetch/default/client/types.gen.ts | 2 +- .../default/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../sdk-client-optional/client/client.gen.ts | 9 ++++++ .../sdk-client-optional/client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../sdk-client-required/client/client.gen.ts | 9 ++++++ .../sdk-client-required/client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../client/client.gen.ts | 9 ++++++ .../tsconfig-nodenext-sdk/client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../base-url-false/client/client.gen.ts | 15 ++++++++++ .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../base-url-number/client/client.gen.ts | 15 ++++++++++ .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../base-url-strict/client/client.gen.ts | 15 ++++++++++ .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../base-url-string/client/client.gen.ts | 15 ++++++++++ .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../client-next/default/client/client.gen.ts | 15 ++++++++++ .../default/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../sdk-client-optional/client/client.gen.ts | 15 ++++++++++ .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../sdk-client-required/client/client.gen.ts | 15 ++++++++++ .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../client/client.gen.ts | 15 ++++++++++ .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../default/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../3.1.x/headers/client/client.gen.ts | 9 ++++++ .../3.1.x/headers/client/types.gen.ts | 2 +- .../headers/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../client/client.gen.ts | 9 ++++++ .../client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../3.1.x/pagination-ref/client/client.gen.ts | 9 ++++++ .../3.1.x/pagination-ref/client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../client/client.gen.ts | 9 ++++++ .../client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../client/client.gen.ts | 9 ++++++ .../client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../sdk-nested-classes/client/client.gen.ts | 9 ++++++ .../sdk-nested-classes/client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../@hey-api/sdk/default/client/client.gen.ts | 9 ++++++ .../@hey-api/sdk/default/client/types.gen.ts | 2 +- .../sdk/default/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../sdk/instance/client/client.gen.ts | 9 ++++++ .../@hey-api/sdk/instance/client/types.gen.ts | 2 +- .../sdk/instance/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../sdk/throwOnError/client/client.gen.ts | 9 ++++++ .../sdk/throwOnError/client/types.gen.ts | 2 +- .../throwOnError/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../type-format-valibot/client/client.gen.ts | 9 ++++++ .../type-format-valibot/client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../type-format-zod/client/client.gen.ts | 9 ++++++ .../type-format-zod/client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../client/client.gen.ts | 9 ++++++ .../client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../client/client.gen.ts | 9 ++++++ .../client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../@pinia/colada/fetch/client/client.gen.ts | 9 ++++++ .../@pinia/colada/fetch/client/types.gen.ts | 2 +- .../colada/fetch/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../colada/group-by-tag/client/client.gen.ts | 9 ++++++ .../colada/group-by-tag/client/types.gen.ts | 2 +- .../group-by-tag/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../asClass/client/client.gen.ts | 9 ++++++ .../asClass/client/types.gen.ts | 2 +- .../asClass/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../axios/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../fetch/client/client.gen.ts | 9 ++++++ .../fetch/client/types.gen.ts | 2 +- .../fetch/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../name-builder/client/client.gen.ts | 9 ++++++ .../name-builder/client/types.gen.ts | 2 +- .../name-builder/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../react-query/asClass/client/client.gen.ts | 9 ++++++ .../react-query/asClass/client/types.gen.ts | 2 +- .../asClass/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../axios/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../react-query/fetch/client/client.gen.ts | 9 ++++++ .../react-query/fetch/client/types.gen.ts | 2 +- .../fetch/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../name-builder/client/client.gen.ts | 9 ++++++ .../name-builder/client/types.gen.ts | 2 +- .../name-builder/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../solid-query/asClass/client/client.gen.ts | 9 ++++++ .../solid-query/asClass/client/types.gen.ts | 2 +- .../asClass/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../axios/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../solid-query/fetch/client/client.gen.ts | 9 ++++++ .../solid-query/fetch/client/types.gen.ts | 2 +- .../fetch/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../name-builder/client/client.gen.ts | 9 ++++++ .../name-builder/client/types.gen.ts | 2 +- .../name-builder/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../svelte-query/asClass/client/client.gen.ts | 9 ++++++ .../svelte-query/asClass/client/types.gen.ts | 2 +- .../asClass/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../axios/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../svelte-query/fetch/client/client.gen.ts | 9 ++++++ .../svelte-query/fetch/client/types.gen.ts | 2 +- .../fetch/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../name-builder/client/client.gen.ts | 9 ++++++ .../name-builder/client/types.gen.ts | 2 +- .../name-builder/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../vue-query/asClass/client/client.gen.ts | 9 ++++++ .../vue-query/asClass/client/types.gen.ts | 2 +- .../asClass/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../axios/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../vue-query/fetch/client/client.gen.ts | 9 ++++++ .../vue-query/fetch/client/types.gen.ts | 2 +- .../fetch/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../name-builder/client/client.gen.ts | 9 ++++++ .../name-builder/client/types.gen.ts | 2 +- .../name-builder/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../security-api-key/client/client.gen.ts | 9 ++++++ .../security-api-key/client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../3.1.x/security-false/client/client.gen.ts | 9 ++++++ .../3.1.x/security-false/client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../security-http-bearer/client/client.gen.ts | 9 ++++++ .../security-http-bearer/client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../security-oauth2/client/client.gen.ts | 9 ++++++ .../3.1.x/security-oauth2/client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../client/client.gen.ts | 9 ++++++ .../client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../3.1.x/servers/client/client.gen.ts | 9 ++++++ .../3.1.x/servers/client/types.gen.ts | 2 +- .../servers/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../sse-angular/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../sse-axios/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../3.1.x/sse-fetch/client/client.gen.ts | 9 ++++++ .../3.1.x/sse-fetch/client/types.gen.ts | 2 +- .../sse-fetch/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../3.1.x/sse-next/client/client.gen.ts | 15 ++++++++++ .../sse-next/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../sse-nuxt/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../transformers-all-of/client/client.gen.ts | 9 ++++++ .../transformers-all-of/client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../client/client.gen.ts | 9 ++++++ .../client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../transformers-array/client/client.gen.ts | 9 ++++++ .../transformers-array/client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../client/client.gen.ts | 9 ++++++ .../transforms-read-write/client/types.gen.ts | 2 +- .../core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../@tanstack/meta/client/client.gen.ts | 9 ++++++ .../@tanstack/meta/client/types.gen.ts | 2 +- .../meta/core/serverSentEvents.gen.ts | 29 ++++++++++++++++++- .../v3_no_index/client/client.gen.ts.snap | 9 ++++++ .../v3_no_index/client/types.gen.ts.snap | 2 +- .../core/serverSentEvents.gen.ts.snap | 29 ++++++++++++++++++- .../main/test/openapi-ts.config.ts | 4 +-- .../client-core/bundle/serverSentEvents.ts | 29 ++++++++++++++++++- .../@hey-api/client-fetch/bundle/client.ts | 9 ++++++ .../@hey-api/client-fetch/bundle/types.ts | 2 +- .../@hey-api/client-next/bundle/client.ts | 15 ++++++++++ 446 files changed, 6375 insertions(+), 307 deletions(-) create mode 100644 .changeset/cyan-crabs-vanish.md diff --git a/.changeset/cyan-crabs-vanish.md b/.changeset/cyan-crabs-vanish.md new file mode 100644 index 000000000..edf3d68a6 --- /dev/null +++ b/.changeset/cyan-crabs-vanish.md @@ -0,0 +1,5 @@ +--- +'@hey-api/openapi-ts': patch +--- + +fix(client): pass fetch option to sse client diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/body-response-text-plain/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/body-response-text-plain/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/body-response-text-plain/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/body-response-text-plain/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/body-response-text-plain/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/body-response-text-plain/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/body-response-text-plain/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/body-response-text-plain/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/body-response-text-plain/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/body-response-text-plain/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/body-response-text-plain/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/body-response-text-plain/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/form-data/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/form-data/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/form-data/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/form-data/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/form-data/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/form-data/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/form-data/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/form-data/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/form-data/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/form-data/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/form-data/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/form-data/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes-instance/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes-instance/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes-instance/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes-instance/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes-instance/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes-instance/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes-instance/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes-instance/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes-instance/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes-instance/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes-instance/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes-instance/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/sdk/default/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/sdk/default/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/sdk/default/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/sdk/default/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/sdk/default/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/sdk/default/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/sdk/default/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/sdk/default/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/sdk/default/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/sdk/default/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/sdk/default/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/sdk/default/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/sdk/instance/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/sdk/instance/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/sdk/instance/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/sdk/instance/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/sdk/instance/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/sdk/instance/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/sdk/instance/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/sdk/instance/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/sdk/instance/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/sdk/instance/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/sdk/instance/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/sdk/instance/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/sdk/throwOnError/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/sdk/throwOnError/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/sdk/throwOnError/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/sdk/throwOnError/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/sdk/throwOnError/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/sdk/throwOnError/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/sdk/throwOnError/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/sdk/throwOnError/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/sdk/throwOnError/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/sdk/throwOnError/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/sdk/throwOnError/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/sdk/throwOnError/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/transformers/type-format-valibot/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/transformers/type-format-valibot/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/transformers/type-format-valibot/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/transformers/type-format-valibot/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/transformers/type-format-valibot/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/transformers/type-format-valibot/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/transformers/type-format-valibot/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/transformers/type-format-valibot/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/transformers/type-format-valibot/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/transformers/type-format-valibot/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/transformers/type-format-valibot/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/transformers/type-format-valibot/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/transformers/type-format-zod/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/transformers/type-format-zod/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/transformers/type-format-zod/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/transformers/type-format-zod/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/transformers/type-format-zod/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/transformers/type-format-zod/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/transformers/type-format-zod/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/transformers/type-format-zod/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/transformers/type-format-zod/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/transformers/type-format-zod/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/transformers/type-format-zod/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/transformers/type-format-zod/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/typescript/transforms-read-write-custom-name/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/typescript/transforms-read-write-custom-name/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/typescript/transforms-read-write-custom-name/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/typescript/transforms-read-write-custom-name/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/typescript/transforms-read-write-custom-name/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/typescript/transforms-read-write-custom-name/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/typescript/transforms-read-write-custom-name/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/typescript/transforms-read-write-custom-name/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/typescript/transforms-read-write-custom-name/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/typescript/transforms-read-write-custom-name/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/typescript/transforms-read-write-custom-name/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/typescript/transforms-read-write-custom-name/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/typescript/transforms-read-write-ignore/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/typescript/transforms-read-write-ignore/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/typescript/transforms-read-write-ignore/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/typescript/transforms-read-write-ignore/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/typescript/transforms-read-write-ignore/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/typescript/transforms-read-write-ignore/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/typescript/transforms-read-write-ignore/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/typescript/transforms-read-write-ignore/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/typescript/transforms-read-write-ignore/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/typescript/transforms-read-write-ignore/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/typescript/transforms-read-write-ignore/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/typescript/transforms-read-write-ignore/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@pinia/colada/fetch/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@pinia/colada/fetch/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@pinia/colada/fetch/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@pinia/colada/fetch/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@pinia/colada/fetch/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@pinia/colada/fetch/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@pinia/colada/fetch/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@pinia/colada/fetch/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@pinia/colada/fetch/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@pinia/colada/fetch/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@pinia/colada/fetch/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@pinia/colada/fetch/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@pinia/colada/group-by-tag/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@pinia/colada/group-by-tag/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@pinia/colada/group-by-tag/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@pinia/colada/group-by-tag/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@pinia/colada/group-by-tag/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@pinia/colada/group-by-tag/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@pinia/colada/group-by-tag/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@pinia/colada/group-by-tag/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@pinia/colada/group-by-tag/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@pinia/colada/group-by-tag/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@pinia/colada/group-by-tag/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@pinia/colada/group-by-tag/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/asClass/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/asClass/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/asClass/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/asClass/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/asClass/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/asClass/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/asClass/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/asClass/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/asClass/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/asClass/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/asClass/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/asClass/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/axios/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/axios/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/axios/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/axios/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/fetch/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/fetch/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/fetch/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/fetch/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/fetch/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/fetch/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/fetch/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/fetch/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/fetch/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/fetch/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/fetch/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/fetch/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/name-builder/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/name-builder/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/name-builder/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/name-builder/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/name-builder/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/name-builder/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/name-builder/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/name-builder/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/name-builder/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/name-builder/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/name-builder/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/name-builder/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/asClass/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/asClass/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/asClass/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/asClass/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/asClass/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/asClass/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/asClass/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/asClass/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/asClass/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/asClass/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/asClass/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/asClass/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/axios/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/axios/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/axios/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/axios/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/fetch/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/fetch/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/fetch/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/fetch/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/fetch/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/fetch/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/fetch/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/fetch/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/fetch/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/fetch/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/fetch/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/fetch/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/name-builder/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/name-builder/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/name-builder/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/name-builder/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/name-builder/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/name-builder/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/name-builder/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/name-builder/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/name-builder/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/name-builder/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/name-builder/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/name-builder/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/asClass/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/asClass/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/asClass/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/asClass/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/asClass/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/asClass/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/asClass/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/asClass/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/asClass/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/asClass/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/asClass/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/asClass/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/axios/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/axios/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/axios/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/axios/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/fetch/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/fetch/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/fetch/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/fetch/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/fetch/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/fetch/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/fetch/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/fetch/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/fetch/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/fetch/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/fetch/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/fetch/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/name-builder/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/name-builder/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/name-builder/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/name-builder/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/name-builder/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/name-builder/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/name-builder/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/name-builder/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/name-builder/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/name-builder/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/name-builder/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/name-builder/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/asClass/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/asClass/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/asClass/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/asClass/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/asClass/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/asClass/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/asClass/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/asClass/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/asClass/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/asClass/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/asClass/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/asClass/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/axios/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/axios/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/axios/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/axios/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/fetch/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/fetch/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/fetch/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/fetch/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/fetch/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/fetch/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/fetch/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/fetch/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/fetch/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/fetch/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/fetch/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/fetch/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/name-builder/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/name-builder/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/name-builder/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/name-builder/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/name-builder/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/name-builder/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/name-builder/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/name-builder/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/name-builder/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/name-builder/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/name-builder/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/name-builder/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/asClass/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/asClass/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/asClass/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/asClass/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/asClass/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/asClass/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/asClass/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/asClass/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/asClass/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/asClass/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/asClass/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/asClass/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/axios/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/axios/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/axios/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/axios/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/fetch/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/fetch/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/fetch/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/fetch/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/fetch/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/fetch/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/fetch/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/fetch/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/fetch/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/fetch/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/fetch/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/fetch/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/name-builder/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/name-builder/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/name-builder/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/name-builder/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/name-builder/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/name-builder/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/name-builder/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/name-builder/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/name-builder/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/name-builder/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/name-builder/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/name-builder/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/schema-unknown/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/schema-unknown/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/schema-unknown/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/schema-unknown/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/schema-unknown/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/schema-unknown/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/schema-unknown/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/schema-unknown/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/schema-unknown/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/schema-unknown/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/schema-unknown/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/schema-unknown/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-api-key/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-api-key/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-api-key/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-api-key/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-api-key/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-api-key/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-api-key/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-api-key/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-api-key/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-api-key/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-api-key/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-api-key/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-basic/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-basic/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-basic/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-basic/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-basic/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-basic/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-basic/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-basic/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-basic/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-basic/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-basic/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-basic/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-false/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-false/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-false/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-false/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-false/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-false/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-false/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-false/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-false/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-false/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-false/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-false/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-oauth2/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-oauth2/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-oauth2/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-oauth2/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-oauth2/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-oauth2/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-oauth2/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-oauth2/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-oauth2/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-oauth2/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-oauth2/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-oauth2/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/servers-base-path/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/servers-base-path/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/servers-base-path/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/servers-base-path/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/servers-base-path/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/servers-base-path/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/servers-base-path/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/servers-base-path/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/servers-base-path/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/servers-base-path/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/servers-base-path/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/servers-base-path/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/servers-host/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/servers-host/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/servers-host/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/servers-host/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/servers-host/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/servers-host/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/servers-host/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/servers-host/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/servers-host/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/servers-host/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/servers-host/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/servers-host/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/servers/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/servers/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/servers/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/servers/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/servers/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/servers/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/servers/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/servers/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/servers/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/servers/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/servers/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/servers/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/transforms-read-write/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/transforms-read-write/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/transforms-read-write/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/transforms-read-write/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/transforms-read-write/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/transforms-read-write/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/transforms-read-write/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/transforms-read-write/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/transforms-read-write/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/transforms-read-write/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/transforms-read-write/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/transforms-read-write/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/body-response-text-plain/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/body-response-text-plain/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/body-response-text-plain/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/body-response-text-plain/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/body-response-text-plain/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/body-response-text-plain/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/body-response-text-plain/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/body-response-text-plain/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/body-response-text-plain/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/body-response-text-plain/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/body-response-text-plain/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/body-response-text-plain/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/content-types/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/content-types/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/content-types/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/content-types/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/internal-name-conflict/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/internal-name-conflict/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/internal-name-conflict/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/internal-name-conflict/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/internal-name-conflict/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/internal-name-conflict/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/internal-name-conflict/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/internal-name-conflict/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/internal-name-conflict/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/internal-name-conflict/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/internal-name-conflict/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/internal-name-conflict/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/parameter-explode-false-axios/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/parameter-explode-false-axios/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/parameter-explode-false-axios/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/parameter-explode-false-axios/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/parameter-explode-false/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/parameter-explode-false/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/parameter-explode-false/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/parameter-explode-false/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/parameter-explode-false/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/parameter-explode-false/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/parameter-explode-false/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/parameter-explode-false/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/parameter-explode-false/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/parameter-explode-false/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/parameter-explode-false/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/parameter-explode-false/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes-instance/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes-instance/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes-instance/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes-instance/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes-instance/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes-instance/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes-instance/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes-instance/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes-instance/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes-instance/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes-instance/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes-instance/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/sdk/default/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/sdk/default/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/sdk/default/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/sdk/default/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/sdk/default/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/sdk/default/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/sdk/default/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/sdk/default/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/sdk/default/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/sdk/default/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/sdk/default/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/sdk/default/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/sdk/instance/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/sdk/instance/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/sdk/instance/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/sdk/instance/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/sdk/instance/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/sdk/instance/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/sdk/instance/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/sdk/instance/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/sdk/instance/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/sdk/instance/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/sdk/instance/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/sdk/instance/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/sdk/throwOnError/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/sdk/throwOnError/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/sdk/throwOnError/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/sdk/throwOnError/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/sdk/throwOnError/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/sdk/throwOnError/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/sdk/throwOnError/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/sdk/throwOnError/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/sdk/throwOnError/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/sdk/throwOnError/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/sdk/throwOnError/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/sdk/throwOnError/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/transformers/type-format-valibot/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/transformers/type-format-valibot/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/transformers/type-format-valibot/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/transformers/type-format-valibot/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/transformers/type-format-valibot/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/transformers/type-format-valibot/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/transformers/type-format-valibot/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/transformers/type-format-valibot/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/transformers/type-format-valibot/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/transformers/type-format-valibot/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/transformers/type-format-valibot/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/transformers/type-format-valibot/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/transformers/type-format-zod/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/transformers/type-format-zod/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/transformers/type-format-zod/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/transformers/type-format-zod/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/transformers/type-format-zod/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/transformers/type-format-zod/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/transformers/type-format-zod/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/transformers/type-format-zod/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/transformers/type-format-zod/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/transformers/type-format-zod/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/transformers/type-format-zod/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/transformers/type-format-zod/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/typescript/transforms-read-write-custom-name/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/typescript/transforms-read-write-custom-name/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/typescript/transforms-read-write-custom-name/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/typescript/transforms-read-write-custom-name/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/typescript/transforms-read-write-custom-name/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/typescript/transforms-read-write-custom-name/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/typescript/transforms-read-write-custom-name/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/typescript/transforms-read-write-custom-name/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/typescript/transforms-read-write-custom-name/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/typescript/transforms-read-write-custom-name/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/typescript/transforms-read-write-custom-name/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/typescript/transforms-read-write-custom-name/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/typescript/transforms-read-write-ignore/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/typescript/transforms-read-write-ignore/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/typescript/transforms-read-write-ignore/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/typescript/transforms-read-write-ignore/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/typescript/transforms-read-write-ignore/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/typescript/transforms-read-write-ignore/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/typescript/transforms-read-write-ignore/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/typescript/transforms-read-write-ignore/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/typescript/transforms-read-write-ignore/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/typescript/transforms-read-write-ignore/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/typescript/transforms-read-write-ignore/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/typescript/transforms-read-write-ignore/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@pinia/colada/fetch/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@pinia/colada/fetch/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@pinia/colada/fetch/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@pinia/colada/fetch/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@pinia/colada/fetch/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@pinia/colada/fetch/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@pinia/colada/fetch/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@pinia/colada/fetch/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@pinia/colada/fetch/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@pinia/colada/fetch/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@pinia/colada/fetch/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@pinia/colada/fetch/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@pinia/colada/group-by-tag/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@pinia/colada/group-by-tag/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@pinia/colada/group-by-tag/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@pinia/colada/group-by-tag/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@pinia/colada/group-by-tag/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@pinia/colada/group-by-tag/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@pinia/colada/group-by-tag/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@pinia/colada/group-by-tag/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@pinia/colada/group-by-tag/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@pinia/colada/group-by-tag/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@pinia/colada/group-by-tag/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@pinia/colada/group-by-tag/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/asClass/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/asClass/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/asClass/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/asClass/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/asClass/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/asClass/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/asClass/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/asClass/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/asClass/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/asClass/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/asClass/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/asClass/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/axios/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/axios/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/axios/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/axios/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/fetch/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/fetch/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/fetch/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/fetch/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/fetch/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/fetch/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/fetch/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/fetch/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/fetch/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/fetch/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/fetch/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/fetch/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/name-builder/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/name-builder/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/name-builder/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/name-builder/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/name-builder/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/name-builder/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/name-builder/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/name-builder/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/name-builder/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/name-builder/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/name-builder/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/name-builder/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/asClass/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/asClass/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/asClass/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/asClass/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/asClass/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/asClass/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/asClass/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/asClass/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/asClass/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/asClass/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/asClass/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/asClass/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/axios/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/axios/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/axios/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/axios/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/fetch/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/fetch/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/fetch/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/fetch/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/fetch/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/fetch/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/fetch/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/fetch/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/fetch/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/fetch/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/fetch/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/fetch/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/name-builder/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/name-builder/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/name-builder/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/name-builder/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/name-builder/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/name-builder/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/name-builder/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/name-builder/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/name-builder/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/name-builder/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/name-builder/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/name-builder/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/asClass/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/asClass/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/asClass/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/asClass/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/asClass/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/asClass/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/asClass/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/asClass/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/asClass/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/asClass/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/asClass/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/asClass/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/axios/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/axios/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/axios/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/axios/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/fetch/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/fetch/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/fetch/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/fetch/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/fetch/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/fetch/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/fetch/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/fetch/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/fetch/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/fetch/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/fetch/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/fetch/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/name-builder/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/name-builder/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/name-builder/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/name-builder/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/name-builder/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/name-builder/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/name-builder/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/name-builder/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/name-builder/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/name-builder/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/name-builder/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/name-builder/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/asClass/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/asClass/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/asClass/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/asClass/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/asClass/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/asClass/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/asClass/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/asClass/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/asClass/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/asClass/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/asClass/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/asClass/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/axios/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/axios/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/axios/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/axios/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/fetch/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/fetch/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/fetch/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/fetch/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/fetch/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/fetch/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/fetch/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/fetch/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/fetch/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/fetch/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/fetch/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/fetch/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/name-builder/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/name-builder/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/name-builder/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/name-builder/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/name-builder/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/name-builder/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/name-builder/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/name-builder/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/name-builder/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/name-builder/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/name-builder/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/name-builder/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/asClass/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/asClass/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/asClass/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/asClass/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/asClass/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/asClass/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/asClass/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/asClass/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/asClass/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/asClass/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/asClass/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/asClass/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/axios/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/axios/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/axios/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/axios/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/fetch/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/fetch/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/fetch/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/fetch/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/fetch/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/fetch/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/fetch/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/fetch/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/fetch/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/fetch/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/fetch/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/fetch/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/name-builder/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/name-builder/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/name-builder/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/name-builder/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/name-builder/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/name-builder/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/name-builder/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/name-builder/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/name-builder/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/name-builder/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/name-builder/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/name-builder/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-api-key/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-api-key/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-api-key/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-api-key/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-api-key/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-api-key/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-api-key/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-api-key/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-api-key/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-api-key/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-api-key/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-api-key/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-false/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-false/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-false/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-false/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-false/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-false/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-false/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-false/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-false/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-false/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-false/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-false/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-http-bearer/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-http-bearer/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-http-bearer/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-http-bearer/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-http-bearer/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-http-bearer/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-http-bearer/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-http-bearer/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-http-bearer/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-http-bearer/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-http-bearer/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-http-bearer/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-oauth2/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-oauth2/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-oauth2/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-oauth2/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-oauth2/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-oauth2/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-oauth2/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-oauth2/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-oauth2/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-oauth2/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-oauth2/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-oauth2/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-open-id-connect/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-open-id-connect/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-open-id-connect/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-open-id-connect/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-open-id-connect/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-open-id-connect/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-open-id-connect/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-open-id-connect/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-open-id-connect/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-open-id-connect/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-open-id-connect/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-open-id-connect/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/servers/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/servers/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/servers/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/servers/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/servers/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/servers/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/servers/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/servers/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/servers/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/servers/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/servers/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/servers/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transformers-all-of/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transformers-all-of/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transformers-all-of/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transformers-all-of/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transformers-all-of/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transformers-all-of/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transformers-all-of/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transformers-all-of/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transformers-all-of/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transformers-all-of/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transformers-all-of/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transformers-all-of/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transformers-any-of-null/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transformers-any-of-null/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transformers-any-of-null/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transformers-any-of-null/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transformers-any-of-null/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transformers-any-of-null/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transformers-any-of-null/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transformers-any-of-null/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transformers-any-of-null/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transformers-any-of-null/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transformers-any-of-null/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transformers-any-of-null/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transformers-array/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transformers-array/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transformers-array/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transformers-array/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transformers-array/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transformers-array/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transformers-array/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transformers-array/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transformers-array/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transformers-array/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transformers-array/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transformers-array/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transforms-read-write/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transforms-read-write/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transforms-read-write/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transforms-read-write/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transforms-read-write/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transforms-read-write/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transforms-read-write/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transforms-read-write/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transforms-read-write/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transforms-read-write/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transforms-read-write/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transforms-read-write/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/body-response-text-plain/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/body-response-text-plain/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/body-response-text-plain/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/body-response-text-plain/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/body-response-text-plain/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/body-response-text-plain/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/body-response-text-plain/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/body-response-text-plain/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/body-response-text-plain/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/body-response-text-plain/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/body-response-text-plain/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/body-response-text-plain/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-axios/base-url-false/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-axios/base-url-false/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-axios/base-url-false/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-axios/base-url-false/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-axios/base-url-number/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-axios/base-url-number/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-axios/base-url-number/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-axios/base-url-number/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-axios/base-url-strict/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-axios/base-url-strict/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-axios/base-url-strict/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-axios/base-url-strict/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-axios/base-url-string/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-axios/base-url-string/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-axios/base-url-string/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-axios/base-url-string/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-axios/default/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-axios/default/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-axios/default/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-axios/default/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-axios/sdk-client-optional/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-axios/sdk-client-optional/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-axios/sdk-client-optional/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-axios/sdk-client-optional/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-axios/sdk-client-required/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-axios/sdk-client-required/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-axios/sdk-client-required/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-axios/sdk-client-required/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-axios/tsconfig-nodenext-sdk/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-axios/tsconfig-nodenext-sdk/core/serverSentEvents.gen.ts index 0d49e0ea7..d73aa0f30 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-axios/tsconfig-nodenext-sdk/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-axios/tsconfig-nodenext-sdk/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-false/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-false/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-false/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-false/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-false/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-false/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-false/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-false/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-false/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-false/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-false/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-false/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-number/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-number/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-number/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-number/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-number/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-number/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-number/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-number/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-number/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-number/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-number/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-number/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-strict/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-strict/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-strict/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-strict/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-strict/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-strict/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-strict/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-strict/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-strict/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-strict/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-strict/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-strict/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-string/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-string/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-string/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-string/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-string/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-string/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-string/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-string/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-string/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-string/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-string/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-string/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/default/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/default/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/default/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/default/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/default/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/default/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/default/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/default/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/default/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/default/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/default/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/default/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/sdk-client-optional/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/sdk-client-optional/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/sdk-client-optional/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/sdk-client-optional/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/sdk-client-optional/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/sdk-client-optional/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/sdk-client-optional/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/sdk-client-optional/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/sdk-client-optional/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/sdk-client-optional/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/sdk-client-optional/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/sdk-client-optional/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/sdk-client-required/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/sdk-client-required/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/sdk-client-required/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/sdk-client-required/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/sdk-client-required/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/sdk-client-required/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/sdk-client-required/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/sdk-client-required/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/sdk-client-required/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/sdk-client-required/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/sdk-client-required/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/sdk-client-required/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/tsconfig-nodenext-sdk/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/tsconfig-nodenext-sdk/client/client.gen.ts index 13993d9c5..136c0eb5d 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/tsconfig-nodenext-sdk/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/tsconfig-nodenext-sdk/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/tsconfig-nodenext-sdk/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/tsconfig-nodenext-sdk/client/types.gen.ts index e20b88e83..d68ab68c4 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/tsconfig-nodenext-sdk/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/tsconfig-nodenext-sdk/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/tsconfig-nodenext-sdk/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/tsconfig-nodenext-sdk/core/serverSentEvents.gen.ts index 0d49e0ea7..d73aa0f30 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/tsconfig-nodenext-sdk/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/tsconfig-nodenext-sdk/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/base-url-false/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/base-url-false/client/client.gen.ts index 01be56cff..9a3f20891 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/base-url-false/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/base-url-false/client/client.gen.ts @@ -210,6 +210,21 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + const requestInit = { + ...init, + method: init.method as Config['method'], + url, + }; + for (const fn of interceptors.request._fns) { + if (fn) { + await fn(requestInit); + request = new Request(requestInit.url, requestInit); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/base-url-false/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/base-url-false/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/base-url-false/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/base-url-false/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/base-url-number/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/base-url-number/client/client.gen.ts index 01be56cff..9a3f20891 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/base-url-number/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/base-url-number/client/client.gen.ts @@ -210,6 +210,21 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + const requestInit = { + ...init, + method: init.method as Config['method'], + url, + }; + for (const fn of interceptors.request._fns) { + if (fn) { + await fn(requestInit); + request = new Request(requestInit.url, requestInit); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/base-url-number/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/base-url-number/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/base-url-number/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/base-url-number/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/base-url-strict/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/base-url-strict/client/client.gen.ts index 01be56cff..9a3f20891 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/base-url-strict/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/base-url-strict/client/client.gen.ts @@ -210,6 +210,21 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + const requestInit = { + ...init, + method: init.method as Config['method'], + url, + }; + for (const fn of interceptors.request._fns) { + if (fn) { + await fn(requestInit); + request = new Request(requestInit.url, requestInit); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/base-url-strict/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/base-url-strict/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/base-url-strict/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/base-url-strict/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/base-url-string/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/base-url-string/client/client.gen.ts index 01be56cff..9a3f20891 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/base-url-string/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/base-url-string/client/client.gen.ts @@ -210,6 +210,21 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + const requestInit = { + ...init, + method: init.method as Config['method'], + url, + }; + for (const fn of interceptors.request._fns) { + if (fn) { + await fn(requestInit); + request = new Request(requestInit.url, requestInit); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/base-url-string/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/base-url-string/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/base-url-string/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/base-url-string/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/default/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/default/client/client.gen.ts index 01be56cff..9a3f20891 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/default/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/default/client/client.gen.ts @@ -210,6 +210,21 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + const requestInit = { + ...init, + method: init.method as Config['method'], + url, + }; + for (const fn of interceptors.request._fns) { + if (fn) { + await fn(requestInit); + request = new Request(requestInit.url, requestInit); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/default/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/default/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/default/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/default/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/sdk-client-optional/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/sdk-client-optional/client/client.gen.ts index 01be56cff..9a3f20891 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/sdk-client-optional/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/sdk-client-optional/client/client.gen.ts @@ -210,6 +210,21 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + const requestInit = { + ...init, + method: init.method as Config['method'], + url, + }; + for (const fn of interceptors.request._fns) { + if (fn) { + await fn(requestInit); + request = new Request(requestInit.url, requestInit); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/sdk-client-optional/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/sdk-client-optional/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/sdk-client-optional/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/sdk-client-optional/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/sdk-client-required/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/sdk-client-required/client/client.gen.ts index 01be56cff..9a3f20891 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/sdk-client-required/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/sdk-client-required/client/client.gen.ts @@ -210,6 +210,21 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + const requestInit = { + ...init, + method: init.method as Config['method'], + url, + }; + for (const fn of interceptors.request._fns) { + if (fn) { + await fn(requestInit); + request = new Request(requestInit.url, requestInit); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/sdk-client-required/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/sdk-client-required/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/sdk-client-required/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/sdk-client-required/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/tsconfig-nodenext-sdk/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/tsconfig-nodenext-sdk/client/client.gen.ts index 574d3921f..3c5df8c21 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/tsconfig-nodenext-sdk/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/tsconfig-nodenext-sdk/client/client.gen.ts @@ -210,6 +210,21 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + const requestInit = { + ...init, + method: init.method as Config['method'], + url, + }; + for (const fn of interceptors.request._fns) { + if (fn) { + await fn(requestInit); + request = new Request(requestInit.url, requestInit); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/tsconfig-nodenext-sdk/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/tsconfig-nodenext-sdk/core/serverSentEvents.gen.ts index 0d49e0ea7..d73aa0f30 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/tsconfig-nodenext-sdk/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/tsconfig-nodenext-sdk/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/base-url-false/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/base-url-false/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/base-url-false/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/base-url-false/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/base-url-number/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/base-url-number/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/base-url-number/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/base-url-number/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/base-url-strict/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/base-url-strict/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/base-url-strict/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/base-url-strict/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/base-url-string/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/base-url-string/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/base-url-string/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/base-url-string/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/default/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/default/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/default/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/default/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/sdk-client-optional/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/sdk-client-optional/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/sdk-client-optional/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/sdk-client-optional/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/sdk-client-required/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/sdk-client-required/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/sdk-client-required/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/sdk-client-required/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/tsconfig-nodenext-sdk/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/tsconfig-nodenext-sdk/core/serverSentEvents.gen.ts index 0d49e0ea7..d73aa0f30 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/tsconfig-nodenext-sdk/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/tsconfig-nodenext-sdk/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/content-types/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/content-types/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/content-types/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/content-types/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/headers/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/headers/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/headers/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/headers/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/headers/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/headers/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/headers/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/headers/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/headers/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/headers/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/headers/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/headers/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/internal-name-conflict/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/internal-name-conflict/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/internal-name-conflict/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/internal-name-conflict/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/internal-name-conflict/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/internal-name-conflict/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/internal-name-conflict/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/internal-name-conflict/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/internal-name-conflict/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/internal-name-conflict/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/internal-name-conflict/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/internal-name-conflict/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/pagination-ref/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/pagination-ref/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/pagination-ref/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/pagination-ref/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/pagination-ref/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/pagination-ref/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/pagination-ref/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/pagination-ref/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/pagination-ref/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/pagination-ref/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/pagination-ref/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/pagination-ref/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/parameter-explode-false-axios/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/parameter-explode-false-axios/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/parameter-explode-false-axios/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/parameter-explode-false-axios/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/parameter-explode-false/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/parameter-explode-false/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/parameter-explode-false/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/parameter-explode-false/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/parameter-explode-false/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/parameter-explode-false/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/parameter-explode-false/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/parameter-explode-false/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/parameter-explode-false/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/parameter-explode-false/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/parameter-explode-false/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/parameter-explode-false/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/client-fetch/sdk-nested-classes-instance/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/client-fetch/sdk-nested-classes-instance/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/client-fetch/sdk-nested-classes-instance/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/client-fetch/sdk-nested-classes-instance/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/client-fetch/sdk-nested-classes-instance/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/client-fetch/sdk-nested-classes-instance/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/client-fetch/sdk-nested-classes-instance/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/client-fetch/sdk-nested-classes-instance/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/client-fetch/sdk-nested-classes-instance/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/client-fetch/sdk-nested-classes-instance/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/client-fetch/sdk-nested-classes-instance/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/client-fetch/sdk-nested-classes-instance/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/client-fetch/sdk-nested-classes/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/client-fetch/sdk-nested-classes/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/client-fetch/sdk-nested-classes/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/client-fetch/sdk-nested-classes/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/client-fetch/sdk-nested-classes/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/client-fetch/sdk-nested-classes/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/client-fetch/sdk-nested-classes/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/client-fetch/sdk-nested-classes/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/client-fetch/sdk-nested-classes/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/client-fetch/sdk-nested-classes/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/client-fetch/sdk-nested-classes/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/client-fetch/sdk-nested-classes/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/sdk/default/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/sdk/default/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/sdk/default/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/sdk/default/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/sdk/default/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/sdk/default/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/sdk/default/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/sdk/default/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/sdk/default/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/sdk/default/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/sdk/default/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/sdk/default/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/sdk/instance/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/sdk/instance/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/sdk/instance/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/sdk/instance/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/sdk/instance/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/sdk/instance/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/sdk/instance/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/sdk/instance/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/sdk/instance/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/sdk/instance/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/sdk/instance/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/sdk/instance/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/sdk/throwOnError/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/sdk/throwOnError/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/sdk/throwOnError/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/sdk/throwOnError/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/sdk/throwOnError/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/sdk/throwOnError/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/sdk/throwOnError/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/sdk/throwOnError/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/sdk/throwOnError/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/sdk/throwOnError/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/sdk/throwOnError/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/sdk/throwOnError/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/transformers/type-format-valibot/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/transformers/type-format-valibot/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/transformers/type-format-valibot/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/transformers/type-format-valibot/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/transformers/type-format-valibot/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/transformers/type-format-valibot/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/transformers/type-format-valibot/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/transformers/type-format-valibot/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/transformers/type-format-valibot/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/transformers/type-format-valibot/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/transformers/type-format-valibot/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/transformers/type-format-valibot/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/transformers/type-format-zod/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/transformers/type-format-zod/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/transformers/type-format-zod/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/transformers/type-format-zod/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/transformers/type-format-zod/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/transformers/type-format-zod/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/transformers/type-format-zod/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/transformers/type-format-zod/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/transformers/type-format-zod/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/transformers/type-format-zod/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/transformers/type-format-zod/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/transformers/type-format-zod/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/typescript/transforms-read-write-custom-name/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/typescript/transforms-read-write-custom-name/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/typescript/transforms-read-write-custom-name/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/typescript/transforms-read-write-custom-name/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/typescript/transforms-read-write-custom-name/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/typescript/transforms-read-write-custom-name/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/typescript/transforms-read-write-custom-name/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/typescript/transforms-read-write-custom-name/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/typescript/transforms-read-write-custom-name/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/typescript/transforms-read-write-custom-name/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/typescript/transforms-read-write-custom-name/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/typescript/transforms-read-write-custom-name/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/typescript/transforms-read-write-ignore/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/typescript/transforms-read-write-ignore/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/typescript/transforms-read-write-ignore/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/typescript/transforms-read-write-ignore/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/typescript/transforms-read-write-ignore/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/typescript/transforms-read-write-ignore/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/typescript/transforms-read-write-ignore/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/typescript/transforms-read-write-ignore/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/typescript/transforms-read-write-ignore/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/typescript/transforms-read-write-ignore/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/typescript/transforms-read-write-ignore/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/typescript/transforms-read-write-ignore/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@pinia/colada/fetch/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@pinia/colada/fetch/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@pinia/colada/fetch/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@pinia/colada/fetch/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@pinia/colada/fetch/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@pinia/colada/fetch/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@pinia/colada/fetch/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@pinia/colada/fetch/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@pinia/colada/fetch/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@pinia/colada/fetch/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@pinia/colada/fetch/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@pinia/colada/fetch/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@pinia/colada/group-by-tag/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@pinia/colada/group-by-tag/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@pinia/colada/group-by-tag/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@pinia/colada/group-by-tag/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@pinia/colada/group-by-tag/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@pinia/colada/group-by-tag/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@pinia/colada/group-by-tag/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@pinia/colada/group-by-tag/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@pinia/colada/group-by-tag/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@pinia/colada/group-by-tag/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@pinia/colada/group-by-tag/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@pinia/colada/group-by-tag/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/asClass/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/asClass/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/asClass/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/asClass/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/asClass/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/asClass/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/asClass/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/asClass/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/asClass/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/asClass/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/asClass/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/asClass/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/axios/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/axios/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/axios/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/axios/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/fetch/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/fetch/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/fetch/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/fetch/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/fetch/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/fetch/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/fetch/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/fetch/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/fetch/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/fetch/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/fetch/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/fetch/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/name-builder/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/name-builder/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/name-builder/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/name-builder/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/name-builder/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/name-builder/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/name-builder/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/name-builder/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/name-builder/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/name-builder/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/name-builder/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/name-builder/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/asClass/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/asClass/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/asClass/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/asClass/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/asClass/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/asClass/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/asClass/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/asClass/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/asClass/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/asClass/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/asClass/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/asClass/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/axios/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/axios/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/axios/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/axios/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/fetch/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/fetch/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/fetch/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/fetch/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/fetch/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/fetch/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/fetch/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/fetch/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/fetch/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/fetch/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/fetch/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/fetch/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/name-builder/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/name-builder/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/name-builder/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/name-builder/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/name-builder/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/name-builder/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/name-builder/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/name-builder/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/name-builder/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/name-builder/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/name-builder/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/name-builder/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/asClass/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/asClass/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/asClass/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/asClass/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/asClass/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/asClass/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/asClass/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/asClass/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/asClass/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/asClass/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/asClass/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/asClass/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/axios/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/axios/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/axios/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/axios/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/fetch/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/fetch/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/fetch/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/fetch/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/fetch/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/fetch/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/fetch/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/fetch/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/fetch/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/fetch/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/fetch/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/fetch/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/name-builder/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/name-builder/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/name-builder/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/name-builder/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/name-builder/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/name-builder/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/name-builder/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/name-builder/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/name-builder/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/name-builder/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/name-builder/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/name-builder/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/asClass/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/asClass/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/asClass/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/asClass/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/asClass/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/asClass/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/asClass/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/asClass/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/asClass/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/asClass/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/asClass/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/asClass/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/axios/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/axios/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/axios/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/axios/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/fetch/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/fetch/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/fetch/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/fetch/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/fetch/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/fetch/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/fetch/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/fetch/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/fetch/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/fetch/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/fetch/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/fetch/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/name-builder/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/name-builder/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/name-builder/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/name-builder/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/name-builder/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/name-builder/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/name-builder/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/name-builder/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/name-builder/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/name-builder/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/name-builder/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/name-builder/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/asClass/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/asClass/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/asClass/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/asClass/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/asClass/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/asClass/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/asClass/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/asClass/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/asClass/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/asClass/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/asClass/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/asClass/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/axios/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/axios/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/axios/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/axios/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/fetch/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/fetch/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/fetch/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/fetch/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/fetch/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/fetch/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/fetch/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/fetch/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/fetch/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/fetch/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/fetch/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/fetch/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/name-builder/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/name-builder/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/name-builder/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/name-builder/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/name-builder/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/name-builder/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/name-builder/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/name-builder/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/name-builder/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/name-builder/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/name-builder/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/name-builder/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-api-key/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-api-key/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-api-key/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-api-key/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-api-key/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-api-key/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-api-key/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-api-key/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-api-key/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-api-key/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-api-key/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-api-key/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-false/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-false/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-false/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-false/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-false/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-false/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-false/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-false/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-false/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-false/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-false/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-false/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-http-bearer/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-http-bearer/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-http-bearer/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-http-bearer/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-http-bearer/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-http-bearer/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-http-bearer/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-http-bearer/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-http-bearer/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-http-bearer/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-http-bearer/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-http-bearer/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-oauth2/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-oauth2/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-oauth2/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-oauth2/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-oauth2/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-oauth2/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-oauth2/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-oauth2/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-oauth2/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-oauth2/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-oauth2/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-oauth2/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-open-id-connect/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-open-id-connect/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-open-id-connect/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-open-id-connect/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-open-id-connect/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-open-id-connect/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-open-id-connect/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-open-id-connect/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-open-id-connect/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-open-id-connect/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-open-id-connect/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-open-id-connect/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/servers/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/servers/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/servers/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/servers/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/servers/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/servers/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/servers/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/servers/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/servers/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/servers/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/servers/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/servers/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/sse-angular/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/sse-angular/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/sse-angular/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/sse-angular/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/sse-axios/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/sse-axios/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/sse-axios/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/sse-axios/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/sse-fetch/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/sse-fetch/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/sse-fetch/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/sse-fetch/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/sse-fetch/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/sse-fetch/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/sse-fetch/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/sse-fetch/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/sse-fetch/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/sse-fetch/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/sse-fetch/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/sse-fetch/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/sse-next/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/sse-next/client/client.gen.ts index 01be56cff..9a3f20891 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/sse-next/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/sse-next/client/client.gen.ts @@ -210,6 +210,21 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + const requestInit = { + ...init, + method: init.method as Config['method'], + url, + }; + for (const fn of interceptors.request._fns) { + if (fn) { + await fn(requestInit); + request = new Request(requestInit.url, requestInit); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/sse-next/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/sse-next/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/sse-next/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/sse-next/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/sse-nuxt/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/sse-nuxt/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/sse-nuxt/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/sse-nuxt/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transformers-all-of/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transformers-all-of/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transformers-all-of/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transformers-all-of/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transformers-all-of/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transformers-all-of/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transformers-all-of/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transformers-all-of/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transformers-all-of/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transformers-all-of/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transformers-all-of/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transformers-all-of/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transformers-any-of-null/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transformers-any-of-null/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transformers-any-of-null/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transformers-any-of-null/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transformers-any-of-null/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transformers-any-of-null/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transformers-any-of-null/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transformers-any-of-null/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transformers-any-of-null/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transformers-any-of-null/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transformers-any-of-null/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transformers-any-of-null/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transformers-array/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transformers-array/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transformers-array/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transformers-array/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transformers-array/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transformers-array/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transformers-array/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transformers-array/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transformers-array/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transformers-array/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transformers-array/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transformers-array/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transforms-read-write/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transforms-read-write/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transforms-read-write/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transforms-read-write/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transforms-read-write/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transforms-read-write/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transforms-read-write/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transforms-read-write/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transforms-read-write/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transforms-read-write/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transforms-read-write/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transforms-read-write/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/plugins/@tanstack/meta/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/plugins/@tanstack/meta/client/client.gen.ts index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/plugins/@tanstack/meta/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/plugins/@tanstack/meta/client/client.gen.ts @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/plugins/@tanstack/meta/client/types.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/plugins/@tanstack/meta/client/types.gen.ts index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/plugins/@tanstack/meta/client/types.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/plugins/@tanstack/meta/client/types.gen.ts @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/plugins/@tanstack/meta/core/serverSentEvents.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/plugins/@tanstack/meta/core/serverSentEvents.gen.ts index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/plugins/@tanstack/meta/core/serverSentEvents.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/plugins/@tanstack/meta/core/serverSentEvents.gen.ts @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/test/generated/v3_no_index/client/client.gen.ts.snap b/packages/openapi-ts-tests/main/test/__snapshots__/test/generated/v3_no_index/client/client.gen.ts.snap index 90741da8a..f68339318 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/test/generated/v3_no_index/client/client.gen.ts.snap +++ b/packages/openapi-ts-tests/main/test/__snapshots__/test/generated/v3_no_index/client/client.gen.ts.snap @@ -224,6 +224,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/test/generated/v3_no_index/client/types.gen.ts.snap b/packages/openapi-ts-tests/main/test/__snapshots__/test/generated/v3_no_index/client/types.gen.ts.snap index 5bde93851..1a005b51e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/test/generated/v3_no_index/client/types.gen.ts.snap +++ b/packages/openapi-ts-tests/main/test/__snapshots__/test/generated/v3_no_index/client/types.gen.ts.snap @@ -26,7 +26,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/test/generated/v3_no_index/core/serverSentEvents.gen.ts.snap b/packages/openapi-ts-tests/main/test/__snapshots__/test/generated/v3_no_index/core/serverSentEvents.gen.ts.snap index 01b5818fd..f8fd78e28 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/test/generated/v3_no_index/core/serverSentEvents.gen.ts.snap +++ b/packages/openapi-ts-tests/main/test/__snapshots__/test/generated/v3_no_index/core/serverSentEvents.gen.ts.snap @@ -7,6 +7,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -24,6 +35,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -75,6 +87,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -112,7 +125,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts-tests/main/test/openapi-ts.config.ts b/packages/openapi-ts-tests/main/test/openapi-ts.config.ts index df20d5e16..196d3886a 100644 --- a/packages/openapi-ts-tests/main/test/openapi-ts.config.ts +++ b/packages/openapi-ts-tests/main/test/openapi-ts.config.ts @@ -36,8 +36,8 @@ export default defineConfig(() => { '3.1.x', // 'invalid', // 'openai.yaml', - 'full.yaml', - // 'opencode.yaml', + // 'full.yaml', + 'opencode.yaml', // 'zoom-video-sdk.json', ), // https://registry.scalar.com/@lubos-heyapi-dev-team/apis/demo-api-scalar-galaxy/latest?format=json diff --git a/packages/openapi-ts/src/plugins/@hey-api/client-core/bundle/serverSentEvents.ts b/packages/openapi-ts/src/plugins/@hey-api/client-core/bundle/serverSentEvents.ts index b3beb8f97..07cff3c3f 100644 --- a/packages/openapi-ts/src/plugins/@hey-api/client-core/bundle/serverSentEvents.ts +++ b/packages/openapi-ts/src/plugins/@hey-api/client-core/bundle/serverSentEvents.ts @@ -5,6 +5,17 @@ export type ServerSentEventsOptions = Omit< 'method' > & Pick & { + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: typeof fetch; + /** + * Implementing clients can call request interceptors inside this hook. + */ + onRequest?: (url: string, init: RequestInit) => Promise; /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -22,6 +33,7 @@ export type ServerSentEventsOptions = Omit< * @returns Nothing (void). */ onSseEvent?: (event: StreamEvent) => void; + serializedBody?: RequestInit['body']; /** * Default retry delay in milliseconds. * @@ -73,6 +85,7 @@ export type ServerSentEventsResult< }; export const createSseClient = ({ + onRequest, onSseError, onSseEvent, responseTransformer, @@ -110,7 +123,21 @@ export const createSseClient = ({ } try { - const response = await fetch(url, { ...options, headers, signal }); + const requestInit: RequestInit = { + redirect: 'follow', + ...options, + body: options.serializedBody, + headers, + signal, + }; + let request = new Request(url, requestInit); + if (onRequest) { + request = await onRequest(url, requestInit); + } + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = options.fetch ?? globalThis.fetch; + const response = await _fetch(request); if (!response.ok) throw new Error( diff --git a/packages/openapi-ts/src/plugins/@hey-api/client-fetch/bundle/client.ts b/packages/openapi-ts/src/plugins/@hey-api/client-fetch/bundle/client.ts index a95786d7f..3615a16ac 100644 --- a/packages/openapi-ts/src/plugins/@hey-api/client-fetch/bundle/client.ts +++ b/packages/openapi-ts/src/plugins/@hey-api/client-fetch/bundle/client.ts @@ -222,6 +222,15 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + return request; + }, url, }); }; 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 e7a371a06..456f59dcf 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 @@ -24,7 +24,7 @@ export interface Config * * @default globalThis.fetch */ - fetch?: (request: Request) => ReturnType; + fetch?: typeof fetch; /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. 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 113d3aaa8..f59fe1934 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 @@ -208,6 +208,21 @@ export const createClient = (config: Config = {}): Client => { body: opts.body as BodyInit | null | undefined, headers: opts.headers as unknown as Record, method, + onRequest: async (url, init) => { + let request = new Request(url, init); + const requestInit = { + ...init, + method: init.method as Config['method'], + url, + }; + for (const fn of interceptors.request._fns) { + if (fn) { + await fn(requestInit); + request = new Request(requestInit.url, requestInit); + } + } + return request; + }, url, }); }; -- 2.51.2 From 1d1a7197605903f3561c28909afd9bed8416acfe Mon Sep 17 00:00:00 2001 From: Lubos Date: Thu, 28 Aug 2025 20:57:54 +0800 Subject: [PATCH 2/3] test: fix snapshots --- .../base-url-false/client/client.gen.ts | 1 + .../base-url-number/client/client.gen.ts | 1 + .../base-url-strict/client/client.gen.ts | 1 + .../base-url-string/client/client.gen.ts | 1 + .../client-nuxt/default/client/client.gen.ts | 1 + .../sdk-client-optional/client/client.gen.ts | 1 + .../sdk-client-required/client/client.gen.ts | 1 + .../tsconfig-nodenext-sdk/client/client.gen.ts | 1 + .../3.1.x/sse-nuxt/client/client.gen.ts | 1 + .../client-fetch/__tests__/client.test.ts | 18 +++++++++++------- .../@hey-api/client-nuxt/bundle/client.ts | 1 + 11 files changed, 21 insertions(+), 7 deletions(-) diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/base-url-false/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/base-url-false/client/client.gen.ts index c584702fc..60ad3b228 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/base-url-false/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/base-url-false/client/client.gen.ts @@ -194,6 +194,7 @@ export const createClient = (config: Config = {}): Client => { ...unwrapRefs(opts), body: opts.body as BodyInit | null | undefined, method, + onRequest: undefined, signal: unwrapRefs(opts.signal) as AbortSignal, url, }); diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/base-url-number/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/base-url-number/client/client.gen.ts index c584702fc..60ad3b228 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/base-url-number/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/base-url-number/client/client.gen.ts @@ -194,6 +194,7 @@ export const createClient = (config: Config = {}): Client => { ...unwrapRefs(opts), body: opts.body as BodyInit | null | undefined, method, + onRequest: undefined, signal: unwrapRefs(opts.signal) as AbortSignal, url, }); diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/base-url-strict/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/base-url-strict/client/client.gen.ts index c584702fc..60ad3b228 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/base-url-strict/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/base-url-strict/client/client.gen.ts @@ -194,6 +194,7 @@ export const createClient = (config: Config = {}): Client => { ...unwrapRefs(opts), body: opts.body as BodyInit | null | undefined, method, + onRequest: undefined, signal: unwrapRefs(opts.signal) as AbortSignal, url, }); diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/base-url-string/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/base-url-string/client/client.gen.ts index c584702fc..60ad3b228 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/base-url-string/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/base-url-string/client/client.gen.ts @@ -194,6 +194,7 @@ export const createClient = (config: Config = {}): Client => { ...unwrapRefs(opts), body: opts.body as BodyInit | null | undefined, method, + onRequest: undefined, signal: unwrapRefs(opts.signal) as AbortSignal, url, }); diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/default/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/default/client/client.gen.ts index c584702fc..60ad3b228 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/default/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/default/client/client.gen.ts @@ -194,6 +194,7 @@ export const createClient = (config: Config = {}): Client => { ...unwrapRefs(opts), body: opts.body as BodyInit | null | undefined, method, + onRequest: undefined, signal: unwrapRefs(opts.signal) as AbortSignal, url, }); diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/sdk-client-optional/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/sdk-client-optional/client/client.gen.ts index c584702fc..60ad3b228 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/sdk-client-optional/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/sdk-client-optional/client/client.gen.ts @@ -194,6 +194,7 @@ export const createClient = (config: Config = {}): Client => { ...unwrapRefs(opts), body: opts.body as BodyInit | null | undefined, method, + onRequest: undefined, signal: unwrapRefs(opts.signal) as AbortSignal, url, }); diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/sdk-client-required/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/sdk-client-required/client/client.gen.ts index c584702fc..60ad3b228 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/sdk-client-required/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/sdk-client-required/client/client.gen.ts @@ -194,6 +194,7 @@ export const createClient = (config: Config = {}): Client => { ...unwrapRefs(opts), body: opts.body as BodyInit | null | undefined, method, + onRequest: undefined, signal: unwrapRefs(opts.signal) as AbortSignal, url, }); diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/tsconfig-nodenext-sdk/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/tsconfig-nodenext-sdk/client/client.gen.ts index 1947ad91e..6d493327e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/tsconfig-nodenext-sdk/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-nuxt/tsconfig-nodenext-sdk/client/client.gen.ts @@ -194,6 +194,7 @@ export const createClient = (config: Config = {}): Client => { ...unwrapRefs(opts), body: opts.body as BodyInit | null | undefined, method, + onRequest: undefined, signal: unwrapRefs(opts.signal) as AbortSignal, url, }); diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/sse-nuxt/client/client.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/sse-nuxt/client/client.gen.ts index c584702fc..60ad3b228 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/sse-nuxt/client/client.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/sse-nuxt/client/client.gen.ts @@ -194,6 +194,7 @@ export const createClient = (config: Config = {}): Client => { ...unwrapRefs(opts), body: opts.body as BodyInit | null | undefined, method, + onRequest: undefined, signal: unwrapRefs(opts.signal) as AbortSignal, url, }); diff --git a/packages/openapi-ts/src/plugins/@hey-api/client-fetch/__tests__/client.test.ts b/packages/openapi-ts/src/plugins/@hey-api/client-fetch/__tests__/client.test.ts index 28895cde7..6937bf9b3 100644 --- a/packages/openapi-ts/src/plugins/@hey-api/client-fetch/__tests__/client.test.ts +++ b/packages/openapi-ts/src/plugins/@hey-api/client-fetch/__tests__/client.test.ts @@ -2,6 +2,10 @@ import { describe, expect, it, vi } from 'vitest'; import { createClient } from '../bundle/client'; +type MockFetch = ((...args: any[]) => any) & { + preconnect?: any; +}; + describe('buildUrl', () => { const client = createClient(); @@ -81,7 +85,7 @@ describe('zero-length body handling', () => { status: 200, }); - const mockFetch = vi.fn().mockResolvedValue(mockResponse); + const mockFetch: MockFetch = vi.fn().mockResolvedValue(mockResponse); const result = await client.request({ fetch: mockFetch, @@ -101,7 +105,7 @@ describe('zero-length body handling', () => { status: 200, }); - const mockFetch = vi.fn().mockResolvedValue(mockResponse); + const mockFetch: MockFetch = vi.fn().mockResolvedValue(mockResponse); const result = await client.request({ fetch: mockFetch, @@ -123,7 +127,7 @@ describe('zero-length body handling', () => { status: 200, }); - const mockFetch = vi.fn().mockResolvedValue(mockResponse); + const mockFetch: MockFetch = vi.fn().mockResolvedValue(mockResponse); const result = await client.request({ fetch: mockFetch, @@ -143,7 +147,7 @@ describe('zero-length body handling', () => { status: 200, }); - const mockFetch = vi.fn().mockResolvedValue(mockResponse); + const mockFetch: MockFetch = vi.fn().mockResolvedValue(mockResponse); const result = await client.request({ fetch: mockFetch, @@ -163,7 +167,7 @@ describe('zero-length body handling', () => { status: 200, }); - const mockFetch = vi.fn().mockResolvedValue(mockResponse); + const mockFetch: MockFetch = vi.fn().mockResolvedValue(mockResponse); const result = await client.request({ fetch: mockFetch, @@ -184,7 +188,7 @@ describe('zero-length body handling', () => { status: 200, }); - const mockFetch = vi.fn().mockResolvedValue(mockResponse); + const mockFetch: MockFetch = vi.fn().mockResolvedValue(mockResponse); const result = await client.request({ fetch: mockFetch, @@ -205,7 +209,7 @@ describe('zero-length body handling', () => { status: 200, }); - const mockFetch = vi.fn().mockResolvedValue(mockResponse); + const mockFetch: MockFetch = vi.fn().mockResolvedValue(mockResponse); const result = await client.request({ fetch: mockFetch, diff --git a/packages/openapi-ts/src/plugins/@hey-api/client-nuxt/bundle/client.ts b/packages/openapi-ts/src/plugins/@hey-api/client-nuxt/bundle/client.ts index 61421cc4e..636fad064 100644 --- a/packages/openapi-ts/src/plugins/@hey-api/client-nuxt/bundle/client.ts +++ b/packages/openapi-ts/src/plugins/@hey-api/client-nuxt/bundle/client.ts @@ -192,6 +192,7 @@ export const createClient = (config: Config = {}): Client => { ...unwrapRefs(opts), body: opts.body as BodyInit | null | undefined, method, + onRequest: undefined, signal: unwrapRefs(opts.signal) as AbortSignal, url, }); -- 2.51.2 From c19459e673ced6f0d4cba38fbca82c1bf441f6ad Mon Sep 17 00:00:00 2001 From: Lubos Date: Fri, 29 Aug 2025 01:43:55 +0800 Subject: [PATCH 3/3] test: fix sse tests --- .../__tests__/serverSentEvents.test.ts | 148 ++++++++++++------ pnpm-workspace.yaml | 6 + 2 files changed, 106 insertions(+), 48 deletions(-) diff --git a/packages/openapi-ts/src/plugins/@hey-api/client-core/__tests__/serverSentEvents.test.ts b/packages/openapi-ts/src/plugins/@hey-api/client-core/__tests__/serverSentEvents.test.ts index 7f4184f45..26802d936 100644 --- a/packages/openapi-ts/src/plugins/@hey-api/client-core/__tests__/serverSentEvents.test.ts +++ b/packages/openapi-ts/src/plugins/@hey-api/client-core/__tests__/serverSentEvents.test.ts @@ -16,6 +16,17 @@ function makeStream(chunks: string[]) { }); } +function toRequest(input: RequestInfo, init?: RequestInit): Request { + if (input instanceof Request) { + const url = input.url.startsWith('http') + ? input.url + : `http://localhost${input.url}`; + return new Request(url, input); + } + const url = input.startsWith('http') ? input : `http://localhost${input}`; + return new Request(url, init); +} + describe('createSseClient', () => { let fetchMock: any; @@ -35,7 +46,10 @@ describe('createSseClient', () => { }); const onEvent = vi.fn(); - const { stream } = createSseClient({ onSseEvent: onEvent, url: '/sse' }); + const { stream } = createSseClient({ + onSseEvent: onEvent, + url: 'http://localhost/sse', + }); const result: any[] = []; for await (const ev of stream) result.push(ev); @@ -55,7 +69,7 @@ describe('createSseClient', () => { ok: true, }); - const { stream } = createSseClient({ url: '/sse' }); + const { stream } = createSseClient({ url: 'http://localhost/sse' }); const result: any[] = []; for await (const ev of stream) result.push(ev); @@ -76,7 +90,7 @@ describe('createSseClient', () => { onSseError: onError, signal: controller.signal, sseDefaultRetryDelay: 0, - url: '/sse', + url: 'http://localhost/sse', }); const iter = stream[Symbol.asyncIterator](); @@ -97,7 +111,10 @@ describe('createSseClient', () => { }); const onEvent = vi.fn(); - const { stream } = createSseClient({ onSseEvent: onEvent, url: '/sse' }); + const { stream } = createSseClient({ + onSseEvent: onEvent, + url: 'http://localhost/sse', + }); const iter = stream[Symbol.asyncIterator](); await iter.next(); @@ -117,7 +134,7 @@ describe('createSseClient', () => { ok: true, }); - const { stream } = createSseClient({ url: '/sse' }); + const { stream } = createSseClient({ url: 'http://localhost/sse' }); const result: any[] = []; for await (const ev of stream) result.push(ev); expect(result).toEqual([1, 2, 3]); @@ -129,31 +146,39 @@ describe('createSseClient', () => { ok: true, }); - const { stream } = createSseClient({ url: '/sse' }); + const { stream } = createSseClient({ url: 'http://localhost/sse' }); const result: any[] = []; for await (const ev of stream) result.push(ev); expect(result).toEqual(['partial']); }); it('sets Last-Event-ID header on reconnect', async () => { - let headersSeen: Headers | undefined; - fetchMock.mockImplementation(async (_url: any, opts: any) => { - headersSeen = opts?.headers.get('Last-Event-ID'); - return { - body: makeStream(['data: a\n\n']), - ok: true, - }; - }); + let headersSeen: string | null | undefined; + fetchMock.mockImplementation( + async (input: RequestInfo, init?: RequestInit) => { + const req = toRequest(input, init); + headersSeen = req.headers.get('Last-Event-ID'); + return { + body: makeStream(['data: a\n\n']), + ok: true, + }; + }, + ); const onEvent = vi.fn(); - const { stream } = createSseClient({ onSseEvent: onEvent, url: '/sse' }); + const { stream } = createSseClient({ + onSseEvent: onEvent, + url: 'http://localhost/sse', + }); const iter = stream[Symbol.asyncIterator](); await iter.next(); await iter.return?.(); // simulate next fetch after reconnect - await fetchMock('/sse', { headers: new Headers({ 'Last-Event-ID': '1' }) }); + await fetchMock('http://localhost/sse', { + headers: new Headers({ 'Last-Event-ID': '1' }), + }); expect(headersSeen).toBe('1'); }); @@ -166,7 +191,7 @@ describe('createSseClient', () => { const controller = new AbortController(); const { stream } = createSseClient({ signal: controller.signal, - url: '/sse', + url: 'http://localhost/sse', }); const iter = stream[Symbol.asyncIterator](); @@ -188,22 +213,28 @@ describe('createSseClient', () => { ok: true, }); - const { stream } = createSseClient({ url: '/sse' }); + const { stream } = createSseClient({ url: 'http://localhost/sse' }); const result: any[] = []; for await (const ev of stream) result.push(ev); expect(result).toEqual([{ foo: 1 }, 'bar', { baz: 2 }]); }); it('passes custom headers', async () => { - let headersSeen: Headers | undefined; - fetchMock.mockImplementation(async (_url: any, opts: any) => { - headersSeen = opts.headers.get('X-Custom'); - return { body: makeStream([]), ok: true }; - }); + let headersSeen: string | null | undefined; + fetchMock.mockImplementation( + async (input: RequestInfo, init?: RequestInit) => { + const req = toRequest(input, init); + headersSeen = req.headers.get('X-Custom'); + return { + body: makeStream([]), + ok: true, + }; + }, + ); const { stream } = createSseClient({ headers: { 'X-Custom': 'abc' }, - url: '/sse', + url: 'http://localhost/sse', }); const iter = stream[Symbol.asyncIterator](); @@ -219,7 +250,7 @@ describe('createSseClient', () => { ok: true, }); - const { stream } = createSseClient({ url: '/sse' }); + const { stream } = createSseClient({ url: 'http://localhost/sse' }); const result: any[] = []; for await (const ev of stream) result.push(ev); expect(result).toEqual([{ foo: 'bar' }]); @@ -227,7 +258,7 @@ describe('createSseClient', () => { it('handles empty stream', async () => { fetchMock.mockResolvedValue({ body: makeStream([]), ok: true }); - const { stream } = createSseClient({ url: '/sse' }); + const { stream } = createSseClient({ url: 'http://localhost/sse' }); const iter = stream[Symbol.asyncIterator](); const first = await iter.next(); expect(first).toEqual({ done: true, value: undefined }); @@ -238,14 +269,17 @@ describe('createSseClient', () => { fetchMock.mockImplementation(async () => { attempt++; if (attempt < 2) throw new Error('fail'); - return { body: makeStream(['data: ok\n\n']), ok: true }; + return { + body: makeStream(['data: ok\n\n']), + ok: true, + }; }); const onError = vi.fn(); const { stream } = createSseClient({ onSseError: onError, sseDefaultRetryDelay: 0, - url: '/sse', + url: 'http://localhost/sse', }); const result: any[] = []; @@ -262,7 +296,10 @@ describe('createSseClient', () => { }); const onEvent = vi.fn(); - const { stream } = createSseClient({ onSseEvent: onEvent, url: '/sse' }); + const { stream } = createSseClient({ + onSseEvent: onEvent, + url: 'http://localhost/sse', + }); const iter = stream[Symbol.asyncIterator](); const ev = await iter.next(); expect(ev.value).toBe('x'); @@ -276,7 +313,10 @@ describe('createSseClient', () => { }); const onEvent = vi.fn(); - const { stream } = createSseClient({ onSseEvent: onEvent, url: '/sse' }); + const { stream } = createSseClient({ + onSseEvent: onEvent, + url: 'http://localhost/sse', + }); const iter = stream[Symbol.asyncIterator](); const ev = await iter.next(); expect(ev.done).toBe(true); @@ -299,7 +339,7 @@ describe('createSseClient', () => { const { stream } = createSseClient({ onSseError: onError, onSseEvent: onEvent, - url: '/sse', + url: 'http://localhost/sse', }); const iter = stream[Symbol.asyncIterator](); const ev = await iter.next(); @@ -316,7 +356,7 @@ describe('createSseClient', () => { const controller = new AbortController(); const { stream } = createSseClient({ signal: controller.signal, - url: '/sse', + url: 'http://localhost/sse', }); const iter = stream[Symbol.asyncIterator](); await iter.next(); @@ -343,7 +383,7 @@ describe('createSseClient', () => { controller.abort(); const { stream } = createSseClient({ signal: controller.signal, - url: '/sse', + url: 'http://localhost/sse', }); const iter = stream[Symbol.asyncIterator](); const ev = await iter.next(); @@ -352,12 +392,21 @@ describe('createSseClient', () => { it('respects custom HTTP method', async () => { let methodSeen: string | undefined; - fetchMock.mockImplementation(async (_url: any, opts: any) => { - methodSeen = opts.method; - return { body: makeStream(['data: ok\n\n']), ok: true }; - }); + fetchMock.mockImplementation( + async (input: RequestInfo, init?: RequestInit) => { + const req = toRequest(input, init); + methodSeen = req.method; + return { + body: makeStream(['data: ok\n\n']), + ok: true, + }; + }, + ); - const { stream } = createSseClient({ method: 'POST', url: '/sse' }); + const { stream } = createSseClient({ + method: 'POST', + url: 'http://localhost/sse', + }); const iter = stream[Symbol.asyncIterator](); await iter.next(); await iter.return?.(); @@ -374,7 +423,7 @@ describe('createSseClient', () => { const controller = new AbortController(); const { stream } = createSseClient({ signal: controller.signal, - url: '/sse', + url: 'http://localhost/sse', }); const iter = stream[Symbol.asyncIterator](); @@ -397,7 +446,7 @@ describe('createSseClient', () => { onSseEvent: (ev) => { lastEventId = ev.id; }, - url: '/sse', + url: 'http://localhost/sse', }); stream[Symbol.asyncIterator](); @@ -422,7 +471,7 @@ describe('createSseClient', () => { onSseError: onError, sseDefaultRetryDelay: 0, sseMaxRetryAttempts: 2, - url: '/sse', + url: 'http://localhost/sse', }); const iter = stream[Symbol.asyncIterator](); @@ -439,7 +488,10 @@ describe('createSseClient', () => { fetchMock.mockImplementation(() => { attempt++; if (attempt < 3) throw new Error('fail'); - return Promise.resolve({ body: makeStream(['data: ok\n\n']), ok: true }); + return Promise.resolve({ + body: makeStream(['data: ok\n\n']), + ok: true, + }); }); const onError = vi.fn(); @@ -448,7 +500,7 @@ describe('createSseClient', () => { sseDefaultRetryDelay: 10, // Inject a fake sleep that resolves instantly sseSleepFn: async () => {}, - url: '/sse', + url: 'http://localhost/sse', }); const iter = stream[Symbol.asyncIterator](); @@ -471,7 +523,7 @@ describe('createSseClient', () => { const { stream } = createSseClient({ onSseError: onError, sseMaxRetryAttempts: 0, - url: '/sse', + url: 'http://localhost/sse', }); const iter = stream[Symbol.asyncIterator](); @@ -494,7 +546,7 @@ describe('createSseClient', () => { const { stream } = createSseClient({ responseValidator: validator, - url: '/sse', + url: 'http://localhost/sse', }); const result: any[] = []; @@ -516,7 +568,7 @@ describe('createSseClient', () => { const { stream } = createSseClient({ responseTransformer: transformer, - url: '/sse', + url: 'http://localhost/sse', }); const result: any[] = []; @@ -546,7 +598,7 @@ describe('createSseClient', () => { responseValidator: validator, sseDefaultRetryDelay: 0, sseMaxRetryAttempts: 1, - url: '/sse', + url: 'http://localhost/sse', }); const iter = stream[Symbol.asyncIterator](); @@ -567,7 +619,7 @@ describe('createSseClient', () => { const { stream } = createSseClient({ responseTransformer: transformer, responseValidator: validator, - url: '/sse', + url: 'http://localhost/sse', }); const result: any[] = []; diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 02d09d6f4..a551d78a0 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -3,5 +3,11 @@ packages: - examples/**/* - packages/**/* +onlyBuiltDependencies: + - esbuild + - lmdb + - sharp + - unrs-resolver + patchedDependencies: vitepress: patches/vitepress.patch -- 2.51.2