UNPKG

sessionize-auth

Version:

A flexible session management library for React, Next.js, Angular, and React Native

67 lines (61 loc) 2.41 kB
import Cookies from "js-cookie"; import { SessionStore, AuthConfig } from "./types"; /** * Creates a session store based on the specified storage type */ export function createSessionStore<T>(config: AuthConfig<T> = {}): SessionStore<T> { const { storageType = "cookies", storageKey = "account" } = config; return { get: (): T | null => { try { if (storageType === "localStorage") { const item = localStorage.getItem(storageKey); return item ? JSON.parse(item) : null; } else if (storageType === "sessionStorage") { const item = sessionStorage.getItem(storageKey); return item ? JSON.parse(item) : null; } else { const cookie = Cookies.get(storageKey); return cookie ? JSON.parse(cookie) : null; } } catch (error) { console.warn("Failed to parse session data:", error); return null; } }, set: (account: T): void => { try { const serialized = JSON.stringify(account); if (storageType === "localStorage") { localStorage.setItem(storageKey, serialized); } else if (storageType === "sessionStorage") { sessionStorage.setItem(storageKey, serialized); } else { Cookies.set(storageKey, serialized, { secure: true, sameSite: "Strict", expires: 7 // 7 days }); } } catch (error) { console.error("Failed to save session data:", error); } }, remove: (): void => { try { if (storageType === "localStorage") { localStorage.removeItem(storageKey); } else if (storageType === "sessionStorage") { sessionStorage.removeItem(storageKey); } else { Cookies.remove(storageKey); } } catch (error) { console.error("Failed to remove session data:", error); } } }; }