@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
JavaScript
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);
}