import { SmrtObject } from '@happyvertical/smrt-core'; import { JobBuilder } from './job-builder.js'; import { JobHandle } from './job-handle.js'; /** * Options for the simple .bg() method */ export interface BgOptions { /** Queue name */ queue?: string; /** Priority level */ priority?: 'critical' | 'high' | 'normal' | 'low' | number; /** Delay before running (ms or string like '5m') */ delay?: string | number; /** Maximum retries */ retries?: number; /** Timeout in milliseconds */ timeout?: number; } /** * Type for the extended SmrtObject with background job methods */ export interface BackgroundCapable { /** * Simple background job submission * * @param method - Method name to invoke * @param args - Arguments to pass to the method * @param options - Job options * @returns JobHandle for tracking the job * * @example * const handle = await doc.bg('generateSummary', { format: 'md' }); */ bg(method: string, args?: Record, options?: BgOptions): Promise>; /** * Fluent job builder for advanced options * * @param method - Method name to invoke * @param args - Arguments to pass to the method * @returns JobBuilder for fluent configuration * * @example * const handle = await doc.background('generateSummary', { format: 'md' }) * .delay('5m') * .retries(5) * .priority('high') * .enqueue(); */ background(method: string, args?: Record): JobBuilder; } type SmrtObjectConstructor = new (...args: never[]) => SmrtObject; type BackgroundCapableConstructor = T & { new (...args: ConstructorParameters): InstanceType & BackgroundCapable; }; /** * Extend a SmrtObject class with background job methods * * @param BaseClass - The SmrtObject class to extend * @returns Extended class with .bg() and .background() methods * * @example * const BackgroundDocument = withBackgroundJobs(Document); * const doc = new BackgroundDocument({ ... }); * const handle = await doc.bg('generateSummary', { format: 'md' }); */ export declare function withBackgroundJobs(BaseClass: T): BackgroundCapableConstructor; export default withBackgroundJobs; //# sourceMappingURL=object-extension.d.ts.map