import { type Axios } from 'axios';
import type * as auth from 'amazon-cognito-identity-js';
import { type Vpn, VpnState, type VpnConfig, type VpnMetrics, VpnConfigLimits } from '@mytmpvpn/mytmpvpn-common/models/vpn';
import { type PeanutsPack } from '@mytmpvpn/mytmpvpn-common/models/peanuts';
export type GetVpnConfigLimitsResponse = VpnConfigLimits;
export type ListVpnsResponse = Vpn[];
export interface DeleteVpnResponse {
    vpn: {
        href: string;
        id: string;
    };
}
export interface CreateVpnResponse {
    vpn: {
        href: string;
        id: string;
    };
}
export interface GetVpnResponse {
    vpn: Vpn;
    metrics: VpnMetrics;
}
export interface RegionInfo {
    name: string;
    city: string;
    country: string;
    cctld: string;
}
export type GetVpnConfigResponse = string;
export type ListRegionsResponse = string[];
export type ListRegionsDetailedResponse = RegionInfo[];
export type ListVpnsPagingParams = {
    pageSize: Number;
    nextPageToken: string | undefined;
};
export type ListVpnsPaginatedResponse = {
    totalVpns: number;
    totalPages: number;
    vpns: Vpn[];
    nextPageToken: string | undefined;
};
export type GetPeanutsPackResponse = PeanutsPack[];
export type GetPeanutsBalanceResponse = number;
export declare abstract class MyTmpVpnClient {
    private session?;
    private user?;
    getUser(): auth.CognitoUser | undefined;
    getSession(): auth.CognitoUserSession | undefined;
    setUserSession(user: auth.CognitoUser, session: auth.CognitoUserSession): void;
    abstract listRegions(): Promise<ListRegionsResponse>;
    abstract listRegionsDetailed(): Promise<ListRegionsDetailedResponse>;
    abstract listPeanutsPacks(): Promise<GetPeanutsPackResponse>;
    abstract getPeanutsBalance(): Promise<GetPeanutsBalanceResponse>;
    abstract getVpnConfigLimits(): Promise<VpnConfigLimits>;
    abstract createVpn(region: string, vpnConfig: VpnConfig): Promise<Vpn>;
    abstract deleteVpn(vpnId: string): Promise<GetVpnResponse>;
    abstract getVpn(vpnId: string): Promise<GetVpnResponse>;
    abstract getVpnConfig(vpnId: string): Promise<GetVpnConfigResponse>;
    abstract getVpnQrConfig(vpnId: string): Promise<GetVpnConfigResponse>;
    abstract listVpnsPaginated(pagingParams: ListVpnsPagingParams): Promise<ListVpnsPaginatedResponse>;
    listVpns(pageSize?: number): Promise<Vpn[]>;
    createVpnSync(region: string, config: VpnConfig, timeout_s?: number): Promise<Vpn>;
    waitUntilVpnStateIs(vpnId: string, state: VpnState, timeoutInSeconds?: number): Promise<Vpn>;
    waitAndDeleteVpn(vpnId: string): Promise<GetVpnResponse | undefined>;
    waitAndDeleteVpnSync(vpnId: string, timeout_s?: number): Promise<Vpn>;
    waitAndDeleteAll(vpnIds: string[], timeout_s?: number): Promise<(GetVpnResponse | undefined)[]>;
    waitAndDeleteAllSync(vpnIds: string[], timeout_s?: number): Promise<Vpn[]>;
}
export declare class MyTmpVpnClientImpl extends MyTmpVpnClient {
    ax: Axios;
    constructor(apiUrl: string);
    getDefaultAuthorizationHeaders(): {
        Accept: string;
        Authorization: string;
    };
    getDefaultNonAuthorizationHeaders(): {
        Accept: string;
    };
    getVpnConfigLimits(): Promise<VpnConfigLimits>;
    listVpnsPaginated(pagingParams: ListVpnsPagingParams): Promise<ListVpnsPaginatedResponse>;
    deleteVpn(vpnId: string): Promise<GetVpnResponse>;
    createVpn(region: string, config: VpnConfig): Promise<Vpn>;
    getVpn(vpnId: string): Promise<GetVpnResponse>;
    getVpnConfig(vpnId: string): Promise<string>;
    getVpnQrConfig(vpnId: string): Promise<string>;
    listRegions(): Promise<ListRegionsResponse>;
    listRegionsDetailed(): Promise<RegionInfo[]>;
    listPeanutsPacks(): Promise<PeanutsPack[]>;
    getPeanutsBalance(): Promise<number>;
}
