import iam = require('@aws-cdk/aws-iam');
import cdk = require('@aws-cdk/cdk');
import { FunctionProps } from './lambda';
import { FunctionName, FunctionRef } from './lambda-ref';
import { FunctionArn } from './lambda.generated';
import { Permission } from './permission';
/**
 * Properties for a newly created singleton Lambda
 */
export interface SingletonFunctionProps extends FunctionProps {
    /**
     * A unique identifier to identify this lambda
     *
     * The identifier should be unique across all custom resource providers.
     * We recommend generating a UUID per provider.
     */
    uuid: string;
    /**
     * A descriptive name for the purpose of this Lambda.
     *
     * If the Lambda does not have a physical name, this string will be
     * reflected its generated name. The combination of lambdaPurpose
     * and uuid must be unique.
     *
     * @default SingletonLambda
     */
    lambdaPurpose?: string;
}
/**
 * A Lambda that will only ever be added to a stack once.
 *
 * The lambda is identified using the value of 'uuid'. Run 'uuidgen'
 * for every SingletonLambda you create.
 */
export declare class SingletonFunction extends FunctionRef {
    readonly functionName: FunctionName;
    readonly functionArn: FunctionArn;
    readonly role?: iam.Role | undefined;
    protected readonly canCreatePermissions: boolean;
    private lambdaFunction;
    constructor(parent: cdk.Construct, name: string, props: SingletonFunctionProps);
    addPermission(name: string, permission: Permission): void;
    private ensureLambda;
}
