UNPKG

@xsprtd/nuxt-api

Version:

Nuxt API Authentication and Http Client

54 lines (53 loc) 1.41 kB
import { useApiOptions } from "./useApiOptions.js"; import { unref } from "#imports"; import { useCookie, useState, useNuxtApp } from "#app"; const cookieProvider = { get(tokenKey) { const cookie = useCookie(tokenKey, { readonly: true }); return unref(cookie.value); }, set(tokenKey, token) { const cookie = useCookie(tokenKey, { secure: true }); cookie.value = token; } }; const localStorageProvider = { get(tokenKey) { if (import.meta.server) { return void 0; } return window.localStorage.getItem(tokenKey) ?? void 0; }, set(tokenKey, token) { if (import.meta.server) { return; } if (!token) { window.localStorage.removeItem(tokenKey); return; } window.localStorage.setItem(tokenKey, token); } }; export function useTokenStorage() { const { token } = useApiOptions(); const nuxtApp = useNuxtApp(); const provider = token.storageType === "localStorage" ? localStorageProvider : cookieProvider; const tokenState = useState( token.storageKey, () => void 0 ); return { get: async () => { return nuxtApp.runWithContext(() => { return provider.get(token.storageKey) ?? tokenState.value; }); }, set: async (tokenData) => { await nuxtApp.runWithContext(() => { provider.set(token.storageKey, tokenData); tokenState.value = tokenData; }); } }; }