import { ThisData as BasicThisData, ClientOptions } from './client';
import { DidAuthSession } from './didAuthSession';
export declare type DidAuthAdapterType = {
    readonly did: string;
    createDidAuthResponseToken(didAuthRequestToken: string): Promise<string>;
    isResponseTokenExpired(responseToken: string, requestTime: number): boolean;
};
export declare type DidAuthConstructorOptions = ClientOptions & {
    didAuthAdapter: DidAuthAdapterType;
};
declare type ThisData = BasicThisData & {
    didAuthSession: DidAuthSession;
};
declare type BasicApiMethodType<TRequestOptions = any> = (this: BasicThisData, requestOptions: TRequestOptions) => Promise<unknown>;
declare type ExtractOriginalRequestOptions<TMethod extends BasicApiMethodType> = TMethod extends BasicApiMethodType<infer U> ? U : never;
declare type MappedMethod<TMethod extends BasicApiMethodType> = (this: ThisData, requestOptions: Omit<ExtractOriginalRequestOptions<TMethod>, 'authorization'>) => ReturnType<TMethod>;
declare type DidAuthApiMethodType = (this: BasicThisData, requestOptions: {
    params: {
        audienceDid: string;
    };
}) => Promise<{
    body: string;
}>;
declare type MappedMethods<TMethods extends Record<keyof TMethods, BasicApiMethodType>> = {
    [key in keyof TMethods]: MappedMethod<TMethods[key]>;
};
export declare type GetDidAuthParams<TOperation extends MappedMethod<any>> = TOperation extends MappedMethod<infer UOriginalMethod> ? ExtractOriginalRequestOptions<UOriginalMethod>['params'] : never;
export declare const wrapWithDidAuth: <TMethods extends Record<keyof TMethods, BasicApiMethodType<any>>>(didAuthMethod: DidAuthApiMethodType, methods: TMethods) => MappedMethods<TMethods>;
export declare const createDidAuthClient: <TMethods>(methods: TMethods, didAuthSession: DidAuthSession, serviceUrl: string, otherOptions: ClientOptions) => TMethods & BasicThisData & {
    didAuthSession: DidAuthSession;
};
export {};
