UNPKG

@adonis-agora/authkit-react

Version:

Frontend ergonomics over AuthKit for AdonisJS + Inertia + React apps: a typed useAuth() hook, role-gating hooks and gating components.

45 lines (44 loc) 1.85 kB
import { createContext, useContext } from 'react'; export const DEFAULT_CONFIG = { idp: 'authkit', loginUrl: '/auth/login', logoutUrl: '/account/logout', profileUrl: '/account/security', endpoints: { profile: '/account/security/profile', sessions: '/account/security', apps: '/account/apps', passkeys: '/account/mfa/passkeys', orgs: '/account/orgs/json', orgInvitations: '/account/orgs/invitations/json', can: '/authz/can', }, }; export function resolveConfig(config) { return { loginUrl: config?.loginUrl ?? DEFAULT_CONFIG.loginUrl, logoutUrl: config?.logoutUrl ?? DEFAULT_CONFIG.logoutUrl, profileUrl: config?.profileUrl ?? DEFAULT_CONFIG.profileUrl, endpoints: { profile: config?.endpoints?.profile ?? DEFAULT_CONFIG.endpoints.profile, sessions: config?.endpoints?.sessions ?? DEFAULT_CONFIG.endpoints.sessions, apps: config?.endpoints?.apps ?? DEFAULT_CONFIG.endpoints.apps, passkeys: config?.endpoints?.passkeys ?? DEFAULT_CONFIG.endpoints.passkeys, orgs: config?.endpoints?.orgs ?? DEFAULT_CONFIG.endpoints.orgs, orgInvitations: config?.endpoints?.orgInvitations ?? DEFAULT_CONFIG.endpoints.orgInvitations, can: config?.endpoints?.can ?? config?.canPath ?? DEFAULT_CONFIG.endpoints.can, }, csrfToken: config?.csrfToken, idp: config?.idp ?? 'authkit', }; } export function buildAuthUrl(base, returnTo) { if (!returnTo) return base; const sep = base.includes('?') ? '&' : '?'; return `${base}${sep}returnTo=${encodeURIComponent(returnTo)}`; } export const AuthkitConfigContext = createContext(DEFAULT_CONFIG); export function useAuthkitConfig() { return useContext(AuthkitConfigContext); }