sessionize-auth
Version:
A flexible session management library for React, Next.js, Angular, and React Native
67 lines (61 loc) • 2.41 kB
text/typescript
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);
}
}
};
}