@discordjs/ws 0.1.0
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/CHANGELOG.md +13 -0
- package/LICENSE +191 -0
- package/README.md +124 -0
- package/dist/index.cjs +39 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.mjs +11 -0
- package/dist/index.mjs.map +1 -0
- package/dist/strategies/context/IContextFetchingStrategy.cjs +15 -0
- package/dist/strategies/context/IContextFetchingStrategy.cjs.map +1 -0
- package/dist/strategies/context/IContextFetchingStrategy.d.ts +17 -0
- package/dist/strategies/context/IContextFetchingStrategy.d.ts.map +1 -0
- package/dist/strategies/context/IContextFetchingStrategy.mjs +11 -0
- package/dist/strategies/context/IContextFetchingStrategy.mjs.map +1 -0
- package/dist/strategies/context/SimpleContextFetchingStrategy.cjs +19 -0
- package/dist/strategies/context/SimpleContextFetchingStrategy.cjs.map +1 -0
- package/dist/strategies/context/SimpleContextFetchingStrategy.d.ts +10 -0
- package/dist/strategies/context/SimpleContextFetchingStrategy.d.ts.map +1 -0
- package/dist/strategies/context/SimpleContextFetchingStrategy.mjs +15 -0
- package/dist/strategies/context/SimpleContextFetchingStrategy.mjs.map +1 -0
- package/dist/strategies/context/WorkerContextFetchingStrategy.cjs +46 -0
- package/dist/strategies/context/WorkerContextFetchingStrategy.cjs.map +1 -0
- package/dist/strategies/context/WorkerContextFetchingStrategy.d.ts +10 -0
- package/dist/strategies/context/WorkerContextFetchingStrategy.d.ts.map +1 -0
- package/dist/strategies/context/WorkerContextFetchingStrategy.mjs +42 -0
- package/dist/strategies/context/WorkerContextFetchingStrategy.mjs.map +1 -0
- package/dist/strategies/sharding/IShardingStrategy.d.ts +25 -0
- package/dist/strategies/sharding/IShardingStrategy.d.ts.map +1 -0
- package/dist/strategies/sharding/SimpleShardingStrategy.cjs +53 -0
- package/dist/strategies/sharding/SimpleShardingStrategy.cjs.map +1 -0
- package/dist/strategies/sharding/SimpleShardingStrategy.d.ts +18 -0
- package/dist/strategies/sharding/SimpleShardingStrategy.d.ts.map +1 -0
- package/dist/strategies/sharding/SimpleShardingStrategy.mjs +49 -0
- package/dist/strategies/sharding/SimpleShardingStrategy.mjs.map +1 -0
- package/dist/strategies/sharding/WorkerShardingStrategy.cjs +162 -0
- package/dist/strategies/sharding/WorkerShardingStrategy.cjs.map +1 -0
- package/dist/strategies/sharding/WorkerShardingStrategy.d.ts +84 -0
- package/dist/strategies/sharding/WorkerShardingStrategy.d.ts.map +1 -0
- package/dist/strategies/sharding/WorkerShardingStrategy.mjs +165 -0
- package/dist/strategies/sharding/WorkerShardingStrategy.mjs.map +1 -0
- package/dist/strategies/sharding/worker.cjs +78 -0
- package/dist/strategies/sharding/worker.cjs.map +1 -0
- package/dist/strategies/sharding/worker.d.ts +2 -0
- package/dist/strategies/sharding/worker.d.ts.map +1 -0
- package/dist/strategies/sharding/worker.mjs +76 -0
- package/dist/strategies/sharding/worker.mjs.map +1 -0
- package/dist/utils/IdentifyThrottler.cjs +33 -0
- package/dist/utils/IdentifyThrottler.cjs.map +1 -0
- package/dist/utils/IdentifyThrottler.d.ts +8 -0
- package/dist/utils/IdentifyThrottler.d.ts.map +1 -0
- package/dist/utils/IdentifyThrottler.mjs +29 -0
- package/dist/utils/IdentifyThrottler.mjs.map +1 -0
- package/dist/utils/constants.cjs +63 -0
- package/dist/utils/constants.cjs.map +1 -0
- package/dist/utils/constants.d.ts +21 -0
- package/dist/utils/constants.d.ts.map +1 -0
- package/dist/utils/constants.mjs +64 -0
- package/dist/utils/constants.mjs.map +1 -0
- package/dist/utils/utils.cjs +15 -0
- package/dist/utils/utils.cjs.map +1 -0
- package/dist/utils/utils.d.ts +13 -0
- package/dist/utils/utils.d.ts.map +1 -0
- package/dist/utils/utils.mjs +10 -0
- package/dist/utils/utils.mjs.map +1 -0
- package/dist/ws/WebSocketManager.cjs +81 -0
- package/dist/ws/WebSocketManager.cjs.map +1 -0
- package/dist/ws/WebSocketManager.d.ts +186 -0
- package/dist/ws/WebSocketManager.d.ts.map +1 -0
- package/dist/ws/WebSocketManager.mjs +77 -0
- package/dist/ws/WebSocketManager.mjs.map +1 -0
- package/dist/ws/WebSocketShard.cjs +414 -0
- package/dist/ws/WebSocketShard.cjs.map +1 -0
- package/dist/ws/WebSocketShard.d.ts +71 -0
- package/dist/ws/WebSocketShard.d.ts.map +1 -0
- package/dist/ws/WebSocketShard.mjs +406 -0
- package/dist/ws/WebSocketShard.mjs.map +1 -0
- package/package.json +87 -0
|
@@ -0,0 +1,414 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
const node_events = require('node:events');
|
|
6
|
+
const node_timers = require('node:timers');
|
|
7
|
+
const promises = require('node:timers/promises');
|
|
8
|
+
const node_util = require('node:util');
|
|
9
|
+
const node_zlib = require('node:zlib');
|
|
10
|
+
const collection = require('@discordjs/collection');
|
|
11
|
+
const asyncQueue = require('@sapphire/async-queue');
|
|
12
|
+
const async_event_emitter = require('@vladfrangu/async_event_emitter');
|
|
13
|
+
const v10 = require('discord-api-types/v10');
|
|
14
|
+
const ws = require('ws');
|
|
15
|
+
const constants = require('../utils/constants.cjs');
|
|
16
|
+
const utils = require('../utils/utils.cjs');
|
|
17
|
+
|
|
18
|
+
const getZlibSync = utils.lazy(() => import('zlib-sync').then((mod) => mod.default).catch(() => null));
|
|
19
|
+
var WebSocketShardEvents = /* @__PURE__ */ ((WebSocketShardEvents2) => {
|
|
20
|
+
WebSocketShardEvents2["Debug"] = "debug";
|
|
21
|
+
WebSocketShardEvents2["Hello"] = "hello";
|
|
22
|
+
WebSocketShardEvents2["Ready"] = "ready";
|
|
23
|
+
WebSocketShardEvents2["Resumed"] = "resumed";
|
|
24
|
+
WebSocketShardEvents2["Dispatch"] = "dispatch";
|
|
25
|
+
return WebSocketShardEvents2;
|
|
26
|
+
})(WebSocketShardEvents || {});
|
|
27
|
+
var WebSocketShardStatus = /* @__PURE__ */ ((WebSocketShardStatus2) => {
|
|
28
|
+
WebSocketShardStatus2[WebSocketShardStatus2["Idle"] = 0] = "Idle";
|
|
29
|
+
WebSocketShardStatus2[WebSocketShardStatus2["Connecting"] = 1] = "Connecting";
|
|
30
|
+
WebSocketShardStatus2[WebSocketShardStatus2["Resuming"] = 2] = "Resuming";
|
|
31
|
+
WebSocketShardStatus2[WebSocketShardStatus2["Ready"] = 3] = "Ready";
|
|
32
|
+
return WebSocketShardStatus2;
|
|
33
|
+
})(WebSocketShardStatus || {});
|
|
34
|
+
var WebSocketShardDestroyRecovery = /* @__PURE__ */ ((WebSocketShardDestroyRecovery2) => {
|
|
35
|
+
WebSocketShardDestroyRecovery2[WebSocketShardDestroyRecovery2["Reconnect"] = 0] = "Reconnect";
|
|
36
|
+
WebSocketShardDestroyRecovery2[WebSocketShardDestroyRecovery2["Resume"] = 1] = "Resume";
|
|
37
|
+
return WebSocketShardDestroyRecovery2;
|
|
38
|
+
})(WebSocketShardDestroyRecovery || {});
|
|
39
|
+
var CloseCodes = /* @__PURE__ */ ((CloseCodes2) => {
|
|
40
|
+
CloseCodes2[CloseCodes2["Normal"] = 1e3] = "Normal";
|
|
41
|
+
CloseCodes2[CloseCodes2["Resuming"] = 4200] = "Resuming";
|
|
42
|
+
return CloseCodes2;
|
|
43
|
+
})(CloseCodes || {});
|
|
44
|
+
class WebSocketShard extends async_event_emitter.AsyncEventEmitter {
|
|
45
|
+
constructor(strategy, id) {
|
|
46
|
+
super();
|
|
47
|
+
this.connection = null;
|
|
48
|
+
this.useIdentifyCompress = false;
|
|
49
|
+
this.inflate = null;
|
|
50
|
+
this.textDecoder = new node_util.TextDecoder();
|
|
51
|
+
this.status = 0 /* Idle */;
|
|
52
|
+
this.replayedEvents = 0;
|
|
53
|
+
this.isAck = true;
|
|
54
|
+
this.sendRateLimitState = {
|
|
55
|
+
remaining: 120,
|
|
56
|
+
resetAt: Date.now()
|
|
57
|
+
};
|
|
58
|
+
this.heartbeatInterval = null;
|
|
59
|
+
this.lastHeartbeatAt = -1;
|
|
60
|
+
this.session = null;
|
|
61
|
+
this.sendQueue = new asyncQueue.AsyncQueue();
|
|
62
|
+
this.timeouts = new collection.Collection();
|
|
63
|
+
this.strategy = strategy;
|
|
64
|
+
this.id = id;
|
|
65
|
+
}
|
|
66
|
+
async connect() {
|
|
67
|
+
if (this.status !== 0 /* Idle */) {
|
|
68
|
+
throw new Error("Tried to connect a shard that wasn't idle");
|
|
69
|
+
}
|
|
70
|
+
const data = this.strategy.options.gatewayInformation;
|
|
71
|
+
const { version, encoding, compression } = this.strategy.options;
|
|
72
|
+
const params = new URLSearchParams({ v: version, encoding });
|
|
73
|
+
if (compression) {
|
|
74
|
+
const zlib = await getZlibSync();
|
|
75
|
+
if (zlib) {
|
|
76
|
+
params.append("compress", compression);
|
|
77
|
+
this.inflate = new zlib.Inflate({
|
|
78
|
+
chunkSize: 65535,
|
|
79
|
+
to: "string"
|
|
80
|
+
});
|
|
81
|
+
} else if (!this.useIdentifyCompress) {
|
|
82
|
+
this.useIdentifyCompress = true;
|
|
83
|
+
console.warn("WebSocketShard: Compression is enabled but zlib-sync is not installed, falling back to identify compress");
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
const url = `${data.url}?${params.toString()}`;
|
|
87
|
+
this.debug([`Connecting to ${url}`]);
|
|
88
|
+
const connection = new ws.WebSocket(url, { handshakeTimeout: this.strategy.options.handshakeTimeout ?? void 0 }).on("message", this.onMessage.bind(this)).on("error", this.onError.bind(this)).on("close", this.onClose.bind(this));
|
|
89
|
+
connection.binaryType = "arraybuffer";
|
|
90
|
+
this.connection = connection;
|
|
91
|
+
this.status = 1 /* Connecting */;
|
|
92
|
+
await this.waitForEvent("hello" /* Hello */, this.strategy.options.helloTimeout);
|
|
93
|
+
const session = this.session ?? await this.strategy.retrieveSessionInfo(this.id);
|
|
94
|
+
if (session?.shardCount === this.strategy.options.shardCount) {
|
|
95
|
+
this.session = session;
|
|
96
|
+
await this.resume(session);
|
|
97
|
+
} else {
|
|
98
|
+
await this.identify();
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
async destroy(options = {}) {
|
|
102
|
+
if (this.status === 0 /* Idle */) {
|
|
103
|
+
this.debug(["Tried to destroy a shard that was idle"]);
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
if (!options.code) {
|
|
107
|
+
options.code = options.recover === 1 /* Resume */ ? 4200 /* Resuming */ : 1e3 /* Normal */;
|
|
108
|
+
}
|
|
109
|
+
this.debug([
|
|
110
|
+
"Destroying shard",
|
|
111
|
+
`Reason: ${options.reason ?? "none"}`,
|
|
112
|
+
`Code: ${options.code}`,
|
|
113
|
+
`Recover: ${options.recover === void 0 ? "none" : WebSocketShardDestroyRecovery[options.recover]}`
|
|
114
|
+
]);
|
|
115
|
+
this.isAck = true;
|
|
116
|
+
if (this.heartbeatInterval) {
|
|
117
|
+
clearInterval(this.heartbeatInterval);
|
|
118
|
+
}
|
|
119
|
+
this.lastHeartbeatAt = -1;
|
|
120
|
+
if (options.recover !== 1 /* Resume */ && this.session) {
|
|
121
|
+
this.session = null;
|
|
122
|
+
await this.strategy.updateSessionInfo(this.id, null);
|
|
123
|
+
}
|
|
124
|
+
if (this.connection && (this.connection.readyState === ws.WebSocket.OPEN || this.connection.readyState === ws.WebSocket.CONNECTING)) {
|
|
125
|
+
this.connection.close(options.code, options.reason);
|
|
126
|
+
}
|
|
127
|
+
this.status = 0 /* Idle */;
|
|
128
|
+
if (options.recover !== void 0) {
|
|
129
|
+
return this.connect();
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
async waitForEvent(event, timeoutDuration) {
|
|
133
|
+
this.debug([`Waiting for event ${event} for ${timeoutDuration ? `${timeoutDuration}ms` : "indefinitely"}`]);
|
|
134
|
+
const controller = new AbortController();
|
|
135
|
+
const timeout = timeoutDuration ? node_timers.setTimeout(() => controller.abort(), timeoutDuration).unref() : null;
|
|
136
|
+
if (timeout) {
|
|
137
|
+
this.timeouts.set(event, timeout);
|
|
138
|
+
}
|
|
139
|
+
await node_events.once(this, event, { signal: controller.signal });
|
|
140
|
+
if (timeout) {
|
|
141
|
+
clearTimeout(timeout);
|
|
142
|
+
this.timeouts.delete(event);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
async send(payload) {
|
|
146
|
+
if (!this.connection) {
|
|
147
|
+
throw new Error("WebSocketShard wasn't connected");
|
|
148
|
+
}
|
|
149
|
+
if (this.status !== 3 /* Ready */ && !constants.ImportantGatewayOpcodes.has(payload.op)) {
|
|
150
|
+
await node_events.once(this, "ready" /* Ready */);
|
|
151
|
+
}
|
|
152
|
+
await this.sendQueue.wait();
|
|
153
|
+
if (--this.sendRateLimitState.remaining <= 0) {
|
|
154
|
+
if (this.sendRateLimitState.resetAt < Date.now()) {
|
|
155
|
+
await promises.setTimeout(Date.now() - this.sendRateLimitState.resetAt);
|
|
156
|
+
}
|
|
157
|
+
this.sendRateLimitState = {
|
|
158
|
+
remaining: 119,
|
|
159
|
+
resetAt: Date.now() + 6e4
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
this.sendQueue.shift();
|
|
163
|
+
this.connection.send(JSON.stringify(payload));
|
|
164
|
+
}
|
|
165
|
+
async identify() {
|
|
166
|
+
this.debug([
|
|
167
|
+
"Identifying",
|
|
168
|
+
`shard id: ${this.id.toString()}`,
|
|
169
|
+
`shard count: ${this.strategy.options.shardCount}`,
|
|
170
|
+
`intents: ${this.strategy.options.intents}`,
|
|
171
|
+
`compression: ${this.inflate ? "zlib-stream" : this.useIdentifyCompress ? "identify" : "none"}`
|
|
172
|
+
]);
|
|
173
|
+
const d = {
|
|
174
|
+
token: this.strategy.options.token,
|
|
175
|
+
properties: this.strategy.options.identifyProperties,
|
|
176
|
+
intents: this.strategy.options.intents,
|
|
177
|
+
compress: this.useIdentifyCompress,
|
|
178
|
+
shard: [this.id, this.strategy.options.shardCount]
|
|
179
|
+
};
|
|
180
|
+
if (this.strategy.options.largeThreshold) {
|
|
181
|
+
d.large_threshold = this.strategy.options.largeThreshold;
|
|
182
|
+
}
|
|
183
|
+
if (this.strategy.options.initialPresence) {
|
|
184
|
+
d.presence = this.strategy.options.initialPresence;
|
|
185
|
+
}
|
|
186
|
+
await this.send({
|
|
187
|
+
op: v10.GatewayOpcodes.Identify,
|
|
188
|
+
d
|
|
189
|
+
});
|
|
190
|
+
await this.waitForEvent("ready" /* Ready */, this.strategy.options.readyTimeout);
|
|
191
|
+
this.status = 3 /* Ready */;
|
|
192
|
+
}
|
|
193
|
+
resume(session) {
|
|
194
|
+
this.debug(["Resuming session"]);
|
|
195
|
+
this.status = 2 /* Resuming */;
|
|
196
|
+
this.replayedEvents = 0;
|
|
197
|
+
return this.send({
|
|
198
|
+
op: v10.GatewayOpcodes.Resume,
|
|
199
|
+
d: {
|
|
200
|
+
token: this.strategy.options.token,
|
|
201
|
+
seq: session.sequence,
|
|
202
|
+
session_id: session.sessionId
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
async heartbeat(requested = false) {
|
|
207
|
+
if (!this.isAck && !requested) {
|
|
208
|
+
return this.destroy({ reason: "Zombie connection", recover: 1 /* Resume */ });
|
|
209
|
+
}
|
|
210
|
+
await this.send({
|
|
211
|
+
op: v10.GatewayOpcodes.Heartbeat,
|
|
212
|
+
d: this.session?.sequence ?? null
|
|
213
|
+
});
|
|
214
|
+
this.lastHeartbeatAt = Date.now();
|
|
215
|
+
this.isAck = false;
|
|
216
|
+
}
|
|
217
|
+
async unpackMessage(data, isBinary) {
|
|
218
|
+
const decompressable = new Uint8Array(data);
|
|
219
|
+
if (!isBinary) {
|
|
220
|
+
return JSON.parse(this.textDecoder.decode(decompressable));
|
|
221
|
+
}
|
|
222
|
+
if (this.useIdentifyCompress) {
|
|
223
|
+
return new Promise((resolve, reject) => {
|
|
224
|
+
node_zlib.inflate(decompressable, { chunkSize: 65535 }, (err, result) => {
|
|
225
|
+
if (err) {
|
|
226
|
+
return reject(err);
|
|
227
|
+
}
|
|
228
|
+
resolve(JSON.parse(this.textDecoder.decode(result)));
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
if (this.inflate) {
|
|
233
|
+
const l = decompressable.length;
|
|
234
|
+
const flush = l >= 4 && decompressable[l - 4] === 0 && decompressable[l - 3] === 0 && decompressable[l - 2] === 255 && decompressable[l - 1] === 255;
|
|
235
|
+
const zlib = await getZlibSync();
|
|
236
|
+
this.inflate.push(Buffer.from(decompressable), flush ? zlib.Z_SYNC_FLUSH : zlib.Z_NO_FLUSH);
|
|
237
|
+
if (this.inflate.err) {
|
|
238
|
+
this.emit("error", `${this.inflate.err}${this.inflate.msg ? `: ${this.inflate.msg}` : ""}`);
|
|
239
|
+
}
|
|
240
|
+
if (!flush) {
|
|
241
|
+
return null;
|
|
242
|
+
}
|
|
243
|
+
const { result } = this.inflate;
|
|
244
|
+
if (!result) {
|
|
245
|
+
return null;
|
|
246
|
+
}
|
|
247
|
+
return JSON.parse(typeof result === "string" ? result : this.textDecoder.decode(result));
|
|
248
|
+
}
|
|
249
|
+
this.debug([
|
|
250
|
+
"Received a message we were unable to decompress",
|
|
251
|
+
`isBinary: ${isBinary.toString()}`,
|
|
252
|
+
`useIdentifyCompress: ${this.useIdentifyCompress.toString()}`,
|
|
253
|
+
`inflate: ${Boolean(this.inflate).toString()}`
|
|
254
|
+
]);
|
|
255
|
+
return null;
|
|
256
|
+
}
|
|
257
|
+
async onMessage(data, isBinary) {
|
|
258
|
+
const payload = await this.unpackMessage(data, isBinary);
|
|
259
|
+
if (!payload) {
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
switch (payload.op) {
|
|
263
|
+
case v10.GatewayOpcodes.Dispatch: {
|
|
264
|
+
if (this.status === 3 /* Ready */ || this.status === 2 /* Resuming */) {
|
|
265
|
+
this.emit("dispatch" /* Dispatch */, { data: payload });
|
|
266
|
+
}
|
|
267
|
+
if (this.status === 2 /* Resuming */) {
|
|
268
|
+
this.replayedEvents++;
|
|
269
|
+
}
|
|
270
|
+
switch (payload.t) {
|
|
271
|
+
case v10.GatewayDispatchEvents.Ready: {
|
|
272
|
+
this.emit("ready" /* Ready */);
|
|
273
|
+
this.session ?? (this.session = {
|
|
274
|
+
sequence: payload.s,
|
|
275
|
+
sessionId: payload.d.session_id,
|
|
276
|
+
shardId: this.id,
|
|
277
|
+
shardCount: this.strategy.options.shardCount
|
|
278
|
+
});
|
|
279
|
+
await this.strategy.updateSessionInfo(this.id, this.session);
|
|
280
|
+
break;
|
|
281
|
+
}
|
|
282
|
+
case v10.GatewayDispatchEvents.Resumed: {
|
|
283
|
+
this.status = 3 /* Ready */;
|
|
284
|
+
this.debug([`Resumed and replayed ${this.replayedEvents} events`]);
|
|
285
|
+
this.emit("resumed" /* Resumed */);
|
|
286
|
+
break;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
if (this.session) {
|
|
290
|
+
if (payload.s > this.session.sequence) {
|
|
291
|
+
this.session.sequence = payload.s;
|
|
292
|
+
await this.strategy.updateSessionInfo(this.id, this.session);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
break;
|
|
296
|
+
}
|
|
297
|
+
case v10.GatewayOpcodes.Heartbeat: {
|
|
298
|
+
await this.heartbeat(true);
|
|
299
|
+
break;
|
|
300
|
+
}
|
|
301
|
+
case v10.GatewayOpcodes.Reconnect: {
|
|
302
|
+
await this.destroy({
|
|
303
|
+
reason: "Told to reconnect by Discord",
|
|
304
|
+
recover: 1 /* Resume */
|
|
305
|
+
});
|
|
306
|
+
break;
|
|
307
|
+
}
|
|
308
|
+
case v10.GatewayOpcodes.InvalidSession: {
|
|
309
|
+
const readyTimeout = this.timeouts.get("ready" /* Ready */);
|
|
310
|
+
readyTimeout?.refresh();
|
|
311
|
+
this.debug([`Invalid session; will attempt to resume: ${payload.d.toString()}`]);
|
|
312
|
+
const session = this.session ?? await this.strategy.retrieveSessionInfo(this.id);
|
|
313
|
+
if (payload.d && session) {
|
|
314
|
+
await this.resume(session);
|
|
315
|
+
} else {
|
|
316
|
+
await this.destroy({
|
|
317
|
+
reason: "Invalid session",
|
|
318
|
+
recover: 0 /* Reconnect */
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
break;
|
|
322
|
+
}
|
|
323
|
+
case v10.GatewayOpcodes.Hello: {
|
|
324
|
+
this.emit("hello" /* Hello */);
|
|
325
|
+
this.debug([`Starting to heartbeat every ${payload.d.heartbeat_interval}ms`]);
|
|
326
|
+
this.heartbeatInterval = setInterval(() => void this.heartbeat(), payload.d.heartbeat_interval);
|
|
327
|
+
break;
|
|
328
|
+
}
|
|
329
|
+
case v10.GatewayOpcodes.HeartbeatAck: {
|
|
330
|
+
this.isAck = true;
|
|
331
|
+
this.debug([`Got heartbeat ack after ${Date.now() - this.lastHeartbeatAt}ms`]);
|
|
332
|
+
break;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
onError(err) {
|
|
337
|
+
this.emit("error", { err });
|
|
338
|
+
}
|
|
339
|
+
async onClose(code) {
|
|
340
|
+
switch (code) {
|
|
341
|
+
case 1e3:
|
|
342
|
+
case 4200: {
|
|
343
|
+
this.debug([`Disconnected normally from code ${code}`]);
|
|
344
|
+
break;
|
|
345
|
+
}
|
|
346
|
+
case v10.GatewayCloseCodes.UnknownError: {
|
|
347
|
+
this.debug([`An unknown error occured: ${code}`]);
|
|
348
|
+
return this.destroy({ code, recover: 1 /* Resume */ });
|
|
349
|
+
}
|
|
350
|
+
case v10.GatewayCloseCodes.UnknownOpcode: {
|
|
351
|
+
this.debug(["An invalid opcode was sent to Discord."]);
|
|
352
|
+
return this.destroy({ code, recover: 1 /* Resume */ });
|
|
353
|
+
}
|
|
354
|
+
case v10.GatewayCloseCodes.DecodeError: {
|
|
355
|
+
this.debug(["An invalid payload was sent to Discord."]);
|
|
356
|
+
return this.destroy({ code, recover: 1 /* Resume */ });
|
|
357
|
+
}
|
|
358
|
+
case v10.GatewayCloseCodes.NotAuthenticated: {
|
|
359
|
+
this.debug(["A request was somehow sent before the identify/resume payload."]);
|
|
360
|
+
return this.destroy({ code, recover: 0 /* Reconnect */ });
|
|
361
|
+
}
|
|
362
|
+
case v10.GatewayCloseCodes.AuthenticationFailed: {
|
|
363
|
+
throw new Error("Authentication failed");
|
|
364
|
+
}
|
|
365
|
+
case v10.GatewayCloseCodes.AlreadyAuthenticated: {
|
|
366
|
+
this.debug(["More than one auth payload was sent."]);
|
|
367
|
+
return this.destroy({ code, recover: 0 /* Reconnect */ });
|
|
368
|
+
}
|
|
369
|
+
case v10.GatewayCloseCodes.InvalidSeq: {
|
|
370
|
+
this.debug(["An invalid sequence was sent."]);
|
|
371
|
+
return this.destroy({ code, recover: 0 /* Reconnect */ });
|
|
372
|
+
}
|
|
373
|
+
case v10.GatewayCloseCodes.RateLimited: {
|
|
374
|
+
this.debug(["The WebSocket rate limit has been hit, this should never happen"]);
|
|
375
|
+
return this.destroy({ code, recover: 0 /* Reconnect */ });
|
|
376
|
+
}
|
|
377
|
+
case v10.GatewayCloseCodes.SessionTimedOut: {
|
|
378
|
+
this.debug(["Session timed out."]);
|
|
379
|
+
return this.destroy({ code, recover: 1 /* Resume */ });
|
|
380
|
+
}
|
|
381
|
+
case v10.GatewayCloseCodes.InvalidShard: {
|
|
382
|
+
throw new Error("Invalid shard");
|
|
383
|
+
}
|
|
384
|
+
case v10.GatewayCloseCodes.ShardingRequired: {
|
|
385
|
+
throw new Error("Sharding is required");
|
|
386
|
+
}
|
|
387
|
+
case v10.GatewayCloseCodes.InvalidAPIVersion: {
|
|
388
|
+
throw new Error("Used an invalid API version");
|
|
389
|
+
}
|
|
390
|
+
case v10.GatewayCloseCodes.InvalidIntents: {
|
|
391
|
+
throw new Error("Used invalid intents");
|
|
392
|
+
}
|
|
393
|
+
case v10.GatewayCloseCodes.DisallowedIntents: {
|
|
394
|
+
throw new Error("Used disallowed intents");
|
|
395
|
+
}
|
|
396
|
+
default: {
|
|
397
|
+
this.debug([`The gateway closed with an unexpected code ${code}, attempting to resume.`]);
|
|
398
|
+
return this.destroy({ code, recover: 1 /* Resume */ });
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
debug(messages) {
|
|
403
|
+
const message = `${messages[0]}${messages.length > 1 ? `
|
|
404
|
+
${messages.slice(1).map((m) => ` ${m}`).join("\n")}` : ""}`;
|
|
405
|
+
this.emit("debug" /* Debug */, { message });
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
exports.CloseCodes = CloseCodes;
|
|
410
|
+
exports.WebSocketShard = WebSocketShard;
|
|
411
|
+
exports.WebSocketShardDestroyRecovery = WebSocketShardDestroyRecovery;
|
|
412
|
+
exports.WebSocketShardEvents = WebSocketShardEvents;
|
|
413
|
+
exports.WebSocketShardStatus = WebSocketShardStatus;
|
|
414
|
+
//# sourceMappingURL=WebSocketShard.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebSocketShard.cjs","sources":["../../src/ws/WebSocketShard.ts"],"sourcesContent":["import { once } from 'node:events';\nimport { setTimeout } from 'node:timers';\nimport { setTimeout as sleep } from 'node:timers/promises';\nimport { TextDecoder } from 'node:util';\nimport { inflate } from 'node:zlib';\nimport { Collection } from '@discordjs/collection';\nimport { AsyncQueue } from '@sapphire/async-queue';\nimport { AsyncEventEmitter } from '@vladfrangu/async_event_emitter';\nimport {\n\tGatewayCloseCodes,\n\tGatewayDispatchEvents,\n\tGatewayDispatchPayload,\n\tGatewayIdentifyData,\n\tGatewayOpcodes,\n\tGatewayReceivePayload,\n\tGatewaySendPayload,\n} from 'discord-api-types/v10';\nimport { RawData, WebSocket } from 'ws';\nimport type { Inflate } from 'zlib-sync';\nimport type { SessionInfo } from './WebSocketManager';\nimport type { IContextFetchingStrategy } from '../strategies/context/IContextFetchingStrategy';\nimport { ImportantGatewayOpcodes } from '../utils/constants';\nimport { lazy } from '../utils/utils';\n\nconst getZlibSync = lazy(() => import('zlib-sync').then((mod) => mod.default).catch(() => null));\n\nexport enum WebSocketShardEvents {\n\tDebug = 'debug',\n\tHello = 'hello',\n\tReady = 'ready',\n\tResumed = 'resumed',\n\tDispatch = 'dispatch',\n}\n\nexport enum WebSocketShardStatus {\n\tIdle,\n\tConnecting,\n\tResuming,\n\tReady,\n}\n\nexport enum WebSocketShardDestroyRecovery {\n\tReconnect,\n\tResume,\n}\n\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport type WebSocketShardEventsMap = {\n\t[WebSocketShardEvents.Debug]: [payload: { message: string }];\n\t[WebSocketShardEvents.Hello]: [];\n\t[WebSocketShardEvents.Ready]: [];\n\t[WebSocketShardEvents.Resumed]: [];\n\t[WebSocketShardEvents.Dispatch]: [payload: { data: GatewayDispatchPayload }];\n};\n\nexport interface WebSocketShardDestroyOptions {\n\treason?: string;\n\tcode?: number;\n\trecover?: WebSocketShardDestroyRecovery;\n}\n\nexport enum CloseCodes {\n\tNormal = 1000,\n\tResuming = 4200,\n}\n\nexport class WebSocketShard extends AsyncEventEmitter<WebSocketShardEventsMap> {\n\tprivate connection: WebSocket | null = null;\n\n\tprivate readonly id: number;\n\n\tprivate useIdentifyCompress = false;\n\n\tprivate inflate: Inflate | null = null;\n\tprivate readonly textDecoder = new TextDecoder();\n\n\tprivate status: WebSocketShardStatus = WebSocketShardStatus.Idle;\n\n\tprivate replayedEvents = 0;\n\n\tprivate isAck = true;\n\n\tprivate sendRateLimitState = {\n\t\tremaining: 120,\n\t\tresetAt: Date.now(),\n\t};\n\n\tprivate heartbeatInterval: NodeJS.Timer | null = null;\n\tprivate lastHeartbeatAt = -1;\n\n\tprivate session: SessionInfo | null = null;\n\n\tprivate readonly sendQueue = new AsyncQueue();\n\n\tprivate readonly timeouts = new Collection<WebSocketShardEvents, NodeJS.Timeout>();\n\n\tpublic readonly strategy: IContextFetchingStrategy;\n\n\tpublic constructor(strategy: IContextFetchingStrategy, id: number) {\n\t\tsuper();\n\t\tthis.strategy = strategy;\n\t\tthis.id = id;\n\t}\n\n\tpublic async connect() {\n\t\tif (this.status !== WebSocketShardStatus.Idle) {\n\t\t\tthrow new Error(\"Tried to connect a shard that wasn't idle\");\n\t\t}\n\n\t\tconst data = this.strategy.options.gatewayInformation;\n\n\t\tconst { version, encoding, compression } = this.strategy.options;\n\t\tconst params = new URLSearchParams({ v: version, encoding });\n\t\tif (compression) {\n\t\t\tconst zlib = await getZlibSync();\n\t\t\tif (zlib) {\n\t\t\t\tparams.append('compress', compression);\n\t\t\t\tthis.inflate = new zlib.Inflate({\n\t\t\t\t\tchunkSize: 65535,\n\t\t\t\t\tto: 'string',\n\t\t\t\t});\n\t\t\t} else if (!this.useIdentifyCompress) {\n\t\t\t\tthis.useIdentifyCompress = true;\n\t\t\t\tconsole.warn(\n\t\t\t\t\t'WebSocketShard: Compression is enabled but zlib-sync is not installed, falling back to identify compress',\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst url = `${data.url}?${params.toString()}`;\n\t\tthis.debug([`Connecting to ${url}`]);\n\t\tconst connection = new WebSocket(url, { handshakeTimeout: this.strategy.options.handshakeTimeout ?? undefined })\n\t\t\t/* eslint-disable @typescript-eslint/no-misused-promises */\n\t\t\t.on('message', this.onMessage.bind(this))\n\t\t\t.on('error', this.onError.bind(this))\n\t\t\t.on('close', this.onClose.bind(this));\n\t\t/* eslint-enable @typescript-eslint/no-misused-promises */\n\n\t\tconnection.binaryType = 'arraybuffer';\n\t\tthis.connection = connection;\n\n\t\tthis.status = WebSocketShardStatus.Connecting;\n\n\t\tawait this.waitForEvent(WebSocketShardEvents.Hello, this.strategy.options.helloTimeout);\n\n\t\tconst session = this.session ?? (await this.strategy.retrieveSessionInfo(this.id));\n\t\tif (session?.shardCount === this.strategy.options.shardCount) {\n\t\t\tthis.session = session;\n\t\t\tawait this.resume(session);\n\t\t} else {\n\t\t\tawait this.identify();\n\t\t}\n\t}\n\n\tpublic async destroy(options: WebSocketShardDestroyOptions = {}) {\n\t\tif (this.status === WebSocketShardStatus.Idle) {\n\t\t\tthis.debug(['Tried to destroy a shard that was idle']);\n\t\t\treturn;\n\t\t}\n\n\t\tif (!options.code) {\n\t\t\toptions.code = options.recover === WebSocketShardDestroyRecovery.Resume ? CloseCodes.Resuming : CloseCodes.Normal;\n\t\t}\n\n\t\tthis.debug([\n\t\t\t'Destroying shard',\n\t\t\t`Reason: ${options.reason ?? 'none'}`,\n\t\t\t`Code: ${options.code}`,\n\t\t\t`Recover: ${options.recover === undefined ? 'none' : WebSocketShardDestroyRecovery[options.recover]!}`,\n\t\t]);\n\n\t\t// Reset state\n\t\tthis.isAck = true;\n\t\tif (this.heartbeatInterval) {\n\t\t\tclearInterval(this.heartbeatInterval);\n\t\t}\n\t\tthis.lastHeartbeatAt = -1;\n\n\t\t// Clear session state if applicable\n\t\tif (options.recover !== WebSocketShardDestroyRecovery.Resume && this.session) {\n\t\t\tthis.session = null;\n\t\t\tawait this.strategy.updateSessionInfo(this.id, null);\n\t\t}\n\n\t\tif (\n\t\t\tthis.connection &&\n\t\t\t(this.connection.readyState === WebSocket.OPEN || this.connection.readyState === WebSocket.CONNECTING)\n\t\t) {\n\t\t\tthis.connection.close(options.code, options.reason);\n\t\t}\n\n\t\tthis.status = WebSocketShardStatus.Idle;\n\n\t\tif (options.recover !== undefined) {\n\t\t\treturn this.connect();\n\t\t}\n\t}\n\n\tprivate async waitForEvent(event: WebSocketShardEvents, timeoutDuration?: number | null) {\n\t\tthis.debug([`Waiting for event ${event} for ${timeoutDuration ? `${timeoutDuration}ms` : 'indefinitely'}`]);\n\t\tconst controller = new AbortController();\n\t\tconst timeout = timeoutDuration ? setTimeout(() => controller.abort(), timeoutDuration).unref() : null;\n\t\tif (timeout) {\n\t\t\tthis.timeouts.set(event, timeout);\n\t\t}\n\t\tawait once(this, event, { signal: controller.signal });\n\t\tif (timeout) {\n\t\t\tclearTimeout(timeout);\n\t\t\tthis.timeouts.delete(event);\n\t\t}\n\t}\n\n\tpublic async send(payload: GatewaySendPayload) {\n\t\tif (!this.connection) {\n\t\t\tthrow new Error(\"WebSocketShard wasn't connected\");\n\t\t}\n\n\t\tif (this.status !== WebSocketShardStatus.Ready && !ImportantGatewayOpcodes.has(payload.op)) {\n\t\t\tawait once(this, WebSocketShardEvents.Ready);\n\t\t}\n\n\t\tawait this.sendQueue.wait();\n\n\t\tif (--this.sendRateLimitState.remaining <= 0) {\n\t\t\tif (this.sendRateLimitState.resetAt < Date.now()) {\n\t\t\t\tawait sleep(Date.now() - this.sendRateLimitState.resetAt);\n\t\t\t}\n\n\t\t\tthis.sendRateLimitState = {\n\t\t\t\tremaining: 119,\n\t\t\t\tresetAt: Date.now() + 60_000,\n\t\t\t};\n\t\t}\n\n\t\tthis.sendQueue.shift();\n\t\tthis.connection.send(JSON.stringify(payload));\n\t}\n\n\tprivate async identify() {\n\t\tthis.debug([\n\t\t\t'Identifying',\n\t\t\t`shard id: ${this.id.toString()}`,\n\t\t\t`shard count: ${this.strategy.options.shardCount}`,\n\t\t\t`intents: ${this.strategy.options.intents}`,\n\t\t\t`compression: ${this.inflate ? 'zlib-stream' : this.useIdentifyCompress ? 'identify' : 'none'}`,\n\t\t]);\n\t\tconst d: GatewayIdentifyData = {\n\t\t\ttoken: this.strategy.options.token,\n\t\t\tproperties: this.strategy.options.identifyProperties,\n\t\t\tintents: this.strategy.options.intents,\n\t\t\tcompress: this.useIdentifyCompress,\n\t\t\tshard: [this.id, this.strategy.options.shardCount],\n\t\t};\n\n\t\tif (this.strategy.options.largeThreshold) {\n\t\t\td.large_threshold = this.strategy.options.largeThreshold;\n\t\t}\n\n\t\tif (this.strategy.options.initialPresence) {\n\t\t\td.presence = this.strategy.options.initialPresence;\n\t\t}\n\n\t\tawait this.send({\n\t\t\top: GatewayOpcodes.Identify,\n\t\t\td,\n\t\t});\n\n\t\tawait this.waitForEvent(WebSocketShardEvents.Ready, this.strategy.options.readyTimeout);\n\t\tthis.status = WebSocketShardStatus.Ready;\n\t}\n\n\tprivate resume(session: SessionInfo) {\n\t\tthis.debug(['Resuming session']);\n\t\tthis.status = WebSocketShardStatus.Resuming;\n\t\tthis.replayedEvents = 0;\n\t\treturn this.send({\n\t\t\top: GatewayOpcodes.Resume,\n\t\t\td: {\n\t\t\t\ttoken: this.strategy.options.token,\n\t\t\t\tseq: session.sequence,\n\t\t\t\tsession_id: session.sessionId,\n\t\t\t},\n\t\t});\n\t}\n\n\tprivate async heartbeat(requested = false) {\n\t\tif (!this.isAck && !requested) {\n\t\t\treturn this.destroy({ reason: 'Zombie connection', recover: WebSocketShardDestroyRecovery.Resume });\n\t\t}\n\n\t\tawait this.send({\n\t\t\top: GatewayOpcodes.Heartbeat,\n\t\t\td: this.session?.sequence ?? null,\n\t\t});\n\n\t\tthis.lastHeartbeatAt = Date.now();\n\t\tthis.isAck = false;\n\t}\n\n\tprivate async unpackMessage(data: Buffer | ArrayBuffer, isBinary: boolean): Promise<GatewayReceivePayload | null> {\n\t\tconst decompressable = new Uint8Array(data);\n\n\t\t// Deal with no compression\n\t\tif (!isBinary) {\n\t\t\treturn JSON.parse(this.textDecoder.decode(decompressable)) as GatewayReceivePayload;\n\t\t}\n\n\t\t// Deal with identify compress\n\t\tif (this.useIdentifyCompress) {\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tinflate(decompressable, { chunkSize: 65535 }, (err, result) => {\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\treturn reject(err);\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve(JSON.parse(this.textDecoder.decode(result)) as GatewayReceivePayload);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t// Deal with gw wide zlib-stream compression\n\t\tif (this.inflate) {\n\t\t\tconst l = decompressable.length;\n\t\t\tconst flush =\n\t\t\t\tl >= 4 &&\n\t\t\t\tdecompressable[l - 4] === 0x00 &&\n\t\t\t\tdecompressable[l - 3] === 0x00 &&\n\t\t\t\tdecompressable[l - 2] === 0xff &&\n\t\t\t\tdecompressable[l - 1] === 0xff;\n\n\t\t\tconst zlib = (await getZlibSync())!;\n\t\t\tthis.inflate.push(Buffer.from(decompressable), flush ? zlib.Z_SYNC_FLUSH : zlib.Z_NO_FLUSH);\n\n\t\t\tif (this.inflate.err) {\n\t\t\t\tthis.emit('error', `${this.inflate.err}${this.inflate.msg ? `: ${this.inflate.msg}` : ''}`);\n\t\t\t}\n\n\t\t\tif (!flush) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst { result } = this.inflate;\n\t\t\tif (!result) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn JSON.parse(typeof result === 'string' ? result : this.textDecoder.decode(result)) as GatewayReceivePayload;\n\t\t}\n\n\t\tthis.debug([\n\t\t\t'Received a message we were unable to decompress',\n\t\t\t`isBinary: ${isBinary.toString()}`,\n\t\t\t`useIdentifyCompress: ${this.useIdentifyCompress.toString()}`,\n\t\t\t`inflate: ${Boolean(this.inflate).toString()}`,\n\t\t]);\n\n\t\treturn null;\n\t}\n\n\tprivate async onMessage(data: RawData, isBinary: boolean) {\n\t\tconst payload = await this.unpackMessage(data as Buffer | ArrayBuffer, isBinary);\n\t\tif (!payload) {\n\t\t\treturn;\n\t\t}\n\n\t\tswitch (payload.op) {\n\t\t\tcase GatewayOpcodes.Dispatch: {\n\t\t\t\tif (this.status === WebSocketShardStatus.Ready || this.status === WebSocketShardStatus.Resuming) {\n\t\t\t\t\tthis.emit(WebSocketShardEvents.Dispatch, { data: payload });\n\t\t\t\t}\n\n\t\t\t\tif (this.status === WebSocketShardStatus.Resuming) {\n\t\t\t\t\tthis.replayedEvents++;\n\t\t\t\t}\n\n\t\t\t\tswitch (payload.t) {\n\t\t\t\t\tcase GatewayDispatchEvents.Ready: {\n\t\t\t\t\t\tthis.emit(WebSocketShardEvents.Ready);\n\n\t\t\t\t\t\tthis.session ??= {\n\t\t\t\t\t\t\tsequence: payload.s,\n\t\t\t\t\t\t\tsessionId: payload.d.session_id,\n\t\t\t\t\t\t\tshardId: this.id,\n\t\t\t\t\t\t\tshardCount: this.strategy.options.shardCount,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tawait this.strategy.updateSessionInfo(this.id, this.session);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase GatewayDispatchEvents.Resumed: {\n\t\t\t\t\t\tthis.status = WebSocketShardStatus.Ready;\n\t\t\t\t\t\tthis.debug([`Resumed and replayed ${this.replayedEvents} events`]);\n\t\t\t\t\t\tthis.emit(WebSocketShardEvents.Resumed);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this.session) {\n\t\t\t\t\tif (payload.s > this.session.sequence) {\n\t\t\t\t\t\tthis.session.sequence = payload.s;\n\t\t\t\t\t\tawait this.strategy.updateSessionInfo(this.id, this.session);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase GatewayOpcodes.Heartbeat: {\n\t\t\t\tawait this.heartbeat(true);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase GatewayOpcodes.Reconnect: {\n\t\t\t\tawait this.destroy({\n\t\t\t\t\treason: 'Told to reconnect by Discord',\n\t\t\t\t\trecover: WebSocketShardDestroyRecovery.Resume,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase GatewayOpcodes.InvalidSession: {\n\t\t\t\tconst readyTimeout = this.timeouts.get(WebSocketShardEvents.Ready);\n\t\t\t\treadyTimeout?.refresh();\n\t\t\t\tthis.debug([`Invalid session; will attempt to resume: ${payload.d.toString()}`]);\n\t\t\t\tconst session = this.session ?? (await this.strategy.retrieveSessionInfo(this.id));\n\t\t\t\tif (payload.d && session) {\n\t\t\t\t\tawait this.resume(session);\n\t\t\t\t} else {\n\t\t\t\t\tawait this.destroy({\n\t\t\t\t\t\treason: 'Invalid session',\n\t\t\t\t\t\trecover: WebSocketShardDestroyRecovery.Reconnect,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase GatewayOpcodes.Hello: {\n\t\t\t\tthis.emit(WebSocketShardEvents.Hello);\n\t\t\t\tthis.debug([`Starting to heartbeat every ${payload.d.heartbeat_interval}ms`]);\n\t\t\t\tthis.heartbeatInterval = setInterval(() => void this.heartbeat(), payload.d.heartbeat_interval);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase GatewayOpcodes.HeartbeatAck: {\n\t\t\t\tthis.isAck = true;\n\t\t\t\tthis.debug([`Got heartbeat ack after ${Date.now() - this.lastHeartbeatAt}ms`]);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate onError(err: Error) {\n\t\tthis.emit('error', { err });\n\t}\n\n\tprivate async onClose(code: number) {\n\t\tswitch (code) {\n\t\t\tcase 1000:\n\t\t\tcase 4200: {\n\t\t\t\tthis.debug([`Disconnected normally from code ${code}`]);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase GatewayCloseCodes.UnknownError: {\n\t\t\t\tthis.debug([`An unknown error occured: ${code}`]);\n\t\t\t\treturn this.destroy({ code, recover: WebSocketShardDestroyRecovery.Resume });\n\t\t\t}\n\n\t\t\tcase GatewayCloseCodes.UnknownOpcode: {\n\t\t\t\tthis.debug(['An invalid opcode was sent to Discord.']);\n\t\t\t\treturn this.destroy({ code, recover: WebSocketShardDestroyRecovery.Resume });\n\t\t\t}\n\n\t\t\tcase GatewayCloseCodes.DecodeError: {\n\t\t\t\tthis.debug(['An invalid payload was sent to Discord.']);\n\t\t\t\treturn this.destroy({ code, recover: WebSocketShardDestroyRecovery.Resume });\n\t\t\t}\n\n\t\t\tcase GatewayCloseCodes.NotAuthenticated: {\n\t\t\t\tthis.debug(['A request was somehow sent before the identify/resume payload.']);\n\t\t\t\treturn this.destroy({ code, recover: WebSocketShardDestroyRecovery.Reconnect });\n\t\t\t}\n\n\t\t\tcase GatewayCloseCodes.AuthenticationFailed: {\n\t\t\t\tthrow new Error('Authentication failed');\n\t\t\t}\n\n\t\t\tcase GatewayCloseCodes.AlreadyAuthenticated: {\n\t\t\t\tthis.debug(['More than one auth payload was sent.']);\n\t\t\t\treturn this.destroy({ code, recover: WebSocketShardDestroyRecovery.Reconnect });\n\t\t\t}\n\n\t\t\tcase GatewayCloseCodes.InvalidSeq: {\n\t\t\t\tthis.debug(['An invalid sequence was sent.']);\n\t\t\t\treturn this.destroy({ code, recover: WebSocketShardDestroyRecovery.Reconnect });\n\t\t\t}\n\n\t\t\tcase GatewayCloseCodes.RateLimited: {\n\t\t\t\tthis.debug(['The WebSocket rate limit has been hit, this should never happen']);\n\t\t\t\treturn this.destroy({ code, recover: WebSocketShardDestroyRecovery.Reconnect });\n\t\t\t}\n\n\t\t\tcase GatewayCloseCodes.SessionTimedOut: {\n\t\t\t\tthis.debug(['Session timed out.']);\n\t\t\t\treturn this.destroy({ code, recover: WebSocketShardDestroyRecovery.Resume });\n\t\t\t}\n\n\t\t\tcase GatewayCloseCodes.InvalidShard: {\n\t\t\t\tthrow new Error('Invalid shard');\n\t\t\t}\n\n\t\t\tcase GatewayCloseCodes.ShardingRequired: {\n\t\t\t\tthrow new Error('Sharding is required');\n\t\t\t}\n\n\t\t\tcase GatewayCloseCodes.InvalidAPIVersion: {\n\t\t\t\tthrow new Error('Used an invalid API version');\n\t\t\t}\n\n\t\t\tcase GatewayCloseCodes.InvalidIntents: {\n\t\t\t\tthrow new Error('Used invalid intents');\n\t\t\t}\n\n\t\t\tcase GatewayCloseCodes.DisallowedIntents: {\n\t\t\t\tthrow new Error('Used disallowed intents');\n\t\t\t}\n\n\t\t\tdefault: {\n\t\t\t\tthis.debug([`The gateway closed with an unexpected code ${code}, attempting to resume.`]);\n\t\t\t\treturn this.destroy({ code, recover: WebSocketShardDestroyRecovery.Resume });\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate debug(messages: [string, ...string[]]) {\n\t\tconst message = `${messages[0]}${\n\t\t\tmessages.length > 1\n\t\t\t\t? `\\n${messages\n\t\t\t\t\t\t.slice(1)\n\t\t\t\t\t\t.map((m) => `\t${m}`)\n\t\t\t\t\t\t.join('\\n')}`\n\t\t\t\t: ''\n\t\t}`;\n\n\t\tthis.emit(WebSocketShardEvents.Debug, { message });\n\t}\n}\n"],"names":["lazy","AsyncEventEmitter","TextDecoder","AsyncQueue","Collection","WebSocket","setTimeout","once","ImportantGatewayOpcodes","sleep","GatewayOpcodes","inflate","GatewayDispatchEvents","GatewayCloseCodes"],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { AsyncEventEmitter } from '@vladfrangu/async_event_emitter';
|
|
2
|
+
import { GatewayDispatchPayload, GatewaySendPayload } from 'discord-api-types/v10';
|
|
3
|
+
import type { IContextFetchingStrategy } from '../strategies/context/IContextFetchingStrategy';
|
|
4
|
+
export declare enum WebSocketShardEvents {
|
|
5
|
+
Debug = "debug",
|
|
6
|
+
Hello = "hello",
|
|
7
|
+
Ready = "ready",
|
|
8
|
+
Resumed = "resumed",
|
|
9
|
+
Dispatch = "dispatch"
|
|
10
|
+
}
|
|
11
|
+
export declare enum WebSocketShardStatus {
|
|
12
|
+
Idle = 0,
|
|
13
|
+
Connecting = 1,
|
|
14
|
+
Resuming = 2,
|
|
15
|
+
Ready = 3
|
|
16
|
+
}
|
|
17
|
+
export declare enum WebSocketShardDestroyRecovery {
|
|
18
|
+
Reconnect = 0,
|
|
19
|
+
Resume = 1
|
|
20
|
+
}
|
|
21
|
+
export declare type WebSocketShardEventsMap = {
|
|
22
|
+
[WebSocketShardEvents.Debug]: [payload: {
|
|
23
|
+
message: string;
|
|
24
|
+
}];
|
|
25
|
+
[WebSocketShardEvents.Hello]: [];
|
|
26
|
+
[WebSocketShardEvents.Ready]: [];
|
|
27
|
+
[WebSocketShardEvents.Resumed]: [];
|
|
28
|
+
[WebSocketShardEvents.Dispatch]: [payload: {
|
|
29
|
+
data: GatewayDispatchPayload;
|
|
30
|
+
}];
|
|
31
|
+
};
|
|
32
|
+
export interface WebSocketShardDestroyOptions {
|
|
33
|
+
reason?: string;
|
|
34
|
+
code?: number;
|
|
35
|
+
recover?: WebSocketShardDestroyRecovery;
|
|
36
|
+
}
|
|
37
|
+
export declare enum CloseCodes {
|
|
38
|
+
Normal = 1000,
|
|
39
|
+
Resuming = 4200
|
|
40
|
+
}
|
|
41
|
+
export declare class WebSocketShard extends AsyncEventEmitter<WebSocketShardEventsMap> {
|
|
42
|
+
private connection;
|
|
43
|
+
private readonly id;
|
|
44
|
+
private useIdentifyCompress;
|
|
45
|
+
private inflate;
|
|
46
|
+
private readonly textDecoder;
|
|
47
|
+
private status;
|
|
48
|
+
private replayedEvents;
|
|
49
|
+
private isAck;
|
|
50
|
+
private sendRateLimitState;
|
|
51
|
+
private heartbeatInterval;
|
|
52
|
+
private lastHeartbeatAt;
|
|
53
|
+
private session;
|
|
54
|
+
private readonly sendQueue;
|
|
55
|
+
private readonly timeouts;
|
|
56
|
+
readonly strategy: IContextFetchingStrategy;
|
|
57
|
+
constructor(strategy: IContextFetchingStrategy, id: number);
|
|
58
|
+
connect(): Promise<void>;
|
|
59
|
+
destroy(options?: WebSocketShardDestroyOptions): Promise<void>;
|
|
60
|
+
private waitForEvent;
|
|
61
|
+
send(payload: GatewaySendPayload): Promise<void>;
|
|
62
|
+
private identify;
|
|
63
|
+
private resume;
|
|
64
|
+
private heartbeat;
|
|
65
|
+
private unpackMessage;
|
|
66
|
+
private onMessage;
|
|
67
|
+
private onError;
|
|
68
|
+
private onClose;
|
|
69
|
+
private debug;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=WebSocketShard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebSocketShard.d.ts","sourceRoot":"","sources":["../../src/ws/WebSocketShard.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAGN,sBAAsB,EAItB,kBAAkB,EAClB,MAAM,uBAAuB,CAAC;AAI/B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gDAAgD,CAAC;AAM/F,oBAAY,oBAAoB;IAC/B,KAAK,UAAU;IACf,KAAK,UAAU;IACf,KAAK,UAAU;IACf,OAAO,YAAY;IACnB,QAAQ,aAAa;CACrB;AAED,oBAAY,oBAAoB;IAC/B,IAAI,IAAA;IACJ,UAAU,IAAA;IACV,QAAQ,IAAA;IACR,KAAK,IAAA;CACL;AAED,oBAAY,6BAA6B;IACxC,SAAS,IAAA;IACT,MAAM,IAAA;CACN;AAGD,oBAAY,uBAAuB,GAAG;IACrC,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7D,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;IACjC,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;IACjC,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;IACnC,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,sBAAsB,CAAA;KAAE,CAAC,CAAC;CAC7E,CAAC;AAEF,MAAM,WAAW,4BAA4B;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,6BAA6B,CAAC;CACxC;AAED,oBAAY,UAAU;IACrB,MAAM,OAAO;IACb,QAAQ,OAAO;CACf;AAED,qBAAa,cAAe,SAAQ,iBAAiB,CAAC,uBAAuB,CAAC;IAC7E,OAAO,CAAC,UAAU,CAA0B;IAE5C,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAS;IAE5B,OAAO,CAAC,mBAAmB,CAAS;IAEpC,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IAEjD,OAAO,CAAC,MAAM,CAAmD;IAEjE,OAAO,CAAC,cAAc,CAAK;IAE3B,OAAO,CAAC,KAAK,CAAQ;IAErB,OAAO,CAAC,kBAAkB,CAGxB;IAEF,OAAO,CAAC,iBAAiB,CAA6B;IACtD,OAAO,CAAC,eAAe,CAAM;IAE7B,OAAO,CAAC,OAAO,CAA4B;IAE3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoB;IAE9C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0D;IAEnF,SAAgB,QAAQ,EAAE,wBAAwB,CAAC;gBAEhC,QAAQ,EAAE,wBAAwB,EAAE,EAAE,EAAE,MAAM;IAMpD,OAAO;IAkDP,OAAO,CAAC,OAAO,GAAE,4BAAiC;YA4CjD,YAAY;IAcb,IAAI,CAAC,OAAO,EAAE,kBAAkB;YA0B/B,QAAQ;IAiCtB,OAAO,CAAC,MAAM;YAcA,SAAS;YAcT,aAAa;YA4Db,SAAS;IAiGvB,OAAO,CAAC,OAAO;YAID,OAAO;IA+ErB,OAAO,CAAC,KAAK;CAYb"}
|