From 42c7d110a2630b1c90c9c676b5bc8f087396dcec Mon Sep 17 00:00:00 2001 From: abdou6666 Date: Mon, 3 Feb 2025 15:04:38 +0100 Subject: [PATCH] feat: button zod validation --- api/src/chat/schemas/types/button.ts | 36 +++++++++++++++++----------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/api/src/chat/schemas/types/button.ts b/api/src/chat/schemas/types/button.ts index c38cfe7b..37bf74ee 100644 --- a/api/src/chat/schemas/types/button.ts +++ b/api/src/chat/schemas/types/button.ts @@ -1,28 +1,36 @@ /* - * Copyright © 2024 Hexastack. All rights reserved. + * Copyright © 2025 Hexastack. All rights reserved. * * Licensed under the GNU Affero General Public License v3.0 (AGPLv3) with the following additional terms: * 1. The name "Hexabot" is a trademark of Hexastack. You may not use this name in derivative works without express written permission. * 2. All derivative works must include clear attribution to the original creator and software, Hexastack and Hexabot, in a prominent location (e.g., in the software's "About" section, documentation, and README file). */ +import { z } from 'zod'; + export enum ButtonType { postback = 'postback', web_url = 'web_url', } -export type PostBackButton = { - type: ButtonType.postback; - title: string; - payload: string; -}; +const postBackButtonSchema = z.object({ + type: z.literal(ButtonType.postback), + title: z.string(), + payload: z.string(), +}); -export type WebUrlButton = { - type: ButtonType.web_url; - title: string; - url: string; - messenger_extensions?: boolean; - webview_height_ratio?: 'compact' | 'tall' | 'full'; -}; +const webUrlButtonSchema = z.object({ + type: z.literal(ButtonType.web_url), + title: z.string(), + url: z.string().url(), + messenger_extensions: z.boolean().optional(), + webview_height_ratio: z.enum(['compact', 'tall', 'full']).optional(), +}); -export type Button = PostBackButton | WebUrlButton; +export const buttonSchema = z.union([postBackButtonSchema, webUrlButtonSchema]); + +export type PostBackButton = z.infer; + +export type WebUrlButton = z.infer; + +export type Button = z.infer;