From ee98101e4c463910e1ca6dd099de13395cd9fa57 Mon Sep 17 00:00:00 2001 From: Madeline <46743919+MaddyUnderStars@users.noreply.github.com> Date: Mon, 22 Aug 2022 15:33:06 +1000 Subject: [PATCH] LazyRequest on mobile + socket not closed fixes --- bundle/package-lock.json | Bin 607728 -> 611923 bytes bundle/package.json | 15 +++++++++------ gateway/package-lock.json | Bin 540149 -> 542691 bytes gateway/package.json | 2 ++ gateway/src/events/Message.ts | 11 +++++------ gateway/src/listener/listener.ts | 2 +- gateway/src/opcodes/Identify.ts | 3 ++- gateway/src/opcodes/LazyRequest.ts | 9 ++++++--- 8 files changed, 25 insertions(+), 17 deletions(-) diff --git a/bundle/package-lock.json b/bundle/package-lock.json index 4046e7b63e34cc6be9f0d2bc4b84ec0e2fcdedf1..644a3a3c02fe482100786ce0c6c4186e40076cfe 100644 GIT binary patch delta 2386 zcmd6nTZkKV6vmlMZfm!#?Y7l!TiHw3wxrpa$z?XFR-D|-Ju{ozW~#+ZvXhzIleuN$ z%Zd*LYoR6R-v?1ELQ#b7TFMj=TnojAK3FLtS_B0}9~3GgA|g217I*t1QYdzw=FDLZ z-#O_4{JGI+XZQ-3JZaoH_+ZPU19j(Na4BS-8_*_xvx6;89hsOq?wCbq zoda^~{tI83-iEgg|KOYAS_;!s7&t?i-51^*xw7?+YWT2H=LPGyW*vv-&kdG-9S7eC z#!;~PC3Fyc^pnxNrz*6Xx62`RWJ6@fz_MtZ&i30Sj*cgVq|}dwd0fU_SzjxZCuFKl zawTqVf#98Zs20Y>IL0tcgKtDawo-adR%-o%OLET_)A>Y;ty8RI%LrV8Bo&VYipL=v zAXgy^hye34So#y%3??o?7H#}8baBMkY>91vZ8AL!Zhi+N;Myn9$cWh11+FE~@8Owj zG+W9QlHN>1L5XUMVCAY%PrEoqc6wRT$IxX~^u?Tv8?CteNT9*R1qm;e(QGQ{<0&bj zsE!cd6}XV&shYP!$ZWo5|)in zWW21zQvQeDS>g z?bK`VvEA^{lapS{#ITb?oBy%ndJ_*$!={XnuOJSoQ>#*LqUMtn7Zok&%JW5}W9x@| z5jPTX_wmRg=}2bKV!a&=2_zzRyR6@D^Y&6ig-X*4f{^6BxTDr~$9xU74bE7M`{4;0 z1>`&WaDTiA&;Mb$EgBHNn|Fg}cfeL~@D1p|?)7f;L9Yk;InREpTOk#Uppm?P(H2l# zIEr}-@j9Nv(5&EQc=wzuDA%LGR7qFv@J9L+(kKKl0-slt;dqrM`LMqswaPuY62h}K znNDGG%w6y0hW4BWONhY;Il!5w;gJ)b^G3~c-joD)@<`Kp^fGxLafo=!y#JL~%|OHQo-yqMt1p^oH0Z3k^Y~rDr*Kc;LmWLirB%K*U;XX=;LZwS*}HusdT)Veu)>Z3 zl!D*YzPN7L^w|9YpWAD--aUZ^H}@I=cg{Mh{k+8*8~bk*TDTV!qJ}=0owDw^a(C=0 Q+!OY!x$}u1tnVNH8_=&P$^ZZW delta 201 zcmV;)05<>AtR?V^C9u^5lie92mv>ACER#S5pp#1)7qbxtqyv-75l^!y3YZUr-5Iyt z83FaDx9`FMbqcqR&H;@|heH|yw?i5O**ceH;0L9bKAr&$m%Y{k8@C`=1ByzwAEN_Y z8Ml(X15){i47dch47deMmy_KYqqi7P1|(3oOrZv}373mK0}Gd#&H0Vo3-z~U;0Lffw|N~1Ruh+!y#t+>J8}gQw_7p@V#K$s_Xww6 DD@IWq diff --git a/bundle/package.json b/bundle/package.json index b8678f81..484c0f05 100644 --- a/bundle/package.json +++ b/bundle/package.json @@ -37,12 +37,14 @@ "@types/i18next-node-fs-backend": "^2.1.0", "@types/jest": "^27.0.1", "@types/jest-expect-message": "^1.0.3", + "@types/json-bigint": "^1.0.1", "@types/jsonwebtoken": "^8.5.0", "@types/morgan": "^1.9.3", "@types/multer": "^1.4.7", "@types/node": "^14.18.24", "@types/node-fetch": "^2.5.12", "@types/node-os-utils": "^1.2.0", + "@types/sharp": "^0.30.4", "@types/supertest": "^2.0.11", "@types/ws": "^7.4.0", "@zerollup/ts-transform-paths": "^1.7.18", @@ -54,8 +56,7 @@ "ts-patch": "^1.4.4", "tsconfig-paths": "^3.12.0", "typescript": "^4.2.3", - "typescript-json-schema": "0.50.1", - "@types/sharp": "^0.30.4" + "typescript-json-schema": "0.50.1" }, "dependencies": { "@aws-sdk/client-s3": "^3.36.1", @@ -81,6 +82,7 @@ "exif-be-gone": "^1.2.0", "express": "^4.17.1", "express-async-errors": "^3.1.1", + "fast-zlib": "^2.0.1", "file-type": "^16.5.4", "form-data": "^4.0.0", "fs-extra": "^10.0.0", @@ -89,6 +91,7 @@ "i18next-node-fs-backend": "^2.1.3", "image-size": "^1.0.0", "jest": "^27.0.6", + "json-bigint": "^1.0.0", "jsonwebtoken": "^8.5.1", "lambert-db": "^1.2.3", "lambert-server": "^1.2.11", @@ -97,6 +100,7 @@ "multer": "^1.4.2", "nan": "^2.15.0", "nanocolors": "^0.2.12", + "node-2fa": "^2.0.3", "node-fetch": "^2.6.2", "node-os-utils": "^1.3.5", "patch-package": "^6.4.7", @@ -104,6 +108,7 @@ "picocolors": "^1.0.0", "proxy-agent": "^5.0.0", "reflect-metadata": "^0.1.13", + "sharp": "^0.30.7", "sqlite3": "^4.2.0", "supertest": "^6.1.6", "tslib": "^2.3.1", @@ -111,8 +116,6 @@ "typescript": "^4.1.2", "typescript-cached-transpile": "^0.0.6", "typescript-json-schema": "^0.50.1", - "ws": "^7.4.2", - "sharp": "^0.30.7", - "fast-zlib": "^2.0.1" + "ws": "^7.4.2" } -} \ No newline at end of file +} diff --git a/gateway/package-lock.json b/gateway/package-lock.json index 38bdab908fc6a1aeff1cbaafc27c1fbfeea0e905..e39901de4cb4fe28926beab76b4b750d605e6996 100644 GIT binary patch delta 1896 zcmd6oZ)h839LKp{uD6Y~maVScY-dc7;kx8<`EyCE!=_1-TysgUxunSz9m~HVKxfg;ICldo&vA*$*FPy$o5jRmL2>zKMsKenkYRNzZUxdu%9Mgy)pbzr~Rbh)Z1=o5VA{HyT2N>f89&pUiK)Y*+2jOU-z5a7bkJ$)Lx z!DLY`_MW=>eh&-XeHZv*2|j++tC1kcwzP#TZy}J{d)iwFeA0|`P6X%PgO99l_Z$R{ zGI~NcDK$#zD)twFdLgFow)8l-E}&zPW+|Cnpn}z4tvTc437N1&rbJKFDbE$?Y%*($ zIe9bT$@>V2!V`%^kuQ>-@g!rD>-i>YsaZpDCK?dA!W>r{4_C7Rny%Yx$~k5bXm7zs zl&2O^<)!7Xz!eYNw_|`$9q`Cbq}KH~Y&iBOr68u#D&EeZ$1Mh2T?ge&bOfAzr3VR@ zC@z@}F%>^qm9YTH1c{JJ7$%$fxS5FLO_3UBjoXvHhMUb!X9`wd(VB{hX~Km2BUE}S zCyggPRTj4wNvax+N;7G%-FP?Q{VR8N3EP_!@Gsilj8H2k(g3;!4?_-cV+A#hs(I@; zD~4QErR_HL4q*IFeN78h_xUXX=bo*^r(9B18n4erNnfId%URh;&-m>byAYa9S@>Gg zOf%EDD9>T#dLo~-=jyJRCed(D$x_7PryIg_I8))WwuTwRx8ce5<;UPhCc(f4tbv*U z!_grya1;F_*+aV}sABET^`=gSS+`4MGr@Q!V49Nfd9oBMrMyCD(Ly!LGilaq6thH- z!)(c@NTdtlSl;6e)E%x$$i=b|GG1bX6|u<%#D+V>6&4-EOxWzKH|nQP>%fN(LPN^q z-|Pd12Gp<2UmO@N#idGG6bwnRh)H}=l+wA1$md0H>k>TLzOey+KG9XJ$`9~Cu=O>1 z;=X?>Q~X7EEW+@#jM?W)3$fc1P^lX|A#m&0s|zCd^|Ai)eJQ31+c|N60yv zO4a?dF0w(*#m47Jde$mesF<0zm!-0&kxkJ|gaK=JVC|vqJa$Cs0PogdZTroS;V0jK zY|0kGfNcgHRIUx8;Duk2J|H8#hr#5J8U(an)*M&PqG!NcziCc_3zs#h@+~^N+-hmm zjoTGF4cM-IRyGYLi?3RSDpvoAKiCUxw3Qs zlqTSZz&mD@`Uxxg+OfT)()K8gZdj4dXYg`WhXN;hEIOZVmA2%1xfolxCi_|VnOPJj86>*6 z8|Qll8wQyAW;jNeW{0K}nV4A?22~aoN9y}#CFc2L6}u%(W}GQ9S)q(`x_H4G(`_{6HObl?AR@)Cs?t|(8(X$qpaC?N^j?gVDB}Z9^}k8 RX}fSgyS(1^h<)tcod8>_i=F@g diff --git a/gateway/package.json b/gateway/package.json index 205cd9c1..ad500897 100644 --- a/gateway/package.json +++ b/gateway/package.json @@ -16,6 +16,7 @@ "license": "AGPL-3.0-only", "devDependencies": { "@types/amqplib": "^0.8.1", + "@types/json-bigint": "^1.0.1", "@types/jsonwebtoken": "^8.5.0", "@types/node": "^14.18.24", "@types/node-fetch": "^2.5.12", @@ -30,6 +31,7 @@ "amqplib": "^0.8.0", "dotenv": "^8.2.0", "fast-zlib": "^2.0.1", + "json-bigint": "^1.0.0", "jsonwebtoken": "^8.5.1", "lambert-server": "^1.2.11", "missing-native-js-functions": "^1.2.18", diff --git a/gateway/src/events/Message.ts b/gateway/src/events/Message.ts index e9271da4..1a177e0c 100644 --- a/gateway/src/events/Message.ts +++ b/gateway/src/events/Message.ts @@ -8,6 +8,8 @@ import OPCodeHandlers from "../opcodes"; import { Tuple } from "lambert-server"; import { check } from "../opcodes/instanceOf"; import WS from "ws"; +import BigIntJson from "json-bigint"; +const bigIntJson = BigIntJson({ storeAsString: true }); const PayloadSchema = { op: Number, @@ -30,16 +32,13 @@ export async function Message(this: WebSocket, buffer: WS.Data) { buffer = buffer.toString() as any; } } - data = JSON.parse(buffer as string); + data = bigIntJson.parse(buffer as string); } else if (typeof buffer == "string") { - data = JSON.parse(buffer as string); + data = bigIntJson.parse(buffer as string) } else return; - // TODO: find a way to properly convert a funny number to string - if (data?.op == 14 && typeof data.d.guild_id == "number") return; - check.call(this, PayloadSchema, data); // @ts-ignore @@ -54,7 +53,7 @@ export async function Message(this: WebSocket, buffer: WS.Data) { try { return await OPCodeHandler.call(this, data); } catch (error) { - console.error(error); + console.error(`Error: Op ${data.op}`, error); // if (!this.CLOSED && this.CLOSING) return this.close(CLOSECODES.Unknown_error); } diff --git a/gateway/src/listener/listener.ts b/gateway/src/listener/listener.ts index 060de65b..8a90ce0c 100644 --- a/gateway/src/listener/listener.ts +++ b/gateway/src/listener/listener.ts @@ -241,7 +241,7 @@ async function consume(this: WebSocket, opts: EventOpts) { break; } - Send(this, { + await Send(this, { op: OPCODES.Dispatch, t: event, d: data, diff --git a/gateway/src/opcodes/Identify.ts b/gateway/src/opcodes/Identify.ts index 041512c5..57c45d1f 100644 --- a/gateway/src/opcodes/Identify.ts +++ b/gateway/src/opcodes/Identify.ts @@ -137,12 +137,13 @@ export async function onIdentify(this: WebSocket, data: Payload) { guilds = guilds.map((guild) => { if (user.bot) { setTimeout(() => { - Send(this, { + var promise = Send(this, { op: OPCODES.Dispatch, t: EVENTEnum.GuildCreate, s: this.sequence++, d: guild, }); + if (promise) promise.catch(console.error); }, 500); return { id: guild.id, unavailable: true }; } diff --git a/gateway/src/opcodes/LazyRequest.ts b/gateway/src/opcodes/LazyRequest.ts index 0db35286..54b06eb2 100644 --- a/gateway/src/opcodes/LazyRequest.ts +++ b/gateway/src/opcodes/LazyRequest.ts @@ -39,13 +39,16 @@ async function getMembers(guild_id: string, range: [number, number]) { } catch (e) { console.error(`LazyRequest`, e); + } + + if (!members) { return { items: [], groups: [], range: [], members: [], - } - } + }; + } const groups = [] as any[]; const items = []; @@ -157,7 +160,7 @@ export async function onLazyRequest(this: WebSocket, { d }: Payload) { .flat() .unique(); - return Send(this, { + return await Send(this, { op: OPCODES.Dispatch, s: this.sequence++, t: "GUILD_MEMBER_LIST_UPDATE",