Messenger/packages/core/src/api/auth.ts
Заид Омар Медхат | Zaid Omar Medhat 96d496bf26 Realtime connection
2026-07-10 15:04:36 +05:00

53 lines
2.4 KiB
TypeScript

import {
authResultSchema,
userSchema,
publicUserSchema,
sessionListSchema,
centrifugoTokenSchema,
} from '../schemas/index';
import type { RegisterBody, LoginBody, UpdateMeBody } from '../schemas/index';
import type { AuthResult, CentrifugoToken, Session, User, PublicUser } from '../types/index';
import { compileValidator, parse, requestJson } from './http';
import type { ApiClientConfig } from './http';
const authResultV = compileValidator<AuthResult>(authResultSchema);
const userV = compileValidator<User>(userSchema);
const publicUserV = compileValidator<PublicUser>(publicUserSchema);
const sessionsV = compileValidator<Session[]>(sessionListSchema);
const centrifugoTokenV = compileValidator<CentrifugoToken>(centrifugoTokenSchema);
export const register = async (config: ApiClientConfig, body: RegisterBody): Promise<AuthResult> =>
parse(authResultV, await requestJson(config, 'POST', '/auth/register', body));
export const login = async (config: ApiClientConfig, body: LoginBody): Promise<AuthResult> =>
parse(authResultV, await requestJson(config, 'POST', '/auth/login', body));
// Uses the httpOnly refresh cookie — no body.
export const refresh = async (config: ApiClientConfig): Promise<AuthResult> =>
parse(authResultV, await requestJson(config, 'POST', '/auth/refresh'));
export const logout = async (config: ApiClientConfig): Promise<void> => {
await requestJson(config, 'POST', '/auth/logout');
};
export const logoutAll = async (config: ApiClientConfig): Promise<void> => {
await requestJson(config, 'POST', '/auth/logout-all');
};
export const getMe = async (config: ApiClientConfig): Promise<User> =>
parse(userV, await requestJson(config, 'GET', '/me'));
export const updateMe = async (config: ApiClientConfig, body: UpdateMeBody): Promise<User> =>
parse(userV, await requestJson(config, 'PATCH', '/me', body));
export const getPublicProfile = async (
config: ApiClientConfig,
username: string,
): Promise<PublicUser> =>
parse(publicUserV, await requestJson(config, 'GET', `/users/${encodeURIComponent(username)}`));
export const listSessions = async (config: ApiClientConfig): Promise<Session[]> =>
parse(sessionsV, await requestJson(config, 'GET', '/auth/sessions'));
export const getCentrifugoToken = async (config: ApiClientConfig): Promise<CentrifugoToken> =>
parse(centrifugoTokenV, await requestJson(config, 'POST', '/auth/centrifugo-token'));