import * as z from "zod/mini"; import { type FlowActionSucceededV1Contract, flowActionSucceededV1ContractSchema, } from "../app-event.js"; import { createGeneration, type Generation, generationSchema, } from "./v3-generation.js"; const canonicalIdStringSchema = z.string().check(z.trim(), z.minLength(1)); const maximumJavascriptDateTimestamp = 8_640_000_000_000_000; /** One-way host -> Core observation emitted only after executor success. */ export const eventFlowActionSucceededSchema = z.strictObject({ t: z.literal("getuserfeedback:event:flowActionSucceeded"), gen: generationSchema, instanceId: canonicalIdStringSchema, event: flowActionSucceededV1ContractSchema, timestamp: z .number() .check(z.int(), z.nonnegative(), z.maximum(maximumJavascriptDateTimestamp)), }); export type EventFlowActionSucceeded = z.output< typeof eventFlowActionSucceededSchema >; export const buildEventFlowActionSucceeded = (input: { gen: number | Generation; instanceId: string; event: FlowActionSucceededV1Contract; timestamp: number; }): EventFlowActionSucceeded => eventFlowActionSucceededSchema.parse({ t: "getuserfeedback:event:flowActionSucceeded", gen: createGeneration(input.gen), instanceId: input.instanceId, event: input.event, timestamp: input.timestamp, }); export const isEventFlowActionSucceeded = ( value: unknown, ): value is EventFlowActionSucceeded => eventFlowActionSucceededSchema.safeParse(value).success;