69 lines
2.4 KiB
TypeScript
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"),
|
|
})
|