import { DynamoDBDocument } from "@aws-sdk/lib-dynamodb";
import { CoreModel, Store, StoreFindResult, StoreParameters, WebdaQL } from "@webda/core";
import { WorkerOutput } from "@webda/workout";
import { CloudFormationDeployer } from "../deployers/cloudformation.js";
import { CloudFormationContributor } from "./index.js";
declare const DynamoStoreParameters_base: {
    new (...args: any[]): {
        endpoint?: string;
        credentials?: {
            accessKeyId: string;
            secretAccessKey: string;
            sessionToken?: string;
        };
        region?: string;
        type: string;
        url?: string;
        openapi?: import("@webda/core/lib/router").OpenAPIWebdaDefinition;
    };
} & typeof StoreParameters;
/**
 * Define DynamoDB parameters
 */
export declare class DynamoStoreParameters extends DynamoStoreParameters_base {
    /**
     * Table name
     */
    table: string;
    /**
     * Additional global indexes
     */
    globalIndexes?: {
        [key: string]: {
            key: string;
            sort?: string;
        };
    };
    /**
     * CloudFormation customization
     */
    CloudFormation: any;
    CloudFormationSkip: boolean;
    scanPage: number;
    constructor(params: any, service: DynamoStore);
}
/**
 * DynamoStore handles the DynamoDB
 *
 * Parameters:
 *   accessKeyId: '' // try WEBDA_AWS_KEY env variable if not found
 *   secretAccessKey: '' // try WEBDA_AWS_SECRET env variable if not found
 *   table: ''
 *   region: ''
 *
 * @WebdaModda
 */
export default class DynamoStore<T extends CoreModel = CoreModel, K extends DynamoStoreParameters = DynamoStoreParameters> extends Store<T, K> implements CloudFormationContributor {
    _client: DynamoDBDocument;
    /**
     * Load the parameters
     *
     * @param params
     */
    loadParameters(params: any): DynamoStoreParameters;
    /**
     * Create the AWS client
     */
    resolve(): this;
    /**
     * Copy one DynamoDB table to another
     *
     * @param output
     * @param source
     * @param target
     */
    static copyTable(output: WorkerOutput, source: string, target: string): Promise<void>;
    /**
     * @inheritdoc
     */
    _exists(uid: any): Promise<boolean>;
    /**
     * @inheritdoc
     */
    _save(object: any, uid?: string): Promise<any>;
    /**
     * @override
     *
     * @see https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Query.html
     * @see https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html
     */
    find(query: WebdaQL.Query): Promise<StoreFindResult<T>>;
    /**
     * Serialize a date for DynamoDB
     * @param date
     * @returns
     */
    _serializeDate(date: Date): string;
    /**
     * Clean object to store in DynamoDB
     *
     * @param object
     * @returns
     */
    _cleanObject(object: Object): any;
    /**
     * @inheritdoc
     */
    _removeAttribute(uuid: string, attribute: string, itemWriteCondition?: any, itemWriteConditionField?: string): Promise<void>;
    /**
     * @inheritdoc
     */
    _deleteItemFromCollection(uid: any, prop: any, index: any, itemWriteCondition: any, itemWriteConditionField: any, updateDate: Date): Promise<void>;
    /**
     * @inheritdoc
     */
    _upsertItemToCollection(uuid: string, prop: string, item: any, index: number | undefined, itemWriteCondition: any | undefined, itemWriteConditionField: string | undefined, updateDate: Date): Promise<void>;
    /**
     * REturn the write condition as string
     * @param writeCondition
     * @param field
     * @returns
     */
    setWriteCondition(params: any, writeCondition: any, field?: string): void;
    /**
     * @inheritdoc
     */
    _delete(uid: string, writeCondition?: any, itemWriteConditionField?: string): Promise<void>;
    /**
     * @inheritdoc
     */
    _patch(object: any, uid: string, itemWriteCondition?: any, itemWriteConditionField?: string): Promise<void>;
    /**
     * @inheritdoc
     */
    _update(object: any, uid: string, itemWriteCondition?: any, itemWriteConditionField?: string): Promise<any>;
    /**
     * @inheritdoc
     */
    _scan(items?: any[], paging?: any): Promise<T[]>;
    /**
     * @inheritdoc
     */
    getAll(uids?: string[]): Promise<T[]>;
    /**
     * @inheritdoc
     */
    _get(uid: string, raiseIfNotFound?: boolean): Promise<T>;
    /**
     * @inheritdoc
     */
    _incrementAttributes(uid: any, parameters: {
        property: string;
        value: number;
    }[], updateDate: Date): Promise<import("@aws-sdk/lib-dynamodb").UpdateCommandOutput>;
    /**
     * @inheritdoc
     */
    getARNPolicy(accountId: string): {
        Sid: string;
        Effect: string;
        Action: string[];
        Resource: string[];
    };
    /**
     * @inheritdoc
     */
    __clean(): Promise<void>;
    /**
     * @inheritdoc
     */
    getCloudFormation(deployer: CloudFormationDeployer): {};
}
export { DynamoStore };
