import * as z from "zod/mini"; import { HANDLE_INVALIDATED_REASON_CODES, HANDLE_INVALIDATED_SOURCES, } from "../host/host-event-contract.js"; import { createGeneration, type Generation, generationSchema, } from "./v3-generation.js"; const canonicalIdStringSchema = z.string().check(z.trim(), z.minLength(1)); /** Core -> host notification that a previously issued handle is no longer valid. */ export const eventHandleInvalidatedSchema = z.object({ t: z.literal("getuserfeedback:event:handleInvalidated"), gen: generationSchema, viewId: z.optional(canonicalIdStringSchema), instanceId: canonicalIdStringSchema, handleKind: canonicalIdStringSchema, handleId: canonicalIdStringSchema, reasonCode: z.enum(HANDLE_INVALIDATED_REASON_CODES), reasonMessage: z.optional(canonicalIdStringSchema), relatedRequestId: z.optional(canonicalIdStringSchema), source: z.enum(HANDLE_INVALIDATED_SOURCES), at: z.number(), }); export type EventHandleInvalidated = z.output< typeof eventHandleInvalidatedSchema >; export function buildEventHandleInvalidated(params: { gen: number | Generation; instanceId: string; handleKind: string; handleId: string; reasonCode: EventHandleInvalidated["reasonCode"]; reasonMessage?: string; relatedRequestId?: string; source: EventHandleInvalidated["source"]; at: number; }): EventHandleInvalidated { return { t: "getuserfeedback:event:handleInvalidated", gen: createGeneration(params.gen), instanceId: params.instanceId, handleKind: params.handleKind, handleId: params.handleId, reasonCode: params.reasonCode, reasonMessage: params.reasonMessage, relatedRequestId: params.relatedRequestId, source: params.source, at: params.at, }; }