UNPKG

ddnet

Version:

A typescript npm package for interacting with data from ddnet.org

872 lines (871 loc) 29.3 kB
/** * 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>;