SPB Git forge
28commits 1branches 0releases
7.7 MBsize
maindefault branch
10 days agolast push
Python 66.3% TypeScript 22.7% JavaScript 8.6% HTML 1.4% CSS 0.7%
1.1 KB · 38 lines typescript
Raw Blame History
1'use client';2/** Admin token (`X-CA-Admin-Token`) kept in localStorage; entered once on /admin. Never rendered back into the page. */3import { useEffect, useState } from 'react';45export const ADMIN_KEY = 'ca-admin-token';6const EVENT = 'ca-admin-change';78export function readAdminToken(): string | null {9  if (typeof window === 'undefined') return null;10  try {11    return window.localStorage.getItem(ADMIN_KEY) || null;12  } catch {13    return null;14  }15}16export function setAdminToken(t: string | null) {17  try {18    if (t) window.localStorage.setItem(ADMIN_KEY, t);19    else window.localStorage.removeItem(ADMIN_KEY);20  } catch {21    /* ignore */22  }23  window.dispatchEvent(new CustomEvent(EVENT));24}25/** `undefined` while unknown (before mount), `null` when absent. */26export function useAdminToken(): string | null | undefined {27  const [t, setT] = useState<string | null | undefined>(undefined);28  useEffect(() => {29    const read = () => setT(readAdminToken());30    read();31    window.addEventListener(EVENT, read);32    return () => window.removeEventListener(EVENT, read);33  }, []);34  return t;35}3637export { ADMIN_MODULES } from './admin-modules';38