Files
openmaic/OpenMAIC/lib/runtime/payload-validators.ts
2026-08-16 14:58:47 +08:00

38 lines
1.1 KiB
TypeScript

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<Record<string, RuntimePayloadValidator>>;