63 lines
1.3 KiB
TypeScript
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;
|
|
}
|
|
}
|