import * as z from "zod/mini"; import { type ClientMeta, clientMetaSchema } from "./client-meta.js"; import { coreCommandPayloadSchema } from "./core-commands.js"; const requestIdSchema = z.string().check(z.trim(), z.minLength(1)); const idempotencyKeySchema = z.string().check(z.trim(), z.minLength(1)); const versionSchema = z.literal("1"); /** Loader -> core iframe command envelope (MessagePort transport). */ export const coreCommandEnvelopeSchema = z.object({ version: versionSchema, instanceId: z.string().check(z.trim(), z.minLength(1)), requestId: requestIdSchema, idempotencyKey: idempotencyKeySchema, clientMeta: z.optional(clientMetaSchema), command: coreCommandPayloadSchema, }); export type CoreCommandEnvelope = z.output; /** Context passed to core plugin handlers after envelope validation. */ export type CommandContext = { instanceId: string; requestId: string; idempotencyKey: string; clientMeta?: ClientMeta; };