import axios from "axios"; import type { AxiosInstance, AxiosRequestConfig, AxiosResponse } from "axios"; interface ClientConfig { baseURL: string; siteId: string; } class Client { private static instance: Client; private axiosInstance: AxiosInstance; private constructor(config: ClientConfig) { this.axiosInstance = axios.create({ baseURL: config.baseURL, headers: { "Content-Type": "application/json", "X-Site-Id": config.siteId, }, withCredentials: true, }); } public static getInstance(config: ClientConfig): Client { if (!Client.instance) { Client.instance = new Client(config); } return Client.instance; } public async get>( url: string, config?: AxiosRequestConfig ): Promise { const response = await this.axiosInstance.get(url, config); return response; } public async post, D = unknown>( url: string, data?: D, config?: AxiosRequestConfig ): Promise { const response = await this.axiosInstance.post(url, data, config); return response; } public async put, D = unknown>( url: string, data?: D, config?: AxiosRequestConfig ): Promise { const response = await this.axiosInstance.put(url, data, config); return response; } public async delete>( url: string, config?: AxiosRequestConfig ): Promise { const response = await this.axiosInstance.delete(url, config); return response; } } export type { ClientConfig }; export { Client };