From 117e430ee617283b083ac064985c4c6fc9aecb29 Mon Sep 17 00:00:00 2001 From: Ngoc Phuong Date: Fri, 12 Sep 2025 17:36:58 +0700 Subject: [PATCH] fix: invalid requestion options --- src/libs/request.ts | 101 +++++++++++++++++++++++++++++++------------- 1 file changed, 71 insertions(+), 30 deletions(-) diff --git a/src/libs/request.ts b/src/libs/request.ts index 25d234a..4d77839 100644 --- a/src/libs/request.ts +++ b/src/libs/request.ts @@ -1,7 +1,16 @@ import { getErrorMessage } from './helpers'; import { RequestError } from './error'; -export type RequestMethods = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD' | 'OPTIONS' | 'CONNECT' | 'TRACE'; +export type RequestMethods = + | 'GET' + | 'POST' + | 'PUT' + | 'DELETE' + | 'PATCH' + | 'HEAD' + | 'OPTIONS' + | 'CONNECT' + | 'TRACE'; export type RequestHeaders = Record; export interface FsRequestOptions { @@ -34,10 +43,18 @@ export interface IRequest { baseApiUrl: () => string; getAuthToken: (() => Promise) | undefined; get(url: string, options?: RequestOptions): Promise; - post(url: string, data?: RequestData, options?: RequestOptions): Promise; + post( + url: string, + data?: RequestData, + options?: RequestOptions + ): Promise; put(url: string, data?: RequestData, options?: RequestOptions): Promise; delete(url: string, options?: RequestOptions): Promise; - patch(url: string, data?: RequestData, options?: RequestOptions): Promise; + patch( + url: string, + data?: RequestData, + options?: RequestOptions + ): Promise; head(url: string, options?: RequestOptions): Promise; options(url: string, options?: RequestOptions): Promise; connect(url: string, options?: RequestOptions): Promise; @@ -63,7 +80,10 @@ export class FsRequest { return this._baseApiUrl; } - async getRequestHeader(headers?: RequestHeaders, data?: any): Promise { + async getRequestHeader( + headers?: RequestHeaders, + data?: any + ): Promise { const authToken = (await this.getAuthToken?.()) ?? undefined; const requestHeaders: RequestHeaders = { 'Content-Type': 'application/json;charset=utf-8', @@ -85,8 +105,12 @@ export class FsRequest { } if (this.opts.authCookieName) { - const existingCookies = requestHeaders['Cookie'] ? requestHeaders['Cookie'] + '; ' : ''; - requestHeaders['Cookie'] = `${existingCookies}${this.opts.authCookieName}=${authToken}`; + const existingCookies = requestHeaders['Cookie'] + ? requestHeaders['Cookie'] + '; ' + : ''; + requestHeaders[ + 'Cookie' + ] = `${existingCookies}${this.opts.authCookieName}=${authToken}`; return requestHeaders; } @@ -96,13 +120,18 @@ export class FsRequest { return requestHeaders; } - async createRequestInit(method: string, data?: any, headers?: RequestHeaders): Promise { + async createRequestInit( + method: string, + data?: any, + options?: RequestOptions + ): Promise { + const headers = options?.headers ?? {}; const requestInit: RequestInit = { method: method, mode: 'cors', cache: 'no-cache', credentials: 'same-origin', - headers: await this.getRequestHeader(headers ?? {}, data), + headers: await this.getRequestHeader(headers, data), redirect: 'follow', referrerPolicy: 'strict-origin-when-cross-origin', }; @@ -130,9 +159,9 @@ export class FsRequest { method: RequestMethods, url: string, data?: any, - headers?: RequestHeaders, + options?: RequestOptions ): Promise => { - const requestInit = await this.createRequestInit(method, data, headers); + const requestInit = await this.createRequestInit(method, data, options); const response = await fetch(this.createRequestUrl(url), requestInit); if (!response.ok) { @@ -140,7 +169,7 @@ export class FsRequest { try { const errorResponse = await response.json(); msg = getErrorMessage(errorResponse.error, msg); - } catch (e) { } + } catch (e) {} throw new RequestError(msg); } @@ -152,41 +181,53 @@ export class FsRequest { } return (result as { data: T }).data; - } + }; - async get(url: string, headers?: RequestHeaders): Promise { - return await this.createRequest('GET', url, null, headers); + async get(url: string, options?: RequestOptions): Promise { + return await this.createRequest('GET', url, null, options); } - async post(url: string, data?: RequestData, headers?: RequestHeaders): Promise { - return await this.createRequest('POST', url, data, headers); + async post( + url: string, + data?: RequestData, + options?: RequestOptions + ): Promise { + return await this.createRequest('POST', url, data, options); } - async put(url: string, data?: RequestData, headers?: RequestHeaders): Promise { - return await this.createRequest('PUT', url, data, headers); + async put( + url: string, + data?: RequestData, + options?: RequestOptions + ): Promise { + return await this.createRequest('PUT', url, data, options); } - async delete(url: string, headers?: RequestHeaders): Promise { - return await this.createRequest('DELETE', url, null, headers); + async delete(url: string, options?: RequestOptions): Promise { + return await this.createRequest('DELETE', url, null, options); } - async patch(url: string, data?: RequestData, headers?: RequestHeaders): Promise { - return await this.createRequest('PATCH', url, data, headers); + async patch( + url: string, + data?: RequestData, + options?: RequestOptions + ): Promise { + return await this.createRequest('PATCH', url, data, options); } - async head(url: string, headers?: RequestHeaders): Promise { - return await this.createRequest('HEAD', url, null, headers); + async head(url: string, options?: RequestOptions): Promise { + return await this.createRequest('HEAD', url, null, options); } - async options(url: string, headers?: RequestHeaders): Promise { - return await this.createRequest('OPTIONS', url, null, headers); + async options(url: string, options?: RequestOptions): Promise { + return await this.createRequest('OPTIONS', url, null, options); } - async connect(url: string, headers?: RequestHeaders): Promise { - return await this.createRequest('CONNECT', url, null, headers); + async connect(url: string, options?: RequestOptions): Promise { + return await this.createRequest('CONNECT', url, null, options); } - async trace(url: string, headers?: RequestHeaders): Promise { - return await this.createRequest('TRACE', url, null, headers); + async trace(url: string, options?: RequestOptions): Promise { + return await this.createRequest('TRACE', url, null, options); } }