import * as z from "zod/mini"; import { type InstanceFeedbackInput, instanceFeedbackCategorySchema, instanceFeedbackReferenceKeySchema, instanceFeedbackSubjectRefSchema, } from "./internal/instance-feedback-input.js"; export { instanceFeedbackReferenceKeySchema }; const canonicalUtcTimestampLength = "2026-07-01T12:00:00.000Z".length; const canonicalUtcTimestampPattern = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/u; const isCanonicalUtcTimestamp = (value: string) => { if ( value.length !== canonicalUtcTimestampLength || !canonicalUtcTimestampPattern.test(value) ) { return false; } const date = new Date(value); return !Number.isNaN(date.getTime()) && date.toISOString() === value; }; const canonicalUtcTimestampSchema = z.string().check( z.trim(), z.minLength(1), z.refine(isCanonicalUtcTimestamp, { message: "capturedAt must be a canonical UTC timestamp.", }), ); const evaluationIdSchema = z.string().check(z.trim(), z.minLength(1)); export const captureInstanceFeedbackResponseSchema = z.object({ capturedAt: canonicalUtcTimestampSchema, evaluationId: evaluationIdSchema, status: z.literal("accepted"), }); const instanceFeedbackSelectorSchema = z.object({ category: z.optional(instanceFeedbackCategorySchema), target: z.optional(instanceFeedbackSubjectRefSchema), }); export const listInstanceFeedbackMineRequestSchema = z.object({ selectors: z .array(instanceFeedbackSelectorSchema) .check(z.minLength(1), z.maxLength(50)), }); export const instanceFeedbackMineEvaluationSchema = z.object({ capturedAt: canonicalUtcTimestampSchema, category: z.nullable(z.string()), comment: z.nullable(z.string()), evaluationId: evaluationIdSchema, reasons: z.array(z.string()), value: z.nullable(z.union([z.boolean(), z.number(), z.string()])), }); export const listInstanceFeedbackMineResponseSchema = z.object({ items: z.array( z.object({ evaluation: z.nullable(instanceFeedbackMineEvaluationSchema), }), ), }); export type CaptureInstanceFeedbackRequest = InstanceFeedbackInput; export type CaptureInstanceFeedbackResponse = z.output< typeof captureInstanceFeedbackResponseSchema >; export type ListInstanceFeedbackMineRequest = z.output< typeof listInstanceFeedbackMineRequestSchema >; export type InstanceFeedbackMineEvaluation = z.output< typeof instanceFeedbackMineEvaluationSchema >; export type ListInstanceFeedbackMineResponse = z.output< typeof listInstanceFeedbackMineResponseSchema >;