Files
2026-07-13 13:34:48 +08:00

69 lines
2.4 KiB
TypeScript

import { z } from '@botpress/sdk'
const freeTextAnswerSchema = z.object({
body: z.string().title('Body').describe("The candidate's response"),
})
const shortTextAnswerSchema = z.object({
body: z.string().max(128).title('Body').describe("The candidate's response"),
})
const booleanAnswerSchema = z.object({
checked: z.boolean().title('Checked').describe("The candidate's response"),
})
const multipleChoiceAnswerSchema = z.object({
choices: z.array(z.string()).title('Choices').describe('The IDs of the choice(s) selected'),
})
const dropdownAnswerSchema = z.object({
choice: z.string().title('Choice').describe('The ID of the choice selected'),
})
const dateAnswerSchema = z.object({
date: z.string().title('Date').describe('The date in ISO 8601 format'),
})
const numericAnswerSchema = z.object({
number: z.number().title('Number').describe('The value may be an integer or a decimal number'),
})
const fileAnswerUrlSchema = z.object({
fileUrl: z.string().title('File Url').describe("A url pointing to the candidate's answer"),
})
const fileAnswerBase64Schema = z.object({
data: z.string().title('Data').describe("The candidate's answer encoded in base64"),
})
export const answerSchema = z.object({
question: z.object({
body: z.string().nullable().title('Question').describe('The question'),
}),
answer: z
.union([
freeTextAnswerSchema,
shortTextAnswerSchema,
booleanAnswerSchema,
multipleChoiceAnswerSchema,
dropdownAnswerSchema,
dateAnswerSchema,
numericAnswerSchema,
fileAnswerUrlSchema,
fileAnswerBase64Schema,
])
.nullable()
.title('Answer')
.describe('The answer'),
})
export const postAnswerSchema = z.object({
questionKey: z.string().title('Question Key').describe('The question key'),
body: z.string().optional().title('Body').describe("The candidate's response"),
checked: z.boolean().optional().title('Checked').describe("The candidate's response"),
choices: z.array(z.string()).optional().title('Choices').describe('The IDs of the choice(s) selected'),
date: z.string().optional().title('Date').describe('The date in ISO 8601 format'),
value: z.number().optional().title('Value').describe('The value may be an integer or a decimal number'),
fileUrl: z.string().optional().title('File Url').describe("A url pointing to the candidate's answer"),
data: z.string().optional().title('Data').describe("The candidate's answer encoded in base64"),
})