29 lines
808 B
TypeScript
29 lines
808 B
TypeScript
import { create } from "zustand";
|
|
|
|
interface AuthState {
|
|
accessToken: string | null;
|
|
sessionExpired: boolean;
|
|
sessionExpiryReason: "refresh_failed" | "session_max_age" | "unauthorized" | null;
|
|
setAccessToken: (token: string | null) => void;
|
|
markSessionExpired: (
|
|
reason: Exclude<AuthState["sessionExpiryReason"], null>,
|
|
) => void;
|
|
clearSessionExpired: () => void;
|
|
}
|
|
|
|
export const useAuthStore = create<AuthState>((set) => ({
|
|
accessToken: null,
|
|
sessionExpired: false,
|
|
sessionExpiryReason: null,
|
|
setAccessToken: (token) => set({ accessToken: token }),
|
|
markSessionExpired: (reason) => set({
|
|
accessToken: null,
|
|
sessionExpired: true,
|
|
sessionExpiryReason: reason,
|
|
}),
|
|
clearSessionExpired: () => set({
|
|
sessionExpired: false,
|
|
sessionExpiryReason: null,
|
|
}),
|
|
}));
|