import Mapping from './Mapping';
import type RestClientSdkInterface from './RestClientSdkInterface';
import type { Config } from './RestClientSdkInterface';
import { Token } from './TokenGenerator/types';
import TokenStorageInterface from './TokenStorageInterface';
import UnitOfWork from './UnitOfWork';
import AbstractClient from './client/AbstractClient';
import SerializerInterface from './serializer/SerializerInterface';
import { Logger } from './utils/logging';
type Entity = any;
export type MetadataDefinition = {
    entity: Entity;
    list: Iterable<Entity>;
};
export type SdkMetadata = Record<string, MetadataDefinition>;
declare class RestClientSdk<M extends SdkMetadata> implements RestClientSdkInterface<M> {
    #private;
    config: Config;
    tokenStorage: TokenStorageInterface<Token>;
    serializer: SerializerInterface;
    mapping: Mapping;
    unitOfWork: UnitOfWork;
    readonly logger?: Logger;
    constructor(tokenStorage: TokenStorageInterface<Token>, config: Config, mapping: Mapping, serializer?: SerializerInterface);
    /**
     * get a repository by it's metadata "key" attribute
     *
     * @param {string} key the repository "key" (the first argument of `new ClassMetadata`)
     */
    getRepository<K extends keyof M & string>(key: K): AbstractClient<M[K]>;
    private _mergeWithBaseConfig;
    private checkConfigValidity;
}
export default RestClientSdk;
