import type { IConstruct } from 'constructs';
import { Construct } from 'constructs';
import type { IApplication } from './application';
import type { IDeploymentStrategy } from './deployment-strategy';
import type { IEnvironment } from './environment';
import type { ActionPoint, IEventDestination, ExtensionOptions, IExtension, IExtensible } from './extension';
import { ExtensibleBase } from './extension';
import type { IDeploymentStrategyRef } from '../../interfaces/generated/aws-appconfig-interfaces.generated';
import type * as cp from '../../aws-codepipeline';
import * as iam from '../../aws-iam';
import type * as kms from '../../aws-kms';
import type * as lambda from '../../aws-lambda';
import type * as s3 from '../../aws-s3';
import type * as sm from '../../aws-secretsmanager';
import type * as ssm from '../../aws-ssm';
import type { DeletionProtectionCheck } from './util';
/**
 * Options for the Configuration construct
 */
export interface ConfigurationOptions {
    /**
     * The deployment strategy for the configuration.
     *
     * @default - A deployment strategy with the rollout strategy set to
     * RolloutStrategy.CANARY_10_PERCENT_20_MINUTES
     */
    readonly deploymentStrategy?: IDeploymentStrategyRef;
    /**
     * The name of the configuration.
     *
     * @default - A name is generated.
     */
    readonly name?: string;
    /**
     * The validators for the configuration.
     *
     * @default - No validators.
     */
    readonly validators?: IValidator[];
    /**
     * The description of the configuration.
     *
     * @default - No description.
     */
    readonly description?: string;
    /**
     * The type of configuration.
     *
     * @default ConfigurationType.FREEFORM
     */
    readonly type?: ConfigurationType;
    /**
     * The list of environments to deploy the configuration to.
     *
     * If this parameter is not specified, then there will be no
     * deployment created alongside this configuration.
     *
     * Deployments can be added later using the `IEnvironment.addDeployment` or
     * `IEnvironment.addDeployments` methods.
     *
     * @default - None.
     */
    readonly deployTo?: IEnvironment[];
    /**
     * The deployment key of the configuration.
     *
     * @default - None.
     */
    readonly deploymentKey?: kms.IKey;
    /**
     * A parameter to configure deletion protection.
     * Deletion protection prevents a user from deleting a configuration profile if your application has called
     * either `GetLatestConfiguration` or `GetConfiguration` for the configuration profile during the specified interval.
     *
     * @see https://docs.aws.amazon.com/appconfig/latest/userguide/deletion-protection.html
     *
     * @default DeletionProtectionCheck.ACCOUNT_DEFAULT
     */
    readonly deletionProtectionCheck?: DeletionProtectionCheck;
}
/**
 * Properties for the Configuration construct.
 */
export interface ConfigurationProps extends ConfigurationOptions {
    /**
     * The application associated with the configuration.
     */
    readonly application: IApplication;
}
export interface IConfiguration extends IConstruct {
    /**
     * The deployment strategy for the configuration.
     */
    readonly deploymentStrategy?: IDeploymentStrategy;
    /**
     * The configuration version number.
     */
    readonly versionNumber?: string;
    /**
     * The application associated with the configuration.
     */
    readonly application: IApplication;
    /**
     * The name of the configuration.
     */
    readonly name?: string;
    /**
     * The validators for the configuration.
     */
    readonly validators?: IValidator[];
    /**
     * The description of the configuration.
     */
    readonly description?: string;
    /**
     * The configuration type.
     */
    readonly type?: ConfigurationType;
    /**
     * The environments to deploy to.
     */
    readonly deployTo?: IEnvironment[];
    /**
     * The deployment key for the configuration.
     */
    readonly deploymentKey?: kms.IKey;
    /**
     * The ID of the configuration profile.
     */
    readonly configurationProfileId: string;
}
declare abstract class ConfigurationBase extends Construct implements IConfiguration, IExtensible {
    abstract readonly versionNumber?: string;
    abstract readonly configurationProfileId: string;
    /**
     * The application associated with the configuration.
     */
    readonly application: IApplication;
    /**
     * The environments to deploy to.
     */
    readonly deployTo?: IEnvironment[];
    /**
     * The name of the configuration.
     */
    readonly name?: string;
    /**
     * The validators for the configuration.
     */
    readonly validators?: IValidator[];
    /**
     * The description of the configuration.
     */
    readonly description?: string;
    /**
     * The configuration type.
     */
    readonly type?: ConfigurationType;
    /**
     * The deployment key for the configuration.
     */
    readonly deploymentKey?: kms.IKey;
    private readonly _deploymentStrategy?;
    /**
     * The deployment strategy for the configuration.
     */
    get deploymentStrategy(): IDeploymentStrategy | undefined;
    protected applicationId: string;
    protected extensible: ExtensibleBase;
    protected deletionProtectionCheck?: DeletionProtectionCheck;
    constructor(scope: Construct, id: string, props: ConfigurationProps);
    /**
     * Adds an extension defined by the action point and event destination
     * and also creates an extension association to the configuration profile.
     *
     * @param actionPoint The action point which triggers the event
     * @param eventDestination The event that occurs during the extension
     * @param options Options for the extension
     */
    on(actionPoint: ActionPoint, eventDestination: IEventDestination, options?: ExtensionOptions): void;
    /**
     * Adds a PRE_CREATE_HOSTED_CONFIGURATION_VERSION extension with the
     * provided event destination and also creates an extension association to the configuration profile.
     *
     * @param eventDestination The event that occurs during the extension
     * @param options Options for the extension
     */
    preCreateHostedConfigurationVersion(eventDestination: IEventDestination, options?: ExtensionOptions): void;
    /**
     * Adds a PRE_START_DEPLOYMENT extension with the provided event destination
     * and also creates an extension association to the configuration profile.
     *
     * @param eventDestination The event that occurs during the extension
     * @param options Options for the extension
     */
    preStartDeployment(eventDestination: IEventDestination, options?: ExtensionOptions): void;
    /**
     * Adds an ON_DEPLOYMENT_START extension with the provided event destination
     * and also creates an extension association to the configuration profile.
     *
     * @param eventDestination The event that occurs during the extension
     * @param options Options for the extension
     */
    onDeploymentStart(eventDestination: IEventDestination, options?: ExtensionOptions): void;
    /**
     * Adds an ON_DEPLOYMENT_STEP extension with the provided event destination
     * and also creates an extension association to the configuration profile.
     *
     * @param eventDestination The event that occurs during the extension
     * @param options Options for the extension
     */
    onDeploymentStep(eventDestination: IEventDestination, options?: ExtensionOptions): void;
    /**
     * Adds an ON_DEPLOYMENT_BAKING extension with the provided event destination and
     * also creates an extension association to the configuration profile.
     *
     * @param eventDestination The event that occurs during the extension
     * @param options Options for the extension
     */
    onDeploymentBaking(eventDestination: IEventDestination, options?: ExtensionOptions): void;
    /**
     * Adds an ON_DEPLOYMENT_COMPLETE extension with the provided event destination
     * and also creates an extension association to the configuration profile.
     *
     * @param eventDestination The event that occurs during the extension
     * @param options Options for the extension
     */
    onDeploymentComplete(eventDestination: IEventDestination, options?: ExtensionOptions): void;
    /**
     * Adds an ON_DEPLOYMENT_ROLLED_BACK extension with the provided event destination
     * and also creates an extension association to the configuration profile.
     *
     * @param eventDestination The event that occurs during the extension
     * @param options Options for the extension
     */
    onDeploymentRolledBack(eventDestination: IEventDestination, options?: ExtensionOptions): void;
    /**
     * Adds an AT_DEPLOYMENT_TICK extension with the provided event destination and
     * also creates an extension association to an application.
     *
     * @param eventDestination The event that occurs during the extension
     * @param options Options for the extension
     */
    atDeploymentTick(eventDestination: IEventDestination, options?: ExtensionOptions): void;
    /**
     * Adds an extension association to the configuration profile.
     *
     * @param extension The extension to create an association for
     */
    addExtension(extension: IExtension): void;
    protected addExistingEnvironmentsToApplication(): void;
    protected deployConfigToEnvironments(): void;
}
/**
 * Options for HostedConfiguration
 */
export interface HostedConfigurationOptions extends ConfigurationOptions {
    /**
     * The content of the hosted configuration.
     */
    readonly content: ConfigurationContent;
    /**
     * The latest version number of the hosted configuration.
     *
     * @default - None.
     */
    readonly latestVersionNumber?: number;
    /**
     * The version label of the hosted configuration.
     *
     * @default - None.
     */
    readonly versionLabel?: string;
}
/**
 * Properties for HostedConfiguration
 */
export interface HostedConfigurationProps extends ConfigurationProps {
    /**
     * The content of the hosted configuration.
     */
    readonly content: ConfigurationContent;
    /**
     * The latest version number of the hosted configuration.
     *
     * @default - None.
     */
    readonly latestVersionNumber?: number;
    /**
     * The version label of the hosted configuration.
     *
     * @default - None.
     */
    readonly versionLabel?: string;
    /**
     * The customer managed key to encrypt hosted configuration.
     *
     * @default None
     */
    readonly kmsKey?: kms.IKeyRef;
}
/**
 * A hosted configuration represents configuration stored in the AWS AppConfig hosted configuration store.
 */
export declare class HostedConfiguration extends ConfigurationBase {
    /**
     * The content of the hosted configuration.
     */
    readonly content: string;
    /**
     * The configuration content type, specified as a standard MIME type.
     * Supported examples include:
     * - `text/plain`
     * - `application/json`
     * - `application/octet-stream`
     * - `application/x-yaml`
     *
     * For an up-to-date list of valid MIME types, see:
     * https://www.iana.org/assignments/media-types/media-types.xhtml
     */
    readonly contentType?: string;
    /**
     * The latest version number of the hosted configuration.
     */
    readonly latestVersionNumber?: number;
    /**
     * The version label of the hosted configuration.
     */
    readonly versionLabel?: string;
    /**
     * The version number of the hosted configuration.
     */
    readonly versionNumber?: string;
    /**
     * The Amazon Resource Name (ARN) of the hosted configuration version.
     */
    readonly hostedConfigurationVersionArn: string;
    /**
     * The ID of the configuration profile.
     */
    readonly configurationProfileId: string;
    /**
     * The Amazon Resource Name (ARN) of the configuration profile.
     */
    readonly configurationProfileArn: string;
    private readonly _cfnConfigurationProfile;
    private readonly _cfnHostedConfigurationVersion;
    constructor(scope: Construct, id: string, props: HostedConfigurationProps);
}
/**
 * Options for SourcedConfiguration
 */
export interface SourcedConfigurationOptions extends ConfigurationOptions {
    /**
     * The location where the configuration is stored.
     */
    readonly location: ConfigurationSource;
    /**
     * The version number of the sourced configuration to deploy. If this is not specified,
     * then there will be no deployment.
     *
     * @default - None.
     */
    readonly versionNumber?: string;
    /**
     * The IAM role to retrieve the configuration.
     *
     * @default - A role is generated.
     */
    readonly retrievalRole?: iam.IRoleRef;
}
/**
 * Properties for SourcedConfiguration.
 */
export interface SourcedConfigurationProps extends ConfigurationProps {
    /**
     * The location where the configuration is stored.
     */
    readonly location: ConfigurationSource;
    /**
     * The version number of the sourced configuration to deploy. If this is not specified,
     * then there will be no deployment.
     *
     * @default - None.
     */
    readonly versionNumber?: string;
    /**
     * The IAM role to retrieve the configuration.
     *
     * @default - Auto generated if location type is not ConfigurationSourceType.CODE_PIPELINE otherwise no role specified.
     */
    readonly retrievalRole?: iam.IRoleRef;
}
/**
 * A sourced configuration represents configuration stored in an Amazon S3 bucket, AWS Secrets Manager secret, Systems Manager
 * (SSM) Parameter Store parameter, SSM document, or AWS CodePipeline.
 */
export declare class SourcedConfiguration extends ConfigurationBase {
    /**
     * The location where the configuration is stored.
     */
    readonly location: ConfigurationSource;
    /**
     * The version number of the configuration to deploy.
     */
    readonly versionNumber?: string;
    /**
     * The key to decrypt the configuration if applicable. This key
     * can be used when storing configuration in AWS Secrets Manager, Systems Manager Parameter Store,
     * or Amazon S3.
     */
    readonly sourceKey?: kms.IKey;
    /**
     * The ID of the configuration profile.
     */
    readonly configurationProfileId: string;
    /**
     * The Amazon Resource Name (ARN) of the configuration profile.
     */
    readonly configurationProfileArn: string;
    private readonly locationUri;
    private readonly _cfnConfigurationProfile;
    private readonly _retrievalRole?;
    constructor(scope: Construct, id: string, props: SourcedConfigurationProps);
    /**
     * The IAM role to retrieve the configuration.
     */
    get retrievalRole(): iam.IRole | undefined;
    private getRetrievalRole;
    private getPolicyForRole;
}
/**
 * The configuration type.
 */
export declare enum ConfigurationType {
    /**
     * Freeform configuration profile. Allows you to store your data in the AWS AppConfig
     * hosted configuration store or another Systems Manager capability or AWS service that integrates
     * with AWS AppConfig.
     *
     * @see https://docs.aws.amazon.com/appconfig/latest/userguide/appconfig-free-form-configurations-creating.html
     */
    FREEFORM = "AWS.Freeform",
    /**
     * Feature flag configuration profile. This configuration stores its data
     * in the AWS AppConfig hosted configuration store and the URI is simply hosted.
     */
    FEATURE_FLAGS = "AWS.AppConfig.FeatureFlags"
}
/**
 * The validator type.
 */
export declare enum ValidatorType {
    /**
     * JSON Scema validator.
     */
    JSON_SCHEMA = "JSON_SCHEMA",
    /**
     * Validate using a Lambda function.
     */
    LAMBDA = "LAMBDA"
}
/**
 * The configuration source type.
 */
export declare enum ConfigurationSourceType {
    S3 = "S3",
    SECRETS_MANAGER = "SECRETS_MANAGER",
    SSM_PARAMETER = "SSM_PARAMETER",
    SSM_DOCUMENT = "SSM_DOCUMENT",
    CODE_PIPELINE = "CODE_PIPELINE"
}
export interface IValidator {
    /**
     * The content of the validator.
     */
    readonly content: string;
    /**
     * The type of validator.
     */
    readonly type: ValidatorType;
}
/**
 * Defines a JSON Schema validator.
 */
export declare abstract class JsonSchemaValidator implements IValidator {
    /**
     * Defines a JSON Schema validator from a file.
     *
     * @param inputPath The path to the file that defines the validator
     */
    static fromFile(inputPath: string): JsonSchemaValidator;
    /**
     * Defines a JSON Schema validator from inline code.
     *
     * @param code The inline code that defines the validator
     */
    static fromInline(code: string): JsonSchemaValidator;
    abstract readonly content: string;
    abstract readonly type: ValidatorType;
}
/**
 * Defines an AWS Lambda validator.
 */
export declare abstract class LambdaValidator implements IValidator {
    /**
     *  Defines an AWS Lambda validator from a Lambda function. This will call
     * `addPermission` to your function to grant AWS AppConfig permissions.
     *
     * @param func The function that defines the validator
     */
    static fromFunction(func: lambda.Function): LambdaValidator;
    abstract readonly content: string;
    abstract readonly type: ValidatorType;
}
/**
 * Defines the hosted configuration content.
 */
export declare abstract class ConfigurationContent {
    /**
     * Defines the hosted configuration content from a file.
     *
     * @param inputPath The path to the file that defines configuration content
     * @param contentType The configuration content type, specified as a standard MIME type.
     * Supported examples include:
     * - `text/plain`
     * - `application/json`
     * - `application/octet-stream`
     * - `application/x-yaml`
     *
     * For an up-to-date list of valid MIME types, see:
     * https://www.iana.org/assignments/media-types/media-types.xhtml
     */
    static fromFile(inputPath: string, contentType?: string): ConfigurationContent;
    /**
     * Defines the hosted configuration content from inline code.
     *
     * @param content The inline code that defines the configuration content
     * @param contentType The configuration content type, specified as a standard MIME type.
     * Supported examples include:
     * - `text/plain`
     * - `application/json`
     * - `application/octet-stream`
     * - `application/x-yaml`
     *
     * For an up-to-date list of valid MIME types, see:
     * https://www.iana.org/assignments/media-types/media-types.xhtml
     */
    static fromInline(content: string, contentType?: string): ConfigurationContent;
    /**
     * Defines the hosted configuration content as JSON from inline code.
     *
     * @param content The inline code that defines the configuration content
     * @param contentType The configuration content type, specified as a standard MIME type.
     * Supported examples include:
     * - `text/plain`
     * - `application/json`
     * - `application/octet-stream`
     * - `application/x-yaml`
     *
     * For an up-to-date list of valid MIME types, see:
     * https://www.iana.org/assignments/media-types/media-types.xhtml
     */
    static fromInlineJson(content: string, contentType?: string): ConfigurationContent;
    /**
     * Defines the hosted configuration content as text from inline code.
     *
     * @param content The inline code that defines the configuration content
     */
    static fromInlineText(content: string): ConfigurationContent;
    /**
     * Defines the hosted configuration content as YAML from inline code.
     *
     * @param content The inline code that defines the configuration content
     */
    static fromInlineYaml(content: string): ConfigurationContent;
    /**
     * The configuration content.
     */
    abstract readonly content: string;
    /**
     * The configuration content type, specified as a standard MIME type.
     * Supported examples include:
     * - `text/plain`
     * - `application/json`
     * - `application/octet-stream`
     * - `application/x-yaml`
     *
     * For an up-to-date list of valid MIME types, see:
     * https://www.iana.org/assignments/media-types/media-types.xhtml
     */
    abstract readonly contentType: string;
}
/**
 * Defines the integrated configuration sources.
 */
export declare abstract class ConfigurationSource {
    /**
     * Defines configuration content from an Amazon S3 bucket.
     *
     * @param bucket The S3 bucket where the configuration is stored
     * @param objectKey The path to the configuration
     * @param key The KMS Key that the bucket is encrypted with
     */
    static fromBucket(bucket: s3.IBucket, objectKey: string, key?: kms.IKey): ConfigurationSource;
    /**
     * Defines configuration content from an AWS Secrets Manager secret.
     *
     * @param secret The secret where the configuration is stored
     */
    static fromSecret(secret: sm.ISecret): ConfigurationSource;
    /**
     * Defines configuration content from a Systems Manager (SSM) Parameter Store parameter.
     *
     * @param parameter The parameter where the configuration is stored
     * @param key The KMS Key that the secure string is encrypted with
     */
    static fromParameter(parameter: ssm.IParameter, key?: kms.IKey): ConfigurationSource;
    /**
     * Defines configuration content from a Systems Manager (SSM) document.
     *
     * @param document The SSM document where the configuration is stored
     */
    static fromCfnDocument(document: ssm.CfnDocument): ConfigurationSource;
    /**
     * Defines configuration content from AWS CodePipeline.
     *
     * @param pipeline The pipeline where the configuration is stored
     */
    static fromPipeline(pipeline: cp.IPipelineRef): ConfigurationSource;
    /**
     * The URI of the configuration source.
     */
    abstract readonly locationUri: string;
    /**
     * The type of the configuration source.
     */
    abstract readonly type: ConfigurationSourceType;
    /**
     * The KMS Key that encrypts the configuration.
     */
    abstract readonly key?: kms.IKey;
}
export {};
