import type { Graph, Tracker } from "../routes/api/_types"; import type { Profile } from "./hypixel"; import { requestWithDefaults } from "./util"; const request = requestWithDefaults(); /** * Login into SBDataTracker backend * @param params Login parameters (no parameters = refresh) * @returns Login details */ export async function postLogin(params?: { username: string; password: string; }): Promise<{ token: string; username: string; expires: number; }> { let url = "/api/login"; if (params) { url += `?username=${encodeURIComponent( params.username )}&password=${encodeURIComponent(params.password)}`; } let response = await request(url, { method: "POST" }); return response.json(); } /** * Logout * @param token Authorization token */ export async function postLogout(token: string) { await request("/api/logout", { method: "POST", headers: { Authorization: token } }); } /** * Get a list of profiles * @param token Authorization token * @returns A list of profiles */ export async function getProfiles( token?: string ): Promise<(Tracker & { profile: string })[]> { let response = await request( "/api/profiles", token ? { headers: { Authorization: token } } : {} ); return response.json(); } /** * Get a list of skyblock profiles by player * @param player Player's UUID * @returns A list of profiles */ export async function getPlayerProfiles(player: string): Promise { let response = await request(`/api/profiles/${player}`); return response.json(); } /** * Get a list of graphs * @param token Authorization token * @returns A list of profiles */ export async function getGraphs( token?: string ): Promise<(Graph & { graph: string })[]> { let response = await request( "/api/graphs", token ? { headers: { Authorization: token } } : {} ); return response.json(); } /** * Get a player username by UUID * @param uuid Player's UUID * @returns Player's username */ export async function getUsername(uuid: string): Promise { let response = await request(`/api/username?uuid=${uuid}`); return response.json(); } /** * Get a player UUID by username * @param username Player's username * @returns Player's UUID */ export async function getUUID(username: string): Promise { let response = await request(`/api/uuid?username=${username}`); return response.json(); } /** * Create a profile * @param token Authorization token * @param uuid Profile UUID * @param member Member to assign the profile to * @returns Tracker information */ export async function putProfiles( token: string | undefined, uuid: string, member?: string ): Promise { let response = await request( `/api/profiles?uuid=${uuid}` + (member ? `&member=${member}` : ""), { method: "PUT", ...(token ? { headers: { Authorization: token } } : {}) } ); return response.json(); }