From 87988c3039e7f823341aac0f9072652e13df2df2 Mon Sep 17 00:00:00 2001 From: Rory& Date: Wed, 15 Jul 2026 13:24:41 +0200 Subject: [PATCH] Clean up various other schemas --- assets/openapi.json | Bin 996407 -> 1016522 bytes assets/schemas.json | Bin 441629 -> 455393 bytes src/api/routes/channels/preload-messages.ts | 6 ++-- src/api/routes/interactions/index.ts | 34 +++++++++--------- .../api/bots/InteractionCreateSchema.ts | 8 ++--- src/schemas/api/channels/Webhook.ts | 8 ++--- src/schemas/api/messages/Message.ts | 1 + src/schemas/responses/EmojiSourceResponse.ts | 5 ++- .../responses/GuildMessagesSearchResponse.ts | 4 +-- .../responses/MemberJoinGuildResponse.ts | 11 +++--- .../PreloadMessagesResponseSchema.ts | 5 ++- 11 files changed, 39 insertions(+), 43 deletions(-) diff --git a/assets/openapi.json b/assets/openapi.json index ecfb2575387781825ae35e84c242e653cc2d7b55..9c1aea00820bdf23a1debd76d14848c00f73c424 100644 GIT binary patch delta 2345 zcma)7Yfx0z9iMaWx##RI?7A2g1cU`NTGPO4RE+hp)@i`R$JWU-4F>M+!U|h~U3Qlc zVp_EpNgPGwD!-|5!V;URlXS9%nwuFL#UyPV%qVm^O_NqJerRpuV{M*OwC%ZfsfK>) zhjZti^FNRO`TrhAzq)j&V|n7rk+C<((w-}d9-Bf}@;9!;AJV*iivGiyB()Ib)9Az6 zV9zcL?pBI0)h^{~zIQB03|ULDcZ+loAN+U7dw|v;Qo$6A-p8jS*(xizaF*w2sl5z| z4Rjj1wn#Rtc#xIp4^@-p3f%dGA=zo?I9cMDtoc57Xr4YNsv2awej-3}W~XPIIi)Ow z^F3vb?mEOT5x5tKWuqO+x6H7NxZe#iI?dA*2yZ<3YzSAxej~Ukv;omP%A1-`EeFLdu z%VhXIBTs09zo3ZxhSXxNLYC;xu=Fy4_g%@S-)NDhXCrw``m%QyRrTs!(wYn;4@*|` zO;)NV1l|*cIU?sEc|yw2_Z*iJ3QpBYTu&XA?$G~ZO{Z8R*2y0S(EU2k=scZAMN{fAQn`H_!KQdE0Fkt`4Ha2I}8%o9DKiQ z!j9pCl1smt#i!UN0*&gnYcPD3Sul1^`2xub#xWz8 z6r?$52Eutf2Iud|_l$W~%ssF4qzTcV=O{|gi+qFj8e?&b2(tM{@BRNJ3wF1nB_qKf|5(RQ0hQFk_xbl&*eexp#$l1*Zym3sQfSD6J1RhSC25 zEjB7UN=O*{;-p*hhH*x7r0bRyYw$;db!u&6DA*iV;|)PAE9rv!RaW3IBdg57;|)Rd zpUj+#)FaX&h#F=h<>Ku~62do8H&GPz_GrB$DRyC)4tDhDkeZLfLKcF;TxT zCOpPBMnhWS6~z{+i>Z-l@ad4K{|RNbmOAi~K?#oEx#d-u^t>qMH^=Cbv<-@GCPqJ@ zhVA8Q+om&34X%QFtK!i-!9uL~C#{5QGB1UDD$D3Sq&#Vmv!^s0g_2~|QVlV9?qdb| zqB}H~Xv0|+bWf%|#*b}NINI8zHu~EIbq4I&aDGZEjRP#Pa5S!lqjk7-RGM?Z!%ECr z!|9|}?ypy4!FU{=Z*!M{$TC|frZxp*F@Jp!gK>F{=02Z0X?#G923uN#u{aX%${W&~ zY^)NXpN5oy4=jpETHK?jGzW$A6o$TX!KJ$>I~(fMSUei^HyQA>3K)+cmt8%_Hcbo! zTHA4}MVb%S%l!K+rZ$F}HzRzVsV}E(<0t%Y#Pt29oqRUayZ_A3${1WJ zPt$+)A-^UWBHZ3UeM}ImP7P@L_7_f&z+z)U)*@MmtwIzv(j|HC@m8;3d2q#Sx$suV z)3JULU!z_AZKd&J!`p5p+gQY4UCpx1R9&AbIf{7>zMIYF8C$!nsR!QIWGlQ$YKP+} z$@(9?3m?cfUxmRoaR0h!rxqvmg{Uz?+#whVnMYj^bBsbOB<1RMHJ>= zs#2+WEN^Ma)#6DJBeD_S=NHe7*ovd3U&)@h*YP1X1(8gtP^U}ys})%LV`-Lo^w*pr z(WN5Q&m(a9NhQ1=is!n!B^%rF=mO(Gw}4y~Y?-j2!kD{B^Bi^SpYP#2t@@=to_rXd z%~l)A7EEHD4VSrS7SXJt+4P3X8Ov`Nvdz>Vt+qcPVep!zVCP8Y&Jp{YBaZUg{{X)- Bb%_7~ delta 1016 zcmbu7Uu=_A7{+tX_nq&w>z}XNpsPz(riLt%&<(+fx;A_)vd`*$H_504YoLu znHjo)q3IkQNA4Vb2=#*178{>M_9T56*0&w=LrSCk{TUVOIK(sk9(-b7ZYZ zPVNzfbVTI7cAz=Mc1B&gYKcjguKh71^-EfyqZFW&&fir^St&a6xQtix6%{yg#!*{# zs%e2S^mXxFqHBW<%7R}=ge#bTW6(s7K>DbYf}X31`; z!jeN40?y7~U56t34~7S~MMg%#FGg_umisUghT{S0xng_8I_r7+)9_q%ZI9+xxh%P5 JewDt||0iYSgLwb| diff --git a/assets/schemas.json b/assets/schemas.json index 936ce0733d65128cb1054c2d9c2c25f13cc83df7..bcca4610a2f7d8523ca0e16cd52f4dc6a9a62569 100644 GIT binary patch delta 2422 zcmb7GZBSI#8J=_QIcFCHS>zi87UfGLWrHZ1WWxG|q$(_-=vYJ71y)0X5k7lIlkTA*BsAb2oiTsFeW}M8li4iAlQ*CQ-k~Ai%(sOqS+H~@x zKX&H4@1A?^`##Tep7$R6I``^d@CVwb_;^5Dfbf0fN$faB=3pp9vkw+fF|13t%?Qh3`4utY_FhttvCUd0tgRvoQxVF^2D$S$>4-i-Eqd){Qfx){ zaq>+3nZg3jQ7}xZWa@9T%MQ(ID`Lv1&-BDXX%$8qPB$pYx}Pm9CniUR8texo0_z*Dlm0G%YG_lzovdnPub5a z`*p>07l{+QiVLDmvzRMVF@Wl zy~R}{oFwSs`64V#j!>J|)4oAAS<_%|7B#wk8~KRDg%Lf@-XYA_*48UYSYuCy(MtYse8M*S3-FS$8aqKVWOz>EsGog6F!E=%JT8XXeM;Q@!?ZA_#i8{o`g~a3G(*+sy~TFN z>zTa8UX%{23C}P-3$>IVhwmg6`0^9BXr|(l!-ISmVrMwId4k;X)f^dpwE!2bbQl-Y z#G}~yL&kWg+w1GR3n=yb@LGxp5Fb`}N%idDc2~gN;cWMM+}%A+L+5$0f2d`p#PX|R z=^t%(ccG|5Y{S&2ED3*17n|cmT%p3E^pT2LnIZ)vlS)J%X?*Dn0g3qgCFK-`x)cE! zICzekce}@LzyjBD`Us-AZ2IsU-cc-(%6YTN?gV)Scp)Z_(D|@^#@4~Plno-GPb-U;eXLh&k%Kn`uC8E>F?qaDsOs{MD%exzQsro) zEFmH2^atF#Jnr3iub3V(bYsGYcD4=2{=^r-vO<+^d4n<3E@87_`2|mv)+7^#Lt2&b zmcqCEGw?Uro$t?b8m$RSEn0EU(kot zrKOhCnVd7=-WhTSdvNm_pGM=(Y0V6NN?SSO%>r*Or}=lgfW2J#@0Csk^T=M!pR~Qh z8SDwTU0sSK+&RPM#?qF1)6TX~FK*r*X?w5cQ|(k zJU#AM)Yj{CdA%5`W~DN6NsX+h>2_EK`H%H|9-+X>`z5Wz!ILbAiMQAz82Eq>8s>SQ zj4n_k@v>66qlT{f&YXdoGvm6yTl`Lg{j|DW2#VDRb2TPoSAOkjk*qhoCEleN`74{P zm+InqN*z92O%(Ms6vWk2EN@zA6PvVLV~}RUcU~(s<~T>cgJ&XgkZd&cZo=yho)&XJ zjC`(UY2Q(8zMS0UMdccn6Mulz@C-y-Ns3Tn?{KzZPa)rAyl`?*vti;TZYDPD{DQ3i zu5%nNB5U9qS0a7lJj*cps#glsmL_!uTpcmjadmgfs|{9!=ZZ2ObUV8|c>Z-(7>hL( z8w@YQjXF{ZON4Gl^c!u9*5&yroa3xC`QBr^a!+WJuD(6mYcb>&3~8k_2YyW~L-ah$ zGVn;E@tf>8#zx@Vs>b?>H^m${5=A;32WX4&Sz-Rxi!!LPlp2FkkF=T9%)6*<)Sn9q PhgqNZr1)1AP3-#*B7btL delta 1321 zcma)6ZA@EL7|uEOp3@IXxvh?mvB4dmLnst95;BV=+hj9gl+4N;ZkDjJ5l8I=Hw{sm zElRc+VYvy<%)T0?PUTYxoEd*$Pz;H2>kqSJCSx`6Bhe@r;tVdC-nNtw;}3t_L-N?B0PupP)5VMUs9J`>I=$v(JDY*^}| zTQD%fjM@M-!snG#OpGuGJcn2cq9d#zey^TmIr@tQY9&$PV1!;FnON+ic}cW_uum$+ zT56<3&et&tLc=r$mZ6wPdc0h`jdPkA5Gmp534W1gDFD|)d~*_03q8Y%(s8D1I&XuX zun(SL`T`cmS#k0zfbbCEXe{Gq`dp=E^K6WF(0kUR+$CkND;{=98EeJ0sL23d2U&ID zcUFG~A#|LV z=rIdILo5x-qMRK&X*ZfPp`Ma#$hko`3_ha|Y2c+;_4g^m!c#=&7nRowa98uJWQ$yU zc7_e&(wt6AeOmV^x>KK~uGoO6fhUgIYhI4AoAPQvKgP4=xJQ8l+5@kjjsGlwTLQo&Yq|o%BSB8_d#Ak zL@<>fWTK{&&d_*F^B4=^WQ>dZ4l0vG)>S=AhObFd#OX)qHq-yj{6NUQr1l!gtrv7AHTAkG`$%JSVeF97M)P&A)ViyPQv3mx% z(`2U@kobp&|5gF3iE~R`cXw;skxqZ0TmRgSksV^e!GZ+tcD7S|`UP{6_;z4)6E}&x zY(Bun_G7&5aqRhxTf|%Yc^yfrD-w|wzLmx-xGihtvzfwomwAaeCwP-lT(|RjqxgA- g|4}tK%&elnou8$Mbm~8iQ9n0|vNrCOsQJ}@02^1r2mk;8 diff --git a/src/api/routes/channels/preload-messages.ts b/src/api/routes/channels/preload-messages.ts index 80e0ddf78..1a7548e71 100644 --- a/src/api/routes/channels/preload-messages.ts +++ b/src/api/routes/channels/preload-messages.ts @@ -20,7 +20,7 @@ import { Request, Response, Router } from "express"; import { route } from "@spacebar/api/util/handlers/route"; import { Message } from "@spacebar/database"; import { Config } from "@spacebar/util"; -import { PreloadMessagesRequestSchema, PreloadMessagesResponseSchema } from "@spacebar/schemas"; +import { PreloadMessagesRequestSchema, PublicMessageArray } from "@spacebar/schemas"; const router = Router({ mergeParams: true }); @@ -30,7 +30,7 @@ router.post( requestBody: "PreloadMessagesRequestSchema", responses: { 200: { - body: "PreloadMessagesResponse", + body: "PublicMessageArray", }, 400: { body: "APIErrorResponse", @@ -62,7 +62,7 @@ router.post( // https://docs.discord.food/resources/message#preload-messages - reactions are not included in the response x.reactions = undefined; return x; - }) as unknown as PreloadMessagesResponseSchema; + }) as unknown as PublicMessageArray; return res.status(200).send(filteredMessages); }, diff --git a/src/api/routes/interactions/index.ts b/src/api/routes/interactions/index.ts index a556c380b..4875d2119 100644 --- a/src/api/routes/interactions/index.ts +++ b/src/api/routes/interactions/index.ts @@ -92,24 +92,26 @@ router.post("/", route({}), async (req: Request, res: Response) => { } if (body.type === InteractionType.MessageComponent || body.data.type === InteractionType.ModalSubmit) { - interactionData.message = await Message.findOneOrFail({ - where: { id: body.message_id, flags: undefined }, - relations: { - author: true, - webhook: true, - application: true, - mentions: true, - mention_roles: true, - mention_channels: true, - sticker_items: true, - attachments: true, - thread: { - recipients: { - user: true, + interactionData.message = ( + await Message.findOneOrFail({ + where: { id: body.message_id, flags: undefined }, + relations: { + author: true, + webhook: true, + application: true, + mentions: true, + mention_roles: true, + mention_channels: true, + sticker_items: true, + attachments: true, + thread: { + recipients: { + user: true, + }, }, }, - }, - }); + }) + ).toJSON(); } await emitEvent({ diff --git a/src/schemas/api/bots/InteractionCreateSchema.ts b/src/schemas/api/bots/InteractionCreateSchema.ts index ff7cfaf8f..110e410b6 100644 --- a/src/schemas/api/bots/InteractionCreateSchema.ts +++ b/src/schemas/api/bots/InteractionCreateSchema.ts @@ -16,9 +16,7 @@ along with this program. If not, see . */ -import { PublicMember, PublicUser, Snowflake, InteractionType } from "@spacebar/schemas"; -// TODO: remove entity imports -import { Channel, Message } from "@spacebar/database"; +import { PublicMember, PublicUser, Snowflake, InteractionType, PublicMessage, PublicChannel } from "@spacebar/schemas"; export interface InteractionCreateSchema { version: number; // TODO: types? @@ -30,12 +28,12 @@ export interface InteractionCreateSchema { guild?: InteractionGuild; guild_id?: Snowflake; guild_locale?: string; - channel?: Channel; + channel?: PublicChannel; channel_id?: Snowflake; member?: PublicMember; user?: PublicUser; locale?: string; - message?: Message; + message?: PublicMessage; app_permissions: string; entitlements?: object[]; // TODO: types? entitlement_sku_ids?: Snowflake[]; // DEPRECATED diff --git a/src/schemas/api/channels/Webhook.ts b/src/schemas/api/channels/Webhook.ts index cd87d3653..22f78946f 100644 --- a/src/schemas/api/channels/Webhook.ts +++ b/src/schemas/api/channels/Webhook.ts @@ -16,9 +16,7 @@ along with this program. If not, see . */ -// TODO: remove dependency on entities -import { User, Webhook } from "@spacebar/database"; -import { IntegrationGuild, PartialUser, Snowflake } from "@spacebar/schemas"; +import { IntegrationGuild, PartialUser, PublicUser, Snowflake } from "@spacebar/schemas"; export enum WebhookType { Incoming = 1, @@ -27,8 +25,8 @@ export enum WebhookType { } export interface WebhookCreateResponse { - user: User; - hook: Webhook; + user: PublicUser; + hook: WebhookResponse; } export type WebhookArray = WebhookResponse[]; diff --git a/src/schemas/api/messages/Message.ts b/src/schemas/api/messages/Message.ts index a6d5f162d..bc2bd447b 100644 --- a/src/schemas/api/messages/Message.ts +++ b/src/schemas/api/messages/Message.ts @@ -163,6 +163,7 @@ export interface MessageSnapshot { }; } +export type PublicMessageArray = PublicMessage[]; export interface PublicMessage { id: Snowflake; channel_id: Snowflake; diff --git a/src/schemas/responses/EmojiSourceResponse.ts b/src/schemas/responses/EmojiSourceResponse.ts index 511ba380d..5a9e8face 100644 --- a/src/schemas/responses/EmojiSourceResponse.ts +++ b/src/schemas/responses/EmojiSourceResponse.ts @@ -16,8 +16,7 @@ along with this program. If not, see . */ -// TODO: remove entity import -import { Emoji } from "@spacebar/database"; +import { EmojiResponse } from "@spacebar/schemas/api/guilds/Emoji"; export interface EmojiSourceResponse { type: "GUILD" | "APPLICATION"; @@ -32,7 +31,7 @@ export interface EmojiGuild { icon?: string | null; description?: string | null; features: string[]; - emojis: Emoji[]; + emojis: EmojiResponse[]; premium_tier: number; premium_subscription_count?: number; approximate_member_count?: number; diff --git a/src/schemas/responses/GuildMessagesSearchResponse.ts b/src/schemas/responses/GuildMessagesSearchResponse.ts index 3cc35ce28..df582b657 100644 --- a/src/schemas/responses/GuildMessagesSearchResponse.ts +++ b/src/schemas/responses/GuildMessagesSearchResponse.ts @@ -18,7 +18,7 @@ // TODO: remove dependency on entities import { Role } from "@spacebar/database"; -import { BaseMessageComponents, Embed, MessageType, Poll, PublicUser } from "@spacebar/schemas"; +import { BaseMessageComponents, Embed, MessageType, Poll, PublicUser, RoleResponse } from "@spacebar/schemas"; import { PublicAttachment } from "../api/messages/Attachments"; export interface GuildMessagesSearchMessage { @@ -30,7 +30,7 @@ export interface GuildMessagesSearchMessage { attachments: PublicAttachment[]; embeds: Embed[]; mentions: PublicUser[]; - mention_roles: Role[]; + mention_roles: RoleResponse[]; pinned: boolean; mention_everyone?: boolean; tts: boolean; diff --git a/src/schemas/responses/MemberJoinGuildResponse.ts b/src/schemas/responses/MemberJoinGuildResponse.ts index d37ed8653..87e50239e 100644 --- a/src/schemas/responses/MemberJoinGuildResponse.ts +++ b/src/schemas/responses/MemberJoinGuildResponse.ts @@ -16,13 +16,12 @@ along with this program. If not, see . */ -// TODO: remove entity imports -import { Emoji, Role, Sticker } from "@spacebar/database"; -import { GuildCreateResponse } from "@spacebar/schemas"; +import { GuildCreateResponse, RoleResponse, StickerResponse } from "@spacebar/schemas"; +import { EmojiResponse } from "@spacebar/schemas/api/guilds/Emoji"; export interface MemberJoinGuildResponse { guild: GuildCreateResponse; - emojis: Emoji[]; - roles: Role[]; - stickers: Sticker[]; + emojis: EmojiResponse[]; + roles: RoleResponse[]; + stickers: StickerResponse[]; } diff --git a/src/schemas/responses/PreloadMessagesResponseSchema.ts b/src/schemas/responses/PreloadMessagesResponseSchema.ts index ea3d38d9c..726d934e1 100644 --- a/src/schemas/responses/PreloadMessagesResponseSchema.ts +++ b/src/schemas/responses/PreloadMessagesResponseSchema.ts @@ -16,7 +16,6 @@ along with this program. If not, see . */ -// TODO: remove entity import -import { Message } from "@spacebar/database"; +import { PublicMessage } from "@spacebar/schemas"; -export type PreloadMessagesResponseSchema = Message[]; +export type PreloadMessagesResponseSchema = PublicMessage[];