diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gateway/events/Connection.ts | 22 | ||||
-rw-r--r-- | src/gateway/events/Message.ts | 12 | ||||
-rw-r--r-- | src/gateway/util/Send.ts | 18 | ||||
-rw-r--r-- | src/util/imports/Erlpack.ts | 12 | ||||
-rw-r--r-- | src/util/imports/index.ts | 1 | ||||
-rw-r--r-- | src/webrtc/events/Connection.ts | 4 |
6 files changed, 38 insertions, 31 deletions
diff --git a/src/gateway/events/Connection.ts b/src/gateway/events/Connection.ts index 82081266..5ba68ef7 100644 --- a/src/gateway/events/Connection.ts +++ b/src/gateway/events/Connection.ts @@ -27,12 +27,13 @@ import { Close } from "./Close"; import { Message } from "./Message"; import { Deflate, Inflate } from "fast-zlib"; import { URL } from "url"; -import { Config } from "@fosscord/util"; -let erlpack: unknown; +import { Config, ErlpackType } from "@fosscord/util"; + +let erlpack: ErlpackType | null = null; try { - erlpack = require("@yukikaze-bot/erlpack"); -} catch (error) { - /* empty */ + erlpack = require("erlpack") as ErlpackType; +} catch (e) { + // empty } // TODO: check rate limit @@ -84,14 +85,11 @@ export async function Connection( const { searchParams } = new URL(`http://localhost${request.url}`); // @ts-ignore socket.encoding = searchParams.get("encoding") || "json"; - if (!["json", "etf"].includes(socket.encoding)) { - if (socket.encoding === "etf" && erlpack) { - throw new Error( - "Erlpack is not installed: 'npm i @yukikaze-bot/erlpack'", - ); - } + if (!["json", "etf"].includes(socket.encoding)) return socket.close(CLOSECODES.Decode_error); - } + + if (socket.encoding === "etf" && erlpack) + throw new Error("Erlpack is not installed: 'npm i erlpack'"); socket.version = Number(searchParams.get("version")) || 8; if (socket.version != 8) diff --git a/src/gateway/events/Message.ts b/src/gateway/events/Message.ts index b949f273..16e4518d 100644 --- a/src/gateway/events/Message.ts +++ b/src/gateway/events/Message.ts @@ -20,18 +20,18 @@ import { WebSocket, Payload, CLOSECODES, OPCODES } from "@fosscord/gateway"; import OPCodeHandlers from "../opcodes"; import { check } from "../opcodes/instanceOf"; import WS from "ws"; -import { PayloadSchema } from "@fosscord/util"; +import { PayloadSchema, ErlpackType } from "@fosscord/util"; import * as Sentry from "@sentry/node"; import BigIntJson from "json-bigint"; import path from "path"; import fs from "fs/promises"; const bigIntJson = BigIntJson({ storeAsString: true }); -let erlpack: { unpack: (buffer: Buffer) => Payload }; +let erlpack: ErlpackType | null = null; try { - erlpack = require("@yukikaze-bot/erlpack"); -} catch (error) { - /* empty */ + erlpack = require("erlpack") as ErlpackType; +} catch (e) { + // empty } export async function Message(this: WebSocket, buffer: WS.Data) { @@ -52,7 +52,7 @@ export async function Message(this: WebSocket, buffer: WS.Data) { } } data = bigIntJson.parse(buffer as string); - } else if (this.encoding === "etf" && buffer instanceof Buffer) { + } else if (this.encoding === "etf" && buffer instanceof Buffer && erlpack) { try { data = erlpack.unpack(buffer); } catch { diff --git a/src/gateway/util/Send.ts b/src/gateway/util/Send.ts index a89d92d7..38e5ab4a 100644 --- a/src/gateway/util/Send.ts +++ b/src/gateway/util/Send.ts @@ -16,18 +16,18 @@ along with this program. If not, see <https://www.gnu.org/licenses/>. */ -let erlpack: { pack: (data: Payload) => Buffer }; -try { - erlpack = require("@yukikaze-bot/erlpack"); -} catch (error) { - console.log( - "Missing @yukikaze-bot/erlpack, electron-based desktop clients designed for discord.com will not be able to connect!", - ); -} import { Payload, WebSocket } from "@fosscord/gateway"; import fs from "fs/promises"; import path from "path"; +import type { ErlpackType } from "@fosscord/util"; +let erlpack: ErlpackType | null = null; +try { + erlpack = require("erlpack") as ErlpackType; +} catch (e) { + // empty +} + export function Send(socket: WebSocket, data: Payload) { if (process.env.WS_VERBOSE) console.log(`[Websocket] Outgoing message: ${JSON.stringify(data)}`); @@ -47,7 +47,7 @@ export function Send(socket: WebSocket, data: Payload) { } let buffer: Buffer | string; - if (socket.encoding === "etf") buffer = erlpack.pack(data); + if (socket.encoding === "etf" && erlpack) buffer = erlpack.pack(data); // TODO: encode circular object else if (socket.encoding === "json") buffer = JSON.stringify(data); else return; diff --git a/src/util/imports/Erlpack.ts b/src/util/imports/Erlpack.ts new file mode 100644 index 00000000..a69cffbb --- /dev/null +++ b/src/util/imports/Erlpack.ts @@ -0,0 +1,12 @@ +/* + https://github.com/discord/erlpack/blob/master/js/index.d.ts + MIT License + Copyright (c) 2017 Discord +*/ +/* eslint-disable @typescript-eslint/no-explicit-any */ +// @fc-license-skip + +export type ErlpackType = { + pack: (data: any) => Buffer; + unpack: <T = any>(data: Buffer) => T; +}; diff --git a/src/util/imports/index.ts b/src/util/imports/index.ts index 1fd93e45..da0be37c 100644 --- a/src/util/imports/index.ts +++ b/src/util/imports/index.ts @@ -17,3 +17,4 @@ */ export * from "./OrmUtils"; +export * from "./Erlpack"; diff --git a/src/webrtc/events/Connection.ts b/src/webrtc/events/Connection.ts index 0971bc19..c362c97a 100644 --- a/src/webrtc/events/Connection.ts +++ b/src/webrtc/events/Connection.ts @@ -23,10 +23,6 @@ import WS from "ws"; import { VoiceOPCodes } from "../util"; import { onClose } from "./Close"; import { onMessage } from "./Message"; -var erlpack: any; -try { - erlpack = require("@yukikaze-bot/erlpack"); -} catch (error) {} // TODO: check rate limit // TODO: specify rate limit in config |