UNPKG

@ryzes/rio

Version:

Axios wrapper for handling { code, message, data } responses and integrating with TanStack React Query.

96 lines (89 loc) 3.36 kB
import { QueryClient } from '@tanstack/react-query'; import { InternalAxiosRequestConfig, AxiosResponse, AxiosRequestConfig } from 'axios'; type ErrorReporter = (titile: string, info: string) => void; declare function createRioQueryClient(errorReporter: ErrorReporter): QueryClient; type RequestLogger = (config: InternalAxiosRequestConfig) => void; type ResponseLogger = (response: AxiosResponse<ApiResponse<any>>) => void; type ErrorLogger = (info: string) => void; interface AuthService { setToken(token: string): void; getToken(): string | null; clearToken(): void; isAuthenticated(): boolean; } declare class ConsoleAuthService implements AuthService { private token; setToken(token: string): void; getToken(): string | null; clearToken(): void; isAuthenticated(): boolean; } interface ResPagedData<T = any> { page: number; pageSize: number; total: number; list: T[]; } type ResResult<T = any> = { result: T; }; interface ApiResponse<T = any> { data: T; code: number; message: string; } interface HttpClientOptions { baseURL: string; timeout?: number; successCode?: number; authService?: AuthService; requestLogger?: RequestLogger; responseLogger?: ResponseLogger; errorLogger?: ErrorLogger; } /** * HTTP 客户端类。 * * 在使用前必须先调用 {@link initialize} 设置基础 URL,否则请求将无效。 */ declare class HttpClient { private instance; private successCode; private onUnauthorized?; private _baseURL; private requestLogger?; private responseLogger?; private errorLogger?; private authService; constructor(); get baseURL(): string; initialize(options: HttpClientOptions): void; private requestInterceptor; private responseInterceptor; private errorInterceoptor; private checkResponseFormat; private checkSuccessCode; private checkDataType; setAuthToken(token: string): void; clearAuthToken(): void; getAuthToken(): string | null; private requestRaw; private request; get<T>(url: string, config?: AxiosRequestConfig): Promise<T>; getRaw<T>(url: string, config?: AxiosRequestConfig): Promise<ApiResponse<T>>; post<T, D = unknown>(url: string, data?: D, config?: AxiosRequestConfig<D>): Promise<T>; postRaw<T, D = unknown>(url: string, data?: D, config?: AxiosRequestConfig<D>): Promise<ApiResponse<T>>; put<T, D = unknown>(url: string, data?: D, config?: AxiosRequestConfig<D>): Promise<T>; putRaw<T, D = unknown>(url: string, data?: D, config?: AxiosRequestConfig<D>): Promise<ApiResponse<T>>; patch<T, D = unknown>(url: string, data?: D, config?: AxiosRequestConfig<D>): Promise<T>; patchRaw<T, D = unknown>(url: string, data?: D, config?: AxiosRequestConfig<D>): Promise<ApiResponse<T>>; delete<T, D = unknown>(url: string, data?: D, config?: AxiosRequestConfig<D>): Promise<T>; deleteRaw<T, D = unknown>(url: string, data?: D, config?: AxiosRequestConfig<D>): Promise<ApiResponse<T>>; } /** * HTTP 客户端类。 * * 在使用前必须先调用 {@link initialize} 设置基础 URL,否则请求将无效。 */ declare const httpClient: HttpClient; export { type ApiResponse, type AuthService, ConsoleAuthService, type ResPagedData, type ResResult, createRioQueryClient, httpClient };