UNPKG

agendash

Version:

Dashboard for Agenda job scheduler

215 lines (214 loc) 4.84 kB
import type { Agenda, JobStateNotification, StateNotificationHandler } from 'agenda'; /** * Query parameters for the API */ export interface ApiQueryParams { /** Filter by job name */ name?: string; /** Filter by computed state */ state?: string; /** Text to search in job name */ search?: string; /** Property to search in (deprecated, kept for compatibility) */ property?: string; /** Whether search is for ObjectId (deprecated) */ isObjectId?: string; /** Number of jobs to skip (pagination) */ skip?: number; /** Maximum number of jobs to return */ limit?: number; } /** * Frontend job data structure (nested under 'job' key) */ export interface FrontendJobData { _id: string; name: string; data?: unknown; priority?: number; nextRunAt?: Date | null; lastRunAt?: Date | null; lastFinishedAt?: Date | null; lockedAt?: Date | null; failedAt?: Date | null; failCount?: number; failReason?: string; repeatInterval?: string | number; repeatTimezone?: string; disabled?: boolean; progress?: number; } /** * Frontend job structure with state flags */ export interface FrontendJob { job: FrontendJobData; running: boolean; scheduled: boolean; queued: boolean; completed: boolean; failed: boolean; repeating: boolean; paused: boolean; } /** * Frontend overview structure with displayName */ export interface FrontendOverview { displayName: string; total: number; running: number; scheduled: number; queued: number; completed: number; failed: number; repeating: number; paused: number; } /** * Response from the API */ export interface ApiResponse { overview: FrontendOverview[]; jobs: FrontendJob[]; total: number; totalPages: number; } /** * Options for requeuing jobs */ export interface RequeueRequest { jobIds: string[]; } /** * Response from requeue operation */ export interface RequeueResponse { requeuedCount: number; } /** * Options for retrying jobs */ export interface RetryRequest { jobIds: string[]; } /** * Response from retry operation */ export interface RetryResponse { retriedCount: number; } /** * Options for deleting jobs */ export interface DeleteRequest { jobIds: string[]; } /** * Response from delete operation */ export interface DeleteResponse { deleted: boolean; deletedCount?: number; } /** * Options for creating a job */ export interface CreateJobRequest { jobName: string; jobSchedule?: string; jobRepeatEvery?: string; jobData?: unknown; } /** * Response from create operation */ export interface CreateJobResponse { created: boolean; } /** * Options for pausing jobs */ export interface PauseRequest { jobIds: string[]; } /** * Response from pause operation */ export interface PauseResponse { pausedCount: number; } /** * Options for resuming jobs */ export interface ResumeRequest { jobIds: string[]; } /** * Response from resume operation */ export interface ResumeResponse { resumedCount: number; } /** * Query parameters for the logs API */ export interface LogsQueryParams { jobId?: string; jobName?: string; level?: string; event?: string; from?: string; to?: string; limit?: number; offset?: number; sort?: 'asc' | 'desc'; } /** * A log entry as returned to the frontend */ export interface FrontendLogEntry { _id?: string; timestamp: string; level: string; event: string; jobId?: string; jobName: string; message: string; duration?: number; error?: string; failCount?: number; retryDelay?: number; retryAttempt?: number; agendaName?: string; meta?: Record<string, unknown>; } /** * Response from the logs API */ export interface LogsResponse { entries: FrontendLogEntry[]; total: number; loggingEnabled: boolean; } /** * Agendash controller interface */ export interface AgendashController { getJobs(params: ApiQueryParams): Promise<ApiResponse>; requeueJobs(ids: string[]): Promise<RequeueResponse>; retryJobs(ids: string[]): Promise<RetryResponse>; deleteJobs(ids: string[]): Promise<DeleteResponse>; createJob(options: CreateJobRequest): Promise<CreateJobResponse>; pauseJobs(ids: string[]): Promise<PauseResponse>; resumeJobs(ids: string[]): Promise<ResumeResponse>; createStateStream(onNotification: StateNotificationHandler): () => void; hasStateNotifications(): boolean; getLogs(params: LogsQueryParams): Promise<LogsResponse>; hasLogging(): boolean; } export type { JobStateNotification, StateNotificationHandler }; /** * Factory type for creating Agendash middleware */ export type AgendashMiddlewareFactory<T> = (agenda: Agenda) => T;