import { AuthData, APL } from '../index.mjs';
import { Table } from 'dynamodb-toolbox';

/**
 * Define minimum Table definition. Apps should at least extend these values.
 */
type PartitionKey = {
    name: "PK";
    type: "string";
};
type SortKey = {
    name: "SK";
    type: "string";
};
type UsedTable = Table<PartitionKey, SortKey>;

interface APLRepository {
    getEntry(args: {
        saleorApiUrl: string;
    }): Promise<AuthData | null>;
    setEntry(args: {
        authData: AuthData;
    }): Promise<void>;
    deleteEntry(args: {
        saleorApiUrl: string;
    }): Promise<void>;
    getAllEntries(): Promise<AuthData[] | null>;
}

type ExternalLogger = (message: string, level: "debug" | "error") => void;
declare class DynamoAPL implements APL {
    private repository;
    private tracer;
    private debug;
    private externalLogger;
    private log;
    static create(deps: {
        table: UsedTable;
        externalLogger?: ExternalLogger;
    }): DynamoAPL;
    constructor(deps: {
        repository: APLRepository;
        externalLogger?: ExternalLogger;
    });
    get(saleorApiUrl: string): Promise<AuthData | undefined>;
    set(authData: AuthData): Promise<void>;
    delete(saleorApiUrl: string): Promise<void>;
    getAll(): Promise<AuthData[]>;
}

export { DynamoAPL };
