mirror of
https://github.com/StanGirard/quivr.git
synced 2024-12-23 03:12:24 +03:00
9bb7ccf651
* feat: add providers mocks * test(<ChatPage/>: add render test using providers
74 lines
2.4 KiB
TypeScript
74 lines
2.4 KiB
TypeScript
import { useEffect, useState } from "react";
|
|
|
|
import { useSupabase } from "@/lib/context/SupabaseProvider";
|
|
|
|
import { useBrainConfig } from "../context/BrainConfigProvider/hooks/useBrainConfig";
|
|
|
|
interface FetchInstance {
|
|
get: (url: string, headers?: HeadersInit) => Promise<Response>;
|
|
post: (
|
|
url: string,
|
|
body: BodyInit | null | undefined,
|
|
headers?: HeadersInit
|
|
) => Promise<Response>;
|
|
put: (
|
|
url: string,
|
|
body: BodyInit | null | undefined,
|
|
headers?: HeadersInit
|
|
) => Promise<Response>;
|
|
delete: (url: string, headers?: HeadersInit) => Promise<Response>;
|
|
}
|
|
|
|
const fetchInstance: FetchInstance = {
|
|
get: async (url, headers) => fetch(url, { method: "GET", headers }),
|
|
post: async (url, body, headers) =>
|
|
fetch(url, { method: "POST", body, headers }),
|
|
put: async (url, body, headers) =>
|
|
fetch(url, { method: "PUT", body, headers }),
|
|
delete: async (url, headers) => fetch(url, { method: "DELETE", headers }),
|
|
};
|
|
|
|
export const useFetch = (): { fetchInstance: FetchInstance } => {
|
|
const { session } = useSupabase();
|
|
const {
|
|
config: { backendUrl: configBackendUrl, openAiKey },
|
|
} = useBrainConfig();
|
|
|
|
const [instance, setInstance] = useState(fetchInstance);
|
|
|
|
const baseURL = `${process.env.NEXT_PUBLIC_BACKEND_URL ?? ""}`;
|
|
const backendUrl = configBackendUrl ?? baseURL;
|
|
|
|
useEffect(() => {
|
|
setInstance({
|
|
...fetchInstance,
|
|
get: async (url, headers) =>
|
|
fetchInstance.get(`${backendUrl}${url}`, {
|
|
Authorization: `Bearer ${session?.access_token ?? ""}`,
|
|
"Openai-Api-Key": openAiKey ?? "",
|
|
...headers,
|
|
}),
|
|
post: async (url, body, headers) =>
|
|
fetchInstance.post(`${backendUrl}${url}`, body, {
|
|
Authorization: `Bearer ${session?.access_token ?? ""}`,
|
|
"Openai-Api-Key": openAiKey ?? "",
|
|
...headers,
|
|
}),
|
|
put: async (url, body, headers) =>
|
|
fetchInstance.put(`${backendUrl}${url}`, body, {
|
|
Authorization: `Bearer ${session?.access_token ?? ""}`,
|
|
"Openai-Api-Key": openAiKey ?? "",
|
|
...headers,
|
|
}),
|
|
delete: async (url, headers) =>
|
|
fetchInstance.delete(`${backendUrl}${url}`, {
|
|
Authorization: `Bearer ${session?.access_token ?? ""}`,
|
|
"Openai-Api-Key": openAiKey ?? "",
|
|
...headers,
|
|
}),
|
|
});
|
|
}, [session, backendUrl, openAiKey]);
|
|
|
|
return { fetchInstance: instance };
|
|
};
|