From da2086696784f4d4d82eb853630e4d94662661dd Mon Sep 17 00:00:00 2001 From: Madeline <46743919+MaddyUnderStars@users.noreply.github.com> Date: Wed, 1 Feb 2023 13:00:04 +1100 Subject: [PATCH] Use erlpack instead of @yukikaze-bot/erlpack (#968) --- package-lock.json | Bin 271966 -> 272857 bytes package.json | 8 ++++---- src/gateway/events/Connection.ts | 22 ++++++++++------------ src/gateway/events/Message.ts | 12 ++++++------ src/gateway/util/Send.ts | 18 +++++++++--------- src/util/imports/Erlpack.ts | 12 ++++++++++++ src/util/imports/index.ts | 1 + src/webrtc/events/Connection.ts | 4 ---- 8 files changed, 42 insertions(+), 35 deletions(-) create mode 100644 src/util/imports/Erlpack.ts diff --git a/package-lock.json b/package-lock.json index b9a712aa02dcb71411f571840da123764a20d61e..165a2b23c718c59ebf471a2e5e831af0458655f2 100644 GIT binary patch delta 702 zcmXw0J8#oq6qRj?2#>Z5Z2_sG2^9muu|KCyYM2tcN$NOto=%(r$w{5WiR~ng^JoSn z#6uvlR1th@Ck6&60-AxpfKU+=3lb9>uz`@ExUV~0oqKeodvwm1_tT$0O>dJE$hFsj zi9gtR)zVu^x#797;JHQmfNyCuKXGYfot?jHxWs-Q~&IuM9*M77)O>lRsy4Oo4Z%rizX zk(V0+h>$g*=_Nzzpu@y6N!Ct-Od&;PIe#J%w+cn2Uee&^9!AepG+o8JmWJC+yrtN+ zed7RbK0w^3jt#-@5(?n-59|co-9ZVM&ZCPk1(C%ZS+uvLZhqY_V*m z8eX%^1?WD!^9)H{J#OWoTHvF7r04o+mopwyF%L+}2WYstfL^|@pl=l{G>MoHyl}iL z=P)qos2t1A#vNU71g^MqR54q%b<*TJA{kGy^_AA3ylT;$SMD)nOV4U{(PsE?CDoI7 zE<<iFH{Ji)1p!w4kH1RGnUFqRoUWCofei+%ll?i_Hyg43WR`WPEX~f$POM7RP0BCPPc6zRNKDRFvQkirGt@Jf z?3k+1T+F$>n3M5?w 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 . */ -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: (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