import { TorrentClient } from "./clients/TorrentClient.js";
import { ActionResult, DecisionAnyMatch, InjectionResult, SaveResult } from "./constants.js";
import { Metafile } from "./parseTorrent.js";
import { AssessmentWithTracker } from "./pipeline.js";
import { SearcheeWithLabel } from "./searchee.js";
type ActionReturn = {
    client: TorrentClient;
    actionResult: InjectionResult.SUCCESS | InjectionResult.ALREADY_EXISTS;
    destinationDir?: string;
    linkedNewFiles: boolean;
} | {
    client?: TorrentClient;
    actionResult: InjectionResult.TORRENT_NOT_COMPLETE;
    linkedNewFiles: boolean;
} | {
    actionResult: InjectionResult.FAILURE;
    linkedNewFiles: boolean;
} | {
    actionResult: SaveResult.SAVED;
};
export declare function performAction(newMeta: Metafile, decision: DecisionAnyMatch, searchee: SearcheeWithLabel, tracker: string): Promise<ActionReturn>;
export declare function performActionWithoutMutex(newMeta: Metafile, decision: DecisionAnyMatch, searchee: SearcheeWithLabel, tracker: string, injectClient?: TorrentClient, options?: {
    onlyCompleted: boolean;
}): Promise<ActionReturn>;
export declare function performActions(searchee: SearcheeWithLabel, matches: AssessmentWithTracker[]): Promise<ActionResult[]>;
/**
 * Tests if srcDir supports linkType.
 * @param srcDir The directory to link from
 * @param testSrcName A unique name.cross-seed to create in srcDir if necessary
 * @param testDestName A unique name.cross-seed to create in the linkDir
 * @returns true if the test was successful, false if it failed (or throws)
 */
export declare function testLinking(srcDir: string, testSrcName: string, testDestName: string): Promise<boolean>;
export {};
