2025-06-14 15:36:38 +00:00
|
|
|
import { User, UserManager } from 'oidc-client-ts';
|
|
|
|
|
import { oidcConfig } from './config';
|
2026-02-02 20:08:03 +00:00
|
|
|
import { parseOidcError, type AuthError } from './errors';
|
2025-06-14 15:36:38 +00:00
|
|
|
|
|
|
|
|
const userManager = new UserManager(oidcConfig);
|
|
|
|
|
|
2026-02-02 20:08:03 +00:00
|
|
|
export const login = async (): Promise<void> => {
|
|
|
|
|
try {
|
|
|
|
|
await userManager.signinRedirect();
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error('Login redirect failed:', error);
|
|
|
|
|
throw parseOidcError(error);
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const logout = async (): Promise<void> => {
|
|
|
|
|
try {
|
|
|
|
|
await userManager.signoutRedirect();
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error('Logout redirect failed:', error);
|
|
|
|
|
throw parseOidcError(error);
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const handleCallback = async (): Promise<User> => {
|
|
|
|
|
try {
|
|
|
|
|
const user = await userManager.signinRedirectCallback();
|
|
|
|
|
return user;
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error('Callback handling failed:', error);
|
|
|
|
|
throw parseOidcError(error);
|
|
|
|
|
}
|
|
|
|
|
};
|
2025-06-14 15:36:38 +00:00
|
|
|
|
|
|
|
|
export const getUser = async (): Promise<User | null> => {
|
|
|
|
|
try {
|
|
|
|
|
const user = await userManager.getUser();
|
|
|
|
|
return user;
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error('Error fetching user:', error);
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
};
|
2026-02-02 20:08:03 +00:00
|
|
|
|
|
|
|
|
export type { AuthError };
|