import { z } from "zod"; import { subtitleSchema } from "./contract"; export const audioJobInputSchema = z .object({ operation: z.enum(["transcribe", "separate"]), sha256: z.string().regex(/^[a-f0-9]{64}$/), bytes: z .number() .int() .positive() .max(70 * 1024 * 1024), }) .strict(); export type AudioJobInput = z.infer; export const audioJobStatusSchema = z.object({ id: z.string().regex(/^[a-f0-9]{64}$/), status: z.enum([ "awaiting-input", "queued", "running", "succeeded", "failed", ]), stage: z.string().max(300), error: z.string().max(500).optional(), result: z .object({ subtitles: z.array(subtitleSchema).max(500).optional(), durationSeconds: z.number().positive().max(180.1), stems: z .object({ vocals: z.object({ bytes: z .number() .int() .positive() .max(70 * 1024 * 1024), sha256: z.string().regex(/^[a-f0-9]{64}$/), }), background: z.object({ bytes: z .number() .int() .positive() .max(70 * 1024 * 1024), sha256: z.string().regex(/^[a-f0-9]{64}$/), }), }) .optional(), }) .optional(), });