interface DngApiOptions { method?: 'GET' | 'POST' | 'PATCH' | 'PUT' | 'DELETE' body?: Record query?: Record } export function useDngApi() { const auth = useDngAuth() async function api(path: string, options: DngApiOptions = {}): Promise { const token = await auth.accessToken() try { const response = await $fetch(path, { ...options, headers: { Authorization: `Bearer ${token}` }, } as Parameters[1]) return response as T } catch (cause) { const error = cause as { statusCode?: number; status?: number; response?: { status?: number } } const status = error.statusCode ?? error.status ?? error.response?.status if (status === 401) { auth.invalidate() if (import.meta.client) { localStorage.setItem('dng-post-auth-redirect', window.location.pathname + window.location.search) await navigateTo('/') } } throw cause } } return { api } }