import { z } from "zod"; // Scrapyd API Response Schemas export const DaemonStatusSchema = z.object({ status: z.literal("ok"), node_name: z.string(), pending: z.number(), running: z.number(), finished: z.number(), }); export const ListProjectsSchema = z.object({ status: z.literal("ok"), projects: z.array(z.string()), }); export const ListVersionsSchema = z.object({ status: z.literal("ok"), versions: z.array(z.string()), }); export const ListSpidersSchema = z.object({ status: z.literal("ok"), spiders: z.array(z.string()), }); export const JobSchema = z.object({ id: z.string(), spider: z.string(), pid: z.number().optional(), start_time: z.string(), end_time: z.string().optional(), log_url: z.string().optional(), items_url: z.string().optional(), }); export const ListJobsSchema = z.object({ status: z.literal("ok"), pending: z.array(JobSchema), running: z.array(JobSchema), finished: z.array(JobSchema), }); export const ScheduleJobSchema = z.object({ status: z.literal("ok"), jobid: z.string(), }); export const CancelJobSchema = z.object({ status: z.literal("ok"), prevstate: z.enum(["pending", "running", "finished"]), }); export const DeleteVersionSchema = z.object({ status: z.literal("ok"), }); export const DeleteProjectSchema = z.object({ status: z.literal("ok"), }); export const AddVersionSchema = z.object({ status: z.literal("ok"), spiders: z.number(), }); // TypeScript Types export type DaemonStatus = z.infer; export type ListProjects = z.infer; export type ListVersions = z.infer; export type ListSpiders = z.infer; export type Job = z.infer; export type ListJobs = z.infer; export type ScheduleJob = z.infer; export type CancelJob = z.infer; export type DeleteVersion = z.infer; export type DeleteProject = z.infer; export type AddVersion = z.infer; // Request Parameters export interface ScheduleJobParams { project: string; spider: string; jobid?: string; settings?: Record; args?: Record; } export interface CancelJobParams { project: string; job: string; } export interface ListVersionsParams { project: string; } export interface ListSpidersParams { project: string; version?: string; } export interface ListJobsParams { project: string; } export interface DeleteVersionParams { project: string; version: string; } export interface DeleteProjectParams { project: string; } export interface AddVersionParams { project: string; version: string; egg: File; }