41 lines
981 B
TypeScript
41 lines
981 B
TypeScript
|
|
import { createAuthClient } from "better-auth/react";
|
||
|
|
import { magicLinkClient, twoFactorClient, adminClient } from "better-auth/client/plugins";
|
||
|
|
import { ac, adminRole, userRole, superAdminRole } from "./permissions";
|
||
|
|
|
||
|
|
export const authClient = createAuthClient({
|
||
|
|
baseURL: process.env.NEXT_PUBLIC_BETTER_AUTH_URL || "",
|
||
|
|
plugins: [
|
||
|
|
// Magic link client
|
||
|
|
magicLinkClient(),
|
||
|
|
|
||
|
|
// Two-factor authentication client
|
||
|
|
twoFactorClient({
|
||
|
|
onTwoFactorRedirect() {
|
||
|
|
window.location.href = "/auth/2fa";
|
||
|
|
},
|
||
|
|
}),
|
||
|
|
|
||
|
|
// Admin client with RBAC
|
||
|
|
adminClient({
|
||
|
|
ac,
|
||
|
|
roles: {
|
||
|
|
"super-admin": superAdminRole,
|
||
|
|
admin: adminRole,
|
||
|
|
user: userRole,
|
||
|
|
},
|
||
|
|
}),
|
||
|
|
],
|
||
|
|
});
|
||
|
|
|
||
|
|
// Export commonly used hooks and methods
|
||
|
|
export const {
|
||
|
|
signIn,
|
||
|
|
signOut,
|
||
|
|
useSession,
|
||
|
|
getSession,
|
||
|
|
} = authClient;
|
||
|
|
|
||
|
|
// Type exports
|
||
|
|
export type Session = typeof authClient.$Infer.Session;
|
||
|
|
export type User = typeof authClient.$Infer.Session.user;
|