From b3427f98965407fc9207ad9f617285f243bf55c1 Mon Sep 17 00:00:00 2001 From: Rory& Date: Tue, 21 Jul 2026 22:00:04 +0200 Subject: [PATCH] Clean up some types --- assets/openapi.json | Bin 1018159 -> 1023831 bytes assets/schemas.json | Bin 455504 -> 460357 bytes src/api/routes/reporting/index.ts | 8 +-- .../#webhook_id/#webhook_token/index.ts | 2 +- src/api/routes/webhooks/#webhook_id/index.ts | 2 +- src/schemas/api/reports/ReportMenu.ts | 66 +++++++++++++++--- 6 files changed, 61 insertions(+), 17 deletions(-) diff --git a/assets/openapi.json b/assets/openapi.json index 974780bf60a7c4d4c81f600a9d785d53beada285..23da8478a67011f24ab096d73f01bb6756a0c712 100644 GIT binary patch delta 1036 zcmZ8fU1%It6lU(+x$~1vniZ1GPJi6pM2%45+NNn9Y+NnX*0!M$K~k}^o84J==qP~LvfwDKT{~4#^Mv{ z6c*A%h4hm!t$2>(8#SlIn@HpLBV+=0l`7)ah*BlC@9(9au(cg?3WB!n1(hLA$ArF2HV_lx|#={lZ23E{SEz;)R> z7e^9kjA{&1Inm(11|QRkStwz)j}GI+F<~DIW}XEa!{QioN5OWGRt4ZsK*SBgG{>wxzm?rmrLundh7MhG)(OmWLl!!ASdcPcV3Hnf-Sbt=(cRTIVjs`^0SD4}R|I>Bs$wmL%R<(RI=gA=MpCkvg`f1BGtg;c*_*Cy}$exqOqo2q;oHwlEOXJlvm8JoQ|-JNBltYa28%4`TL0Xqj{Tw|S;EOygT z{^l~n(06Jd+&L+Z-aqLeT0auI9pBRzE;C}$IxOu)#uIdiH+qvuDeOfWIcv{d%#<7y z1|^*q3$-HRmzXZr%rls}EWSSfa9v({xUQW4yWKr@+^hv3oOR8~Le)g`Tg5|mOg$K# d?R#*yY1;h4BQ-?y?FtbK(Y>_rsOQS1e*yk=cAWqK delta 112 zcmcb<&u;xByM`9VEli3^?PVHFK+FupEI`Z(#BAHkG}upEX_w&T*e=1#+45b=v8X7q z(k3XiAit=@H#M&`q_QB@FEKZ@*lxO^H0PG-{03b9?VDJ+fS4PId4QM~i21f}V&z{t F69CE0Ctv^o diff --git a/assets/schemas.json b/assets/schemas.json index 14235013af1ed3efe16049ef732b9075426a268c..97ea6b1b51fe72ee707a969551943f23d9f3bf33 100644 GIT binary patch delta 985 zcmZWnTSydP6lVVUXWVtYtS#DlNoJ>9E4nCQkOaAj1%;wkibT%N?*8je&d%u040L(O zMNx>N%aDg4(VjCXsC+OaAABrF@FfVchw3Fr-vT3>S#?tzI1lrkIcL7hvA&hh-KiLO zMXfI8x060KrAtarGf@nftw+sfjjIV>4AU;?`#{}x^{JX35u?4(cAP1NB@a3b4fE7F zS4vfNK~ZDybQ1GW^A-nljcAl;S{59wV}d!NBxeEBI#5MBBjR_u4O)jN3A~SyKgVIv zV#Dc4#t-4w%q|EgQOq6Rm?e)yTwQO^5sg2T%WZl1O>%;fl6Uqt2@+Eb`SP@X z$RcGIvWvD0PmL@xzkaya?Xbz1)LIjGZz9ei&7>TcpkGBNOwLtk4n>;i1QB5+#RTBp z8V=$}_BDKotwKs1Lfvd58%;=ZECsWJ_MU<1mb~nG(wH!<>0@xvqJmB*cfHdjlO*&5 zQ*2t#D{;iobx6O#{)|m-$EMRZq{7QM!xd^m(vWpY(1=W;x&TieFz53nO%M%T6*MD~ zl;BGRRcB6Ab(F93Aj(dU>`|aTvc;@TKSoke+m88yZ98-by=Q%%Ex&?5J5@&alItK& z<4#ZJer&^RMUZCEU1*p=Ihm9*hp`-IWb>3%3==bm#ZHJoUBO*j^@i^;XH9Sa8Q?gU zhvl!R8o1wRH*kKM2hKnR;Qfhx=6t6gxIsElpe0m8j;%|yb%(kresm8NboWYqf)p1F z#jJ4$P4C4Zk~H(EyV_hDz5w^1u}3_%GFgp^vUG#MN*a~GcmNmXZ`%i-D^YQgmff}S zJ%moOK4?hb%h-tlmU@^9u==U)4Ixf0knUyoIr3R}_=j!", + body: "ReportMenuTypeNames", }, }, }), @@ -161,9 +161,7 @@ for (const type of Object.values(ReportMenuTypeNames)) { ); }; - const t = Number(Object.entries(ReportMenuTypeNames).find((x) => x[1] === type)?.[0]) as ReportMenuType; - // TODO: did i miss anything? - switch (t) { + switch (type) { case ReportMenuType.GUILD: case ReportMenuType.GUILD_DISCOVERY: requireFields(body, ["guild_id"]); diff --git a/src/api/routes/webhooks/#webhook_id/#webhook_token/index.ts b/src/api/routes/webhooks/#webhook_id/#webhook_token/index.ts index 3c2891f2d..4cdd645dc 100644 --- a/src/api/routes/webhooks/#webhook_id/#webhook_token/index.ts +++ b/src/api/routes/webhooks/#webhook_id/#webhook_token/index.ts @@ -23,7 +23,7 @@ import { route } from "@spacebar/api/middlewares"; import { Webhook, Message } from "@spacebar/database"; import { Config, DiscordApiErrors, emitEvent, handleFile, ValidateName, WebhooksUpdateEvent } from "@spacebar/util"; import { executeWebhook } from "@spacebar/api/util/handlers/Webhook"; -import { WebhookResponse, WebhookUpdateSchema } from "@spacebar/schemas"; +import type { WebhookResponse, WebhookUpdateSchema } from "@spacebar/schemas"; const router = Router({ mergeParams: true }); diff --git a/src/api/routes/webhooks/#webhook_id/index.ts b/src/api/routes/webhooks/#webhook_id/index.ts index 5d402be34..5f8b5728e 100644 --- a/src/api/routes/webhooks/#webhook_id/index.ts +++ b/src/api/routes/webhooks/#webhook_id/index.ts @@ -22,7 +22,7 @@ import { In } from "typeorm"; import { route } from "@spacebar/api/middlewares"; import { Webhook, Channel, Message } from "@spacebar/database"; import { Config, DiscordApiErrors, getPermission, WebhooksUpdateEvent, emitEvent, handleFile, ValidateName, MessageDeleteBulkEvent } from "@spacebar/util"; -import { WebhookResponse, WebhookUpdateSchema } from "@spacebar/schemas"; +import type { WebhookResponse, WebhookUpdateSchema } from "@spacebar/schemas"; const router = Router({ mergeParams: true }); diff --git a/src/schemas/api/reports/ReportMenu.ts b/src/schemas/api/reports/ReportMenu.ts index 0a8f0972f..3c47e194e 100644 --- a/src/schemas/api/reports/ReportMenu.ts +++ b/src/schemas/api/reports/ReportMenu.ts @@ -17,18 +17,19 @@ */ export enum ReportMenuType { - GUILD, - GUILD_DISCOVERY, - GUILD_DIRECTORY_ENTRY, - GUILD_SCHEDULED_EVENT, - MESSAGE, - STAGE_CHANNEL, - FIRST_DM, - USER, - APPLICATION, - WIDGET, + GUILD = "guild", + GUILD_DISCOVERY = "guild_discovery", + GUILD_DIRECTORY_ENTRY = "guild_directory_entry", + GUILD_SCHEDULED_EVENT = "guild_scheduled_event", + MESSAGE = "message", + STAGE_CHANNEL = "stage_channel", + FIRST_DM = "first_dm", + USER = "user", + APPLICATION = "application", + WIDGET = "widget", } +export type ReportMenuTypeNameArray = ReportMenuType[]; export const ReportMenuTypeNames: Record = { [ReportMenuType.GUILD]: "guild", [ReportMenuType.GUILD_DISCOVERY]: "guild_discovery", @@ -48,3 +49,48 @@ export enum ReportButtonType { CANCEL = "cancel", NEXT = "next", } + +export interface ReportingMenuResponse { + name: string; + version: string; + variant: string; + postback_url: string; + language?: string; + root_node_id: number; + success_node_id: number; + fail_node_id: number; + nodes: Record; +} + +export interface ReportNode { + id: number; + report_type?: string; + key: string; + header: string; + subheader?: string; + info?: string; + children: ReportNodeChild[]; + elements: ReportElement[]; + button?: ReportButton; + is_multi_select_required: boolean; + is_auto_submit: boolean; +} + +export interface ReportButton { + type: ReportButtonType; + target: number | null; +} + +export interface ReportNodeChild { + name: string; + target_node_id: number; +} + +export interface ReportElement { + name: string; + type: string; + data: object; + should_submit_data: boolean; + skip_if_unlocalized: boolean; + is_localized: boolean; +}