import { FP } from "@atomist/sdm-pack-fingerprints";
/**
 * Flag for an undesirable usage
 */
export interface ProblemUsage {
    readonly severity: "info" | "warn" | "error";
    /**
     * Authority this comes from
     */
    readonly authority: string;
    /**
     * Message to the user
     */
    readonly description?: string;
    /**
     * URL associated with this if one is available.
     * For example, a security advisory.
     */
    readonly url?: string;
    readonly fingerprint: FP;
}
/**
 * Persistent store of problem fingerprints
 */
export interface ProblemStore {
    noteProblem(workspaceId: string, fingerprintId: string): Promise<void>;
    storeProblemFingerprint(workspaceId: string, problem: ProblemUsage): Promise<void>;
    loadProblems(workspaceId: string): Promise<ProblemUsage[]>;
}
/**
 * Check to see if the given fingerprint is undesirable in the given workspace.
 * Enables code to be used along with fingerprints persisted in ProblemStore.
 */
export declare type UndesirableUsageCheck = (fp: FP, workspaceId: string) => ProblemUsage | undefined;
/**
 * Type that can flag an issue with a fingerprint.
 * This is a programmatic complement to ProblemStore.
 */
export interface UndesirableUsageChecker {
    check: UndesirableUsageCheck;
}
/**
 * UndesirableUsageChecker from a list
 * @param {(fp: FP) => Promise<Flag[]>} checkers
 * @return {UndesirableUsageChecker}
 */
export declare function chainUndesirableUsageCheckers(...checkers: UndesirableUsageCheck[]): UndesirableUsageChecker;
/**
 * Undesirable usageChecker backed by a ProblemStore for the given workspace
 * @param {ProblemStore} problemStore
 * @param {string} workspaceId
 * @return {Promise<UndesirableUsageChecker>}
 */
export declare function problemStoreBackedUndesirableUsageCheckerFor(problemStore: ProblemStore, workspaceId: string): Promise<UndesirableUsageChecker>;
//# sourceMappingURL=ProblemStore.d.ts.map