summary refs log tree commit diff
path: root/src/api
diff options
context:
space:
mode:
authorCyberL1 <cyber.hf18@gmail.com>2025-10-28 16:43:45 +0100
committerCyberL1 <cyber.hf18@gmail.com>2025-10-28 16:43:45 +0100
commitcfe4e298ca52402e558fa244e3d9296590e7e9a7 (patch)
tree26c58dc9e98b5bf41c2c4a0b1282c2c7ba7b8103 /src/api
parentMerge pull request #1367 from CyberL1/fix/application-commands-options-default (diff)
downloadserver-ts-cfe4e298ca52402e558fa244e3d9296590e7e9a7.tar.xz
fix: check if components are beetwen 1 to 5 in each row
Diffstat (limited to 'src/api')
-rw-r--r--src/api/routes/interactions/#interaction_id/#interaction_token/callback.ts22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/api/routes/interactions/#interaction_id/#interaction_token/callback.ts b/src/api/routes/interactions/#interaction_id/#interaction_token/callback.ts

index 8554c41c..a91326db 100644 --- a/src/api/routes/interactions/#interaction_id/#interaction_token/callback.ts +++ b/src/api/routes/interactions/#interaction_id/#interaction_token/callback.ts
@@ -19,13 +19,33 @@ import { InteractionCallbackSchema, InteractionCallbackType, MessageCreateSchema, MessageType } from "@spacebar/schemas"; import { route } from "@spacebar/api"; import { Request, Response, Router } from "express"; -import { emitEvent, InteractionSuccessEvent, Message, MessageCreateEvent, pendingInteractions, User } from "@spacebar/util"; +import { emitEvent, FieldErrors, InteractionSuccessEvent, Message, MessageCreateEvent, pendingInteractions, User } from "@spacebar/util"; const router = Router({ mergeParams: true }); router.post("/", route({}), async (req: Request, res: Response) => { const body = req.body as InteractionCallbackSchema; + // TODO: Only one error is ever returned. That's not the case on discord's side + const errors: Record<string, { code?: string; message: string }> = {}; + + for (const row of body.data.components || []) { + if (!row.components) { + continue; + } + + if (row.components.length < 1 || row.components.length > 5) { + errors[`data.components[${body.data.components!.indexOf(row)}].components`] = { + code: "BASE_TYPE_BAD_LENGTH", + message: `Must be between 1 and 5 in length.`, + }; + } + } + + if (Object.keys(errors).length > 0) { + throw FieldErrors(errors); + } + const interactionId = req.params.interaction_id; const interaction = pendingInteractions.get(req.params.interaction_id);