aqualink 2.11.10 → 2.11.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/index.d.ts CHANGED
@@ -5,25 +5,53 @@ declare module "aqualink" {
5
5
  export class Aqua extends EventEmitter {
6
6
  constructor(client: any, nodes: NodeOptions[], options?: AquaOptions);
7
7
 
8
- // Additional properties found in implementation
9
- plugins: Plugin[];
10
- players: Map<string, Player>;
8
+ // Core Properties
9
+ client: any;
10
+ nodes: NodeOptions[];
11
11
  nodeMap: Map<string, Node>;
12
+ players: Map<string, Player>;
13
+ clientId: string | null;
14
+ initiated: boolean;
15
+ version: string;
16
+ options: AquaOptions;
17
+ failoverOptions: FailoverOptions;
18
+
19
+ // Configuration Properties
20
+ shouldDeleteMessage: boolean;
21
+ defaultSearchPlatform: SearchSource;
22
+ leaveOnEnd: boolean;
23
+ restVersion: RestVersion;
24
+ plugins: Plugin[];
25
+ autoResume: boolean;
26
+ infiniteReconnects: boolean;
27
+ urlFilteringEnabled?: boolean;
28
+ restrictedDomains: string[];
29
+ allowedDomains: string[];
30
+ loadBalancer: LoadBalancerStrategy;
31
+ send: (payload: any) => void;
32
+
33
+ // Internal State Management
12
34
  _nodeStates: Map<string, { connected: boolean; failoverInProgress: boolean }>;
13
35
  _failoverQueue: Map<string, number>;
14
36
  _lastFailoverAttempt: Map<string, number>;
15
- _brokenPlayers: Map<string, any>;
37
+ _brokenPlayers: Map<string, BrokenPlayerState>;
16
38
  _rebuildLocks: Set<string>;
17
39
  _leastUsedNodesCache: Node[] | null;
18
40
  _leastUsedNodesCacheTime: number;
19
41
  _nodeLoadCache: Map<string, number>;
20
42
  _nodeLoadCacheTime: Map<string, number>;
43
+ _cleanupTimer: NodeJS.Timer | null;
44
+ _onNodeConnect?: (node: Node) => void;
45
+ _onNodeDisconnect?: (node: Node) => void;
21
46
 
47
+ // Getters
48
+ get leastUsedNodes(): Node[];
22
49
 
50
+ // Core Methods
23
51
  init(clientId: string): Promise<Aqua>;
24
52
  createNode(options: NodeOptions): Promise<Node>;
25
53
  destroyNode(identifier: string): void;
26
- updateVoiceState(data: VoiceStateUpdate): void;
54
+ updateVoiceState(data: VoiceStateUpdate | VoiceServerUpdate): void;
27
55
  fetchRegion(region: string): Node[];
28
56
  createConnection(options: ConnectionOptions): Player;
29
57
  createPlayer(node: Node, options: PlayerOptions): Player;
@@ -32,12 +60,52 @@ declare module "aqualink" {
32
60
  get(guildId: string): Player;
33
61
  search(query: string, requester: any, source?: SearchSource): Promise<Track[] | null>;
34
62
 
63
+ // Save/Load Methods
64
+ savePlayer(filePath?: string): Promise<void>;
65
+ loadPlayers(filePath?: string): Promise<void>;
35
66
 
36
- // Missing public methods
67
+ // Failover and Migration Methods
68
+ handleNodeFailover(failedNode: Node): Promise<void>;
69
+
70
+ // Utility Methods
71
+ destroy(): Promise<void>;
72
+
73
+ // Internal Methods
74
+ _invalidateCache(): void;
75
+ _getCachedNodeLoad(node: Node): number;
76
+ _calculateNodeLoad(node: Node): number;
77
+ _createNode(options: NodeOptions): Promise<Node>;
78
+ _destroyNode(identifier: string): void;
79
+ _cleanupNode(nodeId: string): void;
80
+ _storeBrokenPlayers(node: Node): void;
81
+ _rebuildBrokenPlayers(node: Node): Promise<void>;
82
+ _rebuildPlayer(brokenState: BrokenPlayerState, targetNode: Node): Promise<Player>;
83
+ _migratePlayersOptimized(players: Player[], availableNodes: Node[]): Promise<MigrationResult[]>;
84
+ _migratePlayer(player: Player, pickNode: () => Node): Promise<Player>;
85
+ _capturePlayerState(player: Player): PlayerState | null;
86
+ _createPlayerOnNode(targetNode: Node, playerState: PlayerState): Promise<Player>;
87
+ _restorePlayerState(newPlayer: Player, playerState: PlayerState): Promise<void>;
88
+ _getRequestNode(nodes?: string | Node | Node[]): Node;
89
+ _chooseLeastBusyNode(nodes: Node[]): Node | null;
90
+ _constructResponse(response: any, requester: any, requestNode: Node): ResolveResponse;
91
+ _resolveSearchPlatform(source: string): SearchSource;
92
+ _getAvailableNodes(excludeNode?: Node): Node[];
93
+ _performCleanup(): void;
94
+ _handlePlayerDestroy(player: Player): void;
95
+ _waitForFirstNode(timeout?: number): Promise<void>;
96
+ _restorePlayer(data: SavedPlayerData): Promise<void>;
97
+ _parseRequester(requesterString: string | null): any;
98
+ _loadPlugins(): Promise<void>;
99
+ _createDefaultSend(): (packet: any) => void;
100
+ _bindEventHandlers(): void;
101
+ _startCleanupTimer(): void;
102
+ _onNodeReady(node: Node, data: { resumed: boolean }): void;
103
+
104
+ // Optional bypass checks
37
105
  bypassChecks?: { nodeFetchInfo?: boolean };
38
106
  }
39
107
 
40
- export class Node {
108
+ export class Node extends EventEmitter {
41
109
  constructor(aqua: Aqua, connOptions: NodeOptions, options?: NodeAdditionalOptions);
42
110
 
43
111
  // Core Properties
@@ -46,7 +114,7 @@ declare module "aqualink" {
46
114
  name: string;
47
115
  port: number;
48
116
  password: string;
49
- secure: boolean;
117
+ ssl: boolean;
50
118
  sessionId: string | null;
51
119
  regions: string[];
52
120
  wsUrl: string;
@@ -66,10 +134,28 @@ declare module "aqualink" {
66
134
  players: Set<Player>;
67
135
  options: NodeOptions;
68
136
 
137
+ // Additional Properties
138
+ timeout: number;
139
+ maxPayload: number;
140
+ skipUTF8Validation: boolean;
141
+ _isConnecting: boolean;
142
+ _debugEnabled: boolean;
143
+ _headers: Record<string, string>;
144
+ _boundHandlers: Record<string, Function>;
145
+
69
146
  // Methods
70
147
  connect(): Promise<void>;
71
148
  destroy(clean?: boolean): void;
72
149
  getStats(): Promise<NodeStats>;
150
+
151
+ // Internal Methods
152
+ _handleOpen(): Promise<void>;
153
+ _handleError(error: any): void;
154
+ _handleMessage(data: any, isBinary: boolean): void;
155
+ _handleClose(code: number, reason: any): void;
156
+ _handleReady(payload: any): Promise<void>;
157
+ _emitError(error: any): void;
158
+ _emitDebug(message: string | (() => string)): void;
73
159
  }
74
160
 
75
161
  export class Player extends EventEmitter {
@@ -81,6 +167,7 @@ declare module "aqualink" {
81
167
  readonly TRACK: 1;
82
168
  readonly QUEUE: 2;
83
169
  };
170
+ static readonly EVENT_HANDLERS: Record<string, string>;
84
171
 
85
172
  // Core Properties
86
173
  aqua: Aqua;
@@ -112,6 +199,19 @@ declare module "aqualink" {
112
199
  autoplayRetries: number;
113
200
  reconnectionRetries: number;
114
201
  previousIdentifiers: Set<string>;
202
+ self_deaf: boolean;
203
+ self_mute: boolean;
204
+
205
+ // Additional Internal Properties
206
+ previousTracks: CircularBuffer;
207
+ _updateBatcher: MicrotaskUpdateBatcher;
208
+ _dataStore: Map<string, any> | null;
209
+ _voiceDownSince: number;
210
+ _voiceRecovering: boolean;
211
+ _voiceWatchdogTimer: NodeJS.Timer | null;
212
+ _boundPlayerUpdate: (packet: any) => void;
213
+ _boundEvent: (payload: any) => void;
214
+ _boundAquaPlayerMove: (oldChannel: string, newChannel: string) => void;
115
215
 
116
216
  // Getters
117
217
  get previous(): Track | null;
@@ -151,6 +251,28 @@ declare module "aqualink" {
151
251
  // Utility Methods
152
252
  send(data: any): void;
153
253
  batchUpdatePlayer(data: any, immediate?: boolean): Promise<void>;
254
+
255
+ // Internal Methods
256
+ _parseLoop(loop: any): LoopMode;
257
+ _bindEvents(): void;
258
+ _startWatchdog(): void;
259
+ _handlePlayerUpdate(packet: any): void;
260
+ _handleEvent(payload: any): Promise<void>;
261
+ _voiceWatchdog(): Promise<void>;
262
+ _attemptVoiceResume(): Promise<void>;
263
+ _getAutoplayTrack(sourceName: string, identifier: string, uri: string, requester: any, prev: Track): Promise<Track | null>;
264
+ _handleAquaPlayerMove(oldChannel: string, newChannel: string): void;
265
+
266
+ // Event handler methods (called internally)
267
+ trackStart(player: Player, track: Track): Promise<void>;
268
+ trackEnd(player: Player, track: Track, payload: any): Promise<void>;
269
+ trackError(player: Player, track: Track, payload: any): Promise<void>;
270
+ trackStuck(player: Player, track: Track, payload: any): Promise<void>;
271
+ trackChange(player: Player, track: Track, payload: any): Promise<void>;
272
+ socketClosed(player: Player, track: Track, payload: any): Promise<void>;
273
+ lyricsLine(player: Player, track: Track, payload: any): Promise<void>;
274
+ lyricsFound(player: Player, track: Track, payload: any): Promise<void>;
275
+ lyricsNotFound(player: Player, track: Track, payload: any): Promise<void>;
154
276
  }
155
277
 
156
278
  export class Track {
@@ -171,6 +293,10 @@ declare module "aqualink" {
171
293
  playlist: PlaylistInfo | null;
172
294
  requester: any;
173
295
  nodes: Node;
296
+ node: Node | null;
297
+
298
+ // Internal Properties
299
+ _infoCache: TrackInfo | null;
174
300
 
175
301
  // Getters
176
302
  get info(): TrackInfo;
@@ -179,9 +305,12 @@ declare module "aqualink" {
179
305
 
180
306
  // Methods
181
307
  resolveThumbnail(url?: string): string | null;
182
- resolve(aqua: Aqua): Promise<Track | null>;
308
+ resolve(aqua: Aqua, opts?: TrackResolutionOptions): Promise<Track | null>;
183
309
  isValid(): boolean;
184
310
  dispose(): void;
311
+
312
+ // Internal Methods
313
+ _computeArtworkFromKnownSources(): string | null;
185
314
  }
186
315
 
187
316
  export class Rest {
@@ -192,6 +321,13 @@ declare module "aqualink" {
192
321
  sessionId: string;
193
322
  calls: number;
194
323
 
324
+ // Additional Properties
325
+ timeout: number;
326
+ baseUrl: string;
327
+ defaultHeaders: Record<string, string>;
328
+ agent: any; // HTTP/HTTPS Agent
329
+
330
+ // Core Methods
195
331
  setSessionId(sessionId: string): void;
196
332
  makeRequest(method: HttpMethod, endpoint: string, body?: any): Promise<any>;
197
333
  updatePlayer(options: UpdatePlayerOptions): Promise<any>;
@@ -200,30 +336,51 @@ declare module "aqualink" {
200
336
  subscribeLiveLyrics(guildId: string, sync?: boolean): Promise<any>;
201
337
  unsubscribeLiveLyrics(guildId: string): Promise<any>;
202
338
  getStats(): Promise<NodeStats>;
339
+
340
+ // Additional REST Methods
341
+ getPlayer(guildId: string): Promise<any>;
342
+ getPlayers(): Promise<any>;
343
+ decodeTrack(encodedTrack: string): Promise<any>;
344
+ decodeTracks(encodedTracks: string[]): Promise<any>;
345
+ getInfo(): Promise<NodeInfo>;
346
+ getVersion(): Promise<string>;
347
+ getRoutePlannerStatus(): Promise<any>;
348
+ freeRoutePlannerAddress(address: string): Promise<any>;
349
+ freeAllRoutePlannerAddresses(): Promise<any>;
350
+ destroy(): void;
203
351
  }
204
352
 
205
353
  export class Queue extends Array<Track> {
206
354
  constructor(...elements: Track[]);
207
355
 
208
356
  // Properties
209
- size: number;
210
- first: Track | null;
211
- last: Track | null;
357
+ readonly size: number;
358
+ readonly first: Track | null;
359
+ readonly last: Track | null;
212
360
 
213
361
  // Methods
362
+ add(track: Track): Queue;
214
363
  add(...tracks: Track[]): void;
215
364
  push(track: Track): number;
216
365
  unshift(track: Track): number;
217
366
  shift(): Track | undefined;
367
+ remove(track: Track): boolean;
218
368
  clear(): void;
369
+ shuffle(): Queue;
370
+ peek(): Track | null;
219
371
  isEmpty(): boolean;
220
372
  toArray(): Track[];
373
+ at(index: number): Track | null;
374
+ dequeue(): Track | undefined;
375
+ enqueue(track: Track): Queue;
221
376
  }
222
377
 
223
378
  export class Filters {
224
379
  constructor(player: Player, options?: FilterOptions);
225
380
 
226
381
  player: Player;
382
+ _pendingUpdate: boolean;
383
+
227
384
  filters: {
228
385
  volume: number;
229
386
  equalizer: EqualizerBand[];
@@ -247,13 +404,13 @@ declare module "aqualink" {
247
404
  // Filter Methods
248
405
  setEqualizer(bands: EqualizerBand[]): Filters;
249
406
  setKaraoke(enabled: boolean, options?: KaraokeSettings): Filters;
250
- setTimescale(options?: TimescaleSettings): Filters;
251
- setTremolo(options?: TremoloSettings): Filters;
252
- setVibrato(options?: VibratoSettings): Filters;
253
- setRotation( options?: RotationSettings): Filters;
254
- setDistortion( options?: DistortionSettings): Filters;
255
- setChannelMix(options?: ChannelMixSettings): Filters;
256
- setLowPass( options?: LowPassSettings): Filters;
407
+ setTimescale(enabled: boolean, options?: TimescaleSettings): Filters;
408
+ setTremolo(enabled: boolean, options?: TremoloSettings): Filters;
409
+ setVibrato(enabled: boolean, options?: VibratoSettings): Filters;
410
+ setRotation(enabled: boolean, options?: RotationSettings): Filters;
411
+ setDistortion(enabled: boolean, options?: DistortionSettings): Filters;
412
+ setChannelMix(enabled: boolean, options?: ChannelMixSettings): Filters;
413
+ setLowPass(enabled: boolean, options?: LowPassSettings): Filters;
257
414
  setBassboost(enabled: boolean, options?: { value?: number }): Filters;
258
415
  setSlowmode(enabled: boolean, options?: { rate?: number }): Filters;
259
416
  setNightcore(enabled: boolean, options?: { rate?: number }): Filters;
@@ -261,6 +418,10 @@ declare module "aqualink" {
261
418
  set8D(enabled: boolean, options?: { rotationHz?: number }): Filters;
262
419
  clearFilters(): Promise<Filters>;
263
420
  updateFilters(): Promise<Filters>;
421
+
422
+ // Internal Methods
423
+ _setFilter(filterName: string, enabled: boolean, options?: any): Filters;
424
+ _scheduleUpdate(): Filters;
264
425
  }
265
426
 
266
427
  export class Connection {
@@ -273,10 +434,33 @@ declare module "aqualink" {
273
434
  region: string | null;
274
435
  sequence: number;
275
436
 
437
+ // Internal Properties
438
+ _player: Player;
439
+ _aqua: Aqua;
440
+ _nodes: Node;
441
+ _guildId: string;
442
+ _clientId: string;
443
+ _lastEndpoint: string | null;
444
+ _pendingUpdate: any;
445
+ _updateTimer: NodeJS.Timeout | null;
446
+ _hasDebugListeners: boolean;
447
+ _hasMoveListeners: boolean;
448
+
449
+ // Methods
276
450
  setServerUpdate(data: VoiceServerUpdate['d']): void;
277
451
  setStateUpdate(data: VoiceStateUpdate['d']): void;
278
452
  updateSequence(seq: number): void;
279
453
  destroy(): void;
454
+ attemptResume(): Promise<boolean>;
455
+ resendVoiceUpdate(options?: { resume?: boolean }): void;
456
+
457
+ // Internal Methods
458
+ _extractRegion(endpoint: string): string | null;
459
+ _scheduleVoiceUpdate(isResume?: boolean): void;
460
+ _executeVoiceUpdate(): void;
461
+ _sendUpdate(payload: any): Promise<void>;
462
+ _handleDisconnect(): void;
463
+ _clearPendingUpdate(): void;
280
464
  }
281
465
 
282
466
  export class Plugin {
@@ -286,6 +470,32 @@ declare module "aqualink" {
286
470
  unload?(aqua: Aqua): void | Promise<void>;
287
471
  }
288
472
 
473
+ // Utility Classes
474
+ export class MicrotaskUpdateBatcher {
475
+ constructor(player: Player);
476
+ player: Player | null;
477
+ updates: any;
478
+ scheduled: number;
479
+ flush: () => Promise<void>;
480
+
481
+ batch(data: any, immediate?: boolean): Promise<void>;
482
+ destroy(): void;
483
+ _flush(): Promise<void>;
484
+ }
485
+
486
+ export class CircularBuffer {
487
+ constructor(size?: number);
488
+ buffer: any[];
489
+ size: number;
490
+ index: number;
491
+ count: number;
492
+
493
+ push(item: any): void;
494
+ getLast(): any;
495
+ clear(): void;
496
+ toArray(): any[];
497
+ }
498
+
289
499
  // Configuration Interfaces
290
500
  export interface AquaOptions {
291
501
  shouldDeleteMessage?: boolean;
@@ -296,6 +506,10 @@ declare module "aqualink" {
296
506
  send?: (payload: any) => void;
297
507
  autoResume?: boolean;
298
508
  infiniteReconnects?: boolean;
509
+ urlFilteringEnabled?: boolean;
510
+ restrictedDomains?: string[];
511
+ allowedDomains?: string[];
512
+ loadBalancer?: LoadBalancerStrategy;
299
513
  failoverOptions?: FailoverOptions;
300
514
  }
301
515
 
@@ -312,7 +526,7 @@ declare module "aqualink" {
312
526
  export interface NodeOptions {
313
527
  host: string;
314
528
  name?: string;
315
- port?: number;
529
+ port?: number | string;
316
530
  password?: string;
317
531
  secure?: boolean;
318
532
  sessionId?: string;
@@ -427,14 +641,18 @@ declare module "aqualink" {
427
641
 
428
642
  export interface TrackData {
429
643
  encoded?: string;
644
+ track?: string;
430
645
  info: TrackInfo;
431
646
  playlist?: PlaylistInfo;
647
+ node?: Node;
648
+ nodes?: Node;
432
649
  }
433
650
 
434
651
  export interface PlaylistInfo {
435
652
  name: string;
436
653
  selectedTrack?: number;
437
654
  thumbnail?: string;
655
+ title?: string;
438
656
  }
439
657
 
440
658
  export interface LavalinkException {
@@ -586,6 +804,53 @@ declare module "aqualink" {
586
804
  skipTrackSource?: boolean;
587
805
  }
588
806
 
807
+ // State Management Interfaces
808
+ export interface PlayerState {
809
+ guildId: string;
810
+ textChannel: string;
811
+ voiceChannel: string;
812
+ volume: number;
813
+ paused: boolean;
814
+ position: number;
815
+ current: Track | null;
816
+ queue: Track[];
817
+ repeat: LoopMode;
818
+ shuffle: boolean;
819
+ deaf: boolean;
820
+ connected: boolean;
821
+ }
822
+
823
+ export interface BrokenPlayerState extends PlayerState {
824
+ originalNodeId: string;
825
+ brokenAt: number;
826
+ }
827
+
828
+ export interface MigrationResult {
829
+ success: boolean;
830
+ error?: any;
831
+ }
832
+
833
+ export interface SavedPlayerData {
834
+ g: string; // guildId
835
+ t: string; // textChannel
836
+ v: string; // voiceChannel
837
+ u: string | null; // uri
838
+ p: number; // position
839
+ ts: number; // timestamp
840
+ q: string[]; // queue uris
841
+ r: string | null; // requester
842
+ vol: number; // volume
843
+ pa: boolean; // paused
844
+ pl: boolean; // playing
845
+ nw: string | null; // nowPlayingMessage id
846
+ }
847
+
848
+ export interface TrackResolutionOptions {
849
+ platform?: SearchSource;
850
+ node?: Node;
851
+ toFront?: boolean;
852
+ }
853
+
589
854
  // Type Unions and Enums
590
855
  export type SearchSource =
591
856
  | 'ytsearch'
@@ -613,12 +878,18 @@ declare module "aqualink" {
613
878
  | 'playlist'
614
879
  | 'search'
615
880
  | 'empty'
616
- | 'error';
881
+ | 'error'
882
+ | 'LOAD_FAILED'
883
+ | 'NO_MATCHES';
617
884
 
618
885
  export type RestVersion = 'v3' | 'v4';
619
886
 
620
887
  export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
621
888
 
889
+ export type LoadBalancerStrategy = 'leastLoad' | 'leastRest' | 'random';
890
+
891
+ export type EventHandler<T = any> = (...args: T[]) => void | Promise<void>;
892
+
622
893
  // Event Interfaces
623
894
  export interface AquaEvents {
624
895
  'nodeConnect': (node: Node) => void;
@@ -654,6 +925,21 @@ declare module "aqualink" {
654
925
  'error': (node: Node | null, error: Error) => void;
655
926
  }
656
927
 
928
+ export interface PlayerEvents {
929
+ 'destroy': () => void;
930
+ 'playerUpdate': (packet: any) => void;
931
+ 'event': (payload: any) => void;
932
+ 'trackStart': (track: Track) => void;
933
+ 'trackEnd': (track: Track, reason?: string) => void;
934
+ 'trackError': (track: Track, error: any) => void;
935
+ 'trackStuck': (track: Track, thresholdMs: number) => void;
936
+ 'trackChange': (track: Track, payload: any) => void;
937
+ 'socketClosed': (payload: any) => void;
938
+ 'lyricsLine': (track: Track, payload: any) => void;
939
+ 'lyricsFound': (track: Track, payload: any) => void;
940
+ 'lyricsNotFound': (track: Track, payload: any) => void;
941
+ }
942
+
657
943
  // Event Emitter Type Extensions for Aqua
658
944
  interface Aqua {
659
945
  on<K extends keyof AquaEvents>(event: K, listener: AquaEvents[K]): this;
@@ -677,22 +963,8 @@ declare module "aqualink" {
677
963
  removeAllListeners<K extends keyof AquaEvents>(event?: K): this;
678
964
  removeAllListeners(event?: string | symbol): this;
679
965
  }
680
- export interface PlayerEvents {
681
- 'destroy': () => void;
682
- 'playerUpdate': (packet: any) => void;
683
- 'event': (payload: any) => void;
684
- 'trackStart': (track: Track) => void;
685
- 'trackEnd': (track: Track, reason?: string) => void;
686
- 'trackError': (track: Track, error: any) => void;
687
- 'trackStuck': (track: Track, thresholdMs: number) => void;
688
- 'trackChange': (track: Track, payload: any) => void;
689
- 'socketClosed': (payload: any) => void;
690
- 'lyricsLine': (track: Track, payload: any) => void;
691
- 'lyricsFound': (track: Track, payload: any) => void;
692
- 'lyricsNotFound': (track: Track, payload: any) => void;
693
- }
694
966
 
695
- interface Player {
967
+ interface Player {
696
968
  on<K extends keyof PlayerEvents>(event: K, listener: PlayerEvents[K]): this;
697
969
  on(event: string | symbol, listener: (...args: any[]) => void): this;
698
970
 
@@ -715,115 +987,6 @@ declare module "aqualink" {
715
987
  removeAllListeners(event?: string | symbol): this;
716
988
  }
717
989
 
718
- // Missing Player Properties and Methods
719
- interface Player {
720
- // Additional properties found in implementation
721
- self_deaf: boolean;
722
- self_mute: boolean;
723
- players: Set<Player>; // For Node class
724
-
725
- // Internal properties
726
- _updateBatcher: any;
727
- _dataStore: Map<string, any>;
728
-
729
- // Event handler methods (these are called internally)
730
- trackStart(player: Player, track: Track): Promise<void>;
731
- trackEnd(player: Player, track: Track, payload: any): Promise<void>;
732
- trackError(player: Player, track: Track, payload: any): Promise<void>;
733
- trackStuck(player: Player, track: Track, payload: any): Promise<void>;
734
- trackChange(player: Player, track: Track, payload: any): Promise<void>;
735
- socketClosed(player: Player, track: Track, payload: any): Promise<void>;
736
- lyricsLine(player: Player, track: Track, payload: any): Promise<void>;
737
- lyricsFound(player: Player, track: Track, payload: any): Promise<void>;
738
- lyricsNotFound(player: Player, track: Track, payload: any): Promise<void>;
739
- }
740
-
741
- interface Node {
742
- // Additional properties found in implementation
743
- timeout: number;
744
- maxPayload: number;
745
- skipUTF8Validation: boolean;
746
- _isConnecting: boolean;
747
- _debugEnabled: boolean;
748
- _headers: Record<string, string>;
749
- _boundHandlers: Record<string, Function>;
750
-
751
- // Methods missing from original definitions
752
- _handleOpen(): Promise<void>;
753
- _handleError(error: any): void;
754
- _handleMessage(data: any, isBinary: boolean): void;
755
- _handleClose(code: number, reason: any): void;
756
- _handleReady(payload: any): Promise<void>;
757
- _emitError(error: any): void;
758
- _emitDebug(message: string | (() => string)): void;
759
- }
760
-
761
- interface Rest {
762
- // Additional properties
763
- timeout: number;
764
- baseUrl: string;
765
- defaultHeaders: Record<string, string>;
766
- agent: any; // HTTP/HTTPS Agent
767
-
768
- // Missing REST methods found in implementation
769
- getPlayer(guildId: string): Promise<any>;
770
- getPlayers(): Promise<any>;
771
- decodeTrack(encodedTrack: string): Promise<any>;
772
- decodeTracks(encodedTracks: string[]): Promise<any>;
773
- getInfo(): Promise<NodeInfo>;
774
- getVersion(): Promise<string>;
775
- getRoutePlannerStatus(): Promise<any>;
776
- freeRoutePlannerAddress(address: string): Promise<any>;
777
- freeAllRoutePlannerAddresses(): Promise<any>;
778
- destroy(): void;
779
- }
780
-
781
- interface Connection {
782
- // Internal properties found in implementation
783
- _player: Player;
784
- _aqua: Aqua;
785
- _nodes: Node;
786
- _guildId: string;
787
- _clientId: string;
788
- _lastEndpoint: string | null;
789
- _pendingUpdate: any;
790
- _updateTimer: NodeJS.Timeout | null;
791
- _hasDebugListeners: boolean;
792
- _hasMoveListeners: boolean;
793
-
794
- // Methods not in original definition
795
- _extractRegion(endpoint: string): string | null;
796
- _scheduleVoiceUpdate(isResume?: boolean): void;
797
- _executeVoiceUpdate(): void;
798
- _sendUpdate(payload: any): Promise<void>;
799
- _handleDisconnect(): void;
800
- _clearPendingUpdate(): void;
801
- }
802
-
803
- export type EventHandler<T = any> = (...args: T[]) => void | Promise<void>;
804
-
805
- // Extended ResolveOptions for internal use
806
- export interface ExtendedResolveOptions extends ResolveOptions {
807
- node?: Node;
808
- }
809
- interface Plugin {
810
- // Optional unload method should be properly typed
811
- unload?(aqua: Aqua): void | Promise<void>;
812
- }
813
-
814
- export const LOOP_MODES: {
815
- readonly NONE: 0;
816
- readonly TRACK: 1;
817
- readonly QUEUE: 2;
818
- };
819
-
820
- interface Player {
821
- readonly EVENT_HANDLERS: Record<string, string>;
822
- }
823
- export interface TrackResolutionOptions {
824
- toFront?: boolean;
825
- }
826
-
827
990
  // Additional Filter Preset Options
828
991
  export interface FilterPresetOptions {
829
992
  value?: number;
@@ -840,19 +1003,16 @@ declare module "aqualink" {
840
1003
  body?: any;
841
1004
  }
842
1005
 
843
- // Save/Load Player Data Interfaces
844
- export interface SavedPlayerData {
845
- g: string; // guildId
846
- t: string; // textChannel
847
- v: string; // voiceChannel
848
- u: string | null; // uri
849
- p: number; // position
850
- ts: number; // timestamp
851
- q: string[]; // queue uris
852
- r: string | null; // requester
853
- vol: number; // volume
854
- pa: boolean; // paused
855
- pl: boolean; // playing
856
- nw: string | null; // nowPlayingMessage id
1006
+ // Extended ResolveOptions for internal use
1007
+ export interface ExtendedResolveOptions extends ResolveOptions {
1008
+ node?: Node;
857
1009
  }
1010
+
1011
+ // Export constants
1012
+ export const LOOP_MODES: {
1013
+ readonly NONE: 0;
1014
+ readonly TRACK: 1;
1015
+ readonly QUEUE: 2;
1016
+ };
1017
+
858
1018
  }