UNPKG

ddnet

Version:

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

240 lines (239 loc) 8.41 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>; }, 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>;