storage.ts 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import { AgentUser } from "@/features/agent/types";
  2. const AGENT_ID_KEY = "agent_user_id";
  3. const AGENT_USERNAME_KEY = "agent_username";
  4. const AGENT_ROLE_KEY = "agent_role";
  5. const isBrowser = () => typeof window !== "undefined";
  6. export function getAgentUser(): AgentUser | null {
  7. if (!isBrowser()) {
  8. return null;
  9. }
  10. const id = window.localStorage.getItem(AGENT_ID_KEY);
  11. const username = window.localStorage.getItem(AGENT_USERNAME_KEY);
  12. const role = window.localStorage.getItem(AGENT_ROLE_KEY);
  13. const permissionsRaw = window.localStorage.getItem("agent_permissions");
  14. if (!id || !username) {
  15. return null;
  16. }
  17. const parsedId = Number.parseInt(id, 10);
  18. if (Number.isNaN(parsedId)) {
  19. return null;
  20. }
  21. return {
  22. id: parsedId,
  23. username,
  24. role: role ?? "",
  25. permissions: (() => {
  26. if (!permissionsRaw) return undefined;
  27. try {
  28. const parsed = JSON.parse(permissionsRaw);
  29. return Array.isArray(parsed) ? (parsed as string[]) : undefined;
  30. } catch {
  31. return undefined;
  32. }
  33. })(),
  34. };
  35. }
  36. export function setAgentUser(agent: AgentUser): void {
  37. if (!isBrowser()) {
  38. return;
  39. }
  40. window.localStorage.setItem(AGENT_ID_KEY, String(agent.id));
  41. window.localStorage.setItem(AGENT_USERNAME_KEY, agent.username);
  42. window.localStorage.setItem(AGENT_ROLE_KEY, agent.role ?? "");
  43. if (agent.permissions) {
  44. window.localStorage.setItem("agent_permissions", JSON.stringify(agent.permissions));
  45. } else {
  46. window.localStorage.removeItem("agent_permissions");
  47. }
  48. }
  49. export function clearAgentUser(): void {
  50. if (!isBrowser()) {
  51. return;
  52. }
  53. window.localStorage.removeItem(AGENT_ID_KEY);
  54. window.localStorage.removeItem(AGENT_USERNAME_KEY);
  55. window.localStorage.removeItem(AGENT_ROLE_KEY);
  56. }