yukimu 2.0.8 → 2.0.9

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.
Files changed (97) hide show
  1. package/dist/BitrateOptimizer.d.ts +52 -0
  2. package/dist/BitrateOptimizer.d.ts.map +1 -0
  3. package/dist/BitrateOptimizer.js +115 -0
  4. package/dist/BitrateOptimizer.js.map +1 -0
  5. package/dist/ConnectionPool.d.ts +84 -0
  6. package/dist/ConnectionPool.d.ts.map +1 -0
  7. package/dist/ConnectionPool.js +203 -0
  8. package/dist/ConnectionPool.js.map +1 -0
  9. package/dist/Constants.d.ts +45 -0
  10. package/dist/Constants.d.ts.map +1 -0
  11. package/dist/Constants.js +168 -0
  12. package/dist/Constants.js.map +1 -0
  13. package/dist/Logger.d.ts +22 -0
  14. package/dist/Logger.d.ts.map +1 -0
  15. package/dist/Logger.js +74 -0
  16. package/dist/Logger.js.map +1 -0
  17. package/dist/Node.d.ts +61 -0
  18. package/dist/Node.d.ts.map +1 -0
  19. package/dist/Node.js +446 -0
  20. package/dist/Node.js.map +1 -0
  21. package/dist/Player.d.ts +135 -0
  22. package/dist/Player.d.ts.map +1 -0
  23. package/dist/Player.js +530 -0
  24. package/dist/Player.js.map +1 -0
  25. package/dist/Plugin.d.ts +25 -0
  26. package/dist/Plugin.d.ts.map +1 -0
  27. package/dist/Plugin.js +15 -0
  28. package/dist/Plugin.js.map +1 -0
  29. package/dist/Queue.d.ts +89 -0
  30. package/dist/Queue.d.ts.map +1 -0
  31. package/dist/Queue.js +188 -0
  32. package/dist/Queue.js.map +1 -0
  33. package/dist/Resolver.d.ts +68 -0
  34. package/dist/Resolver.d.ts.map +1 -0
  35. package/dist/Resolver.js +361 -0
  36. package/dist/Resolver.js.map +1 -0
  37. package/dist/Rest.d.ts +46 -0
  38. package/dist/Rest.d.ts.map +1 -0
  39. package/dist/Rest.js +246 -0
  40. package/dist/Rest.js.map +1 -0
  41. package/dist/TrackCache.d.ts +41 -0
  42. package/dist/TrackCache.d.ts.map +1 -0
  43. package/dist/TrackCache.js +144 -0
  44. package/dist/TrackCache.js.map +1 -0
  45. package/dist/WsQueue.d.ts +41 -0
  46. package/dist/WsQueue.d.ts.map +1 -0
  47. package/dist/WsQueue.js +116 -0
  48. package/dist/WsQueue.js.map +1 -0
  49. package/dist/Yukimu.d.ts +84 -0
  50. package/dist/Yukimu.d.ts.map +1 -0
  51. package/dist/Yukimu.js +290 -0
  52. package/dist/Yukimu.js.map +1 -0
  53. package/dist/connector/Connector.d.ts +34 -0
  54. package/dist/connector/Connector.d.ts.map +1 -0
  55. package/dist/connector/Connector.js +39 -0
  56. package/dist/connector/Connector.js.map +1 -0
  57. package/dist/connector/DiscordJS.d.ts +27 -0
  58. package/dist/connector/DiscordJS.d.ts.map +1 -0
  59. package/dist/connector/DiscordJS.js +69 -0
  60. package/dist/connector/DiscordJS.js.map +1 -0
  61. package/dist/connector/Eris.d.ts +19 -0
  62. package/dist/connector/Eris.d.ts.map +1 -0
  63. package/dist/connector/Eris.js +62 -0
  64. package/dist/connector/Eris.js.map +1 -0
  65. package/dist/connector/Oceanic.d.ts +19 -0
  66. package/dist/connector/Oceanic.d.ts.map +1 -0
  67. package/dist/connector/Oceanic.js +60 -0
  68. package/dist/connector/Oceanic.js.map +1 -0
  69. package/dist/errors/YukimuError.d.ts +51 -0
  70. package/dist/errors/YukimuError.d.ts.map +1 -0
  71. package/dist/errors/YukimuError.js +105 -0
  72. package/dist/errors/YukimuError.js.map +1 -0
  73. package/dist/index.d.ts +29 -0
  74. package/dist/index.d.ts.map +1 -0
  75. package/dist/index.js +70 -0
  76. package/dist/index.js.map +1 -0
  77. package/dist/plugins/AutoResume.d.ts +25 -0
  78. package/dist/plugins/AutoResume.d.ts.map +1 -0
  79. package/dist/plugins/AutoResume.js +132 -0
  80. package/dist/plugins/AutoResume.js.map +1 -0
  81. package/dist/plugins/AutoplayPlugin.d.ts +35 -0
  82. package/dist/plugins/AutoplayPlugin.d.ts.map +1 -0
  83. package/dist/plugins/AutoplayPlugin.js +111 -0
  84. package/dist/plugins/AutoplayPlugin.js.map +1 -0
  85. package/dist/plugins/InactivityPlugin.d.ts +30 -0
  86. package/dist/plugins/InactivityPlugin.d.ts.map +1 -0
  87. package/dist/plugins/InactivityPlugin.js +86 -0
  88. package/dist/plugins/InactivityPlugin.js.map +1 -0
  89. package/dist/plugins/PlayerMoved.d.ts +29 -0
  90. package/dist/plugins/PlayerMoved.d.ts.map +1 -0
  91. package/dist/plugins/PlayerMoved.js +75 -0
  92. package/dist/plugins/PlayerMoved.js.map +1 -0
  93. package/dist/types.d.ts +309 -0
  94. package/dist/types.d.ts.map +1 -0
  95. package/dist/types.js +4 -0
  96. package/dist/types.js.map +1 -0
  97. package/package.json +1 -1
package/dist/Node.js ADDED
@@ -0,0 +1,446 @@
1
+ "use strict";
2
+ /** Yukimu v2.0.0 — Lavalink Node Manager */
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.Node = void 0;
8
+ const ws_1 = __importDefault(require("ws"));
9
+ const Rest_1 = require("./Rest");
10
+ const WsQueue_1 = require("./WsQueue");
11
+ const Constants_1 = require("./Constants");
12
+ const YukimuError_1 = require("./errors/YukimuError");
13
+ const WS_CLOSE_NORMAL = 1000;
14
+ /**
15
+ * Represents a connection to a single Lavalink node.
16
+ *
17
+ * Critical fixes from v1:
18
+ * 1. Session resume: waits for `ready` op before calling updateSession()
19
+ * 2. WsQueue race condition: no duplicate `open` listener, flush called explicitly after onOpen
20
+ * 3. Heartbeat memory leak: properly clears interval on all disconnect paths
21
+ * 4. Connection timeout: WebSocket connection has a 10s timeout
22
+ * 5. Reconnect jitter: prevents thundering herd on multi-node reconnect
23
+ * 6. playerPath() null-safety for missing sessionId
24
+ * 7. Uses CLIENT_NAME constant, not hardcoded string
25
+ * 8. Uses STOPPED_REASONS Set for track end handling
26
+ */
27
+ class Node {
28
+ manager;
29
+ options;
30
+ rest;
31
+ wsQueue;
32
+ version;
33
+ ws = null;
34
+ state = Constants_1.State.DISCONNECTED;
35
+ stats = null;
36
+ info = null;
37
+ sessionId = null;
38
+ resumed = false;
39
+ penalties = 0;
40
+ ping = -1;
41
+ reconnectAttempts = 0;
42
+ reconnectTimeout;
43
+ heartbeatInterval;
44
+ connectionTimeout;
45
+ lastHeartbeatAt = 0;
46
+ constructor(manager, options) {
47
+ this.manager = manager;
48
+ this.options = {
49
+ secure: false,
50
+ retries: Constants_1.DEFAULTS.NODE_MAX_RETRIES,
51
+ version: 4,
52
+ resumeTimeout: 60,
53
+ priority: 0,
54
+ connectionTimeout: Constants_1.DEFAULTS.NODE_CONNECTION_TIMEOUT,
55
+ ...options,
56
+ };
57
+ this.version = (this.options.version ?? 4);
58
+ this.rest = new Rest_1.Rest(this);
59
+ this.wsQueue = new WsQueue_1.WsQueue();
60
+ }
61
+ // ─── Getters ────────────────────────────────────────────────────────────
62
+ get connected() {
63
+ return this.state === Constants_1.State.CONNECTED || this.state === Constants_1.State.NEARLY;
64
+ }
65
+ get wsUrl() {
66
+ const protocol = this.options.secure ? "wss" : "ws";
67
+ const base = `${protocol}://${this.options.host}:${this.options.port}`;
68
+ return this.version === 4 ? `${base}/v4/websocket` : base;
69
+ }
70
+ get wsHeaders() {
71
+ const h = {
72
+ Authorization: this.options.password,
73
+ "User-Id": this.manager.options.clientId,
74
+ "Client-Name": Constants_1.CLIENT_NAME,
75
+ };
76
+ if (this.version === 3)
77
+ h["Num-Shards"] = "1";
78
+ if (this.options.resumeKey)
79
+ h["Resume-Key"] = this.options.resumeKey;
80
+ return h;
81
+ }
82
+ // ─── Penalty Calculation ────────────────────────────────────────────────
83
+ calculatePenalties() {
84
+ if (!this.stats)
85
+ return Infinity;
86
+ const cpu = Math.pow(1.05, 100 * this.stats.cpu.systemLoad) * 10 - 10;
87
+ const fs = this.stats.frameStats;
88
+ const deficit = fs ? Math.pow(1.03, 500 * fs.deficit / 3000) * 600 - 600 : 0;
89
+ const nulled = fs ? Math.pow(1.03, 500 * fs.nulled / 3000) * 300 - 300 : 0;
90
+ const priority = (this.options.priority ?? 0) * 100;
91
+ this.penalties = Math.floor(cpu + deficit + nulled + this.stats.playingPlayers + priority);
92
+ return this.penalties;
93
+ }
94
+ // ─── Connection Lifecycle ───────────────────────────────────────────────
95
+ connect() {
96
+ if (this.ws?.readyState === ws_1.default.OPEN)
97
+ return;
98
+ this.state = Constants_1.State.CONNECTING;
99
+ this.manager.emit("nodeConnecting", this);
100
+ try {
101
+ this.ws = new ws_1.default(this.wsUrl, { headers: this.wsHeaders });
102
+ }
103
+ catch (err) {
104
+ this.manager.logger.error(`Failed to create WebSocket for "${this.options.name}":`, err);
105
+ this.state = Constants_1.State.DISCONNECTED;
106
+ this.scheduleReconnect();
107
+ return;
108
+ }
109
+ // Set the socket on the queue (but DON'T add an open listener — we flush manually)
110
+ this.wsQueue.setSocket(this.ws);
111
+ this.ws.on("open", () => this.onOpen());
112
+ this.ws.on("message", (d) => this.onMessage(d));
113
+ this.ws.on("close", (code, reason) => this.onClose(code, reason.toString()));
114
+ this.ws.on("error", (err) => this.onError(err));
115
+ // Connection timeout — if we don't get "open" within N ms, abort
116
+ const connTimeout = this.options.connectionTimeout ?? Constants_1.DEFAULTS.NODE_CONNECTION_TIMEOUT;
117
+ this.connectionTimeout = setTimeout(() => {
118
+ if (this.state === Constants_1.State.CONNECTING) {
119
+ this.manager.logger.warn(`Connection timeout for node "${this.options.name}" after ${connTimeout}ms`);
120
+ this.destroy(true);
121
+ this.scheduleReconnect();
122
+ }
123
+ }, connTimeout);
124
+ }
125
+ destroy(reconnect = false) {
126
+ // Clear all timers
127
+ if (this.reconnectTimeout) {
128
+ clearTimeout(this.reconnectTimeout);
129
+ this.reconnectTimeout = undefined;
130
+ }
131
+ if (this.heartbeatInterval) {
132
+ clearInterval(this.heartbeatInterval);
133
+ this.heartbeatInterval = undefined;
134
+ }
135
+ if (this.connectionTimeout) {
136
+ clearTimeout(this.connectionTimeout);
137
+ this.connectionTimeout = undefined;
138
+ }
139
+ // Clean up WS queue
140
+ this.wsQueue.clear();
141
+ this.wsQueue.setSocket(null);
142
+ // Close WebSocket
143
+ if (this.ws) {
144
+ this.ws.removeAllListeners();
145
+ try {
146
+ if (this.ws.readyState === ws_1.default.OPEN || this.ws.readyState === ws_1.default.CONNECTING) {
147
+ this.ws.close(WS_CLOSE_NORMAL, "destroy");
148
+ }
149
+ }
150
+ catch {
151
+ // Ignore close errors
152
+ }
153
+ this.ws = null;
154
+ }
155
+ this.state = Constants_1.State.DISCONNECTED;
156
+ if (!reconnect)
157
+ this.sessionId = null;
158
+ }
159
+ // ─── WebSocket Event Handlers ───────────────────────────────────────────
160
+ async onOpen() {
161
+ // Clear connection timeout
162
+ if (this.connectionTimeout) {
163
+ clearTimeout(this.connectionTimeout);
164
+ this.connectionTimeout = undefined;
165
+ }
166
+ this.state = Constants_1.State.NEARLY;
167
+ this.reconnectAttempts = 0;
168
+ this.manager.emit("nodeConnect", this);
169
+ this.manager.logger.info(`Node "${this.options.name}" connected (v${this.version})`);
170
+ // Fetch node info (non-critical, don't block)
171
+ try {
172
+ this.info = await this.rest.getInfo();
173
+ }
174
+ catch {
175
+ // Non-critical — info is nice to have but not required
176
+ }
177
+ // For v3, there's no "ready" op — we're connected immediately
178
+ if (this.version === 3) {
179
+ this.state = Constants_1.State.CONNECTED;
180
+ this.sessionId = this.options.resumeKey ?? `v3-${Date.now()}`;
181
+ this.manager.emit("nodeReady", this);
182
+ }
183
+ // Flush any queued messages NOW (after auth is ready)
184
+ this.wsQueue.flush();
185
+ // Start heartbeat
186
+ this.startHeartbeat();
187
+ }
188
+ onMessage(raw) {
189
+ let payload;
190
+ try {
191
+ payload = JSON.parse(raw.toString());
192
+ }
193
+ catch {
194
+ return;
195
+ }
196
+ const op = payload["op"];
197
+ if (this.version === 4) {
198
+ switch (op) {
199
+ case "ready": {
200
+ this.state = Constants_1.State.CONNECTED;
201
+ this.sessionId = payload["sessionId"];
202
+ this.resumed = payload["resumed"] ?? false;
203
+ this.manager.emit("nodeReady", this);
204
+ this.manager.logger.info(`Node "${this.options.name}" ready | session: ${this.sessionId} | resumed: ${this.resumed}`);
205
+ // NOW that we have a sessionId, configure session resuming
206
+ if (this.options.resumeKey) {
207
+ this.rest
208
+ .updateSession({ resuming: true, timeout: this.options.resumeTimeout ?? 60 })
209
+ .catch((err) => {
210
+ this.manager.logger.warn(`Failed to configure session resuming: ${err}`);
211
+ });
212
+ }
213
+ if (this.resumed)
214
+ this.reconnectPlayers();
215
+ break;
216
+ }
217
+ case "stats":
218
+ this.stats = payload;
219
+ this.calculatePenalties();
220
+ break;
221
+ case "playerUpdate":
222
+ this.handlePlayerUpdate(payload);
223
+ break;
224
+ case "event":
225
+ this.handleEvent(payload);
226
+ break;
227
+ }
228
+ return;
229
+ }
230
+ // Lavalink v3
231
+ switch (op) {
232
+ case "stats":
233
+ this.stats = payload;
234
+ this.calculatePenalties();
235
+ break;
236
+ case "playerUpdate":
237
+ this.handlePlayerUpdate(payload);
238
+ break;
239
+ case "event":
240
+ this.handleEvent(payload);
241
+ break;
242
+ }
243
+ }
244
+ onClose(code, reason) {
245
+ // Clear heartbeat
246
+ if (this.heartbeatInterval) {
247
+ clearInterval(this.heartbeatInterval);
248
+ this.heartbeatInterval = undefined;
249
+ }
250
+ this.state = Constants_1.State.DISCONNECTED;
251
+ const codeDesc = Constants_1.WS_CLOSE_CODES[code] ?? "Unknown";
252
+ this.manager.emit("nodeDisconnect", this, code, reason);
253
+ this.manager.logger.warn(`Node "${this.options.name}" disconnected (${code}: ${codeDesc}): ${reason || "No reason"}`);
254
+ if (code !== WS_CLOSE_NORMAL) {
255
+ this.scheduleReconnect();
256
+ }
257
+ else {
258
+ this.movePlayers();
259
+ }
260
+ }
261
+ onError(error) {
262
+ this.manager.emit("nodeError", this, error);
263
+ this.manager.logger.error(`Node "${this.options.name}" error: ${error.message}`);
264
+ }
265
+ // ─── Heartbeat ──────────────────────────────────────────────────────────
266
+ startHeartbeat() {
267
+ if (this.heartbeatInterval) {
268
+ clearInterval(this.heartbeatInterval);
269
+ }
270
+ this.heartbeatInterval = setInterval(async () => {
271
+ if (!this.connected || !this.ws || this.ws.readyState !== ws_1.default.OPEN)
272
+ return;
273
+ this.lastHeartbeatAt = Date.now();
274
+ try {
275
+ this.stats = await this.rest.getStats();
276
+ this.ping = Date.now() - this.lastHeartbeatAt;
277
+ this.calculatePenalties();
278
+ }
279
+ catch (err) {
280
+ this.manager.logger.debug(`Heartbeat failed for "${this.options.name}": ${err}`);
281
+ // Don't crash — the node might have briefly disconnected
282
+ }
283
+ }, Constants_1.DEFAULTS.HEARTBEAT_INTERVAL);
284
+ // Don't keep the process alive just for heartbeats
285
+ if (this.heartbeatInterval.unref) {
286
+ this.heartbeatInterval.unref();
287
+ }
288
+ }
289
+ // ─── Reconnection ──────────────────────────────────────────────────────
290
+ scheduleReconnect() {
291
+ const max = this.options.retries ?? Constants_1.DEFAULTS.NODE_MAX_RETRIES;
292
+ if (this.reconnectAttempts >= max) {
293
+ this.manager.emit("nodeError", this, new YukimuError_1.NodeError(`Node "${this.options.name}" max retries (${max}) reached`, YukimuError_1.ErrorCode.NODE_MAX_RETRIES));
294
+ this.movePlayers();
295
+ return;
296
+ }
297
+ // Exponential backoff with jitter
298
+ const baseDelay = Math.min(1000 * Math.pow(2, this.reconnectAttempts), Constants_1.DEFAULTS.NODE_MAX_RECONNECT_DELAY);
299
+ const jitter = Math.floor(Math.random() * baseDelay * 0.3); // ±30% jitter
300
+ const delay = baseDelay + jitter;
301
+ this.reconnectAttempts++;
302
+ this.state = Constants_1.State.RECONNECTING;
303
+ this.manager.logger.info(`Reconnecting "${this.options.name}" in ${delay}ms (${this.reconnectAttempts}/${max})`);
304
+ this.manager.emit("nodeReconnecting", this, this.reconnectAttempts, max);
305
+ this.reconnectTimeout = setTimeout(() => {
306
+ this.destroy(true);
307
+ this.connect();
308
+ }, delay);
309
+ }
310
+ // ─── Player Movement ───────────────────────────────────────────────────
311
+ movePlayers() {
312
+ const players = [...this.manager.players.values()].filter((p) => p.node === this);
313
+ if (!players.length)
314
+ return;
315
+ let best;
316
+ try {
317
+ best = this.manager.getBestNode();
318
+ }
319
+ catch {
320
+ this.manager.logger.warn(`No available nodes to move ${players.length} players from "${this.options.name}"`);
321
+ return;
322
+ }
323
+ if (best === this)
324
+ return;
325
+ this.manager.logger.info(`Moving ${players.length} players from "${this.options.name}" to "${best.options.name}"`);
326
+ for (const player of players) {
327
+ player.moveToNode(best).catch((err) => {
328
+ this.manager.logger.error(`Failed to move player ${player.guildId}: ${err}`);
329
+ });
330
+ }
331
+ }
332
+ reconnectPlayers() {
333
+ for (const player of this.manager.players.values()) {
334
+ if (player.node === this) {
335
+ player.checkVoiceReady();
336
+ }
337
+ }
338
+ }
339
+ // ─── Event Handlers ────────────────────────────────────────────────────
340
+ handlePlayerUpdate(payload) {
341
+ const guildId = payload["guildId"];
342
+ const player = this.manager.players.get(guildId);
343
+ if (!player)
344
+ return;
345
+ const state = (payload["state"] ?? {});
346
+ if (typeof state["position"] === "number")
347
+ player.position = state["position"];
348
+ if (typeof state["ping"] === "number")
349
+ player.ping = state["ping"];
350
+ player.lastUpdated = state["time"] ?? Date.now();
351
+ this.manager.emit("playerUpdate", player);
352
+ }
353
+ handleEvent(payload) {
354
+ const guildId = payload["guildId"];
355
+ const player = this.manager.players.get(guildId);
356
+ if (!player)
357
+ return;
358
+ // Resolve track
359
+ let track;
360
+ if (this.version === 3) {
361
+ track = {
362
+ encoded: payload["track"],
363
+ info: {},
364
+ pluginInfo: {},
365
+ };
366
+ }
367
+ else {
368
+ track = payload["track"];
369
+ if (track?.encoded) {
370
+ this.manager.trackCache.set(track.encoded, track);
371
+ }
372
+ }
373
+ switch (payload["type"]) {
374
+ case "TrackStartEvent":
375
+ player.playing = true;
376
+ player.paused = false;
377
+ player.lastUpdated = Date.now();
378
+ this.manager.emit("trackStart", player, track);
379
+ break;
380
+ case "TrackEndEvent": {
381
+ const reason = payload["reason"];
382
+ player.playing = false;
383
+ player.position = 0;
384
+ this.manager.emit("trackEnd", player, track, reason);
385
+ // Only auto-advance if not explicitly stopped/replaced
386
+ if (!Constants_1.STOPPED_REASONS.has(reason)) {
387
+ if (player.loop === "track" && player.queue.current) {
388
+ player.play(player.queue.current).catch((err) => {
389
+ this.manager.logger.error(`Failed to loop track for guild ${guildId}: ${err}`);
390
+ });
391
+ }
392
+ else {
393
+ if (player.loop === "queue" && player.queue.current) {
394
+ player.queue.add(player.queue.current);
395
+ }
396
+ const next = player.queue.next();
397
+ if (next) {
398
+ player.play(next).catch((err) => {
399
+ this.manager.logger.error(`Failed to play next track for guild ${guildId}: ${err}`);
400
+ });
401
+ }
402
+ else {
403
+ this.manager.emit("queueEnd", player);
404
+ if (player.autoplay && track?.info?.uri) {
405
+ this.manager.emit("autoplayRequest", player, track);
406
+ }
407
+ }
408
+ }
409
+ }
410
+ break;
411
+ }
412
+ case "TrackExceptionEvent":
413
+ this.manager.emit("trackError", player, track, payload["exception"]);
414
+ break;
415
+ case "TrackStuckEvent":
416
+ this.manager.emit("trackStuck", player, track, payload["thresholdMs"]);
417
+ // Auto-skip stuck tracks
418
+ player.skip().catch((err) => {
419
+ this.manager.logger.error(`Failed to skip stuck track for guild ${guildId}: ${err}`);
420
+ });
421
+ break;
422
+ case "WebSocketClosedEvent":
423
+ this.manager.emit("socketClosed", player, payload["code"], payload["reason"], payload["byRemote"]);
424
+ break;
425
+ }
426
+ }
427
+ // ─── Public API ─────────────────────────────────────────────────────────
428
+ send(data, priority = false) {
429
+ return this.wsQueue.send(data, priority);
430
+ }
431
+ async loadTracks(identifier) {
432
+ return this.rest.loadTracks(identifier);
433
+ }
434
+ playerPath(guildId) {
435
+ if (this.version === 4) {
436
+ if (!this.sessionId) {
437
+ this.manager.logger.warn(`playerPath called but sessionId is null for node "${this.options.name}"`);
438
+ return `/sessions/unknown/players/${guildId}`;
439
+ }
440
+ return `/sessions/${this.sessionId}/players/${guildId}`;
441
+ }
442
+ return `/players/${guildId}`;
443
+ }
444
+ }
445
+ exports.Node = Node;
446
+ //# sourceMappingURL=Node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Node.js","sourceRoot":"","sources":["../src/Node.ts"],"names":[],"mappings":";AAAA,4CAA4C;;;;;;AAE5C,4CAA2B;AAC3B,iCAA8B;AAC9B,uCAAoC;AACpC,2CAA4F;AAC5F,sDAA4D;AAK5D,MAAM,eAAe,GAAG,IAAI,CAAC;AAE7B;;;;;;;;;;;;GAYG;AACH,MAAa,IAAI;IACC,OAAO,CAAS;IAChB,OAAO,CAAmF;IAC1F,IAAI,CAAO;IACX,OAAO,CAAU;IACjB,OAAO,CAAQ;IAExB,EAAE,GAAqB,IAAI,CAAC;IAC5B,KAAK,GAAU,iBAAK,CAAC,YAAY,CAAC;IAClC,KAAK,GAAqB,IAAI,CAAC;IAC/B,IAAI,GAAoB,IAAI,CAAC;IAC7B,SAAS,GAAkB,IAAI,CAAC;IAChC,OAAO,GAAG,KAAK,CAAC;IAChB,SAAS,GAAG,CAAC,CAAC;IACd,IAAI,GAAG,CAAC,CAAC,CAAC;IAET,iBAAiB,GAAG,CAAC,CAAC;IACtB,gBAAgB,CAAiC;IACjD,iBAAiB,CAAkC;IACnD,iBAAiB,CAAiC;IAClD,eAAe,GAAG,CAAC,CAAC;IAE5B,YAAY,OAAe,EAAE,OAAoB;QAC/C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG;YACb,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,oBAAQ,CAAC,gBAAgB;YAClC,OAAO,EAAE,CAAC;YACV,aAAa,EAAE,EAAE;YACjB,QAAQ,EAAE,CAAC;YACX,iBAAiB,EAAE,oBAAQ,CAAC,uBAAuB;YACnD,GAAG,OAAO;SACX,CAAC;QACF,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,CAAU,CAAC;QACpD,IAAI,CAAC,IAAI,GAAG,IAAI,WAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,IAAI,iBAAO,EAAE,CAAC;IAC/B,CAAC;IAED,2EAA2E;IAE3E,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,KAAK,KAAK,iBAAK,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,iBAAK,CAAC,MAAM,CAAC;IACvE,CAAC;IAED,IAAI,KAAK;QACP,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QACpD,MAAM,IAAI,GAAG,GAAG,QAAQ,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACvE,OAAO,IAAI,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5D,CAAC;IAED,IAAI,SAAS;QACX,MAAM,CAAC,GAA2B;YAChC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;YACpC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ;YACxC,aAAa,EAAE,uBAAW;SAC3B,CAAC;QACF,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC;YAAE,CAAC,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC;QAC9C,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS;YAAE,CAAC,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;QACrE,OAAO,CAAC,CAAC;IACX,CAAC;IAED,2EAA2E;IAEpE,kBAAkB;QACvB,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO,QAAQ,CAAC;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;QACtE,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;QACjC,MAAM,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3E,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;QACpD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,QAAQ,CAAC,CAAC;QAC3F,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,2EAA2E;IAEpE,OAAO;QACZ,IAAI,IAAI,CAAC,EAAE,EAAE,UAAU,KAAK,YAAS,CAAC,IAAI;YAAE,OAAO;QAEnD,IAAI,CAAC,KAAK,GAAG,iBAAK,CAAC,UAAU,CAAC;QAC9B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;QAE1C,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,GAAG,IAAI,YAAS,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QACnE,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,GAAG,CAAC,CAAC;YACzF,IAAI,CAAC,KAAK,GAAG,iBAAK,CAAC,YAAY,CAAC;YAChC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,mFAAmF;QACnF,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEhC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACxC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAoB,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAY,EAAE,MAAc,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC7F,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QAEvD,iEAAiE;QACjE,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,IAAI,oBAAQ,CAAC,uBAAuB,CAAC;QACvF,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAC,GAAG,EAAE;YACvC,IAAI,IAAI,CAAC,KAAK,KAAK,iBAAK,CAAC,UAAU,EAAE,CAAC;gBACpC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,IAAI,CAAC,OAAO,CAAC,IAAI,WAAW,WAAW,IAAI,CAAC,CAAC;gBACtG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACnB,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC,EAAE,WAAW,CAAC,CAAC;IAClB,CAAC;IAEM,OAAO,CAAC,SAAS,GAAG,KAAK;QAC9B,mBAAmB;QACnB,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACpC,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;QACpC,CAAC;QACD,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACtC,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;QACrC,CAAC;QACD,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACrC,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;QACrC,CAAC;QAED,oBAAoB;QACpB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAE7B,kBAAkB;QAClB,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,CAAC,EAAE,CAAC,kBAAkB,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,KAAK,YAAS,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,KAAK,YAAS,CAAC,UAAU,EAAE,CAAC;oBACzF,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;gBAC5C,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,sBAAsB;YACxB,CAAC;YACD,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;QACjB,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,iBAAK,CAAC,YAAY,CAAC;QAChC,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IACxC,CAAC;IAED,2EAA2E;IAEnE,KAAK,CAAC,MAAM;QAClB,2BAA2B;QAC3B,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACrC,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;QACrC,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,iBAAK,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,iBAAiB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QAErF,8CAA8C;QAC9C,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC;YACP,uDAAuD;QACzD,CAAC;QAED,8DAA8D;QAC9D,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,KAAK,GAAG,iBAAK,CAAC,SAAS,CAAC;YAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,MAAM,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YAC9D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACvC,CAAC;QAED,sDAAsD;QACtD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAErB,kBAAkB;QAClB,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAEO,SAAS,CAAC,GAAsB;QACtC,IAAI,OAAgC,CAAC;QACrC,IAAI,CAAC;YACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;QACvC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QAED,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAW,CAAC;QAEnC,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;YACvB,QAAQ,EAAE,EAAE,CAAC;gBACX,KAAK,OAAO,CAAC,CAAC,CAAC;oBACb,IAAI,CAAC,KAAK,GAAG,iBAAK,CAAC,SAAS,CAAC;oBAC7B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,WAAW,CAAW,CAAC;oBAChD,IAAI,CAAC,OAAO,GAAI,OAAO,CAAC,SAAS,CAAa,IAAI,KAAK,CAAC;oBACxD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;oBACrC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CACtB,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,sBAAsB,IAAI,CAAC,SAAS,eAAe,IAAI,CAAC,OAAO,EAAE,CAC5F,CAAC;oBAEF,2DAA2D;oBAC3D,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;wBAC3B,IAAI,CAAC,IAAI;6BACN,aAAa,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,EAAE,CAAC;6BAC5E,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;4BACb,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,yCAAyC,GAAG,EAAE,CAAC,CAAC;wBAC3E,CAAC,CAAC,CAAC;oBACP,CAAC;oBAED,IAAI,IAAI,CAAC,OAAO;wBAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBAC1C,MAAM;gBACR,CAAC;gBACD,KAAK,OAAO;oBACV,IAAI,CAAC,KAAK,GAAG,OAA+B,CAAC;oBAC7C,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBAC1B,MAAM;gBACR,KAAK,cAAc;oBACjB,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;oBACjC,MAAM;gBACR,KAAK,OAAO;oBACV,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;oBAC1B,MAAM;YACV,CAAC;YACD,OAAO;QACT,CAAC;QAED,cAAc;QACd,QAAQ,EAAE,EAAE,CAAC;YACX,KAAK,OAAO;gBACV,IAAI,CAAC,KAAK,GAAG,OAA+B,CAAC;gBAC7C,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC1B,MAAM;YACR,KAAK,cAAc;gBACjB,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;gBACjC,MAAM;YACR,KAAK,OAAO;gBACV,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBAC1B,MAAM;QACV,CAAC;IACH,CAAC;IAEO,OAAO,CAAC,IAAY,EAAE,MAAc;QAC1C,kBAAkB;QAClB,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACtC,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;QACrC,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,iBAAK,CAAC,YAAY,CAAC;QAChC,MAAM,QAAQ,GAAG,0BAAc,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC;QACnD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QACxD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CACtB,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,mBAAmB,IAAI,KAAK,QAAQ,MAAM,MAAM,IAAI,WAAW,EAAE,CAC5F,CAAC;QAEF,IAAI,IAAI,KAAK,eAAe,EAAE,CAAC;YAC7B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;IAEO,OAAO,CAAC,KAAY;QAC1B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAC5C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,YAAY,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACnF,CAAC;IAED,2EAA2E;IAEnE,cAAc;QACpB,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACxC,CAAC;QAED,IAAI,CAAC,iBAAiB,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;YAC9C,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,KAAK,YAAS,CAAC,IAAI;gBAAE,OAAO;YAEjF,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,IAAI,CAAC,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACxC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC;gBAC9C,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACtB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,IAAI,CAAC,OAAO,CAAC,IAAI,MAAM,GAAG,EAAE,CAAC,CAAC;gBACjF,yDAAyD;YAC3D,CAAC;QACH,CAAC,EAAE,oBAAQ,CAAC,kBAAkB,CAAC,CAAC;QAEhC,mDAAmD;QACnD,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;YACjC,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;QACjC,CAAC;IACH,CAAC;IAED,0EAA0E;IAElE,iBAAiB;QACvB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,oBAAQ,CAAC,gBAAgB,CAAC;QAC9D,IAAI,IAAI,CAAC,iBAAiB,IAAI,GAAG,EAAE,CAAC;YAClC,IAAI,CAAC,OAAO,CAAC,IAAI,CACf,WAAW,EACX,IAAI,EACJ,IAAI,uBAAS,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,kBAAkB,GAAG,WAAW,EAAE,uBAAS,CAAC,gBAAgB,CAAC,CACtG,CAAC;YACF,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QAED,kCAAkC;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,EAAE,oBAAQ,CAAC,wBAAwB,CAAC,CAAC;QAC1G,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,cAAc;QAC1E,MAAM,KAAK,GAAG,SAAS,GAAG,MAAM,CAAC;QAEjC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,iBAAK,CAAC,YAAY,CAAC;QAEhC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CACtB,iBAAiB,IAAI,CAAC,OAAO,CAAC,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,iBAAiB,IAAI,GAAG,GAAG,CACvF,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,EAAE,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;QAEzE,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC,GAAG,EAAE;YACtC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACnB,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC,EAAE,KAAK,CAAC,CAAC;IACZ,CAAC;IAED,0EAA0E;IAElE,WAAW;QACjB,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAClF,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,OAAO;QAE5B,IAAI,IAAU,CAAC;QACf,IAAI,CAAC;YACH,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,OAAO,CAAC,MAAM,kBAAkB,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;YAC7G,OAAO;QACT,CAAC;QAED,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO;QAE1B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,OAAO,CAAC,MAAM,kBAAkB,IAAI,CAAC,OAAO,CAAC,IAAI,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;QACnH,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;gBAC7C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,MAAM,CAAC,OAAO,KAAK,GAAG,EAAE,CAAC,CAAC;YAC/E,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,gBAAgB;QACtB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YACnD,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;gBACzB,MAAM,CAAC,eAAe,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IAED,0EAA0E;IAElE,kBAAkB,CAAC,OAAgC;QACzD,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAW,CAAC;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM;YAAE,OAAO;QAEpB,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAA4B,CAAC;QAClE,IAAI,OAAO,KAAK,CAAC,UAAU,CAAC,KAAK,QAAQ;YAAE,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;QAC/E,IAAI,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,QAAQ;YAAE,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QACnE,MAAM,CAAC,WAAW,GAAI,KAAK,CAAC,MAAM,CAAY,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;IAEO,WAAW,CAAC,OAAgC;QAClD,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAW,CAAC;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM;YAAE,OAAO;QAEpB,gBAAgB;QAChB,IAAI,KAAY,CAAC;QACjB,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;YACvB,KAAK,GAAG;gBACN,OAAO,EAAE,OAAO,CAAC,OAAO,CAAW;gBACnC,IAAI,EAAE,EAAmB;gBACzB,UAAU,EAAE,EAAE;aACf,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,OAAO,CAAC,OAAO,CAAU,CAAC;YAClC,IAAI,KAAK,EAAE,OAAO,EAAE,CAAC;gBACnB,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;QAED,QAAQ,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACxB,KAAK,iBAAiB;gBACpB,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;gBACtB,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;gBACtB,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAChC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;gBAC/C,MAAM;YAER,KAAK,eAAe,CAAC,CAAC,CAAC;gBACrB,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAW,CAAC;gBAC3C,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;gBACvB,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;gBACpB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;gBAErD,uDAAuD;gBACvD,IAAI,CAAC,2BAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;oBACjC,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;wBACpD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;4BACvD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,OAAO,KAAK,GAAG,EAAE,CAAC,CAAC;wBACjF,CAAC,CAAC,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACN,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;4BACpD,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;wBACzC,CAAC;wBACD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;wBACjC,IAAI,IAAI,EAAE,CAAC;4BACT,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;gCACvC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uCAAuC,OAAO,KAAK,GAAG,EAAE,CAAC,CAAC;4BACtF,CAAC,CAAC,CAAC;wBACL,CAAC;6BAAM,CAAC;4BACN,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;4BACtC,IAAI,MAAM,CAAC,QAAQ,IAAI,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;gCACxC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;4BACtD,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,MAAM;YACR,CAAC;YAED,KAAK,qBAAqB;gBACxB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,WAAW,CAAwB,CAAC,CAAC;gBAC5F,MAAM;YAER,KAAK,iBAAiB;gBACpB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,aAAa,CAAW,CAAC,CAAC;gBACjF,yBAAyB;gBACzB,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;oBACnC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wCAAwC,OAAO,KAAK,GAAG,EAAE,CAAC,CAAC;gBACvF,CAAC,CAAC,CAAC;gBACH,MAAM;YAER,KAAK,sBAAsB;gBACzB,IAAI,CAAC,OAAO,CAAC,IAAI,CACf,cAAc,EACd,MAAM,EACN,OAAO,CAAC,MAAM,CAAW,EACzB,OAAO,CAAC,QAAQ,CAAW,EAC3B,OAAO,CAAC,UAAU,CAAY,CAC/B,CAAC;gBACF,MAAM;QACV,CAAC;IACH,CAAC;IAED,2EAA2E;IAEpE,IAAI,CAAC,IAA6B,EAAE,QAAQ,GAAG,KAAK;QACzD,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,UAAkB;QACxC,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAC1C,CAAC;IAEM,UAAU,CAAC,OAAe;QAC/B,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACpB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,qDAAqD,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;gBACpG,OAAO,6BAA6B,OAAO,EAAE,CAAC;YAChD,CAAC;YACD,OAAO,aAAa,IAAI,CAAC,SAAS,YAAY,OAAO,EAAE,CAAC;QAC1D,CAAC;QACD,OAAO,YAAY,OAAO,EAAE,CAAC;IAC/B,CAAC;CACF;AAheD,oBAgeC"}
@@ -0,0 +1,135 @@
1
+ /** Yukimu v2.0.0 — Player with State Safety & Bitrate Optimization */
2
+ import { Queue } from "./Queue";
3
+ import { PlayerState } from "./Constants";
4
+ import type { Yukimu } from "./Yukimu";
5
+ import type { Node } from "./Node";
6
+ import type { Track, PlayerOptions, FilterOptions, LoopMode, BoostTier } from "./types";
7
+ /**
8
+ * Represents an audio player for a specific Discord guild.
9
+ *
10
+ * Critical fixes from v1:
11
+ * 1. play() — only sets playing=true AFTER the REST call succeeds
12
+ * 2. pause() — paused tracks are still "playing" from Lavalink's perspective
13
+ * 3. moveToNode() — properly re-sends voice state to the new node
14
+ * 4. sendVoicePayload() — deferred until connector is ready (safe for startup)
15
+ * 5. Proper cleanup in destroy() — all state, timers, and references
16
+ * 6. Input validation on filter values
17
+ * 7. Boost-tier-aware audio optimization
18
+ */
19
+ export declare class Player {
20
+ readonly manager: Yukimu;
21
+ node: Node;
22
+ readonly queue: Queue;
23
+ readonly guildId: string;
24
+ voiceChannelId: string | null;
25
+ textChannelId?: string;
26
+ state: PlayerState;
27
+ playing: boolean;
28
+ paused: boolean;
29
+ position: number;
30
+ ping: number;
31
+ lastUpdated: number;
32
+ volume: number;
33
+ loop: LoopMode;
34
+ autoplay: boolean;
35
+ sessionId: string | null;
36
+ voiceToken: string | null;
37
+ voiceEndpoint: string | null;
38
+ selfDeaf: boolean;
39
+ selfMute: boolean;
40
+ filters: FilterOptions;
41
+ readonly data: Map<string, unknown>;
42
+ constructor(manager: Yukimu, node: Node, options: PlayerOptions);
43
+ get connected(): boolean;
44
+ /**
45
+ * Estimated real-time position accounting for time since last update.
46
+ * Returns the actual position (capped at track length).
47
+ */
48
+ get realPosition(): number;
49
+ /**
50
+ * Get the current boost tier of the guild this player is in.
51
+ */
52
+ get boostTier(): BoostTier;
53
+ sendVoicePayload(channelId: string | null, selfDeaf: boolean, selfMute: boolean): void;
54
+ /**
55
+ * Check if we have all voice connection data and send it to Lavalink.
56
+ */
57
+ checkVoiceReady(): void;
58
+ /**
59
+ * Play a track. If no track is provided, plays the current queue track.
60
+ *
61
+ * FIX: Only sets `playing = true` after the REST call succeeds.
62
+ * In v1, state was set before the REST call, causing ghost playing state on failure.
63
+ */
64
+ play(track?: Track, options?: {
65
+ startTime?: number;
66
+ endTime?: number;
67
+ noReplace?: boolean;
68
+ }): Promise<void>;
69
+ /**
70
+ * Pause or unpause playback.
71
+ *
72
+ * FIX: `playing` now reflects "has an active track" independently of pause state.
73
+ * A paused player is still "playing" (it has an active track, just paused).
74
+ */
75
+ pause(state?: boolean): Promise<void>;
76
+ resume(): Promise<void>;
77
+ stop(): Promise<void>;
78
+ skip(): Promise<Track | null>;
79
+ /**
80
+ * Play the previous track (from history).
81
+ * @returns The previous track, or null if no history exists
82
+ */
83
+ previous(): Promise<Track | null>;
84
+ /**
85
+ * Restart the currently playing track from the beginning.
86
+ */
87
+ replay(): Promise<void>;
88
+ seek(position: number): Promise<void>;
89
+ setVolume(volume: number): Promise<void>;
90
+ setFilters(filters: FilterOptions): Promise<void>;
91
+ clearFilters(): Promise<void>;
92
+ setBassBoost(level: "off" | "low" | "medium" | "high" | "extreme"): Promise<void>;
93
+ setNightcore(enabled: boolean): Promise<void>;
94
+ setVaporwave(enabled: boolean): Promise<void>;
95
+ set8D(enabled: boolean): Promise<void>;
96
+ setKaraoke(enabled: boolean): Promise<void>;
97
+ setTremolo(enabled: boolean, frequency?: number, depth?: number): Promise<void>;
98
+ setVibrato(enabled: boolean, frequency?: number, depth?: number): Promise<void>;
99
+ setLowPass(enabled: boolean, smoothing?: number): Promise<void>;
100
+ /** Set playback speed (1.0 = normal, 2.0 = double speed) */
101
+ setSpeed(speed: number): Promise<void>;
102
+ /** Set playback pitch (1.0 = normal) */
103
+ setPitch(pitch: number): Promise<void>;
104
+ /**
105
+ * Add track(s) to the queue. If nothing is currently playing, plays immediately.
106
+ */
107
+ add(tracks: Track | Track[], requester?: unknown): Promise<void>;
108
+ setLoop(mode: LoopMode): void;
109
+ setAutoplay(enabled: boolean): void;
110
+ /**
111
+ * Move this player to a different Lavalink node.
112
+ *
113
+ * FIX: Now properly re-sends the voice state to the new node.
114
+ * In v1, the new node didn't know about the voice connection.
115
+ */
116
+ moveToNode(node: Node): Promise<void>;
117
+ /** Move the bot to a different voice channel */
118
+ move(channelId: string): Promise<void>;
119
+ /**
120
+ * Apply optimal audio settings based on the guild's boost tier.
121
+ * Automatically adjusts EQ and filters for best clarity at the available bitrate.
122
+ */
123
+ applyOptimalQuality(): Promise<void>;
124
+ /** Maximum audio quality — crystal clear, enhanced bass & treble */
125
+ setHighQuality(): Promise<void>;
126
+ /** Studio quality — flat, neutral, most accurate */
127
+ setStudioQuality(): Promise<void>;
128
+ /** Concert hall effect — scaled for boost tier */
129
+ setConcertHall(): Promise<void>;
130
+ /**
131
+ * Destroy this player and clean up all resources.
132
+ */
133
+ destroy(): Promise<void>;
134
+ }
135
+ //# sourceMappingURL=Player.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Player.d.ts","sourceRoot":"","sources":["../src/Player.ts"],"names":[],"mappings":"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"}