2025-10-12 15:05:58 +00:00
|
|
|
import { BlitzStats } from "../statistics";
|
|
|
|
|
import { FetchBlitzParams, fetchBlitz } from "./fetchBlitz";
|
|
|
|
|
import { normalizeIds } from "./normalizeIds";
|
|
|
|
|
import { Region } from "./regions";
|
2023-10-12 13:00:33 -05:00
|
|
|
|
2024-03-24 22:06:48 -05:00
|
|
|
export interface SupplementaryStats {
|
2023-10-12 13:00:33 -05:00
|
|
|
WN8?: number;
|
|
|
|
|
tier?: number;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export interface ClanStats {
|
|
|
|
|
spotted: number;
|
|
|
|
|
max_frags_tank_id: number;
|
|
|
|
|
hits: number;
|
|
|
|
|
frags: number;
|
|
|
|
|
max_xp: number;
|
|
|
|
|
max_xp_tank_id: number;
|
|
|
|
|
wins: number;
|
|
|
|
|
losses: number;
|
|
|
|
|
capture_points: number;
|
|
|
|
|
battles: number;
|
|
|
|
|
damage_dealt: number;
|
|
|
|
|
damage_received: number;
|
|
|
|
|
max_frags: number;
|
|
|
|
|
shots: number;
|
|
|
|
|
frags8p: number;
|
|
|
|
|
xp: number;
|
|
|
|
|
win_and_survived: number;
|
|
|
|
|
survived_battles: number;
|
|
|
|
|
dropped_capture_points: number;
|
|
|
|
|
}
|
|
|
|
|
|
2024-03-20 16:58:43 -05:00
|
|
|
export interface RatingStats {
|
2024-03-19 18:21:56 -05:00
|
|
|
spotted: number;
|
|
|
|
|
calibration_battles_left: number;
|
|
|
|
|
hits: number;
|
|
|
|
|
frags: number;
|
|
|
|
|
recalibration_start_time: number;
|
|
|
|
|
mm_rating: number;
|
|
|
|
|
wins: number;
|
|
|
|
|
losses: number;
|
|
|
|
|
is_recalibration: boolean;
|
|
|
|
|
capture_points: number;
|
|
|
|
|
battles: number;
|
|
|
|
|
damage_dealt: number;
|
|
|
|
|
damage_received: number;
|
|
|
|
|
shots: number;
|
|
|
|
|
frags8p: number;
|
|
|
|
|
xp: number;
|
|
|
|
|
win_and_survived: number;
|
|
|
|
|
survived_battles: number;
|
|
|
|
|
dropped_capture_points: number;
|
|
|
|
|
}
|
|
|
|
|
|
2024-05-01 17:20:08 -05:00
|
|
|
export interface IndividualAccountInfo {
|
2023-10-12 13:00:33 -05:00
|
|
|
account_id: number;
|
|
|
|
|
created_at: number;
|
|
|
|
|
updated_at: number;
|
|
|
|
|
private: null;
|
|
|
|
|
last_battle_time: number;
|
|
|
|
|
nickname: string;
|
|
|
|
|
statistics: {
|
2024-08-10 13:29:10 -05:00
|
|
|
all: BlitzStats;
|
2023-10-12 13:00:33 -05:00
|
|
|
clan: ClanStats;
|
2024-03-19 18:21:56 -05:00
|
|
|
rating?: RatingStats;
|
2023-10-12 13:00:33 -05:00
|
|
|
frags: null | number;
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export interface AccountInfo {
|
|
|
|
|
[accountId: number]: IndividualAccountInfo;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export async function getAccountInfo<
|
|
|
|
|
Ids extends number | number[],
|
|
|
|
|
ReturnType = Ids extends number
|
|
|
|
|
? IndividualAccountInfo
|
|
|
|
|
: IndividualAccountInfo[],
|
2024-04-28 19:16:08 -05:00
|
|
|
>(
|
|
|
|
|
region: Region,
|
|
|
|
|
ids: Ids,
|
|
|
|
|
extra: string[] = [],
|
2025-10-12 15:05:58 +00:00
|
|
|
params: FetchBlitzParams = {}
|
2024-04-28 19:16:08 -05:00
|
|
|
) {
|
2025-10-12 15:05:58 +00:00
|
|
|
const object = await fetchBlitz<AccountInfo>(region, "account/info", {
|
2024-04-15 13:19:25 -05:00
|
|
|
account_id: normalizeIds(ids),
|
2025-10-12 15:05:58 +00:00
|
|
|
extra: extra.length === 0 ? undefined : extra.join(","),
|
2024-04-28 19:16:08 -05:00
|
|
|
...params,
|
2024-04-15 13:19:25 -05:00
|
|
|
});
|
2023-10-12 13:00:33 -05:00
|
|
|
|
2025-10-12 15:05:58 +00:00
|
|
|
if (typeof ids === "number") {
|
2023-10-12 13:00:33 -05:00
|
|
|
return object[ids as number] as ReturnType;
|
|
|
|
|
} else {
|
|
|
|
|
return ids.map((id) => object[id]) as ReturnType;
|
|
|
|
|
}
|
|
|
|
|
}
|