import { isChatMessageSkeleton, isQuizAttemptSkeleton } from '@openmaic/dsl'; import type { RuntimePayloadValidator } from '@openmaic/storage'; import { whiteboardRuntimePayloadValidator } from '@/lib/whiteboard/runtime/validate'; const chat: RuntimePayloadValidator = (payload) => isChatMessageSkeleton(payload) ? { valid: true } : { valid: false, errors: [ { path: '/payload', message: 'chat payload must match ChatMessageSkeleton (role + content)', }, ], }; const quizAttempt: RuntimePayloadValidator = (payload) => isQuizAttemptSkeleton(payload) ? { valid: true } : { valid: false, errors: [ { path: '/payload', message: 'quizAttempt payload must match QuizAttemptSkeleton (phase + answers)', }, ], }; /** Complete app validator table. RuntimeStore options replace their defaults. */ export const APP_RUNTIME_PAYLOAD_VALIDATORS = Object.freeze({ chat, quizAttempt, whiteboard: whiteboardRuntimePayloadValidator, }) satisfies Readonly>;