From 0ccff5056b3ecac5d5f3ffd315d1d5f334da6c90 Mon Sep 17 00:00:00 2001 From: Fleny Date: Fri, 24 Jul 2026 13:48:23 +0200 Subject: [PATCH] feat!: Always use builtin WebSocket (#5166) * feat: Always use builtin WebSocket ws is now a dev deps as we use it in tests * refresh lock file --- packages/gateway/package.json | 6 +++--- packages/gateway/src/Shard.ts | 12 +++--------- yarn.lock | 19 ++++++------------- 3 files changed, 12 insertions(+), 25 deletions(-) diff --git a/packages/gateway/package.json b/packages/gateway/package.json index 570acdc5d..6146e2087 100644 --- a/packages/gateway/package.json +++ b/packages/gateway/package.json @@ -26,8 +26,7 @@ }, "dependencies": { "@discordeno/types": "workspace:^", - "@discordeno/utils": "workspace:^", - "ws": "^8.21.0" + "@discordeno/utils": "workspace:^" }, "devDependencies": { "@biomejs/biome": "2.5.5", @@ -44,6 +43,7 @@ "sinon": "^22.0.0", "ts-node": "^10.9.2", "tsconfig": "*", - "typescript": "^6.0.3" + "typescript": "^6.0.3", + "ws": "^8.21.1" } } diff --git a/packages/gateway/src/Shard.ts b/packages/gateway/src/Shard.ts index 09dddee07..835d5702d 100644 --- a/packages/gateway/src/Shard.ts +++ b/packages/gateway/src/Shard.ts @@ -3,7 +3,6 @@ import { createInflate, createZstdDecompress, type Inflate, inflateSync, type Zs import type { DiscordGatewayPayload, DiscordHello, DiscordReady, DiscordUpdatePresence } from '@discordeno/types'; import { GatewayCloseEventCodes, GatewayOpcodes } from '@discordeno/types'; import { delay, LeakyBucket, logger } from '@discordeno/utils'; -import NodeWebSocket from 'ws'; import { type ShardEvents, type ShardGatewayConfig, @@ -126,7 +125,7 @@ export class DiscordenoShard { async close(code: number, reason: string): Promise { this.logger.debug(`[Shard] Request for Shard #${this.id} to close the socket with code ${code}.`); - if (this.socket?.readyState !== NodeWebSocket.OPEN) { + if (this.socket?.readyState !== WebSocket.OPEN) { this.logger.debug(`[Shard] Shard #${this.id}'s ready state is ${this.socket?.readyState}, Unable to close.`); return; } @@ -211,12 +210,7 @@ export class DiscordenoShard { this.gatewayConfig.compress = false; } - // We check for built-in WebSocket implementations in Bun or Deno, NodeJS v22 has an implementation too but it seems to be less optimized so for now it is better to use the ws npm package - const shouldUseBuiltin = Reflect.has(globalThis, 'WebSocket') && (Reflect.has(globalThis, 'Bun') || Reflect.has(globalThis, 'Deno')); - - // @ts-expect-error NodeWebSocket doesn't support "dispatchEvent", and while we don't use it, it is required on the "WebSocket" type - const socket: WebSocket = shouldUseBuiltin ? new WebSocket(url) : new NodeWebSocket(url); - this.socket = socket; + const socket = (this.socket = new WebSocket(url)); // By default WebSocket will give us a Blob, this changes it so that it gives us an ArrayBuffer socket.binaryType = 'arraybuffer'; @@ -299,7 +293,7 @@ export class DiscordenoShard { /** Check whether the connection to Discord is currently open. */ isOpen(): boolean { - return this.socket?.readyState === NodeWebSocket.OPEN; + return this.socket?.readyState === WebSocket.OPEN; } /** Attempt to resume the previous shards session with the gateway. */ diff --git a/yarn.lock b/yarn.lock index 18fd56bf6..7cf388b20 100644 --- a/yarn.lock +++ b/yarn.lock @@ -165,7 +165,7 @@ __metadata: ts-node: "npm:^10.9.2" tsconfig: "npm:*" typescript: "npm:^6.0.3" - ws: "npm:^8.21.0" + ws: "npm:^8.21.1" languageName: unknown linkType: soft @@ -908,14 +908,7 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*": - version: 18.15.11 - resolution: "@types/node@npm:18.15.11" - checksum: 10c0/670deb1a9daa812dc86b1e8964c0c6b0bef7c32672833c10578c1e5dd2682f2bd99b86d814fde86a5dd4a3da48ea039f41db30a835b245aa7c34c62fa1f23f0d - languageName: node - linkType: hard - -"@types/node@npm:^26.1.1": +"@types/node@npm:*, @types/node@npm:^26.1.1": version: 26.1.1 resolution: "@types/node@npm:26.1.1" dependencies: @@ -3381,9 +3374,9 @@ __metadata: languageName: node linkType: hard -"ws@npm:^8.21.0": - version: 8.21.0 - resolution: "ws@npm:8.21.0" +"ws@npm:^8.21.1": + version: 8.21.1 + resolution: "ws@npm:8.21.1" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ">=5.0.2" @@ -3392,7 +3385,7 @@ __metadata: optional: true utf-8-validate: optional: true - checksum: 10c0/ef4a243476283fc49bc7550966c4af4aa0eef56273837211e700de3b664e08604a760cdddcb5ba43c049140e74ccfec5b0ee0bb439e08c2adf9138902fdde5f9 + checksum: 10c0/c4c6f1d95f6d465262de2037c57c715725d67e078dd49420ede4e19115668aba159cb64d85c5e89c06eb2826be599e62e5095860ad6cc54ff42e8bd7684e1db8 languageName: node linkType: hard