import { IAuditable, IBetterLogger } from "@codiac.io/codiac-common";
import { UserNameTenantCode } from "@codiac.io/codiac-ops-common";
import { IOutputStyler, IUserInputProvider } from "../../ops";
import { CloudProviderEnum, ClusterDef, ImageRegistry } from "../../apis/codiac-api/contracts";
import { IRegistryConfigurator } from "../i-registry-configurator";
import { RelayClient as GenRelayClient } from "../../apis/codiac-relay";
import { ILoginConfigurator } from "../i-login-configurator";
import { ISecretStoreConfigurator } from "../i-secret-store-configurator";
import { AwsSecretStoreDef, SecretStoreDef } from "../../relay/contracts";
import { AwsIdentity, CloudProviderUser, FileStoreDef, LogintoCloudProviderRequest } from "../../apis/codiac-relay/contracts";
import { ClusterCaptureDef } from "../../codiac-entities/cluster-capture-def";
import { IFileStoreConfigurator } from "../i-file-store-configurator";
import { IClusterConfigurator } from "../i-cluster-configurator";
export type AwsProprietaryInput = {
    sessionToken?: string | undefined;
};
/** Walks the user through the selection of an existing
 * or the declaration of a new image registry.
 */
export declare class AwsResourceConfigurator implements IFileStoreConfigurator, IRegistryConfigurator, ILoginConfigurator, ISecretStoreConfigurator, IClusterConfigurator {
    private genRelayClient;
    private codiacUser;
    private _ui;
    private _styler;
    private logger;
    constructor(genRelayClient: GenRelayClient, codiacUser: UserNameTenantCode, _ui: IUserInputProvider, _styler: IOutputStyler, logger: IBetterLogger);
    readonly cloudProvider = CloudProviderEnum.aws;
    captureSecretStore(defaults?: Partial<AwsSecretStoreDef> | undefined): Promise<SecretStoreDef>;
    /** Concatenates the secret and session token into a single parseable base64 string */
    private crunchForTransport;
    promptToLogin(providerAccountId?: string, suppressConfirmations?: boolean, providedUserName?: string, providedSecret?: string, proprietaryInput?: AwsProprietaryInput | undefined): Promise<[boolean, CloudProviderUser]>;
    promptToLogout(): Promise<[boolean, string]>;
    assembleLoginRequest(userName: string | undefined, secret: string, providerAccountId?: string | undefined, proprietaryInput?: {
        [key: string]: any;
    } | undefined): LogintoCloudProviderRequest;
    /** Returns undefined for invalid creds. */
    getAwsUserInfo(accountId?: string, throwNotFound?: boolean): Promise<AwsIdentity | undefined>;
    captureImageRegistry(accountId?: string): Promise<ImageRegistry>;
    defineCluster(initial: Partial<ClusterDef>, defaults?: Partial<ClusterDef>): Promise<{
        spec: ClusterDef;
        defaults: Partial<ClusterDef>;
    }>;
    private promptForIngressSpec;
    defineClusterCaptureParams(initial: Partial<ClusterDef>, defaults?: Partial<ClusterDef>): Promise<{
        spec: ClusterCaptureDef;
        defaults: Partial<ClusterDef>;
    }>;
    private promptForName;
    private promptForNodeSpec;
    private promptForLocation;
    /** Asks the user whether to keep the default version, and if not presents a select list. */
    private promptForK8sVersion;
    captureFileStore(accountId: string, defaults: Partial<FileStoreDef>, allowUserInteraction: boolean): Promise<FileStoreDef | undefined>;
    private promptForS3Bucket;
    protected createAuditable(): IAuditable;
}
