import type { Observable } from 'rxjs';
import type { Application } from '../application/application.model';
export interface IRegion {
    account?: string;
    availabilityZones?: string[];
    deprecated?: boolean;
    endpoint?: string;
    faultDomains?: string[];
    name: string;
    preferredZones?: string[];
}
export interface IAccount {
    accountId: string;
    name: string;
    requiredGroupMembership: string[];
    type: string;
}
export interface IArtifactAccount {
    name: string;
    types: string[];
}
export interface IAccountDetails extends IAccount {
    accountType: string;
    authorized: boolean;
    awsAccount?: string;
    awsVpc?: string;
    bastionHost?: string;
    challengeDestructiveActions: boolean;
    cloudProvider: string;
    defaultKeyPair?: string;
    environment: string;
    primaryAccount: boolean;
    regions: IRegion[];
    registry?: string;
    namespaces?: string[];
    spinnakerKindMap?: {
        [k: string]: string;
    };
}
export interface IAggregatedAccounts {
    [credentials: string]: IAccountDetails;
}
export interface IZone {
    [key: string]: string[];
}
export interface IAccountZone {
    [key: string]: IZone;
}
export declare class AccountService {
    static accounts$: Observable<IAccountDetails[]>;
    static providers$: Observable<string[]>;
    static initialize(): void;
    static challengeDestructiveActions(account: string): PromiseLike<boolean>;
    static getArtifactAccounts(): PromiseLike<IArtifactAccount[]>;
    static getAccountDetails(account: string): PromiseLike<IAccountDetails>;
    static getAllAccountDetailsForProvider(provider: string): PromiseLike<IAccountDetails[]>;
    static getAvailabilityZonesForAccountAndRegion(provider: string, account: string, region: string): PromiseLike<string[]>;
    static getCredentialsKeyedByAccount(provider?: string): PromiseLike<IAggregatedAccounts>;
    static getPreferredZonesByAccount(provider: string): PromiseLike<IAccountZone>;
    static getRegionsForAccount(account: string): PromiseLike<IRegion[]>;
    static getUniqueAttributeForAllAccounts(provider: string, attribute: string): PromiseLike<string[]>;
    static listAllAccounts(provider?: string): PromiseLike<IAccountDetails[]>;
    static listAccounts(provider?: string): PromiseLike<IAccountDetails[]>;
    static applicationAccounts(application?: Application): PromiseLike<IAccountDetails[]>;
    static listProviders$(application?: Application): Observable<string[]>;
    static listProviders(application?: Application): PromiseLike<string[]>;
    static getAccountForInstance(cloudProvider: string, instanceId: string, app: Application): PromiseLike<string>;
}
