ddnet
Version:
A typescript npm package for interacting with data from ddnet.org
240 lines (239 loc) • 8.41 kB
TypeScript
/**
* Generated using the help of https://quicktype.io/
*
* I did not dive into this because the master server is written in rust, and I don't know rust.
* Besides types, this is (mostly) undocumented and I'm not sure how correct are the types.
*
* @module ddnet/master
* @packageDocumentation
*/
import { z } from 'zod';
import { Player } from './DDNet.js';
import { DDNetError } from './util.js';
import { TeeSkinRenderOptions } from './classes/skins/TeeSkinUtils.js';
/**
* Zod schema for raw master server info data.
*
* @remarks
* Translated from types generated by quicktype.
*/
export declare const _Schema_MasterSrv_Info: z.ZodObject<{
max_clients: z.ZodNumber;
max_players: z.ZodNumber;
passworded: z.ZodBoolean;
game_type: z.ZodString;
name: z.ZodString;
map: z.ZodObject<{
name: z.ZodString;
sha256: z.ZodOptional<z.ZodString>;
size: z.ZodOptional<z.ZodNumber>;
}, z.core.$strip>;
version: z.ZodString;
clients: z.ZodArray<z.ZodObject<{
name: z.ZodString;
clan: z.ZodString;
country: z.ZodNumber;
score: z.ZodNumber;
is_player: z.ZodBoolean;
skin: z.ZodOptional<z.ZodObject<{
name: z.ZodOptional<z.ZodString>;
color_body: z.ZodOptional<z.ZodNumber>;
color_feet: z.ZodOptional<z.ZodNumber>;
body: z.ZodOptional<z.ZodObject<{
name: z.ZodString;
color: z.ZodOptional<z.ZodNumber>;
}, z.core.$strip>>;
marking: z.ZodOptional<z.ZodObject<{
name: z.ZodString;
color: z.ZodOptional<z.ZodNumber>;
}, z.core.$strip>>;
decoration: z.ZodOptional<z.ZodObject<{
name: z.ZodString;
color: z.ZodOptional<z.ZodNumber>;
}, z.core.$strip>>;
hands: z.ZodOptional<z.ZodObject<{
name: z.ZodString;
color: z.ZodOptional<z.ZodNumber>;
}, z.core.$strip>>;
feet: z.ZodOptional<z.ZodObject<{
name: z.ZodString;
color: z.ZodOptional<z.ZodNumber>;
}, z.core.$strip>>;
eyes: z.ZodOptional<z.ZodObject<{
name: z.ZodString;
color: z.ZodOptional<z.ZodNumber>;
}, z.core.$strip>>;
}, z.core.$strip>>;
afk: z.ZodOptional<z.ZodBoolean>;
team: z.ZodOptional<z.ZodNumber>;
}, z.core.$strip>>;
client_score_kind: z.ZodOptional<z.ZodString>;
requires_login: z.ZodOptional<z.ZodBoolean>;
community: z.ZodOptional<z.ZodObject<{
id: z.ZodString;
icon: z.ZodString;
admin: z.ZodArray<z.ZodString>;
public_key: z.ZodString;
signature: z.ZodString;
}, z.core.$strip>>;
altameda_net: z.ZodOptional<z.ZodBoolean>;
}, z.core.$strip>;
/**
* Inferred type of master server info data using the zod schema.
*/
export type MasterServerInfoData = z.infer<typeof _Schema_MasterSrv_Info>;
/**
* Helper function to distinguish between "official" server info data and others.
*/
export declare function isMasterServerInfoData(
/**
* The data to check.
*/
data: unknown): data is MasterServerInfoData;
/**
* Zod schema for raw master server data.
*
* @remarks
* Translated from types generated by quicktype.
*/
export declare const _Schema_MasterSrv: z.ZodObject<{
servers: z.ZodArray<z.ZodObject<{
addresses: z.ZodArray<z.ZodString>;
location: z.ZodOptional<z.ZodString>;
info: z.ZodUnion<readonly [z.ZodObject<{
max_clients: z.ZodNumber;
max_players: z.ZodNumber;
passworded: z.ZodBoolean;
game_type: z.ZodString;
name: z.ZodString;
map: z.ZodObject<{
name: z.ZodString;
sha256: z.ZodOptional<z.ZodString>;
size: z.ZodOptional<z.ZodNumber>;
}, z.core.$strip>;
version: z.ZodString;
clients: z.ZodArray<z.ZodObject<{
name: z.ZodString;
clan: z.ZodString;
country: z.ZodNumber;
score: z.ZodNumber;
is_player: z.ZodBoolean;
skin: z.ZodOptional<z.ZodObject<{
name: z.ZodOptional<z.ZodString>;
color_body: z.ZodOptional<z.ZodNumber>;
color_feet: z.ZodOptional<z.ZodNumber>;
body: z.ZodOptional<z.ZodObject<{
name: z.ZodString;
color: z.ZodOptional<z.ZodNumber>;
}, z.core.$strip>>;
marking: z.ZodOptional<z.ZodObject<{
name: z.ZodString;
color: z.ZodOptional<z.ZodNumber>;
}, z.core.$strip>>;
decoration: z.ZodOptional<z.ZodObject<{
name: z.ZodString;
color: z.ZodOptional<z.ZodNumber>;
}, z.core.$strip>>;
hands: z.ZodOptional<z.ZodObject<{
name: z.ZodString;
color: z.ZodOptional<z.ZodNumber>;
}, z.core.$strip>>;
feet: z.ZodOptional<z.ZodObject<{
name: z.ZodString;
color: z.ZodOptional<z.ZodNumber>;
}, z.core.$strip>>;
eyes: z.ZodOptional<z.ZodObject<{
name: z.ZodString;
color: z.ZodOptional<z.ZodNumber>;
}, z.core.$strip>>;
}, z.core.$strip>>;
afk: z.ZodOptional<z.ZodBoolean>;
team: z.ZodOptional<z.ZodNumber>;
}, z.core.$strip>>;
client_score_kind: z.ZodOptional<z.ZodString>;
requires_login: z.ZodOptional<z.ZodBoolean>;
community: z.ZodOptional<z.ZodObject<{
id: z.ZodString;
icon: z.ZodString;
admin: z.ZodArray<z.ZodString>;
public_key: z.ZodString;
signature: z.ZodString;
}, z.core.$strip>>;
altameda_net: z.ZodOptional<z.ZodBoolean>;
}, z.core.$strip>, z.ZodUnknown]>;
}, z.core.$strip>>;
}, z.core.$strip>;
/**
* Inferred type of master server data using the zod schema.
*/
export type MasterServerData = z.infer<typeof _Schema_MasterSrv>;
/**
* Makes a request to the master server.
*
* @see
* https://github.com/ddnet/ddnet/tree/a00d6a311971cafe96f2ec7baf9637a9c5989be4/src/mastersrv
*
*
* https://master1.ddnet.org/ddnet/15/servers.json
*/
export declare function makeMasterRequest(
/**
* Master server url to use.
*
* @default "https://master1.ddnet.org/ddnet/15/servers.json"
*/
masterSrv?: string): Promise<object | DDNetError>;
/**
* Makes a request to the master server using {@link makeMasterRequest} and parses the data.
*/
export declare function getMasterSrvData(
/**
* Master server url to use.
*
* @default "https://master1.ddnet.org/ddnet/15/servers.json"
*/
masterSrv?: string): Promise<MasterServerData>;
/**
* Represents a client on found on a server reported by the master.
*/
export type MasterServerClient = MasterServerInfoData['clients'][number];
/**
* Represents a player found on the master server.
*/
export interface MasterSrvFoundPlayer {
name: string;
clan: string;
self: MasterServerClient;
server: {
name: string;
addresses: string[];
self: MasterServerData['servers'][number];
};
toPlayer: () => Promise<Player>;
renderSkin: (renderOpts?: Omit<TeeSkinRenderOptions, 'customColors'>) => Promise<Buffer>;
}
/**
* Finds a player on the master server by their name or clan.
*
* @example
* ```ts
* const players = await findPlayer('nameless tee');
*
* if (players === null) {
* console.log('Player not found.');
* } else {
* console.log(`Found ${players.length} player${players.length > 1 ? 's' : ''}:\n${players.map(p => `${p.server.name} | ${p.server.addresses[0].split('//')[1]} | ${p.name} [${p.clan}]`).join('\n')}`);
* }
* ```
*/
export declare function findPlayer(
/**
* The value for search for.
*/
value: string,
/**
* The kind of search to use.
*
* @default "name"
*/
kind?: 'name' | 'clan'): Promise<MasterSrvFoundPlayer[] | null>;