@cadence-mq/core
Version:
Modern, type-safe, and performant task queue for Node.js
97 lines (96 loc) • 2.18 kB
TypeScript
//#region src/jobs/jobs.types.d.ts
type JsonSerializable = string | number | boolean | null | undefined | JsonSerializable[] | {
[key: string]: JsonSerializable;
};
type JobData = JsonSerializable;
type JobResult = JsonSerializable;
type JobStatus = 'pending' | 'processing' | 'completed' | 'failed';
type Job = {
id: string;
taskName: string;
status: JobStatus;
error?: string;
startedAt?: Date;
completedAt?: Date;
maxRetries?: number;
data?: JobData;
result?: JobResult;
scheduleAt: Date;
};
type JobRepositoryDriver = {
saveJob: (arg: {
job: Job;
now?: Date;
}) => Promise<void>;
fetchNextJob: (arg: {
processingTimeoutMs: number;
}) => Promise<{
job: Job;
}>;
markJobAsCompleted: (arg: {
jobId: string;
now?: Date;
result?: JobResult;
}) => Promise<void>;
markJobAsFailed: (arg: {
jobId: string;
now?: Date;
error: string;
}) => Promise<void>;
};
//#endregion
//#region src/tasks/tasks.types.d.ts
type TaskOptions = {
maxRetries?: number;
retryBackoff?: 'linear' | 'exponential' | ((args: {
attempt: number;
}) => number);
};
type TaskDefinition<TData = JobData, TResult = JobResult> = {
name: string;
options?: TaskOptions;
handler: (args: {
data: TData;
context: TaskContext;
}) => Promise<TResult | undefined | void>;
};
type TaskContext = {
workerId: string;
};
//# sourceMappingURL=tasks.types.d.ts.map
//#endregion
//#region src/queue.d.ts
declare function createQueue({
driver,
processingTimeoutMs,
generateJobId
}: {
driver: JobRepositoryDriver;
processingTimeoutMs?: number;
generateJobId?: () => string;
}): {
registerTask: (taskDefinition: TaskDefinition) => void;
scheduleJob({
taskName,
data,
now,
scheduleAt,
maxRetries
}: {
taskName: string;
data: JobData;
scheduleAt?: Date;
now?: Date;
maxRetries?: number;
}): Promise<void>;
startWorker({
workerId: _
}: {
workerId: string;
}): void;
stopWorker(): Promise<void>;
};
//# sourceMappingURL=queue.d.ts.map
//#endregion
export { Job, JobData, JobRepositoryDriver, JobStatus, createQueue };
//# sourceMappingURL=index.d.ts.map