import { EventEmitter } from 'events'; import type { LavalinkManager } from './manager'; import type { NodeOptions, NodeStats, PlayerUpdatePayload, SearchResult, Track, SponsorBlockCategory } from './types'; /** * Represents a single Lavalink server connection. * * Handles: * - WebSocket lifecycle (connect / reconnect / destroy) * - REST API calls to Lavalink v4 (`/v4/*`) * - Routing incoming ops/events to the manager and players * - Load-penalty scoring for multi-node load balancing */ export declare class LavalinkNode extends EventEmitter { readonly manager: LavalinkManager; readonly options: Required; /** Session ID assigned by Lavalink on `ready`. Used for REST calls and resuming. */ sessionId: string | null; stats: NodeStats; connected: boolean; private _ws; private _reconnectAttempts; private _reconnectTimeout; constructor(manager: LavalinkManager, options: NodeOptions); get identifier(): string; /** Base HTTP URL for REST calls */ get baseUrl(): string; /** WebSocket endpoint */ get wsUrl(): string; /** * Load-balancing penalty score — lower is better. * Accounts for CPU load, frame deficits/nulls, and current player count. */ get penalties(): number; connect(): void; /** Disconnect and stop reconnecting */ destroy(code?: number): void; /** Load tracks or search by identifier / URL */ loadTracks(identifier: string): Promise; /** Decode a single Base64-encoded track string into a Track object */ decodeTrack(encoded: string): Promise; /** Decode multiple encoded track strings at once */ decodeTracks(encodedTracks: string[]): Promise; /** Get all players for the current session from Lavalink's perspective */ getPlayers(): Promise; /** * Create or update a player on Lavalink. * @param noReplace If true, don't replace the currently playing track. */ updatePlayer(guildId: string, payload: PlayerUpdatePayload, noReplace?: boolean): Promise; /** Destroy a player on Lavalink */ destroyPlayer(guildId: string): Promise; /** Configure Lavalink-side session resuming for this session */ updateSession(resuming: boolean, timeout?: number): Promise; /** * Enable SponsorBlock segment skipping for a player. * Requires the Lavalink SponsorBlock plugin to be installed server-side. */ setSponsorBlock(guildId: string, categories: SponsorBlockCategory[]): Promise; /** * Disable all SponsorBlock segment skipping for a player. */ clearSponsorBlock(guildId: string): Promise; private _request; private _onOpen; private _onMessage; private _onClose; private _onError; private _scheduleReconnect; private _parseLoadResult; } //# sourceMappingURL=node.d.ts.map