mirror of
https://github.com/RayLabsHQ/gitea-mirror.git
synced 2025-12-06 11:36:44 +03:00
65 lines
2.0 KiB
TypeScript
65 lines
2.0 KiB
TypeScript
import "@/lib/polyfills/buffer";
|
|
import { createAuthClient } from "better-auth/react";
|
|
import { oidcClient } from "better-auth/client/plugins";
|
|
import { ssoClient } from "@better-auth/sso/client";
|
|
import type { Session as BetterAuthSession, User as BetterAuthUser } from "better-auth";
|
|
|
|
export const authClient = createAuthClient({
|
|
// Use PUBLIC_BETTER_AUTH_URL if set (for multi-origin access), otherwise use current origin
|
|
// This allows the client to connect to the auth server even when accessed from different origins
|
|
baseURL: (() => {
|
|
let url: string | undefined;
|
|
|
|
// Check for public environment variable first (for client-side access)
|
|
if (typeof import.meta !== 'undefined' && import.meta.env?.PUBLIC_BETTER_AUTH_URL) {
|
|
url = import.meta.env.PUBLIC_BETTER_AUTH_URL;
|
|
}
|
|
|
|
// Validate and clean the URL if provided
|
|
if (url && typeof url === 'string' && url.trim() !== '') {
|
|
try {
|
|
// Validate URL format and remove trailing slash
|
|
const validatedUrl = new URL(url.trim());
|
|
return validatedUrl.origin; // Use origin to ensure clean URL without path
|
|
} catch (e) {
|
|
console.warn(`Invalid PUBLIC_BETTER_AUTH_URL: ${url}, falling back to default`);
|
|
}
|
|
}
|
|
|
|
// Fall back to current origin if running in browser
|
|
if (typeof window !== 'undefined' && window.location?.origin) {
|
|
return window.location.origin;
|
|
}
|
|
|
|
// Default for SSR - always return a valid URL
|
|
return 'http://localhost:4321';
|
|
})(),
|
|
basePath: '/api/auth', // Explicitly set the base path
|
|
plugins: [
|
|
oidcClient(),
|
|
ssoClient(),
|
|
],
|
|
});
|
|
|
|
// Export commonly used methods for convenience
|
|
export const {
|
|
signIn,
|
|
signUp,
|
|
signOut,
|
|
useSession,
|
|
sendVerificationEmail,
|
|
resetPassword,
|
|
requestPasswordReset,
|
|
getSession
|
|
} = authClient;
|
|
|
|
// Export types - directly use the types from better-auth
|
|
export type Session = BetterAuthSession & {
|
|
user: BetterAuthUser & {
|
|
username?: string | null;
|
|
};
|
|
};
|
|
export type AuthUser = BetterAuthUser & {
|
|
username?: string | null;
|
|
};
|