diff --git a/templates/base/http-clients/fetch-http-client.eta b/templates/base/http-clients/fetch-http-client.eta index cd5a29eb..df485a30 100644 --- a/templates/base/http-clients/fetch-http-client.eta +++ b/templates/base/http-clients/fetch-http-client.eta @@ -31,6 +31,7 @@ export interface ApiConfig { baseUrl?: string; baseApiParams?: Omit; securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void; + customFetch?: (input: RequestInfo, init?: RequestInit) => Promise } export interface HttpResponse extends Response { @@ -51,6 +52,7 @@ export class HttpClient { private securityData: SecurityDataType | null = null; private securityWorker?: ApiConfig["securityWorker"]; private abortControllers = new Map(); + private customFetch = fetch; private baseApiParams: RequestParams = { credentials: 'same-origin', @@ -118,7 +120,7 @@ export class HttpClient { }, }; } - + private createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => { if (this.abortControllers.has(cancelToken)) { const abortController = this.abortControllers.get(cancelToken); @@ -127,7 +129,7 @@ export class HttpClient { } return void 0; } - + const abortController = new AbortController(); this.abortControllers.set(cancelToken, abortController); return abortController.signal; @@ -141,7 +143,7 @@ export class HttpClient { this.abortControllers.delete(cancelToken); } } - + public request = async ({ body, secure, @@ -158,7 +160,7 @@ export class HttpClient { const queryString = query && this.toQueryString(query); const payloadFormatter = this.contentFormatters[type || ContentType.Json]; - return fetch( + return this.customFetch( `${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { ...requestParams, @@ -187,7 +189,7 @@ export class HttpClient { r.error = e; return r; }); - + if (cancelToken) { this.abortControllers.delete(cancelToken); }