sessionize-auth
Version:
A flexible session management library for React, Next.js, Angular, and React Native
62 lines (61 loc) • 2.49 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = createSessionStore;
const zustand_1 = require("zustand");
const js_cookie_1 = __importDefault(require("js-cookie"));
function createSessionStore(options) {
const storage = {
get: () => {
if ((options === null || options === void 0 ? void 0 : options.storageType) === "localStorage") {
return JSON.parse(localStorage.getItem("account") || "null");
}
else if ((options === null || options === void 0 ? void 0 : options.storageType) === "sessionStorage") {
return JSON.parse(sessionStorage.getItem("account") || "null");
}
else {
return js_cookie_1.default.get("account")
? JSON.parse(js_cookie_1.default.get("account"))
: null;
}
},
set: (account) => {
if ((options === null || options === void 0 ? void 0 : options.storageType) === "localStorage") {
localStorage.setItem("account", JSON.stringify(account));
}
else if ((options === null || options === void 0 ? void 0 : options.storageType) === "sessionStorage") {
sessionStorage.setItem("account", JSON.stringify(account));
}
else {
js_cookie_1.default.set("account", JSON.stringify(account), {
secure: true,
sameSite: "Strict",
});
}
},
remove: () => {
if ((options === null || options === void 0 ? void 0 : options.storageType) === "localStorage") {
localStorage.removeItem("account");
}
else if ((options === null || options === void 0 ? void 0 : options.storageType) === "sessionStorage") {
sessionStorage.removeItem("account");
}
else {
js_cookie_1.default.remove("account");
}
},
};
return (0, zustand_1.create)((set) => ({
account: storage.get(),
startSession: (account) => {
storage.set(account);
set({ account });
},
closeSession: () => {
storage.remove();
set({ account: null });
},
}));
}
;