import type { Lambda as AWSLambda } from "aws-sdk";
import { JsonFormat } from "typesafe-dynamodb";
import { DeleteItemInput, DeleteItemOutput } from "typesafe-dynamodb/lib/delete-item";
import { GetItemInput, GetItemOutput } from "typesafe-dynamodb/lib/get-item";
import { PutItemInput, PutItemOutput } from "typesafe-dynamodb/lib/put-item";
import { QueryInput, QueryOutput } from "typesafe-dynamodb/lib/query";
import { ScanInput, ScanOutput } from "typesafe-dynamodb/lib/scan";
import { UpdateItemInput, UpdateItemOutput } from "typesafe-dynamodb/lib/update-item";
import { Function } from "./function";
import { IntegrationCall } from "./integration";
import { ITable } from "./table";
/**
 * The `AWS` namespace exports functions that map to AWS Step Functions AWS-SDK Integrations.
 *
 * @see https://docs.aws.amazon.com/step-functions/latest/dg/supported-services-awssdk.html
 */
export declare namespace $AWS {
    /**
     * @see https://docs.aws.amazon.com/step-functions/latest/dg/connect-ddb.html
     */
    namespace DynamoDB {
        /**
         * @see https://docs.aws.amazon.com/step-functions/latest/dg/connect-ddb.html
         */
        const DeleteItem: IntegrationCall<"$AWS.DynamoDB.deleteItem", <Item extends object, PartitionKey extends keyof Item, RangeKey extends keyof Item | undefined, Key extends Pick<Item, Exclude<PartitionKey, undefined> | Exclude<RangeKey, undefined>> extends infer T ? T extends Pick<Item, Exclude<PartitionKey, undefined> | Exclude<RangeKey, undefined>> ? T extends undefined ? undefined : import("typesafe-dynamodb/lib/attribute-value").ToAttributeMap<Extract<T, object>> : never : never, ConditionExpression extends string | undefined, ReturnValue extends string = "NONE">(input: {
            Table: ITable<Item, PartitionKey, RangeKey>;
        } & Omit<DeleteItemInput<Item, PartitionKey, RangeKey, Key, ConditionExpression, ReturnValue, JsonFormat.AttributeValue>, "TableName">) => Promise<DeleteItemOutput<Item, ReturnValue, JsonFormat.AttributeValue>>>;
        /**
         * @see https://docs.aws.amazon.com/step-functions/latest/dg/connect-ddb.html
         */
        const GetItem: IntegrationCall<"$AWS.DynamoDB.getItem", <Item extends object, PartitionKey extends keyof Item, RangeKey extends keyof Item | undefined, Key extends Pick<Item, Exclude<PartitionKey, undefined> | Exclude<RangeKey, undefined>> extends infer T ? T extends Pick<Item, Exclude<PartitionKey, undefined> | Exclude<RangeKey, undefined>> ? T extends undefined ? undefined : import("typesafe-dynamodb/lib/attribute-value").ToAttributeMap<Extract<T, object>> : never : never, AttributesToGet extends keyof Item | undefined = undefined, ProjectionExpression extends string | undefined = undefined>(input: {
            Table: ITable<Item, PartitionKey, RangeKey>;
        } & Omit<GetItemInput<Item, PartitionKey, RangeKey, Key, AttributesToGet, ProjectionExpression, JsonFormat.AttributeValue>, "TableName">) => Promise<GetItemOutput<Item, PartitionKey, RangeKey, Key, AttributesToGet, ProjectionExpression, JsonFormat.AttributeValue>>>;
        /**
         * @see https://docs.aws.amazon.com/step-functions/latest/dg/connect-ddb.html
         */
        const UpdateItem: IntegrationCall<"$AWS.DynamoDB.updateItem", <Item extends object, PartitionKey extends keyof Item, RangeKey extends keyof Item | undefined, Key extends Pick<Item, Exclude<PartitionKey, undefined> | Exclude<RangeKey, undefined>> extends infer T ? T extends Pick<Item, Exclude<PartitionKey, undefined> | Exclude<RangeKey, undefined>> ? T extends undefined ? undefined : import("typesafe-dynamodb/lib/attribute-value").ToAttributeMap<Extract<T, object>> : never : never, UpdateExpression extends string, ConditionExpression extends string | undefined = undefined, ReturnValue extends string = "NONE">(input: {
            Table: ITable<Item, PartitionKey, RangeKey>;
        } & Omit<UpdateItemInput<Item, PartitionKey, RangeKey, Key, UpdateExpression, ConditionExpression, ReturnValue, JsonFormat.AttributeValue>, "TableName">) => Promise<UpdateItemOutput<Item, PartitionKey, RangeKey, Key, ReturnValue, JsonFormat.AttributeValue>>>;
        /**
         * @see https://docs.aws.amazon.com/step-functions/latest/dg/connect-ddb.html
         */
        const PutItem: IntegrationCall<"$AWS.DynamoDB.putItem", <Item extends object, PartitionKey extends keyof Item, RangeKey extends keyof Item | undefined = undefined, ConditionExpression extends string | undefined = undefined, ReturnValue extends string = "NONE">(input: {
            Table: ITable<Item, PartitionKey, RangeKey>;
        } & Omit<PutItemInput<Item, ConditionExpression, ReturnValue, JsonFormat.AttributeValue>, "TableName">) => Promise<PutItemOutput<Item, ReturnValue, JsonFormat.AttributeValue>>>;
        const Query: IntegrationCall<"$AWS.DynamoDB.query", <Item extends object, PartitionKey extends keyof Item, KeyConditionExpression extends string, RangeKey extends keyof Item | undefined = undefined, FilterExpression extends string | undefined = undefined, ProjectionExpression extends string | undefined = undefined, AttributesToGet extends keyof Item | undefined = undefined>(input: {
            Table: ITable<Item, PartitionKey, RangeKey>;
        } & Omit<QueryInput<Item, KeyConditionExpression, FilterExpression, ProjectionExpression, AttributesToGet, JsonFormat.AttributeValue>, "TableName">) => Promise<QueryOutput<Item, AttributesToGet, JsonFormat.AttributeValue>>>;
        const Scan: IntegrationCall<"$AWS.DynamoDB.scan", <Item extends object, PartitionKey extends keyof Item, RangeKey extends keyof Item | undefined = undefined, FilterExpression extends string | undefined = undefined, ProjectionExpression extends string | undefined = undefined, AttributesToGet extends keyof Item | undefined = undefined>(input: {
            Table: ITable<Item, PartitionKey, RangeKey>;
        } & Omit<ScanInput<Item, FilterExpression, ProjectionExpression, AttributesToGet, JsonFormat.AttributeValue>, "TableName">) => Promise<ScanOutput<Item, AttributesToGet, JsonFormat.AttributeValue>>>;
    }
    namespace Lambda {
        /**
         * @param input
         * @see https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html
         */
        const Invoke: IntegrationCall<"$AWS.Lambda.Invoke", <Input, Output>(input: {
            Function: Function<Input, Output, Input>;
            ClientContext?: string | undefined;
            InvocationType?: "Event" | "RequestResponse" | "DryRun" | undefined;
            LogType?: "None" | "Tail" | undefined;
            Qualifier?: string | undefined;
        } & ([Input] extends [undefined] ? {
            Payload?: Input | undefined;
        } : {
            Payload: Input;
        })) => Promise<Omit<AWSLambda.InvocationResponse, "payload"> & {
            Payload: Output;
        }>>;
    }
    namespace EventBridge {
        /**
         * @see https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_PutEvents.html
         */
        const putEvents: IntegrationCall<"$AWS.EventBridge.putEvent", (request: AWS.EventBridge.Types.PutEventsRequest) => Promise<AWS.EventBridge.Types.PutEventsResponse>>;
    }
}
export declare type OperationName = "deleteItem" | "getItem" | "putItem" | "updateItem" | "scan" | "query";
export declare const deploymentOnlyModule = true;
//# sourceMappingURL=aws.d.ts.map