scripts/src/lib/client.ts

63 lines
1.3 KiB
TypeScript

import axios, { AxiosInstance } from 'axios';
const DEFAULT_TIMEOUT = 10000;
const X_TOTAL_COUNT_HEADER = 'X-Total-Count';
export type Version = {
code: string;
host: string;
name: string;
timezone: string;
};
export type Player = {
id: number;
bestRank: number;
bestRankAt: string;
mostPoints: number;
mostPointsAt: string;
mostVillages: number;
mostVillagesAt: string;
lastActivityAt: string;
createdAt: string;
};
export type ListResult<T> = {
data: T[];
total: number;
};
export type TWHelpClientOptions = {
timeout?: number;
};
export class TWHelpClient {
client: AxiosInstance;
constructor(url: string, opts?: TWHelpClientOptions) {
this.client = axios.create({
baseURL: url,
timeout: opts?.timeout ?? DEFAULT_TIMEOUT,
});
}
public async versions(): Promise<ListResult<Version>> {
const resp = await this.client.get('/api/v1/versions');
return {
data: resp.data.data,
total: parseInt(resp.headers[X_TOTAL_COUNT_HEADER] ?? '0'),
};
}
public async player(
version: string,
server: string,
id: number
): Promise<Player> {
const resp = await this.client.get(
`/api/v1/versions/${version}/servers/${server}/players/${id}`
);
return resp.data.data;
}
}