{"version":3,"sources":["../../src/hooks/useAdminAccess.ts"],"names":[],"mappings":";;AAwCO,SAAS,eAAe,IAAA,EAAmD;AAChF,EAAA,MAAM,MAAA,GAA4B,KAAK,MAAA,IAAU,SAAA;AACjD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAS,KAAK,CAAA;AAExC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,SAAA,GAAY,KAAA;AAChB,IAAA,MAAM,MAAA,GAAS,CAAC,KAAA,KAAmB;AACjC,MAAA,IAAI,SAAA,EAAW;AACf,MAAA,UAAA,CAAW,KAAK,CAAA;AAChB,MAAA,QAAA,CAAS,IAAI,CAAA;AAAA,IACf,CAAA;AAEA,IAAA,IAAI,WAAW,SAAA,EAAW;AACxB,MAAA,IAAI,CAAC,KAAK,YAAA,EAAc;AACtB,QAAA,MAAA,CAAO,KAAK,CAAA;AACZ,QAAA;AAAA,MACF;AACA,MAAA,IAAA,CAAK,YAAA,EAAa,CACf,IAAA,CAAK,CAAA,OAAA,KAAW;AACf,QAAA,MAAM,IAAA,GAAO,SAAS,IAAA,EAAM,IAAA;AAC5B,QAAA,MAAA,CAAO,CAAC,CAAC,OAAA,EAAS,SAAS,IAAA,KAAS,OAAA,IAAW,SAAS,OAAA,CAAQ,CAAA;AAAA,MAClE,CAAC,CAAA,CACA,KAAA,CAAM,MAAM,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IAC9B,CAAA,MAAO;AACL,MAAA,IAAI,CAAC,KAAK,kBAAA,EAAoB;AAC5B,QAAA,MAAA,CAAO,KAAK,CAAA;AACZ,QAAA;AAAA,MACF;AACA,MAAA,IAAA,CAAK,kBAAA,EAAmB,CACrB,IAAA,CAAK,CAAA,UAAA,KAAc,OAAO,CAAC,CAAC,UAAU,CAAC,CAAA,CACvC,KAAA,CAAM,MAAM,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IAC9B;AAEA,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,GAAY,IAAA;AAAA,IACd,CAAA;AAAA,EACF,GAAG,CAAC,MAAA,EAAQ,KAAK,YAAA,EAAc,IAAA,CAAK,kBAAkB,CAAC,CAAA;AAEvD,EAAA,OAAO,EAAE,SAAS,KAAA,EAAM;AAC1B","file":"useAdminAccess.mjs","sourcesContent":["import { useEffect, useState } from 'react';\n\nexport type AdminAccessMethod = 'session' | 'toolbar';\n\nexport interface SessionUser {\n  id: string;\n  email: string;\n  role?: string;\n}\n\nexport interface SessionData {\n  authenticated?: boolean;\n  user: SessionUser;\n}\n\nexport interface UseAdminAccessOptions {\n  /**\n   * 'session' — uses the consumer-supplied `checkSession` function and treats\n   * `role === 'admin' | 'owner'` as admin. Mirrors the laureate-laureate demo.\n   *\n   * 'toolbar' — uses the consumer-supplied `checkToolbarAccess` function which\n   * returns a boolean. Mirrors all the other demos and templates.\n   */\n  method?: AdminAccessMethod;\n  /** Required when method === 'session' */\n  checkSession?: () => Promise<SessionData | null>;\n  /** Required when method === 'toolbar' */\n  checkToolbarAccess?: () => Promise<boolean>;\n}\n\nexport interface UseAdminAccessResult {\n  isAdmin: boolean;\n  ready: boolean;\n}\n\n/**\n * Centralizes the two existing admin-detection patterns used across the demos\n * and templates. Returns `isAdmin: false` until the underlying check resolves;\n * `ready: true` once the resolution completes (whether admin or not).\n */\nexport function useAdminAccess(opts: UseAdminAccessOptions): UseAdminAccessResult {\n  const method: AdminAccessMethod = opts.method ?? 'toolbar';\n  const [isAdmin, setIsAdmin] = useState(false);\n  const [ready, setReady] = useState(false);\n\n  useEffect(() => {\n    let cancelled = false;\n    const finish = (admin: boolean) => {\n      if (cancelled) return;\n      setIsAdmin(admin);\n      setReady(true);\n    };\n\n    if (method === 'session') {\n      if (!opts.checkSession) {\n        finish(false);\n        return;\n      }\n      opts.checkSession()\n        .then(session => {\n          const role = session?.user?.role;\n          finish(!!session?.user && (role === 'admin' || role === 'owner'));\n        })\n        .catch(() => finish(false));\n    } else {\n      if (!opts.checkToolbarAccess) {\n        finish(false);\n        return;\n      }\n      opts.checkToolbarAccess()\n        .then(authorized => finish(!!authorized))\n        .catch(() => finish(false));\n    }\n\n    return () => {\n      cancelled = true;\n    };\n  }, [method, opts.checkSession, opts.checkToolbarAccess]);\n\n  return { isAdmin, ready };\n}\n"]}