import { CriteriaBase } from "@codiac.io/codiac-common/contracts";
import { AssetTypesEnum, CloudProviderEnum } from "../../apis/codiac-relay/contracts";
/** List of codenames for supported KeyValue stores.
 * eg: Clients for these types of stores are registered under these values.  */
export declare enum KvpStoreTypesEnum {
    azKeyVault = "azKeyVault",
    awsKeyVault = "awsKeyVault",
    azBlob = "azBlob",
    mongoCollection = "mongoCollection",
    mongoDocument = "mongoDocument",
    etcd = "etcd"
}
/** Identifying and access information for a living, breathing, concrete instance
 * of a key value store resource in a cloud provider subscription. */
export declare abstract class CloudResourceInstance {
    name: string;
    provider: CloudProviderEnum;
    resourceId: string;
    /**
     * @param name The friendly, human-readable identifier of this resource,
     *  as it is known by the cloud provider.
     *  Its name is unique only within the resource group containing the instance,
     *  and it necessarily matches the name of the definition from which it was spawned.
     * @param provider  The third party cloud service provider that is hosting this resource.
     * @param resourceId The Id given by the csp.
     * @param id The id assigned to this entity by the codiac database.
     */
    constructor(name: string, provider: CloudProviderEnum, resourceId: string, id?: string, modified?: Date, modifiedBy?: string, created?: Date, createdBy?: string);
    id: string | undefined;
    createdBy: string;
    modifiedBy: string;
    created: Date;
    modified: Date;
}
export declare class KvpStoreInfrx extends CloudResourceInstance {
    type: KvpStoreTypesEnum;
    constructor(name: string, provider: CloudProviderEnum, type: KvpStoreTypesEnum, resourceId: string, id?: string, modified?: Date, modifiedBy?: string, created?: Date, createdBy?: string);
}
/** The specs for a key value store to be managed by the codiac system.
 * This class is used to programmatically put up and take down concrete key value stores. */
export declare class KvpStoreDef {
    name: string;
    provider: CloudProviderEnum;
    type: KvpStoreTypesEnum;
    instance?: KvpStoreInfrx | undefined;
    /**
     * @param name  The friendly identifying name under which the key value store resource is registered within an enterprise.  The concrete instance that gets created will use this name (if the instance exists already, this property must match the name of the concrete instance).
     * @param type  Differentiator for key value store resources (eg: KeyVault, etcd, mongo, etc) and their various implementations.
     * @param instance  Info describing the concrete instance of this kvp store actually living within a cloud provider subscription.
     */
    constructor(name: string, provider: CloudProviderEnum, type: KvpStoreTypesEnum, instance?: KvpStoreInfrx | undefined, id?: string, modified?: Date, modifiedBy?: string, created?: Date, createdBy?: string);
    id: string | undefined;
    createdBy: string;
    modifiedBy: string;
    created: Date;
    modified: Date;
}
export declare class KvpStoreDefCriteria extends CriteriaBase<KvpStoreDef> {
    name?: string;
    provider?: CloudProviderEnum;
    type?: KvpStoreTypesEnum;
}
/** Representation of a secret store managed service on a cloud provider.
 */
export declare class SecretStoreDef extends KvpStoreDef {
    constructor(name: string, provider: CloudProviderEnum, type: KvpStoreTypesEnum, instance?: SecretStore | undefined, id?: string, modified?: Date, modifiedBy?: string, created?: Date, createdBy?: string);
}
export declare class SecretStore extends KvpStoreInfrx {
    constructor(name: string, resourceId: string, provider: CloudProviderEnum, type: KvpStoreTypesEnum, id?: string, modified?: Date, modifiedBy?: string, created?: Date, createdBy?: string);
}
export declare class AzureKeyVaultDef extends SecretStoreDef {
    resourceGroup: string;
    tenantId: string;
    subscriptionId: string;
    location: string;
    azVaultSku: "standard" | "premium";
    instance?: AzureKeyVault | undefined;
    constructor(name: string, resourceGroup: string, tenantId: string, subscriptionId: string, location: string, azVaultSku?: "standard" | "premium", instance?: AzureKeyVault | undefined);
}
export declare class AzureKeyVault extends SecretStore {
    resourceGroup: string;
    tenantId: string;
    subscriptionId: string;
    location: string;
    vaultUri: string;
    constructor(name: string, resourceId: string, resourceGroup: string, tenantId: string, subscriptionId: string, location: string, vaultUri: string);
}
export declare class AwsSecretStoreDef extends SecretStoreDef {
    accountId: string;
    region: string;
    instance?: AwsSecretStore | undefined;
    constructor(name: string, accountId: string, region: string, instance?: AwsSecretStore | undefined);
}
export declare class AwsSecretStore extends SecretStore {
    accountId: string;
    region: string;
    constructor(name: string, resourceId: string, accountId: string, region: string);
}
/** Limited details of a Storage Account. */
export interface IStorageAccountEndpointUrls {
    web?: string;
    dfs?: string;
    blob?: string;
    file?: string;
    queue?: string;
    table?: string;
}
/** Supported file store adapters that can be mapped to a reserved folder on an asset. */
export declare enum FileStoreTypeEnum {
    azureFileStorage = "AzureFileStorage",
    azureBlobStorage = "AzureBlobStorage",
    azureDisk = "AzureDisk",
    hostMachineFolder = "HostMachineFolder"
}
/** An object representation of a config file, assembled from ScopedSettings.
 * This document can take any form, and is constructed solely from settings and values,
 * with all meta information omitted to preserve the integrity of the ultimate config file.
 * NOTE: To view the list of un-smashed settings with metadata from which this document is assembled,
 * fire the same request object against the ScopedSetting endpoint.  */
export declare class ConfigDoc {
    id?: string | undefined;
    constructor(id?: string | undefined);
}
/** Identifies a single asset replica. */
export type AssetReplicaContext = {
    asset: string;
    assetType: AssetTypesEnum | undefined;
    enterprise: string;
    environment: string;
    cabinet: string;
    replica?: string | undefined;
};
export type K8sContainerContext = {
    namespace: string;
    pod?: string | undefined;
    container?: string | undefined;
};
