import { LogContext } from '@balena/jellyfish-logger'; import type { AutumnDBSession, ContractData, Kernel } from 'autumndb'; import * as graphileWorker from 'graphile-worker'; import type { Pool } from 'pg'; import type { ActionRequestContract } from '../types'; export interface ProducerOptions { logContext: LogContext; action: string; card: string; type: string; arguments: ContractData; currentDate?: Date; originator?: string; } export interface ProducerResults { error: boolean; timestamp: string; data: { [k: string]: unknown; } | string | number | boolean | unknown[] | null; } export interface QueueProducer { initialize: (logContext: LogContext) => Promise; waitResults: (logContext: LogContext, actionRequest: ActionRequestContract) => Promise; deleteJob: (context: LogContext, key: string) => Promise; } /** * @summary Enqueue an action request * @function * * @param logContext - log context * @param pool - database connection pool * @param actor - actor id * @param actionRequest - action request contract * @returns enqueued action request contract */ export declare function enqueue(logContext: LogContext, pool: Pool, actor: string, actionRequest: ActionRequestContract): Promise; /** * Queue module for Jellyfish. * * @module queue */ export declare class Producer implements QueueProducer { private kernel; private pool; private session; constructor(kernel: Kernel, pool: Pool, session: AutumnDBSession); /** * @summary Initialize the queue producer * @function * @public * * @param logContext - log context */ initialize(logContext: LogContext): Promise; /** * @summary Make and return Graphile worker utils instance * @function * * @param logContext - log context * @param retries - number of times to retry Graphile worker initialization * @returns graphile worker utils instance * * @example * ```typescript * const workerUtils = await this.makeWorkerUtils(context); * ``` */ makeWorkerUtils(logContext: LogContext, retries?: number): Promise; /** * @summary Wait for an action request results * @function * @public * * @param logContext - log context * @param actionRequest - action request contract * @returns producer results */ waitResults(logContext: LogContext, actionRequest: ActionRequestContract): Promise; /** * @summary Delete a job from the queue using its job key * @function * * @param logContext - execution context * @param key - job key to delete */ deleteJob(logContext: LogContext, key: string): Promise; }