import * as lambda from '@aws-cdk/aws-lambda';
import * as sns from '@aws-cdk/aws-sns';
import * as core from '@aws-cdk/core';
import { Construct } from '@aws-cdk/core';
/**
 * Collection of arbitrary properties
 *
 * @deprecated this type has been deprecated in favor of using a key-value type directly
 */
export declare type Properties = {
    [key: string]: any;
};
/**
 * Configuration options for custom resource providers.
 *
 * @deprecated used in {@link ICustomResourceProvider} which is now deprecated
 */
export interface CustomResourceProviderConfig {
    /**
     * The ARN of the SNS topic or the AWS Lambda function which implements this
     * provider.
     */
    readonly serviceToken: string;
}
/**
 * Represents a provider for an AWS CloudFormation custom resources.
 * @deprecated use `core.ICustomResourceProvider`
 */
export interface ICustomResourceProvider {
    /**
     * Called when this provider is used by a `CustomResource`.
     * @param scope The resource that uses this provider.
     * @returns provider configuration
     */
    bind(scope: Construct): CustomResourceProviderConfig;
}
/**
 * Represents a provider for an AWS CloudFormation custom resources.
 *
 * @deprecated use core.CustomResource instead
 */
export declare class CustomResourceProvider implements ICustomResourceProvider {
    readonly serviceToken: string;
    /**
     * The Lambda provider that implements this custom resource.
     *
     * We recommend using a lambda.SingletonFunction for this.
     */
    static fromLambda(handler: lambda.IFunction): CustomResourceProvider;
    /**
     * The SNS Topic for the provider that implements this custom resource.
     */
    static fromTopic(topic: sns.ITopic): CustomResourceProvider;
    /**
     * Use AWS Lambda as a provider.
     * @deprecated use `fromLambda`
     */
    static lambda(handler: lambda.IFunction): CustomResourceProvider;
    /**
     * Use an SNS topic as the provider.
     * @deprecated use `fromTopic`
     */
    static topic(topic: sns.ITopic): CustomResourceProvider;
    /**
     * @param serviceToken the ServiceToken which contains the ARN for this provider.
     */
    private constructor();
    bind(_: Construct): CustomResourceProviderConfig;
}
/**
 * Properties to provide a Lambda-backed custom resource
 * @deprecated use `core.CustomResourceProps`
 */
export interface CustomResourceProps {
    /**
     * The provider which implements the custom resource.
     *
     * You can implement a provider by listening to raw AWS CloudFormation events
     * through an SNS topic or an AWS Lambda function or use the CDK's custom
     * [resource provider framework] which makes it easier to implement robust
     * providers.
     *
     * [resource provider framework]: https://docs.aws.amazon.com/cdk/api/latest/docs/custom-resources-readme.html
     *
     * ```ts
     * import * as custom_resources from '@aws-cdk/custom-resources';
     * import * as lambda from '@aws-cdk/aws-lambda';
     * import { Stack } from '@aws-cdk/core';
     * declare const myOnEventLambda: lambda.Function;
     * declare const myIsCompleteLambda: lambda.Function;
     * const stack = new Stack();
     *
     * const provider = new custom_resources.Provider(stack, 'myProvider', {
     *   onEventHandler: myOnEventLambda,
     *   isCompleteHandler: myIsCompleteLambda, // optional
     * });
     * ```
     *
     * ```ts
     * import * as cloudformation from '@aws-cdk/aws-cloudformation';
     * import * as lambda from '@aws-cdk/aws-lambda';
     * declare const myFunction: lambda.Function;
     *
     * // invoke an AWS Lambda function when a lifecycle event occurs:
     * const provider = cloudformation.CustomResourceProvider.fromLambda(myFunction);
     * ```
     *
     * ```ts
     * import * as cloudformation from '@aws-cdk/aws-cloudformation';
     * import * as sns from '@aws-cdk/aws-sns';
     * declare const myTopic: sns.Topic;
     *
     * // publish lifecycle events to an SNS topic:
     * const provider = cloudformation.CustomResourceProvider.fromTopic(myTopic);
     * ```
     */
    readonly provider: ICustomResourceProvider;
    /**
     * Properties to pass to the Lambda
     *
     * @default - No properties.
     */
    readonly properties?: Properties;
    /**
     * For custom resources, you can specify AWS::CloudFormation::CustomResource
     * (the default) as the resource type, or you can specify your own resource
     * type name. For example, you can use "Custom::MyCustomResourceTypeName".
     *
     * Custom resource type names must begin with "Custom::" and can include
     * alphanumeric characters and the following characters: _@-. You can specify
     * a custom resource type name up to a maximum length of 60 characters. You
     * cannot change the type during an update.
     *
     * Using your own resource type names helps you quickly differentiate the
     * types of custom resources in your stack. For example, if you had two custom
     * resources that conduct two different ping tests, you could name their type
     * as Custom::PingTester to make them easily identifiable as ping testers
     * (instead of using AWS::CloudFormation::CustomResource).
     *
     * @see
     * https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cfn-customresource.html#aws-cfn-resource-type-name
     *
     * @default - AWS::CloudFormation::CustomResource
     */
    readonly resourceType?: string;
    /**
     * The policy to apply when this resource is removed from the application.
     *
     * @default cdk.RemovalPolicy.Destroy
     */
    readonly removalPolicy?: core.RemovalPolicy;
}
/**
 * Deprecated.
 * @deprecated use `core.CustomResource`
 */
export declare class CustomResource extends core.CustomResource {
    constructor(scope: Construct, id: string, props: CustomResourceProps);
}
