/// <reference types="node" />
import { BN, web3 } from '@project-serum/anchor';
import { ConfirmOptions, Connection, PublicKey, Transaction } from '@solana/web3.js';
import { VerificationMethod as DidVerificationMethod } from 'did-resolver';
import { ExtendedCluster } from './connection';
export type PrivateKey = number[] | string | Buffer | Uint8Array;
export type Bytes = ArrayLike<number>;
export type EthSigner = {
    signMessage: (message: Bytes | string) => Promise<string>;
};
export type RawDidSolDataAccount = {
    version: number;
    bump: number;
    nonce: BN;
    initialVerificationMethod: RawVerificationMethod;
    verificationMethods: RawVerificationMethod[];
    services: Service[];
    nativeControllers: web3.PublicKey[];
    otherControllers: string[];
};
export type RawVerificationMethod = {
    fragment: string;
    keyData: Buffer;
    methodType: VerificationMethodType;
    flags: number;
};
export type AddVerificationMethodParams = Omit<RawVerificationMethod, 'flags'> & {
    flags: BitwiseVerificationMethodFlag[];
};
export type Service = {
    fragment: string;
    serviceType: string;
    serviceEndpoint: string;
};
export type DidSolUpdateArgs = {
    verificationMethods: AddVerificationMethodParams[];
    services: Service[];
    controllerDIDs: string[];
};
export declare enum BitwiseVerificationMethodFlag {
    Authentication = 1,
    Assertion = 2,
    KeyAgreement = 4,
    CapabilityInvocation = 8,
    CapabilityDelegation = 16,
    DidDocHidden = 32,
    OwnershipProof = 64
}
export declare enum VerificationMethodType {
    Ed25519VerificationKey2018 = 0,
    EcdsaSecp256k1RecoveryMethod2020 = 1,
    EcdsaSecp256k1VerificationKey2019 = 2
}
export type DecentralizedIdentifierConstructor = {
    clusterType: ExtendedCluster | undefined;
    authority: PublicKey;
    fragment?: string;
};
export type DidVerificationMethodComponents = {
    verificationMethod: DidVerificationMethod[];
    authentication: (string | DidVerificationMethod)[];
    assertionMethod: (string | DidVerificationMethod)[];
    keyAgreement: (string | DidVerificationMethod)[];
    capabilityInvocation: (string | DidVerificationMethod)[];
    capabilityDelegation: (string | DidVerificationMethod)[];
};
export interface Wallet {
    signTransaction(tx: Transaction): Promise<Transaction>;
    signAllTransactions(txs: Transaction[]): Promise<Transaction[]>;
    publicKey: PublicKey;
}
export type DidSolServiceOptions = {
    connection?: Connection;
    wallet?: Wallet;
    confirmOptions?: ConfirmOptions;
};
