57 lines
1.4 KiB
TypeScript
57 lines
1.4 KiB
TypeScript
"use client";
|
|
|
|
import { useMemo } from "react";
|
|
|
|
// API routes now handled by Next.js /api routes (server-side)
|
|
// Authentication happens via HTTP-only cookies automatically
|
|
|
|
type JsonValue = any;
|
|
|
|
export function useApi() {
|
|
return useMemo(() => {
|
|
async function get(path: string, init?: RequestInit) {
|
|
// Path should now point to Next.js API routes (e.g., /api/builds)
|
|
return fetch(path, {
|
|
...init,
|
|
credentials: 'include', // Include cookies in requests
|
|
});
|
|
}
|
|
|
|
async function post(path: string, body: JsonValue, init?: RequestInit) {
|
|
return fetch(path, {
|
|
method: "POST",
|
|
...init,
|
|
credentials: 'include',
|
|
headers: {
|
|
"Content-Type": "application/json",
|
|
...(init?.headers as any),
|
|
},
|
|
body: JSON.stringify(body),
|
|
});
|
|
}
|
|
|
|
async function put(path: string, body: JsonValue, init?: RequestInit) {
|
|
return fetch(path, {
|
|
method: "PUT",
|
|
...init,
|
|
credentials: 'include',
|
|
headers: {
|
|
"Content-Type": "application/json",
|
|
...(init?.headers as any),
|
|
},
|
|
body: JSON.stringify(body),
|
|
});
|
|
}
|
|
|
|
async function del(path: string, init?: RequestInit) {
|
|
return fetch(path, {
|
|
method: "DELETE",
|
|
...init,
|
|
credentials: 'include',
|
|
headers: init?.headers,
|
|
});
|
|
}
|
|
|
|
return { get, post, put, del };
|
|
}, []);
|
|
} |