/// <reference types="node" />
import { Terraform, TerraformPlan, TerraformOutput, AbstractTerraformPlan } from "./terraform";
import { TerraformJsonConfigBackendRemote } from "../terraform-json";
import * as TerraformCloudClient from "@skorfmann/terraform-cloud";
import { SynthesizedStack } from "../synth-stack";
export declare class TerraformCloudPlan extends AbstractTerraformPlan implements TerraformPlan {
    readonly planFile: string;
    readonly plan: {
        [key: string]: any;
    };
    readonly url: string;
    constructor(planFile: string, plan: {
        [key: string]: any;
    }, url: string);
}
export interface TerraformCredentialsItem {
    token: string;
}
export interface TerraformCredentials {
    [hostname: string]: TerraformCredentialsItem;
}
export interface TerraformCredentialsFile {
    credentials: TerraformCredentials;
}
export declare class TerraformCloud implements Terraform {
    readonly abortSignal: AbortSignal;
    readonly stack: SynthesizedStack;
    readonly config: TerraformJsonConfigBackendRemote;
    private readonly createLogSender;
    private readonly terraformConfigFilePath;
    private readonly token;
    private readonly hostname;
    private readonly workspaceName;
    private readonly organizationName;
    private readonly client;
    private readonly isSpeculative;
    private configurationVersionId?;
    readonly workDir: string;
    run?: TerraformCloudClient.Run;
    constructor(abortSignal: AbortSignal, stack: SynthesizedStack, config: TerraformJsonConfigBackendRemote, isSpeculative?: boolean, createLogSender?: (_phase: string) => (_stdout: string, _isErr?: boolean) => void);
    isRemoteWorkspace(): Promise<boolean>;
    init(): Promise<void>;
    plan(destroy?: boolean): Promise<TerraformPlan>;
    private update;
    deploy(_planFile: string, stdout: (chunk: Buffer) => any): Promise<void>;
    destroy(stdout: (chunk: Buffer) => any): Promise<void>;
    version(): Promise<string>;
    output(): Promise<{
        [key: string]: TerraformOutput;
    }>;
    private workspace;
    private isConfigurationVersionReady;
    private waitForConfigurationVersionToBeReady;
    private removeLocalTerraformDirectory;
}
