import { Rule } from "../../aws/events/Rule";
import { Role } from "../../aws/iam/Role";
import { FunctionProperties, LambdaFunction } from '../../aws/lambda/Function';
import { CodeProps } from "../../aws/lambda/function/CodeProps";
import { Permission } from "../../aws/lambda/Permission";
import { Subscription } from "../../aws/sns/Subscription";
import { AWSResourcesFor } from '../aws';
import { Value } from "../Value";
export type LambdaExpects = AWSResourcesFor<'lambda' | 'events' | 'sns' | 'iam'>;
export declare class Lambda {
    private readonly aws;
    role: Role;
    lambda: LambdaFunction;
    permissions: Permission[];
    subscriptions: Subscription[];
    rules: Rule[];
    name: string;
    constructor(aws: LambdaExpects, name: string, role: Role, lambda: LambdaFunction);
    schedule(scheduleExpression: string): Lambda;
    grantInvoke(toArn: Value<string>, principal: Value<string>, sourceAccount?: Value<string>): Lambda;
    enableTracing(): Lambda;
    static grantInvoke(aws: AWSResourcesFor<'lambda'>, lambdaName: Value<string>, toArn: Value<string>, principal: Value<string>, sourceAccount?: Value<string>): Permission;
    snsTrigger(topicArn: Value<string>, sourceAccount?: Value<string>): Lambda;
    private static snsTrigger;
    static sqsTrigger(aws: AWSResourcesFor<'sqs' | 'lambda'>, lambdaArn: Value<string>, queueArn: Value<string>, batchSize: Value<number>): void;
    static create(aws: LambdaExpects, name: string, code: CodeProps, handler: Value<string>, runtime: FunctionProperties['runtime'], extra?: Partial<FunctionProperties>): Lambda;
}
