export interface RequestOptions { formData?: FormData; } export const request = async (url: URL, options?: RequestOptions) => { const { formData } = options || {}; const requestInit: RequestInit = { credentials: 'include', headers: { 'Content-Type': 'application/json', }, method: formData ? 'POST' : 'GET', }; if (formData) { const entries = Object.fromEntries(formData.entries()); requestInit.body = JSON.stringify(entries); } const response = await fetch(url.toString(), requestInit); const responseData = await response.json(); if (response.status === 403) { localStorage.removeItem('user'); window.location.href = `${window.location.origin}/login`; } if (response.status !== 200) { throw responseData; } return responseData; };