@ryzes/rio
Version:
Axios wrapper for handling { code, message, data } responses and integrating with TanStack React Query.
96 lines (89 loc) • 3.36 kB
text/typescript
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 };