import {ADMIN_API_TOKEN, ADMIN_API_URL} from "../Enum/EnvironmentVariable"; import Axios from "axios"; import {GameRoomPolicyTypes} from "_Model/PusherRoom"; export interface AdminApiData { organizationSlug: string worldSlug: string roomSlug: string mapUrlStart: string tags: string[] policy_type: number userUuid: string messages?: unknown[], textures: CharacterTexture[] } export interface MapDetailsData { roomSlug: string, mapUrl: string, policy_type: GameRoomPolicyTypes, tags: string[], } export interface AdminBannedData { is_banned: boolean, message: string } export interface CharacterTexture { id: number, level: number, url: string, rights: string } export interface FetchMemberDataByUuidResponse { uuid: string; tags: string[]; visitCardUrl: string|null; textures: CharacterTexture[]; messages: unknown[]; anonymous?: boolean; } class AdminApi { async fetchMapDetails(organizationSlug: string, worldSlug: string, roomSlug: string|undefined): Promise { if (!ADMIN_API_URL) { return Promise.reject(new Error('No admin backoffice set!')); } const params: { organizationSlug: string, worldSlug: string, roomSlug?: string } = { organizationSlug, worldSlug }; if (roomSlug) { params.roomSlug = roomSlug; } const res = await Axios.get(ADMIN_API_URL + '/api/map', { headers: {"Authorization": `${ADMIN_API_TOKEN}`}, params } ) return res.data; } async fetchMemberDataByUuid(uuid: string, roomId: string): Promise { if (!ADMIN_API_URL) { return Promise.reject(new Error('No admin backoffice set!')); } const res = await Axios.get(ADMIN_API_URL+'/api/room/access', { params: {uuid, roomId}, headers: {"Authorization" : `${ADMIN_API_TOKEN}`} } ) return res.data; } async fetchMemberDataByToken(organizationMemberToken: string): Promise { if (!ADMIN_API_URL) { return Promise.reject(new Error('No admin backoffice set!')); } //todo: this call can fail if the corresponding world is not activated or if the token is invalid. Handle that case. const res = await Axios.get(ADMIN_API_URL+'/api/login-url/'+organizationMemberToken, { headers: {"Authorization" : `${ADMIN_API_TOKEN}`} } ) return res.data; } async fetchCheckUserByToken(organizationMemberToken: string): Promise { if (!ADMIN_API_URL) { return Promise.reject(new Error('No admin backoffice set!')); } //todo: this call can fail if the corresponding world is not activated or if the token is invalid. Handle that case. const res = await Axios.get(ADMIN_API_URL+'/api/check-user/'+organizationMemberToken, { headers: {"Authorization" : `${ADMIN_API_TOKEN}`} } ) return res.data; } reportPlayer(reportedUserUuid: string, reportedUserComment: string, reporterUserUuid: string, reportWorldSlug: string) { return Axios.post(`${ADMIN_API_URL}/api/report`, { reportedUserUuid, reportedUserComment, reporterUserUuid, reportWorldSlug }, { headers: {"Authorization": `${ADMIN_API_TOKEN}`} }); } async verifyBanUser(organizationMemberToken: string, ipAddress: string, organization: string, world: string): Promise { if (!ADMIN_API_URL) { return Promise.reject(new Error('No admin backoffice set!')); } //todo: this call can fail if the corresponding world is not activated or if the token is invalid. Handle that case. return Axios.get(ADMIN_API_URL + '/api/check-moderate-user/'+organization+'/'+world+'?ipAddress='+ipAddress+'&token='+organizationMemberToken, {headers: {"Authorization": `${ADMIN_API_TOKEN}`}} ).then((data) => { return data.data; }); } } export const adminApi = new AdminApi();