bunr6statapi
Version:
Wrapper for Rainbow Six Siege API
83 lines (70 loc) • 2.54 kB
text/typescript
import { ApiClient } from './apiClient';
import { CheckToken } from './auth';
import { UBI_APPID, UBI_SESSIONID, BASE_UBI_URI, UBI_RANKED_URI_V2 } from '../constants';
export interface UserRank {
casual?: RankStats;
event?: RankStats;
warmup?: RankStats;
standard?: RankStats;
ranked?: RankStats;
}
interface RankStats {
profile_board_id: string;
id: string;
max_rank: number;
max_rank_points: number;
platform_family: string;
rank: number;
rank_points: number;
rank_name: string;
season_id: number;
top_rank_position: number;
deaths: number;
kills: number;
abandons: number;
losses: number;
wins: number;
}
export const GetUserRank = async (userId: string, platform: string): Promise<UserRank> => {
const token = await CheckToken();
const headers = {
Authorization: `ubi_v1 t=${token}`,
'Ubi-AppId': UBI_APPID,
'Ubi-SessionId': UBI_SESSIONID,
'Content-Type': 'application/json',
};
const platformChange = platform === 'uplay' ? 'pc' : 'console';
const URI = BASE_UBI_URI(2) + UBI_RANKED_URI_V2(userId, platformChange);
const response = await ApiClient(URI, headers, 'GET');
const result: UserRank = await extractValues(await response.json());
return result;
};
const extractValues = async (profiles: any): Promise<UserRank> => {
const ranks: UserRank = {};
profiles.platform_families_full_profiles.forEach((event: any) => {
event.board_ids_full_profiles.forEach((profile: any) => {
const boardId: string = profile.board_id;
const fullProfile = profile.full_profiles[0].profile;
const seasonStatistics = profile.full_profiles[0].season_statistics;
const rank: RankStats = {
profile_board_id: boardId,
id: fullProfile.board_id,
max_rank: fullProfile.max_rank,
max_rank_points: fullProfile.max_rank_points,
platform_family: fullProfile.platform_family,
rank: fullProfile.rank,
rank_points: fullProfile.rank_points,
rank_name: fullProfile.rank_name,
season_id: fullProfile.season_id,
top_rank_position: fullProfile.top_rank_position,
deaths: seasonStatistics.deaths,
kills: seasonStatistics.kills,
abandons: seasonStatistics.match_outcomes.abandons,
losses: seasonStatistics.match_outcomes.losses,
wins: seasonStatistics.match_outcomes.wins,
};
(ranks as any)[boardId] = rank;
});
});
return ranks;
};