@xsprtd/nuxt-api
Version:
Nuxt API Authentication and Http Client
54 lines (53 loc) • 1.41 kB
JavaScript
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;
});
}
};
}