diff --git a/assets/openapi.json b/assets/openapi.json index 974780bf6..23da8478a 100644 Binary files a/assets/openapi.json and b/assets/openapi.json differ diff --git a/assets/schemas.json b/assets/schemas.json index 14235013a..97ea6b1b5 100644 Binary files a/assets/schemas.json and b/assets/schemas.json differ diff --git a/src/api/routes/reporting/index.ts b/src/api/routes/reporting/index.ts index 0b23cafd1..28f95053b 100644 --- a/src/api/routes/reporting/index.ts +++ b/src/api/routes/reporting/index.ts @@ -21,7 +21,7 @@ import path from "node:path"; import { Request, Response, Router } from "express"; import { HTTPError } from "lambert-server/HTTPError"; import { route } from "@spacebar/api/middlewares"; -import { ReportMenuType, ReportMenuTypeNames, CreateReportSchema } from "@spacebar/schemas"; +import { ReportMenuTypeNames, ReportMenuType, type CreateReportSchema, ReportMenuTypeNameArray } from "@spacebar/schemas"; import { FieldErrors } from "@spacebar/util"; const router = Router({ mergeParams: true }); @@ -32,7 +32,7 @@ router.get( description: "[EXT] Get available reporting menu types.", responses: { 200: { - body: "Array", + 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; +}