···11+---
22+"@hey-api/client-fetch": patch
33+"@hey-api/client-next": patch
44+---
55+66+feat: support referencing interceptors by index
+43-12
docs/openapi-ts/clients/fetch.md
···154154155155## Interceptors
156156157157-Interceptors (middleware) can be used to modify requests before they're sent or responses before they're returned to your application. They can be added with `use` and removed with `eject`. Fetch API does not have the interceptor functionality, so we implement our own. Below is an example request interceptor
157157+Interceptors (middleware) can be used to modify requests before they're sent or responses before they're returned to your application. They can be added with `use`, removed with `eject`, and updated wth `update`. The `use` and `update` methods will return the id of the interceptor for use with `eject` and `update`. Fetch API does not have the interceptor functionality, so we implement our own. Below is an example request interceptor
158158159159::: code-group
160160161161```js [use]
162162import { client } from 'client/client.gen';
163163-164163// Supports async functions
165165-client.interceptors.request.use(async (request) => {
164164+async function myInterceptor(request) {
166165 // do something
167166 return request;
168168-});
167167+}
168168+interceptorId = client.interceptors.request.use(myInterceptor);
169169```
170170171171```js [eject]
172172import { client } from 'client/client.gen';
173173174174-client.interceptors.request.eject((request) => {
174174+// eject interceptor by interceptor id
175175+client.interceptors.request.eject(interceptorId);
176176+177177+// eject interceptor by reference to interceptor function
178178+client.interceptors.request.eject(myInterceptor);
179179+```
180180+181181+```js [update]
182182+import { client } from 'client/client.gen';
183183+184184+async function myNewInterceptor(request) {
175185 // do something
176186 return request;
177177-});
187187+}
188188+// update interceptor by interceptor id
189189+client.interceptors.request.update(interceptorId, myNewInterceptor);
190190+191191+// update interceptor by reference to interceptor function
192192+client.interceptors.request.update(myInterceptor, myNewInterceptor);
178193```
179194180195:::
···185200186201```js [use]
187202import { client } from 'client/client.gen';
188188-189189-client.interceptors.response.use((response) => {
203203+async function myInterceptor(response) {
190204 // do something
191205 return response;
192192-});
206206+}
207207+// Supports async functions
208208+interceptorId = client.interceptors.response.use(myInterceptor);
193209```
194210195211```js [eject]
196212import { client } from 'client/client.gen';
197213198198-client.interceptors.response.eject((response) => {
214214+// eject interceptor by interceptor id
215215+client.interceptors.response.eject(interceptorId);
216216+217217+// eject interceptor by reference to interceptor function
218218+client.interceptors.response.eject(myInterceptor);
219219+```
220220+221221+```js [update]
222222+import { client } from 'client/client.gen';
223223+224224+async function myNewInterceptor(response) {
199225 // do something
200226 return response;
201201-});
227227+}
228228+// update interceptor by interceptor id
229229+client.interceptors.response.update(interceptorId, myNewInterceptor);
230230+231231+// update interceptor by reference to interceptor function
232232+client.interceptors.response.update(myInterceptor, myNewInterceptor);
202233```
203234204235:::
205236206237::: tip
207207-To eject, you must provide a reference to the function that was passed to `use()`.
238238+To eject, you must provide the id or reference of the interceptor passed to `use()`, the id is the value returned by `use()` and `update()`.
208239:::
209240210241## Auth
+45-12
docs/openapi-ts/clients/next-js.md
···148148149149## Interceptors
150150151151-Interceptors (middleware) can be used to modify requests before they're sent or responses before they're returned to your application. They can be added with `use` and removed with `eject`. Fetch API does not have the interceptor functionality, so we implement our own. Below is an example request interceptor
151151+Interceptors (middleware) can be used to modify requests before they're sent or responses before they're returned to your application. They can be added with `use`, removed with `eject`, and updated wth `update`. The `use` and `update` methods will return the id of the interceptor for use with `eject` and `update`. Fetch API does not have the interceptor functionality, so we implement our own. Below is an example request interceptor
152152153153::: code-group
154154155155```js [use]
156156import { client } from 'client/client.gen';
157157-158157// Supports async functions
159159-client.interceptors.request.use(async (options) => {
158158+async function myInterceptor(request) {
160159 // do something
161161-});
160160+ return request;
161161+}
162162+interceptorId = client.interceptors.request.use(myInterceptor);
162163```
163164164165```js [eject]
165166import { client } from 'client/client.gen';
166167167167-client.interceptors.request.eject((options) => {
168168+// eject interceptor by interceptor id
169169+client.interceptors.request.eject(interceptorId);
170170+171171+// eject interceptor by reference to interceptor function
172172+client.interceptors.request.eject(myInterceptor);
173173+```
174174+175175+```js [update]
176176+import { client } from 'client/client.gen';
177177+178178+async function myNewInterceptor(request) {
168179 // do something
169169-});
180180+ return request;
181181+}
182182+// update interceptor by interceptor id
183183+client.interceptors.request.update(interceptorId, myNewInterceptor);
184184+185185+// update interceptor by reference to interceptor function
186186+client.interceptors.request.update(myInterceptor, myNewInterceptor);
170187```
171188172189:::
···177194178195```js [use]
179196import { client } from 'client/client.gen';
180180-181181-client.interceptors.response.use((response) => {
197197+async function myInterceptor(response) {
182198 // do something
183199 return response;
184184-});
200200+}
201201+// Supports async functions
202202+interceptorId = client.interceptors.response.use(myInterceptor);
185203```
186204187205```js [eject]
188206import { client } from 'client/client.gen';
189207190190-client.interceptors.response.eject((response) => {
208208+// eject interceptor by interceptor id
209209+client.interceptors.response.eject(interceptorId);
210210+211211+// eject interceptor by reference to interceptor function
212212+client.interceptors.response.eject(myInterceptor);
213213+```
214214+215215+```js [update]
216216+import { client } from 'client/client.gen';
217217+218218+async function myNewInterceptor(response) {
191219 // do something
192220 return response;
193193-});
221221+}
222222+// update interceptor by interceptor id
223223+client.interceptors.response.update(interceptorId, myNewInterceptor);
224224+225225+// update interceptor by reference to interceptor function
226226+client.interceptors.response.update(myInterceptor, myNewInterceptor);
194227```
195228196229:::
197230198231::: tip
199199-To eject, you must provide a reference to the function that was passed to `use()`.
232232+To eject, you must provide the id or reference of the interceptor passed to `use()`, the id is the value returned by `use()` and `update()`.
200233:::
201234202235## Auth
+9-3
packages/client-custom/src/client.ts
···6565 let request = new Request(url, requestInit);
66666767 for (const fn of interceptors.request._fns) {
6868- request = await fn(request, opts);
6868+ if (fn) {
6969+ request = await fn(request, opts);
7070+ }
6971 }
70727173 // fetch must be assigned here, otherwise it would throw the error:
···7476 let response = await _fetch(request);
75777678 for (const fn of interceptors.response._fns) {
7777- response = await fn(response, request, opts);
7979+ if (fn) {
8080+ response = await fn(response, request, opts);
8181+ }
7882 }
79838084 const result = {
···133137 let finalError = error;
134138135139 for (const fn of interceptors.error._fns) {
136136- finalError = (await fn(error, response, request, opts)) as string;
140140+ if (fn) {
141141+ finalError = (await fn(error, response, request, opts)) as string;
142142+ }
137143 }
138144139145 finalError = finalError || ({} as string);