RESTfulMC/Lib/src/lib/restfulmc.ts

100 lines
2.8 KiB
TypeScript
Raw Normal View History

2024-04-14 14:35:55 -04:00
import { ErrorResponse } from "../types/generic";
import type { CachedPlayer } from "../types/player";
import { Platform } from "../types/server";
import { CachedBedrockMinecraftServer } from "../types/server/bedrock-server";
import { CachedJavaMinecraftServer } from "../types/server/java-server";
2024-04-14 13:34:34 -04:00
2024-04-14 14:03:02 -04:00
const ENDPOINT = "https://mc.rainnny.club"; // The API endpoint to use
2024-04-14 13:34:34 -04:00
/**
* Get a player by their username or UUID.
*
* @param query the query to search for the player by
* @returns the promised player
*/
export const getPlayer = (query: string): Promise<CachedPlayer> => {
2024-04-14 14:03:02 -04:00
return new Promise(async (resolve, reject) => {
const response: Response = await fetch(`${ENDPOINT}/player/${query}`); // Request the player
2024-04-14 14:35:55 -04:00
const json: any = await response.json();
// Resolve the player
if (response.ok) {
resolve(json as CachedPlayer);
} else {
reject(json as ErrorResponse); // The request failed
}
});
};
/**
* Get a Minecraft server by its platform and hostname.
*
* @param platform the platform of the server
* @param hostname the hostname of the server
* @returns the promised server
*/
export const getMinecraftServer = (
platform: Platform,
hostname: string
): Promise<CachedJavaMinecraftServer | CachedBedrockMinecraftServer> => {
return new Promise(async (resolve, reject) => {
const response: Response = await fetch(
`${ENDPOINT}/server/${platform}/${hostname}`
); // Request the server
const json: any = await response.json();
// Resolve the server
if (response.ok) {
resolve(
platform === "java"
? (json as CachedJavaMinecraftServer)
: (json as CachedBedrockMinecraftServer)
);
2024-04-14 14:35:55 -04:00
} else {
reject(json as ErrorResponse); // The request failed
}
2024-04-14 13:34:34 -04:00
});
};
2024-04-14 15:56:45 -04:00
/**
* Check if the server with the
* given hostname is blocked by Mojang.
*
* @param hostname the server hostname to check
* @returns the promised blocked status
*/
export const isMojangBlocked = (hostname: string): Promise<boolean> => {
return new Promise(async (resolve, reject) => {
const response: Response = await fetch(
`${ENDPOINT}/server/blocked/${hostname}`
2024-04-14 16:06:42 -04:00
); // Request the server's blocked status
2024-04-14 15:56:45 -04:00
const json: any = await response.json();
// Resolve the blocked status
if (response.ok) {
resolve(json.blocked as boolean);
} else {
reject(json as ErrorResponse); // The request failed
}
});
};
2024-04-14 16:06:42 -04:00
/**
* Get the status of Mojang servers.
*
* @returns the promised status
*/
export const getMojangServerStatus = (): Promise<MojangServerStatus> => {
return new Promise(async (resolve, reject) => {
const response: Response = await fetch(`${ENDPOINT}/mojang/status`); // Request the statuses
const json: any = await response.json();
// Resolve the blocked status
if (response.ok) {
resolve(json as MojangServerStatus);
} else {
reject(json as ErrorResponse); // The request failed
}
});
};