ddnet
Version:
A typescript npm package for interacting with data from ddnet.org
872 lines (871 loc) • 29.3 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>;
}, "strip", z.ZodTypeAny, {
name: string;
size?: number | undefined;
sha256?: string | undefined;
}, {
name: string;
size?: number | undefined;
sha256?: string | undefined;
}>;
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>;
}, "strip", z.ZodTypeAny, {
name: string;
color?: number | undefined;
}, {
name: string;
color?: number | undefined;
}>>;
marking: z.ZodOptional<z.ZodObject<{
name: z.ZodString;
color: z.ZodOptional<z.ZodNumber>;
}, "strip", z.ZodTypeAny, {
name: string;
color?: number | undefined;
}, {
name: string;
color?: number | undefined;
}>>;
decoration: z.ZodOptional<z.ZodObject<{
name: z.ZodString;
color: z.ZodOptional<z.ZodNumber>;
}, "strip", z.ZodTypeAny, {
name: string;
color?: number | undefined;
}, {
name: string;
color?: number | undefined;
}>>;
hands: z.ZodOptional<z.ZodObject<{
name: z.ZodString;
color: z.ZodOptional<z.ZodNumber>;
}, "strip", z.ZodTypeAny, {
name: string;
color?: number | undefined;
}, {
name: string;
color?: number | undefined;
}>>;
feet: z.ZodOptional<z.ZodObject<{
name: z.ZodString;
color: z.ZodOptional<z.ZodNumber>;
}, "strip", z.ZodTypeAny, {
name: string;
color?: number | undefined;
}, {
name: string;
color?: number | undefined;
}>>;
eyes: z.ZodOptional<z.ZodObject<{
name: z.ZodString;
color: z.ZodOptional<z.ZodNumber>;
}, "strip", z.ZodTypeAny, {
name: string;
color?: number | undefined;
}, {
name: string;
color?: number | undefined;
}>>;
}, "strip", z.ZodTypeAny, {
body?: {
name: string;
color?: number | undefined;
} | undefined;
marking?: {
name: string;
color?: number | undefined;
} | undefined;
decoration?: {
name: string;
color?: number | undefined;
} | undefined;
feet?: {
name: string;
color?: number | undefined;
} | undefined;
eyes?: {
name: string;
color?: number | undefined;
} | undefined;
name?: string | undefined;
color_body?: number | undefined;
color_feet?: number | undefined;
hands?: {
name: string;
color?: number | undefined;
} | undefined;
}, {
body?: {
name: string;
color?: number | undefined;
} | undefined;
marking?: {
name: string;
color?: number | undefined;
} | undefined;
decoration?: {
name: string;
color?: number | undefined;
} | undefined;
feet?: {
name: string;
color?: number | undefined;
} | undefined;
eyes?: {
name: string;
color?: number | undefined;
} | undefined;
name?: string | undefined;
color_body?: number | undefined;
color_feet?: number | undefined;
hands?: {
name: string;
color?: number | undefined;
} | undefined;
}>>;
afk: z.ZodOptional<z.ZodBoolean>;
team: z.ZodOptional<z.ZodNumber>;
}, "strip", z.ZodTypeAny, {
country: number;
name: string;
clan: string;
score: number;
is_player: boolean;
skin?: {
body?: {
name: string;
color?: number | undefined;
} | undefined;
marking?: {
name: string;
color?: number | undefined;
} | undefined;
decoration?: {
name: string;
color?: number | undefined;
} | undefined;
feet?: {
name: string;
color?: number | undefined;
} | undefined;
eyes?: {
name: string;
color?: number | undefined;
} | undefined;
name?: string | undefined;
color_body?: number | undefined;
color_feet?: number | undefined;
hands?: {
name: string;
color?: number | undefined;
} | undefined;
} | undefined;
afk?: boolean | undefined;
team?: number | undefined;
}, {
country: number;
name: string;
clan: string;
score: number;
is_player: boolean;
skin?: {
body?: {
name: string;
color?: number | undefined;
} | undefined;
marking?: {
name: string;
color?: number | undefined;
} | undefined;
decoration?: {
name: string;
color?: number | undefined;
} | undefined;
feet?: {
name: string;
color?: number | undefined;
} | undefined;
eyes?: {
name: string;
color?: number | undefined;
} | undefined;
name?: string | undefined;
color_body?: number | undefined;
color_feet?: number | undefined;
hands?: {
name: string;
color?: number | undefined;
} | undefined;
} | undefined;
afk?: boolean | undefined;
team?: number | undefined;
}>, "many">;
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, "many">;
public_key: z.ZodString;
signature: z.ZodString;
}, "strip", z.ZodTypeAny, {
id: string;
icon: string;
admin: string[];
public_key: string;
signature: string;
}, {
id: string;
icon: string;
admin: string[];
public_key: string;
signature: string;
}>>;
altameda_net: z.ZodOptional<z.ZodBoolean>;
}, "strip", z.ZodTypeAny, {
map: {
name: string;
size?: number | undefined;
sha256?: string | undefined;
};
max_clients: number;
max_players: number;
passworded: boolean;
game_type: string;
name: string;
version: string;
clients: {
country: number;
name: string;
clan: string;
score: number;
is_player: boolean;
skin?: {
body?: {
name: string;
color?: number | undefined;
} | undefined;
marking?: {
name: string;
color?: number | undefined;
} | undefined;
decoration?: {
name: string;
color?: number | undefined;
} | undefined;
feet?: {
name: string;
color?: number | undefined;
} | undefined;
eyes?: {
name: string;
color?: number | undefined;
} | undefined;
name?: string | undefined;
color_body?: number | undefined;
color_feet?: number | undefined;
hands?: {
name: string;
color?: number | undefined;
} | undefined;
} | undefined;
afk?: boolean | undefined;
team?: number | undefined;
}[];
client_score_kind?: string | undefined;
requires_login?: boolean | undefined;
community?: {
id: string;
icon: string;
admin: string[];
public_key: string;
signature: string;
} | undefined;
altameda_net?: boolean | undefined;
}, {
map: {
name: string;
size?: number | undefined;
sha256?: string | undefined;
};
max_clients: number;
max_players: number;
passworded: boolean;
game_type: string;
name: string;
version: string;
clients: {
country: number;
name: string;
clan: string;
score: number;
is_player: boolean;
skin?: {
body?: {
name: string;
color?: number | undefined;
} | undefined;
marking?: {
name: string;
color?: number | undefined;
} | undefined;
decoration?: {
name: string;
color?: number | undefined;
} | undefined;
feet?: {
name: string;
color?: number | undefined;
} | undefined;
eyes?: {
name: string;
color?: number | undefined;
} | undefined;
name?: string | undefined;
color_body?: number | undefined;
color_feet?: number | undefined;
hands?: {
name: string;
color?: number | undefined;
} | undefined;
} | undefined;
afk?: boolean | undefined;
team?: number | undefined;
}[];
client_score_kind?: string | undefined;
requires_login?: boolean | undefined;
community?: {
id: string;
icon: string;
admin: string[];
public_key: string;
signature: string;
} | undefined;
altameda_net?: boolean | undefined;
}>;
/**
* 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, "many">;
location: z.ZodOptional<z.ZodString>;
info: z.ZodUnion<[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>;
}, "strip", z.ZodTypeAny, {
name: string;
size?: number | undefined;
sha256?: string | undefined;
}, {
name: string;
size?: number | undefined;
sha256?: string | undefined;
}>;
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>;
}, "strip", z.ZodTypeAny, {
name: string;
color?: number | undefined;
}, {
name: string;
color?: number | undefined;
}>>;
marking: z.ZodOptional<z.ZodObject<{
name: z.ZodString;
color: z.ZodOptional<z.ZodNumber>;
}, "strip", z.ZodTypeAny, {
name: string;
color?: number | undefined;
}, {
name: string;
color?: number | undefined;
}>>;
decoration: z.ZodOptional<z.ZodObject<{
name: z.ZodString;
color: z.ZodOptional<z.ZodNumber>;
}, "strip", z.ZodTypeAny, {
name: string;
color?: number | undefined;
}, {
name: string;
color?: number | undefined;
}>>;
hands: z.ZodOptional<z.ZodObject<{
name: z.ZodString;
color: z.ZodOptional<z.ZodNumber>;
}, "strip", z.ZodTypeAny, {
name: string;
color?: number | undefined;
}, {
name: string;
color?: number | undefined;
}>>;
feet: z.ZodOptional<z.ZodObject<{
name: z.ZodString;
color: z.ZodOptional<z.ZodNumber>;
}, "strip", z.ZodTypeAny, {
name: string;
color?: number | undefined;
}, {
name: string;
color?: number | undefined;
}>>;
eyes: z.ZodOptional<z.ZodObject<{
name: z.ZodString;
color: z.ZodOptional<z.ZodNumber>;
}, "strip", z.ZodTypeAny, {
name: string;
color?: number | undefined;
}, {
name: string;
color?: number | undefined;
}>>;
}, "strip", z.ZodTypeAny, {
body?: {
name: string;
color?: number | undefined;
} | undefined;
marking?: {
name: string;
color?: number | undefined;
} | undefined;
decoration?: {
name: string;
color?: number | undefined;
} | undefined;
feet?: {
name: string;
color?: number | undefined;
} | undefined;
eyes?: {
name: string;
color?: number | undefined;
} | undefined;
name?: string | undefined;
color_body?: number | undefined;
color_feet?: number | undefined;
hands?: {
name: string;
color?: number | undefined;
} | undefined;
}, {
body?: {
name: string;
color?: number | undefined;
} | undefined;
marking?: {
name: string;
color?: number | undefined;
} | undefined;
decoration?: {
name: string;
color?: number | undefined;
} | undefined;
feet?: {
name: string;
color?: number | undefined;
} | undefined;
eyes?: {
name: string;
color?: number | undefined;
} | undefined;
name?: string | undefined;
color_body?: number | undefined;
color_feet?: number | undefined;
hands?: {
name: string;
color?: number | undefined;
} | undefined;
}>>;
afk: z.ZodOptional<z.ZodBoolean>;
team: z.ZodOptional<z.ZodNumber>;
}, "strip", z.ZodTypeAny, {
country: number;
name: string;
clan: string;
score: number;
is_player: boolean;
skin?: {
body?: {
name: string;
color?: number | undefined;
} | undefined;
marking?: {
name: string;
color?: number | undefined;
} | undefined;
decoration?: {
name: string;
color?: number | undefined;
} | undefined;
feet?: {
name: string;
color?: number | undefined;
} | undefined;
eyes?: {
name: string;
color?: number | undefined;
} | undefined;
name?: string | undefined;
color_body?: number | undefined;
color_feet?: number | undefined;
hands?: {
name: string;
color?: number | undefined;
} | undefined;
} | undefined;
afk?: boolean | undefined;
team?: number | undefined;
}, {
country: number;
name: string;
clan: string;
score: number;
is_player: boolean;
skin?: {
body?: {
name: string;
color?: number | undefined;
} | undefined;
marking?: {
name: string;
color?: number | undefined;
} | undefined;
decoration?: {
name: string;
color?: number | undefined;
} | undefined;
feet?: {
name: string;
color?: number | undefined;
} | undefined;
eyes?: {
name: string;
color?: number | undefined;
} | undefined;
name?: string | undefined;
color_body?: number | undefined;
color_feet?: number | undefined;
hands?: {
name: string;
color?: number | undefined;
} | undefined;
} | undefined;
afk?: boolean | undefined;
team?: number | undefined;
}>, "many">;
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, "many">;
public_key: z.ZodString;
signature: z.ZodString;
}, "strip", z.ZodTypeAny, {
id: string;
icon: string;
admin: string[];
public_key: string;
signature: string;
}, {
id: string;
icon: string;
admin: string[];
public_key: string;
signature: string;
}>>;
altameda_net: z.ZodOptional<z.ZodBoolean>;
}, "strip", z.ZodTypeAny, {
map: {
name: string;
size?: number | undefined;
sha256?: string | undefined;
};
max_clients: number;
max_players: number;
passworded: boolean;
game_type: string;
name: string;
version: string;
clients: {
country: number;
name: string;
clan: string;
score: number;
is_player: boolean;
skin?: {
body?: {
name: string;
color?: number | undefined;
} | undefined;
marking?: {
name: string;
color?: number | undefined;
} | undefined;
decoration?: {
name: string;
color?: number | undefined;
} | undefined;
feet?: {
name: string;
color?: number | undefined;
} | undefined;
eyes?: {
name: string;
color?: number | undefined;
} | undefined;
name?: string | undefined;
color_body?: number | undefined;
color_feet?: number | undefined;
hands?: {
name: string;
color?: number | undefined;
} | undefined;
} | undefined;
afk?: boolean | undefined;
team?: number | undefined;
}[];
client_score_kind?: string | undefined;
requires_login?: boolean | undefined;
community?: {
id: string;
icon: string;
admin: string[];
public_key: string;
signature: string;
} | undefined;
altameda_net?: boolean | undefined;
}, {
map: {
name: string;
size?: number | undefined;
sha256?: string | undefined;
};
max_clients: number;
max_players: number;
passworded: boolean;
game_type: string;
name: string;
version: string;
clients: {
country: number;
name: string;
clan: string;
score: number;
is_player: boolean;
skin?: {
body?: {
name: string;
color?: number | undefined;
} | undefined;
marking?: {
name: string;
color?: number | undefined;
} | undefined;
decoration?: {
name: string;
color?: number | undefined;
} | undefined;
feet?: {
name: string;
color?: number | undefined;
} | undefined;
eyes?: {
name: string;
color?: number | undefined;
} | undefined;
name?: string | undefined;
color_body?: number | undefined;
color_feet?: number | undefined;
hands?: {
name: string;
color?: number | undefined;
} | undefined;
} | undefined;
afk?: boolean | undefined;
team?: number | undefined;
}[];
client_score_kind?: string | undefined;
requires_login?: boolean | undefined;
community?: {
id: string;
icon: string;
admin: string[];
public_key: string;
signature: string;
} | undefined;
altameda_net?: boolean | undefined;
}>, z.ZodUnknown]>;
}, "strip", z.ZodTypeAny, {
addresses: string[];
location?: string | undefined;
info?: unknown;
}, {
addresses: string[];
location?: string | undefined;
info?: unknown;
}>, "many">;
}, "strip", z.ZodTypeAny, {
servers: {
addresses: string[];
location?: string | undefined;
info?: unknown;
}[];
}, {
servers: {
addresses: string[];
location?: string | undefined;
info?: unknown;
}[];
}>;
/**
* 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>;