import { TKeyType } from '@sphereon/ssi-sdk-ext.key-utils';
import { IAgentContext, IKeyManager, IIdentifier, IKey, IService } from '@veramo/core';
import { AbstractIdentifierProvider } from '@veramo/did-manager';
import Multicodec from 'multicodec';
import { DIDResolver } from 'did-resolver';

type IContext = IAgentContext<IKeyManager>;
declare class SphereonKeyDidProvider extends AbstractIdentifierProvider {
    private readonly kms?;
    constructor(options: {
        defaultKms?: string;
    });
    createIdentifier({ kms, alias, options, }: {
        kms?: string;
        alias?: string;
        options?: {
            type?: TKeyType;
            codecName?: 'EBSI' | 'jwk_jcs-pub' | Multicodec.CodecName;
            key?: {
                type?: Exclude<TKeyType, 'Secp384r1' | 'Secp521r1'>;
                privateKeyHex: string;
            };
        };
    }, context: IContext): Promise<Omit<IIdentifier, 'provider'>>;
    updateIdentifier(args: {
        did: string;
        kms?: string | undefined;
        alias?: string | undefined;
        options?: any;
    }, context: IAgentContext<IKeyManager>): Promise<IIdentifier>;
    deleteIdentifier(identifier: IIdentifier, context: IContext): Promise<boolean>;
    addKey({ identifier, key, options }: {
        identifier: IIdentifier;
        key: IKey;
        options?: any;
    }, context: IContext): Promise<any>;
    addService({ identifier, service, options }: {
        identifier: IIdentifier;
        service: IService;
        options?: any;
    }, context: IContext): Promise<any>;
    removeKey(args: {
        identifier: IIdentifier;
        kid: string;
        options?: any;
    }, context: IContext): Promise<any>;
    removeService(args: {
        identifier: IIdentifier;
        id: string;
        options?: any;
    }, context: IContext): Promise<any>;
}

declare function getDidKeyResolver(): {
    key: DIDResolver;
};

export { SphereonKeyDidProvider, getDidKeyResolver };
