2021-07-07 19:47:00 +01:00

122 lines
2.8 KiB
TypeScript

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<Profile[]> {
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<string> {
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<string> {
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<Tracker & { _key: string }> {
let response = await request(
`/api/profiles?uuid=${uuid}` + (member ? `&member=${member}` : ""),
{
method: "PUT",
...(token ? { headers: { Authorization: token } } : {})
}
);
return response.json();
}