{"version":3,"sources":["../../../src/react/auth/index.ts","../../../src/react/auth/useContentstackUser.ts","../../../src/react/auth/ContentstackLoginButton.tsx","../../../src/react/auth/ContentstackLogoutButton.tsx","../../../src/react/auth/ContentstackAuthGuard.tsx"],"sourcesContent":["export { useContentstackUser, type UseContentstackUserReturn } from \"./useContentstackUser\"\nexport {\n  ContentstackLoginButton,\n  type ContentstackLoginButtonProps,\n} from \"./ContentstackLoginButton\"\nexport {\n  ContentstackLogoutButton,\n  type ContentstackLogoutButtonProps,\n} from \"./ContentstackLogoutButton\"\nexport { ContentstackAuthGuard, type ContentstackAuthGuardProps } from \"./ContentstackAuthGuard\"\n","\"use client\"\n\nimport { useCallback, useEffect, useState } from \"react\"\nimport type { ContentstackUser } from \"../../index.js\"\n\nexport interface UseContentstackUserReturn {\n  user: ContentstackUser | null\n  loading: boolean\n  isAuthenticated: boolean\n}\n\nexport function useContentstackUser(): UseContentstackUserReturn {\n  const [user, setUser] = useState<ContentstackUser | null>(null)\n  const [loading, setLoading] = useState(true)\n\n  const fetchSession = useCallback(async () => {\n    setLoading(true)\n    try {\n      const res = await fetch(\"/api/auth/session\")\n      if (!res.ok) {\n        setUser(null)\n        return\n      }\n      const data = await res.json()\n      if (data?.user) {\n        setUser({\n          uid: data.user.uid ?? data.user.id ?? \"\",\n          email: data.user.email ?? \"\",\n          firstName: data.user.firstName ?? data.user.name?.split(\" \")[0],\n          lastName: data.user.lastName ?? data.user.name?.split(\" \").slice(1).join(\" \"),\n          username: data.user.username,\n          profileImage: data.user.profileImage ?? data.user.image,\n        })\n      } else {\n        setUser(null)\n      }\n    } catch {\n      setUser(null)\n    } finally {\n      setLoading(false)\n    }\n  }, [])\n\n  useEffect(() => {\n    fetchSession()\n  }, [fetchSession])\n\n  return { user, loading, isAuthenticated: user !== null }\n}\n","import type { ContentstackOAuthScope } from \"../../auth/scopes.js\"\n\nexport interface ContentstackLoginButtonProps {\n  scopes?: ContentstackOAuthScope[]\n  redirectTo?: string\n  className?: string\n  children?: React.ReactNode\n}\n\nexport function ContentstackLoginButton({\n  redirectTo,\n  className,\n  children = \"Sign in with Contentstack\",\n}: ContentstackLoginButtonProps): React.JSX.Element {\n  return (\n    <form action=\"/api/auth/signin/contentstack\" method=\"POST\">\n      {redirectTo && <input type=\"hidden\" name=\"callbackUrl\" value={redirectTo} />}\n      <button type=\"submit\" className={className}>\n        {children}\n      </button>\n    </form>\n  )\n}\n","export interface ContentstackLogoutButtonProps {\n  redirectTo?: string\n  className?: string\n  children?: React.ReactNode\n}\n\nexport function ContentstackLogoutButton({\n  redirectTo,\n  className,\n  children = \"Sign out\",\n}: ContentstackLogoutButtonProps): React.JSX.Element {\n  return (\n    <form action=\"/api/auth/signout\" method=\"POST\">\n      {redirectTo && <input type=\"hidden\" name=\"callbackUrl\" value={redirectTo} />}\n      <button type=\"submit\" className={className}>\n        {children}\n      </button>\n    </form>\n  )\n}\n","\"use client\"\n\nimport { ContentstackLoginButton } from \"./ContentstackLoginButton\"\nimport { useContentstackUser } from \"./useContentstackUser\"\n\nexport interface ContentstackAuthGuardProps {\n  children: React.ReactNode\n  fallback?: React.ReactNode\n  loadingFallback?: React.ReactNode\n}\n\nexport function ContentstackAuthGuard({\n  children,\n  fallback,\n  loadingFallback = null,\n}: ContentstackAuthGuardProps): React.JSX.Element | null {\n  const { isAuthenticated, loading } = useContentstackUser()\n\n  if (loading) return <>{loadingFallback}</>\n  if (isAuthenticated) return <>{children}</>\n  return <>{fallback ?? <ContentstackLoginButton />}</>\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACEA,mBAAiD;AAS1C,SAAS,sBAAiD;AAC/D,QAAM,CAAC,MAAM,OAAO,QAAI,uBAAkC,IAAI;AAC9D,QAAM,CAAC,SAAS,UAAU,QAAI,uBAAS,IAAI;AAE3C,QAAM,mBAAe,0BAAY,YAAY;AAC3C,eAAW,IAAI;AACf,QAAI;AACF,YAAM,MAAM,MAAM,MAAM,mBAAmB;AAC3C,UAAI,CAAC,IAAI,IAAI;AACX,gBAAQ,IAAI;AACZ;AAAA,MACF;AACA,YAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,UAAI,MAAM,MAAM;AACd,gBAAQ;AAAA,UACN,KAAK,KAAK,KAAK,OAAO,KAAK,KAAK,MAAM;AAAA,UACtC,OAAO,KAAK,KAAK,SAAS;AAAA,UAC1B,WAAW,KAAK,KAAK,aAAa,KAAK,KAAK,MAAM,MAAM,GAAG,EAAE,CAAC;AAAA,UAC9D,UAAU,KAAK,KAAK,YAAY,KAAK,KAAK,MAAM,MAAM,GAAG,EAAE,MAAM,CAAC,EAAE,KAAK,GAAG;AAAA,UAC5E,UAAU,KAAK,KAAK;AAAA,UACpB,cAAc,KAAK,KAAK,gBAAgB,KAAK,KAAK;AAAA,QACpD,CAAC;AAAA,MACH,OAAO;AACL,gBAAQ,IAAI;AAAA,MACd;AAAA,IACF,QAAQ;AACN,cAAQ,IAAI;AAAA,IACd,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,8BAAU,MAAM;AACd,iBAAa;AAAA,EACf,GAAG,CAAC,YAAY,CAAC;AAEjB,SAAO,EAAE,MAAM,SAAS,iBAAiB,SAAS,KAAK;AACzD;;;ACjCI;AANG,SAAS,wBAAwB;AAAA,EACtC;AAAA,EACA;AAAA,EACA,WAAW;AACb,GAAoD;AAClD,SACE,6CAAC,UAAK,QAAO,iCAAgC,QAAO,QACjD;AAAA,kBAAc,4CAAC,WAAM,MAAK,UAAS,MAAK,eAAc,OAAO,YAAY;AAAA,IAC1E,4CAAC,YAAO,MAAK,UAAS,WACnB,UACH;AAAA,KACF;AAEJ;;;ACVI,IAAAA,sBAAA;AANG,SAAS,yBAAyB;AAAA,EACvC;AAAA,EACA;AAAA,EACA,WAAW;AACb,GAAqD;AACnD,SACE,8CAAC,UAAK,QAAO,qBAAoB,QAAO,QACrC;AAAA,kBAAc,6CAAC,WAAM,MAAK,UAAS,MAAK,eAAc,OAAO,YAAY;AAAA,IAC1E,6CAAC,YAAO,MAAK,UAAS,WACnB,UACH;AAAA,KACF;AAEJ;;;ACDsB,IAAAC,sBAAA;AAPf,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA;AAAA,EACA,kBAAkB;AACpB,GAAyD;AACvD,QAAM,EAAE,iBAAiB,QAAQ,IAAI,oBAAoB;AAEzD,MAAI,QAAS,QAAO,6EAAG,2BAAgB;AACvC,MAAI,gBAAiB,QAAO,6EAAG,UAAS;AACxC,SAAO,6EAAG,sBAAY,6CAAC,2BAAwB,GAAG;AACpD;","names":["import_jsx_runtime","import_jsx_runtime"]}