UNPKG

@propelauth/react

Version:

A React library for managing authentication, backed by PropelAuth

105 lines (98 loc) 3.08 kB
import { AccessHelper, OrgHelper, User, UserClass } from "@propelauth/javascript" import { useContext } from "react" import { AuthContext, Tokens } from "../AuthContext" export type UseAuthInfoLoading = { loading: true isLoggedIn: undefined accessToken: undefined user: undefined userClass: undefined orgHelper: undefined accessHelper: undefined isImpersonating: undefined impersonatorUserId: undefined refreshAuthInfo: () => Promise<void> tokens: Tokens accessTokenExpiresAtSeconds: undefined } export type UseAuthInfoLoggedInProps = { loading: false isLoggedIn: true accessToken: string user: User userClass: UserClass orgHelper: OrgHelper accessHelper: AccessHelper isImpersonating: boolean impersonatorUserId?: string refreshAuthInfo: () => Promise<void> tokens: Tokens accessTokenExpiresAtSeconds: number } export type UseAuthInfoNotLoggedInProps = { loading: false isLoggedIn: false accessToken: null user: null userClass: null orgHelper: null accessHelper: null isImpersonating: false impersonatorUserId: undefined refreshAuthInfo: () => Promise<void> tokens: Tokens accessTokenExpiresAtSeconds: undefined } export type UseAuthInfoProps = UseAuthInfoLoading | UseAuthInfoLoggedInProps | UseAuthInfoNotLoggedInProps export function useAuthInfo(): UseAuthInfoProps { const context = useContext(AuthContext) if (context === undefined) { throw new Error("useAuthInfo must be used within an AuthProvider or RequiredAuthProvider") } const { loading, authInfo, refreshAuthInfo, tokens } = context if (loading) { return { loading: true, isLoggedIn: undefined, accessToken: undefined, orgHelper: undefined, accessHelper: undefined, user: undefined, userClass: undefined, isImpersonating: undefined, impersonatorUserId: undefined, refreshAuthInfo, tokens, accessTokenExpiresAtSeconds: undefined, } } else if (authInfo && authInfo.accessToken) { return { loading: false, isLoggedIn: true, accessToken: authInfo.accessToken, orgHelper: authInfo.orgHelper, accessHelper: authInfo.accessHelper, user: authInfo.user, userClass: authInfo.userClass, isImpersonating: !!authInfo.impersonatorUserId, impersonatorUserId: authInfo.impersonatorUserId, refreshAuthInfo, tokens, accessTokenExpiresAtSeconds: authInfo.expiresAtSeconds, } } return { loading: false, isLoggedIn: false, accessToken: null, user: null, userClass: null, orgHelper: null, accessHelper: null, isImpersonating: false, impersonatorUserId: undefined, refreshAuthInfo, tokens, accessTokenExpiresAtSeconds: undefined, } }