From c944a20aec50a863986816368ccd64f1a87bfd5f Mon Sep 17 00:00:00 2001 From: Rory& Date: Fri, 16 Oct 2026 06:35:49 +0200 Subject: [PATCH] Identify: log invalid values --- assets/openapi.json | Bin 1108993 -> 1111593 bytes assets/schemas.json | Bin 520870 -> 521354 bytes src/gateway/opcodes/Identify.ts | 7 +++++++ src/schemas/Validator.ts | 12 ++++++++++++ 4 files changed, 19 insertions(+) diff --git a/assets/openapi.json b/assets/openapi.json index eb4c799c89bf662ac4c02cb6b3b1e19543e5b2e9..fd4dbb9d3d7a973322c417a2a9b5986f37825e6e 100644 GIT binary patch delta 1394 zcmbu9e@v8h9LM*4p6{>cxPu234hcGiLqrgcF;@PzX#$f=;g4wA;MAdk$zk{-BNJSt zQ<1Aj`Iu!~DVEN~73Rm;q_gQvTX~tO%PF_zkDR8KrIV%f+}-BZAN|!IpFP{NJ>Spk zdH?vfo}aeo=Cr_e2L0o88#vl%I{52J8+fj9JNSnZX?SD+f>f=B#>tZ5tku*fjbKk) zufggvddv4+JOG>eh=km)s19SRX)**?styP?$8orH+@kmHm{PeAy!C`({sK~!388Me z9>ayiM~vVQd*}1Y2AEYW1^6@No8U4vUhMxJ{iXFM+B<&nSOTlwa9S*Kb zG7V<8QU-wuN;8B;n+KovksNpL-`SJx5FAu&C@+!BA)sfFd~p5F_JjYJ%5l~oWS#;A zBbX1uTdfpAN3E%y1tQ-hC^7<7V;@uGfqsJL{|Cw-fyNwC1>UEX4`GNK z?f+L9ZxR={e1ej57ChV3V(_{6K?t8D999?c1hD0iIS_oC@sA(marHp5dblFGF$QHS zT4U%MGZz2yEi^1(H4vD`j^jYRx^GET8YHDashtNSPp}N5 zrOW}J8dTSsmc3HfuqdnOS@>+1%z+WvYC86}(J!sIdkbA=W~C<%x4%P)0-?Jy4zoJx zyBe155kl>s_`Yr|d0>I!O>7wGmq`i6A7XA5oA-*sjdLcdE3`?)!DW0cfdYq=xW8DYB|@W32)uKZ zw{i^4kjW-YB!9VAS$ih<%b9=`l`JW?&r`*YrbJ)jTP3VaL1!Z?nPSvcSaH{{G?zpW zvAKsmX@RMA3dNek>_R%GC$hU7$6sJKE%05Nu;L39tee4er%fAYOpKjfimn8{V+?-Z zCYsGmm9td5UdB+t))o9GEy@V?V?4$I!4lOSX`1PXklGV+s&F5{<{c%Vc_ z03ENH(#~z+S2XBfBQ%`&s;Jk%q!zf!&CaN}yH#XUJgD&`2D7Ou@ys|rS;RCAZQ+9~ zdbOZ=wY;H#E0I@2G~*3l(}ye;TUQ640zuuzG4KtA_!!fTQrR#A!&$6rWXv#6hm^_K z*F|d`_)@oYZ^M;aMIMhXf)j=~i(gFA28V&Kh$O(HPsB{rQ&`A`W$Q&t9PHd8e#D*c ziE$yA`uKLIv!XV1NP855`1;>o7V;IS|;!Eq97bJA}b|a7!=J(gb{NZOIXu{ z5TN3b-B-X^=a>mj}Vm zDiAoum&jk*n_=W(c1#)v&q38Bg~8eyb{f26A{MX#8F5OHt}mxR`rS$xxKFawkl*mv%njyOoI|pWo6_kqVCiKmw6FhP59=omt52{3 zY)VwJo&TSL`v%b;sculE|EbwvUKI%b5>7E`n%enfsPG`OawNLYcaAeKGt}d9ZgC-; z|A-w$SDAXC6ypMF#~v^nR6BUz_kIhYL9+94G+P+cj(C|Vv{nQR` z)KP&kK6;Y`qr$MUfvyj>(J~Vn=}sMIF4an6$0reg?-7+sD3P%(iW~cn2y1GJUbJWm zw5#i&yjuBC&M(NaIv{ZWH=@MRkhrmuje8sWm}@HTKEkrnF^Y4;29|cp<|-RR#$z#&0G;fU5%c9TfA#_|EzI_#Za(e!xi#)}QAiHn6n7 zB`>g-NpMp+hHc<|IvQ_^D>_s?Xa(C__|_1@aF-Zk;EEIio193^KOT*@HnGk8HtASt6aHG9(j+Q$ zTzNp;Me*Zu{)!SxXzCn&V;F=_*3W=htWc1d`nNdb)KhureNC30=>Sh2al&6I`U32F zo8C*Xt(%(LePv9?!8L699ay!MMJnhV5EYrB3hbGh1{Qk-;M~D8VYge=a3Di_CPE&s z)3NC#?a@ZOGFcxBhr>s8TXolB-ICxLhFy#8_3wbuYM;~*@8}`bS*pX536@O6EY&%5 F{U5vS@IU|n diff --git a/assets/schemas.json b/assets/schemas.json index 2d15f13c72fae3b356172e4116e4c6f792104bd5..7ffe6a75e55018dfb72704168cfa76303cb92130 100644 GIT binary patch delta 1439 zcmbW1YfzMB6vyXzpW9wsSy(_t*xew;3qr3JA&n&x=whK8Gu}{fX>`=lU`G_oQr4)^ z5M||6jv4AUI9gh=(^{t~70mje*+NYAEAhj6mlln%Vkc9yo9EG`Lu<9BvyBlfhRexuzN=&OJv*O7Ja_W;pgIm7!(C zWp68GhEUKCd%%~>hK4%F-I#?_RN}RRd$D{10&j?=u%MU;=nWAgc!qO_<~C%5(@pMy zZ?Mt~{+nX6)@^(loG9Bdc#X_q5MUx1BIShRz)UjZ#Zbs`B?;X-NyG;3Y9Y6)a+Vgn zn*n`Id@vMEpqb#S;dL-^8%x&Is?2C~0rd)D9;tv!vI`7gP18#a- z3?oQNSxE|bx3I9*b5`Q+t4yWX(I`&T!|h+W#1n<=1v8e7WS1!Pc8EdPlE-!k%o)RG zD>x#bZKN=L4wZ0ukJuMK-S+WQ;CUd7SbJZLO#ok>khtb|-oh|ol$S}A9dvv`N}%gH z$%!{YKbhg9N|O4>PrEMEG|=Vgh$`bA#1kP>L8?GEt{l2=kc#adQWp*3uS;9X(@ zwTn4mL5@s@Pw$B0n9Oa|?UD0ft!G(Kw3V#HoT&IR{Cf#K^Yo@1oGE%F=v7Ia+``HzuBj5MC?3h?84N`^zo0Lz0ghk2&(k^T z%V~uIEn8%P<}@UrZwPB=v8e@bKIdR9At~T_R;GhLMbWp(Y~BQs6q2Gn9GeE#BO(=o zV{{wyp5aR|n89|Ku+c0-6QK7^DzIfa>&S>hc-|$~+3=h(oHTVfU#4gLeohl4jS5Is(~-(c)a|`WjQ(Nw3Ie9bMLe`L zu{LlH34?c+d<43i*>Pz8fpEVOu2OJz(F$-*@hk{UvLrY%L=Hs3iweoWIvDklSp2h# zj3+{9kTdXoCu_j7i85GQ#T^mE<=|-LE7dsn9_VQ0aZnngFmOx=tM@A+u<0X`q+s*M zd4TA#m)#PWwG{x4`X}sBPgRre3E%YZhsB@JN{MC17or24sKGyL8yURIW)wZ8GYV zsBX=hxkg)S6-V9_Z!id!X!0)%gwsJY7tN^v(}b`?@OF|6dApev{@%v-sm=n;-v4BR zzFy6t`D&gQDZ=5QRkR!|-$;Sxcg1IV@NMKK?CE6V6f;h+N(BPJ65U5peHAFEyGvb69 zO808XFNE0uiH6TKbC8pGo`d}s+~m+-I-wKcS-4+_F4TiA}BIWg68^(@NlMBj2V(nS3xMi(?=?AkTrbT$|3>%W@F&`{nmM`hI3co;9dr z4LVU*S6f%I1N!FZooeGR+tGfLE+u$0g`KH~Ee%YEt-UPQh#LZIn&A0U!k-r*r^h@Y U8x!%j)w1kWoC!!sP-6D|3!9JQBme*a diff --git a/src/gateway/opcodes/Identify.ts b/src/gateway/opcodes/Identify.ts index 46c4469a1..9ef568245 100644 --- a/src/gateway/opcodes/Identify.ts +++ b/src/gateway/opcodes/Identify.ts @@ -64,6 +64,7 @@ import { ChannelType, DefaultUserGuildSettings, DMChannel, + getInvalidSchemaValues, IdentifySchema, PrivateStatus, PrivateUserProjection, @@ -94,6 +95,12 @@ export async function onIdentify(this: WebSocket, data: Payload) { data.d = validateSchema("IdentifySchema", data.d); } catch (e) { console.error("AJV validation of Identify schema failed:", e); + console.error("Provided values:"); + if (Array.isArray(e)) + for (const invalidSchemaValue of getInvalidSchemaValues(data.d, e)) { + console.error(`${invalidSchemaValue.instancePath}:`, invalidSchemaValue.value); + } + check.call(this, IdentifySchema, data.d); } diff --git a/src/schemas/Validator.ts b/src/schemas/Validator.ts index 610f827c7..8052a9479 100644 --- a/src/schemas/Validator.ts +++ b/src/schemas/Validator.ts @@ -20,6 +20,7 @@ import Ajv, { SchemaObject } from "ajv"; import addFormats from "ajv-formats"; import fs from "node:fs"; import path from "node:path"; +import instance from "@spacebar/api/routes/policies/instance"; const SchemaPath = path.join(__dirname, "..", "..", "assets", "schemas.json"); const schemas = JSON.parse(fs.readFileSync(SchemaPath, { encoding: "utf8" }).replaceAll("#/definitions/", "")); @@ -67,3 +68,14 @@ export function validateSchema(schema: string, data: G): G { } return data; } + +export function getInvalidSchemaValues(data: object, errors: typeof ajv.errors) { + if (errors == null) return []; + return errors.map((e) => getInvalidSchemaValue(data, e.instancePath)); +} + +function getInvalidSchemaValue(data: object, instancePath: string) { + const actualInstancePath = instancePath.startsWith("/") ? instancePath.slice(1) : instancePath; + if (actualInstancePath.includes("/")) return getInvalidSchemaValue(data, actualInstancePath.split("/")[0]); + return { instancePath, value: data }; +}