nats-jobs
Version:
Background job processor using NATS
38 lines (37 loc) • 1.37 kB
TypeScript
import { ConsumerConfig, JsMsg, StreamConfig, JetStreamClient } from 'nats';
export interface Context {
signal: AbortSignal;
def: JobDef;
js: JetStreamClient;
}
export interface JobDef {
stream: string;
streamConfig?: Partial<StreamConfig>;
consumerConfig?: Partial<ConsumerConfig>;
filterSubject?: string;
/** How often to pull down messages from the consumer. */
pullInterval?: number;
/** How many messages to pull at one time. */
batch?: number;
/** Time to wait before reprocessing the message if processing fails. */
backoff?: number | number[];
/** How many times to attempt to process the message. */
numAttempts?: number;
/** Automatically delay the ack_wait timeout. */
autoExtendAckTimeout?: boolean;
perform(msg: JsMsg, context: Context): Promise<void>;
/** Timeout in ms on the perform. Abort signal will trigger if timeout is reached. */
timeoutMs?: number;
/** Expected time in ms for perform to complete. */
expectedMs?: number;
}
export interface Deferred<A> {
done: (value: A) => void;
promise: Promise<A>;
}
export type StopFn = () => Promise<void>;
export interface BackoffOptions {
numEntries?: number;
repeatAfter?: number;
}
export type Events = 'start' | 'receive' | 'working' | 'complete' | 'error' | 'timeout' | 'pull' | 'stop' | 'noAck';