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
|