import DynamoDB, { CreateTableOutput, DocumentClient } from 'aws-sdk/clients/dynamodb';
import { AWSError } from 'aws-sdk/lib/error';
import { PromiseResult } from 'aws-sdk/lib/request';
import { BaseUserInfo, CompleteGettingStartedTaskPayload, UserInfo } from './types';
export interface UserStorage {
    createTable: () => Promise<PromiseResult<CreateTableOutput, AWSError>>;
    getUserInfo(userId: string): Promise<UserInfo>;
    completeGettingStartedTask(params: CompleteGettingStartedTaskPayload): Promise<UserInfo>;
    insertUserInfoRow(Item: UserInfoRow): Promise<UserInfo>;
}
export declare class DynamoUserStorage implements UserStorage {
    private documentClient;
    private dynamoDB;
    constructor(documentClient?: DocumentClient, dynamoDB?: DynamoDB);
    createTable: () => Promise<PromiseResult<DynamoDB.CreateTableOutput, AWSError>>;
    getUserInfo: (userId: string) => Promise<UserInfo<Date>>;
    completeGettingStartedTask: ({ userId, taskName, completedOn, }: CompleteGettingStartedTaskPayload) => Promise<UserInfo<Date>>;
    insertUserInfoRow: (Item: UserInfoRow) => Promise<UserInfo<Date>>;
    private userInfoFromDynamoRow;
    private encodeHashKey;
    private decodeHashKey;
}
export interface UserInfoRow extends BaseUserInfo<number> {
    hashKey: string;
}
declare const dynamoUserStorage: DynamoUserStorage;
export default dynamoUserStorage;
