From 9d7c611b3ae2183198ca874a061e26af23236e7e Mon Sep 17 00:00:00 2001 From: zhravan Date: Mon, 26 Jan 2026 23:36:01 +0530 Subject: [PATCH 1/2] feat: update payload interface --- packages/contracts/src/Queue/Utils.ts | 50 +++++++++++++++++++++------ 1 file changed, 39 insertions(+), 11 deletions(-) diff --git a/packages/contracts/src/Queue/Utils.ts b/packages/contracts/src/Queue/Utils.ts index 10388bc..e900ef9 100644 --- a/packages/contracts/src/Queue/Utils.ts +++ b/packages/contracts/src/Queue/Utils.ts @@ -1,12 +1,40 @@ +/** + * Serialized job data stored in the queue. + */ export interface JobPayload { - maxTries?: number; - maxExceptions?: number; - failOnTimeout?: boolean; - timeout?: number; - retryUntil?: number; - job: string; - backoff?: number; - delay?: number; - data?: any; - uuid?: string; -} \ No newline at end of file + /** Fully qualified job handler class name. */ + job: string; + + /** Data passed to handle() method. */ + data?: any; + + /** Unique job identifier. */ + uuid?: string; + + /** Maximum number of attempts. */ + maxTries?: number; + + /** Maximum number of exception attempts. */ + maxExceptions?: number; + + /** Seconds to wait before retry (can be array for exponential backoff). */ + backoff?: number; + + /** Seconds to delay job execution. */ + delay?: number; + + /** Job timeout in seconds. */ + timeout?: number; + + /** Absolute timestamp when job should timeout. */ + retryUntil?: number; + + /** Whether to fail on timeout. */ + failOnTimeout?: boolean; + + /** Job priority (driver-specific). */ + priority?: number; + + /** Job tags (driver-specific). */ + tags?: string[]; +} From eb36a5d448e2cb58810771acdc3e9a2bea9ec2b6 Mon Sep 17 00:00:00 2001 From: zhravan Date: Tue, 27 Jan 2026 00:03:03 +0530 Subject: [PATCH 2/2] feat: add abstract impl for IQDriver IQManager --- packages/contracts/src/Queue/IQueueDriver.ts | 36 +++++++++++++++++++ packages/contracts/src/Queue/IQueueManager.ts | 16 +++++++++ packages/contracts/src/index.ts | 2 ++ 3 files changed, 54 insertions(+) create mode 100644 packages/contracts/src/Queue/IQueueDriver.ts create mode 100644 packages/contracts/src/Queue/IQueueManager.ts diff --git a/packages/contracts/src/Queue/IQueueDriver.ts b/packages/contracts/src/Queue/IQueueDriver.ts new file mode 100644 index 0000000..915b132 --- /dev/null +++ b/packages/contracts/src/Queue/IQueueDriver.ts @@ -0,0 +1,36 @@ +import { IJob } from "./IJob"; +import { JobPayload } from "./Utils"; + +/** + * Queue driver contract for queue backends. + * Methods can be sync or async (return T | Promise). + */ +export abstract class IQueueDriver { + abstract push( + queue: string, + payload: JobPayload, + connection?: string, + ): string | number | void | Promise; + + abstract later( + queue: string, + payload: JobPayload, + delay: number, + connection?: string, + ): string | number | void | Promise; + + abstract bulk( + queue: string, + payloads: JobPayload[], + connection?: string, + ): (string | number | void)[] | Promise<(string | number | void)[]>; + + abstract pop( + queue: string, + connection?: string, + ): IJob | null | Promise; + + abstract size?(queue: string, connection?: string): number | Promise; + + abstract clear?(queue: string, connection?: string): void | Promise; +} diff --git a/packages/contracts/src/Queue/IQueueManager.ts b/packages/contracts/src/Queue/IQueueManager.ts new file mode 100644 index 0000000..e79e47c --- /dev/null +++ b/packages/contracts/src/Queue/IQueueManager.ts @@ -0,0 +1,16 @@ +import { IQueueDriver } from './IQueueDriver' + +/** + * Queue manager contract for managing drivers and connections. + */ +export abstract class IQueueManager { + abstract connection(name?: string): IQueueDriver + + abstract driver(name: string): IQueueDriver + + abstract extend(name: string, driver: IQueueDriver): void + + abstract getDefaultConnection(): string + + abstract setDefaultConnection(name: string): void +} diff --git a/packages/contracts/src/index.ts b/packages/contracts/src/index.ts index 72ad355..30b1fae 100644 --- a/packages/contracts/src/index.ts +++ b/packages/contracts/src/index.ts @@ -33,6 +33,8 @@ export * from './Http/IServerBag' export * from './Http/IUploadedFile' export * from './Http/Utils' export * from './Queue/IJob' +export * from './Queue/IQueueDriver' +export * from './Queue/IQueueManager' export * from './Queue/Utils' export * from './Routing/IAbstractRouteCollection' export * from './Routing/ICallableDispatcher'