///
import EventEmitter from 'events';
import { Job, Run, Client as SDK, JobDefinition } from '@nosana/sdk';
import { Provider } from '../../provider/Provider.js';
import { NodeRepository } from '../../repository/NodeRepository.js';
import { StopReason } from '../task/TaskManager.js';
export declare const jobEmitter: EventEmitter<[never]>;
export declare class JobHandler {
private sdk;
private provider;
private repository;
private id;
private job;
private runSubscriptionId;
private jobExternalUtil;
private eventEmitter;
private finishing;
accountEmitter: EventEmitter;
constructor(sdk: SDK, provider: Provider, repository: NodeRepository);
/**
* Expose a method to allow external consumers to listen for events
*/
on(event: string, listener: (...args: any[]) => void): void;
/**
* Expose a method to remove listeners
*/
off(event: string, listener: (...args: any[]) => void): void;
get(): Job | undefined;
private jobId;
private getJobOrThrow;
clearJob(): void;
private getErrorMessage;
private formatErrorDetails;
claim(jobAddress: string): Promise;
register(jobAddress: string, run: Run, job: Job): void;
deregister(jobAddress: string): void;
nodeStop(): Promise;
validate(jobDefinition: JobDefinition): Promise;
private listenForAccountChanges;
private stopListeningForAccountChanges;
start(job: Job): Promise;
runWithErrorHandling(): Promise;
finish(run: Run, reason: StopReason): Promise;
clearOldJobs(): Promise;
}