import { Readable } from 'node:stream';
import { URL } from 'node:url';
import { Ux } from '@salesforce/sf-plugins-core/Ux';
import { Logger } from '@salesforce/core';
import { NpmMeta } from './npmCommand.js';
import { type NpmName } from './npmName.js';
export declare const DEFAULT_REGISTRY = "https://registry.npmjs.org/";
export type ConfigContext = {
    configDir?: string;
    cacheDir?: string;
    dataDir?: string;
    cliRoot?: string;
};
export type Verifier = {
    verify(): Promise<NpmMeta>;
    isAllowListed(): Promise<boolean>;
};
declare class CodeVerifierInfo {
    private signature?;
    private publicKey?;
    private data?;
    get dataToVerify(): Readable;
    set dataToVerify(value: Readable);
    get signatureStream(): Readable;
    set signatureStream(value: Readable);
    get publicKeyStream(): Readable;
    set publicKeyStream(value: Readable);
}
export declare function verify(codeVerifierInfo: CodeVerifierInfo): Promise<boolean>;
export declare const getNpmRegistry: () => URL;
export declare function isAllowListed({ logger, configPath, name, }: {
    logger: Logger;
    configPath: string;
    name?: string;
}): Promise<boolean>;
/**
 * class for verifying a digital signature pack of an npm
 */
export declare class InstallationVerification implements Verifier {
    private pluginNpmName?;
    private config?;
    private logger?;
    /**
     * setter for the cli engine config
     *
     * @param _config cli engine config
     */
    setConfig(_config?: ConfigContext): InstallationVerification;
    /**
     * setter for the plugin name
     *
     * @param _pluginName the published plugin name
     */
    setPluginNpmName(_pluginName?: NpmName | undefined): InstallationVerification;
    /**
     * validates the digital signature.
     */
    verify(): Promise<NpmMeta>;
    isAllowListed(): Promise<boolean>;
    /**
     * Downloads the tgz file content and stores it in a cache folder
     */
    streamTagGz(): Promise<NpmMeta>;
    private getConfigPath;
    private getCachePath;
    /**
     * Invoke npm to discover a urls for the certificate and digital signature.
     */
    private retrieveNpmMeta;
    private getLogger;
}
export declare class VerificationConfig {
    verifier?: Verifier;
    private ux;
    log(message: string): void;
}
export declare const doPrompt: (ux: Ux) => (plugin?: string) => Promise<void>;
export declare const doInstallationCodeSigningVerification: (ux: Ux) => (config: ConfigContext, plugin: {
    plugin: string;
    tag: string;
}, verificationConfig: VerificationConfig) => Promise<void>;
export {};
