27 lines
1.1 KiB
TypeScript
27 lines
1.1 KiB
TypeScript
import { publicUserSchema, publicUserListSchema, userSchema } from '../schemas/index';
|
|
import type { SetAvatarBody } from '../schemas/index';
|
|
import type { PublicUser, User } from '../types/index';
|
|
import { compileValidator, parse, requestJson } from './http';
|
|
import type { ApiClientConfig } from './http';
|
|
|
|
const publicUserV = compileValidator<PublicUser>(publicUserSchema);
|
|
const publicUserListV = compileValidator<PublicUser[]>(publicUserListSchema);
|
|
const userV = compileValidator<User>(userSchema);
|
|
|
|
export const searchUsers = async (
|
|
config: ApiClientConfig,
|
|
query: string,
|
|
): Promise<PublicUser[]> =>
|
|
parse(
|
|
publicUserListV,
|
|
await requestJson(config, 'GET', `/users/search?q=${encodeURIComponent(query)}`),
|
|
);
|
|
|
|
export const getUserByUsername = async (
|
|
config: ApiClientConfig,
|
|
username: string,
|
|
): Promise<PublicUser> =>
|
|
parse(publicUserV, await requestJson(config, 'GET', `/users/${encodeURIComponent(username)}`));
|
|
|
|
export const setAvatar = async (config: ApiClientConfig, body: SetAvatarBody): Promise<User> =>
|
|
parse(userV, await requestJson(config, 'POST', '/me/avatar', body));
|