import axios, { AxiosRequestConfig, AxiosResponse } from "axios"; export const requester = ( config?: AxiosRequestConfig, contentType?: string ) => { const service = axios.create({ baseURL: "https://pokeapi.co/api/v2/", ...config, }); service.interceptors.request.use( (req) => { // @ts-expect-error req.headers = { "Content-Type": contentType || "application/json", ...config?.headers, }; return req; }, (error) => Promise.reject(error) ); service.interceptors.response.use( (res) => res, (error) => Promise.reject(error) ); return { async get(uri: string): Promise> { const response = await service.get(uri); return response; }, async post(uri: string, data: unknown): Promise> { const response = await service.post(uri, data); return response; }, async put(uri: string, data: unknown): Promise> { const response = await service.put(uri, data); return response; }, async patch(uri: string, data: unknown): Promise> { const response = await service.patch(uri, data); return response; }, async delete(uri: string, data: unknown): Promise> { const response = await service.delete(uri, { data }); return response; }, }; };