import type { NonEmptyString } from "../../../../common/CustomTypes/NonEmptyString";
import type { SubnetId } from "../../../../common/CustomTypes/SubnetId";
import type { Maybe } from "../../../../common/Maybe";
import type { TypeValidation } from '@altostra/type-validations';
import type { ConfigurationBase, ConfigurationDataBase } from "./common";
export declare type VPCConfigurationType = 'vpc';
export interface VPCConfiguration extends ConfigurationBase {
    type: VPCConfigurationType;
    configurations: VPCParams;
}
export declare enum VPCDataKeys {
    VPCId = "ALTOSTRA__DEFAULT_VPC_ID",
    PrivateSubnets = "ALTOSTRA__PRIVATE_SUBNETS",
    PublicSubnets = "ALTOSTRA__PUBLIC_SUBNETS",
    Subnets = "ALTOSTRA__SUBNETS"
}
export interface VPCParams extends ConfigurationDataBase {
    [VPCDataKeys.VPCId]: NonEmptyString;
    [VPCDataKeys.PrivateSubnets]?: string | null;
    [VPCDataKeys.PublicSubnets]?: string | null;
    [VPCDataKeys.Subnets]?: string | null;
}
export declare type ReservedVPCKey = VPCDataKeys;
export declare const reservedVPCKeys: VPCDataKeys[];
export declare type VPCData = PrivateVPCData | PublicVPCData;
export interface VPCDataBase {
    vpcId: NonEmptyString;
    privateSubnets?: SubnetId[];
    publicSubnets?: SubnetId[];
}
export interface PrivateVPCData extends VPCDataBase {
    privateSubnets: [SubnetId, ...SubnetId[]];
}
export interface PublicVPCData extends VPCDataBase {
    publicSubnets: [SubnetId, ...SubnetId[]];
}
export declare const isVPCData: TypeValidation<PrivateVPCData | PublicVPCData>;
export declare const isVPCParams: import("@altostra/type-validations").ObjectOfTypeValidation<VPCParams>;
export declare const isVPCConfiguration: import("@altostra/type-validations").ObjectOfTypeValidation<VPCConfiguration>;
export declare function configurationFromVPCData({ vpcId, privateSubnets, publicSubnets, }: VPCData): VPCParams;
export declare function vpcDataFromConfiguration({ [VPCDataKeys.VPCId]: vpcId, [VPCDataKeys.PrivateSubnets]: privateSubnets, [VPCDataKeys.PublicSubnets]: publicSubnets, }?: Partial<VPCParams>): Maybe<VPCData>;
