import axios from "axios"; import type { Session } from "next-auth"; import { env } from "../env/client.mjs"; export const post = async (url: string, body: unknown, session?: Session) => { const headers = getHeaders(session); url = getUrl(url); return ( await axios.post(url, body, { headers, }) ).data as T; }; export const get = async (url: string, session?: Session) => { const headers = getHeaders(session); url = getUrl(url); return ( await axios.get(url, { headers, }) ).data as T; }; export const delete_ = async (url: string, accessToken?: string) => { const headers: Record = {}; if (accessToken) headers.Authorization = `Bearer ${accessToken}`; url = getUrl(url); return ( await axios.delete(url, { headers, }) ).data as T; }; export function getHeaders(session?: Session) { const headers: Record = {}; if (session?.accessToken) { headers.Authorization = `Bearer ${session.accessToken}`; } return headers; } function getUrl(url: string) { return env.NEXT_PUBLIC_BACKEND_URL + url; } export async function withRetries( fn: () => Promise, onError: (error: unknown) => Promise, // Function to handle the error and return whether to continue retrying retries = 3 ): Promise { for (let i = 0; i < retries + 1; i++) { try { return await fn(); } catch (error) { if (!(await onError(error))) return; } } }