import { Schema, Model, Document, Types } from "mongoose"; import type { DatabaseAdapter, QueueJobRecord } from "../interfaces/database.ts"; import type { JobMeta, JobStatus, BaseJobOptions, WithPriority, WithDelay } from "../interfaces/job.ts"; import { DbQueue } from "../drivers/db.ts"; export interface MongooseJobRequest extends BaseJobOptions, WithPriority, WithDelay { /** Job payload */ payload: TPayload; } export interface IQueueJobDocument { payload: any; name: string; ttr: number; delaySeconds: number; priority: number; pushTime: Date; delayTime: Date | null; reserveTime: Date | null; doneTime: Date | null; expireTime: Date | null; status: "waiting" | "reserved" | "done" | "failed"; attempt: number; errorMessage?: string; } export interface IQueueJob extends IQueueJobDocument, Document { _id: Types.ObjectId; } export declare const QueueJobSchema: Schema & IQueueJob & Required<{ _id: Types.ObjectId; }> & { __v: number; }, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, IQueueJob, Document, {}, import("mongoose").ResolveSchemaOptions> & import("mongoose").FlatRecord & Required<{ _id: Types.ObjectId; }> & { __v: number; }>; export declare class MongooseDatabaseAdapter implements DatabaseAdapter { private model; constructor(model: Model); insertJob(payload: unknown, meta: JobMeta): Promise; reserveJob(timeout: number): Promise; completeJob(id: string): Promise; releaseJob(id: string): Promise; failJob(id: string, error: string): Promise; getJobStatus(id: string): Promise; } export declare class MongooseQueue> extends DbQueue { mongooseAdapter: MongooseDatabaseAdapter; model: Model; constructor(config: { model?: Model; name: string; }); } export declare function createQueueModel(modelName?: string, collectionName?: string): Model;