import { SolDid } from '@identity.com/sol-did-idl';
import { AnchorProvider, BN, Idl, Program } from '@project-serum/anchor';
import { Commitment, Connection, PublicKey } from '@solana/web3.js';
import { DIDDocument } from 'did-resolver';
import { DidSolServiceOptions, DidSolUpdateArgs, Service, Wallet, BitwiseVerificationMethodFlag, AddVerificationMethodParams } from './lib/types';
import { DidSolIdentifier } from './DidSolIdentifier';
import { SolData } from '@identity.com/sol-did-client-legacy';
import { DidSolDataAccount } from './lib/wrappers';
import { DidSolTransactionBuilder } from './utils/DidSolTransactionBuilder';
/**
 * The DidSolService class is a wrapper around the Solana DID program.
 * It provides methods for creating, reading, updating, and deleting DID documents.
 * Note, the provider or connection in the DidSolService MUST not be used for tx submissions.
 * Please use DidSolServiceBuilder instead
 */
export declare class DidSolService extends DidSolTransactionBuilder {
    private _program;
    private _didAuthority;
    private _cluster;
    private readonly _identifier;
    private readonly _didDataAccount;
    private readonly _legacyDidDataAccount;
    static build(identifier: DidSolIdentifier | string, options?: DidSolServiceOptions): DidSolService;
    static buildFromAnchor(program: Program<SolDid>, identifier: DidSolIdentifier | string, provider: AnchorProvider, wallet?: Wallet): DidSolService;
    private constructor();
    get connection(): Connection;
    get didDataAccount(): PublicKey;
    get legacyDidDataAccount(): PublicKey;
    getDidAccount(): Promise<DidSolDataAccount | null>;
    getDidAccountWithSize(commitment?: Commitment): Promise<[DidSolDataAccount | null, number]>;
    /**
     * Return true if the DID can be migrated to the new program.
     */
    isMigratable(): Promise<boolean>;
    get did(): string;
    getIdl(): Idl;
    getNonce(): Promise<BN>;
    /**
     * Initializes the did:sol account.
     * Does **not** support ethSignInstruction
     * @param size The initial size of the account
     * @param payer The account to pay the rent-exempt fee with.
     */
    initialize(size?: number, payer?: PublicKey): DidSolService;
    /**
     * Resize the did:sol account.
     * Supports ethSignInstruction
     * @param size The new size of the account
     * @param payer The account to pay the rent-exempt fee with.
     * @param authority The authority to use. Can be "wrong" if instruction is later signed with ethSigner
     */
    resize(size: number, payer?: PublicKey, authority?: PublicKey): DidSolService;
    /**
     * Close the did:sol account.
     * Supports ethSignInstruction
     * @param authority The authority to use. Can be "wrong" if instruction is later signed with ethSigner
     * @param destination The destination account to move the lamports to.
     */
    close(destination: PublicKey, authority?: PublicKey): DidSolService;
    /**
     * Add a VerificationMethod to the did:sol account.
     * Supports ethSignInstruction
     * @param method The new VerificationMethod to add
     * @param authority The authority to use. Can be "wrong" if instruction is later signed with ethSigner
     */
    addVerificationMethod(method: AddVerificationMethodParams, authority?: PublicKey): DidSolService;
    /**
     * Remove a VerificationMethod from the did:sol account.
     * @param fragment The fragment of the VerificationMethod to remove
     * @param authority The authority to use. Can be "wrong" if instruction is later signed with ethSigner
     */
    removeVerificationMethod(fragment: string, authority?: PublicKey): DidSolService;
    /**
     * Add a Service to the did:sol account.
     * Supports ethSignInstruction
     * @param service The service to add
     * @param allowOverwrite If true, will overwrite an existing service with the same id
     * @param authority The authority to use. Can be "wrong" if instruction is later signed with ethSigner
     */
    addService(service: Service, allowOverwrite?: boolean, authority?: PublicKey): DidSolService;
    /**
     * Removes a Service to the did:sol account.
     * Supports ethSignInstruction
     * @param fragment The id of the service to remove
     * @param authority The authority to use. Can be "wrong" if instruction is later signed with ethSigner
     */
    removeService(fragment: string, authority?: PublicKey): DidSolService;
    /**
     * Update the Flags of a VerificationMethod.
     * @param fragment The fragment of the VerificationMethod to update
     * @param flags The flags to set. If flags contain BitwiseVerificationMethodFlag.OwnershipProof, the transaction must be signed by the exact same VM.
     * @param authority The authority to use. Can be "wrong" if instruction is later signed with ethSigner
     */
    setVerificationMethodFlags(fragment: string, flags: BitwiseVerificationMethodFlag[], authority?: PublicKey): DidSolService;
    /**
     * Update the controllers of a Service.
     * @param controllerDIDs A list of DIDs to be set as controllers
     * @param authority The authority to use. Can be "wrong" if instruction is later signed with ethSigner
     */
    setControllers(controllerDIDs: string[], authority?: PublicKey): DidSolService;
    /**
     * Updates a DID with contents of document.
     * @param document A did:sol Document of the DID to update
     * @param authority The authority to use. Can be "wrong" if instruction is later signed with ethSigner
     */
    updateFromDoc(document: DIDDocument, authority?: PublicKey): DidSolService;
    /**
     * Updates several properties of a service.
     * @param updateArgs A subset of DID properties to update
     * @param authority The authority to use. Can be "wrong" if instruction is later signed with ethSigner
     */
    update(updateArgs: DidSolUpdateArgs, authority?: PublicKey): DidSolService;
    /**
     * Updates several properties of a service.
     * @param payer Payer for the creation of the new Account
     * @param legacyAuthority if passed, close the legacy account after migration. Refund will go to payer.
     */
    migrate(payer?: PublicKey, legacyAuthority?: PublicKey): DidSolService;
    /**
     * Resolves the DID Document for the did:sol account.
     */
    resolve(checkLegacy?: boolean): Promise<DIDDocument>;
    getLegacyData(): Promise<SolData | null>;
    /**
     * Resolves a legacy did:sol account (program: idDa...).
     * Returns null if the account does not exist.
     */
    private resolveLegacy;
}
