import axios, { AxiosInstance, InternalAxiosRequestConfig } from "axios";
import { YApiConfig } from "../types/yapi.js";
export class YApiClient {
private client: AxiosInstance;
private token?: string;
constructor(private config: YApiConfig) {
this.token = config.token;
if (!this.token) {
throw new Error("Token is required for YApi authentication");
}
this.client = axios.create({
baseURL: config.baseUrl,
timeout: 10000,
headers: {
"Content-Type": "application/json",
},
});
// 添加请求拦截器,自动在 query 参数中添加 token
this.client.interceptors.request.use(
(config: InternalAxiosRequestConfig) => {
if (!config.params) {
config.params = {};
}
config.params.token = this.token;
return config;
},
(error) => {
return Promise.reject(error);
}
);
}
async getInterface(interfaceId: number): Promise<any> {
try {
const response = await this.client.get("/api/interface/get", {
params: {
id: interfaceId,
},
});
if (response.data.errcode !== 0) {
throw new Error(`Failed to get interface: ${response.data.errmsg}`);
}
return response.data.data;
} catch (error) {
throw new Error(
`Error fetching interface: ${
error instanceof Error ? error.message : "Unknown error"
}`
);
}
}
}