import { apiClient } from './client'; import { parsePlayer, parsePlayerMeta } from '$lib/schemas'; import type { Player, PlayerMeta, TrackPlayerResponse } from '$lib/types'; /** * Player API endpoints */ export const playersAPI = { /** * Get player profile with match history * @param steamId - Steam ID (uint64) * @param beforeTime - Optional Unix timestamp for pagination * @returns Player profile with recent matches */ async getPlayer(steamId: string | number, beforeTime?: number): Promise { const url = beforeTime ? `/player/${steamId}/next/${beforeTime}` : `/player/${steamId}`; const data = await apiClient.get(url); // Validate with Zod schema return parsePlayer(data); }, /** * Get lightweight player metadata * @param steamId - Steam ID * @param limit - Number of recent matches to include (default: 10) * @returns Player metadata */ async getPlayerMeta(steamId: string | number, limit = 10): Promise { const url = `/player/${steamId}/meta/${limit}`; const data = await apiClient.get(url); // Validate with Zod schema return parsePlayerMeta(data); }, /** * Add player to tracking system * @param steamId - Steam ID * @param authCode - Steam authentication code * @returns Success response */ async trackPlayer(steamId: string | number, authCode: string): Promise { const url = `/player/${steamId}/track`; return apiClient.post(url, { auth_code: authCode }); }, /** * Remove player from tracking system * @param steamId - Steam ID * @returns Success response */ async untrackPlayer(steamId: string | number): Promise { const url = `/player/${steamId}/track`; return apiClient.delete(url); }, /** * Search players by name (cancelable) * @param query - Search query * @param limit - Maximum results * @returns Array of player matches */ async searchPlayers(query: string, limit = 10): Promise { const url = `/players/search`; const data = await apiClient.getCancelable(url, 'player-search', { params: { q: query, limit } }); return data; } }; /** * Player API with default export */ export default playersAPI;