/// <reference types="node" />
import Web3 = require('web3');
import prottle = require('prottle');
import crypto = require('crypto');
import keystore = require('../../../libs/eth-lightwallet/keystore.js');
import Mnemonic = require('../../../libs/bitcore-mnemonic/mnemonic.js');
import { AccountStore, ContractLoader, DfsInterface, Envelope, EventHub, Executor, KeyProvider, KeyProviderInterface, Logger, LogLevel, SignerExternal, SignerInternal, Unencrypted, Validator } from '@evan.network/dbcp';
import { Aes } from '../../encryption/aes';
import { AesEcb } from '../../encryption/aes-ecb';
import { Verifications } from '../../verifications/verifications';
import { BusinessCenterProfile } from '../../profile/business-center-profile';
import { CryptoProvider } from '../../encryption/crypto-provider';
import { BaseContract } from '../../contracts/base-contract/base-contract';
import { DataContract } from '../../contracts/data-contract/data-contract';
import { Description } from '../../shared-description';
import { Ipfs } from '../../dfs/ipfs';
import { Ipld } from '../../dfs/ipld';
import { KeyExchange } from '../../keyExchange';
import { Mailbox } from '../../mailbox';
import { NameResolver } from '../../name-resolver';
import { Onboarding } from '../../onboarding';
import { Profile } from '../../profile/profile';
import { RightsAndRoles } from '../../contracts/rights-and-roles';
import { Sharing } from '../../contracts/sharing';
import { ServiceContract } from '../../contracts/service-contract/service-contract';
import { createDefaultRuntime } from '../../runtime';
import { ExecutorAgent } from '../../contracts/executor-agent';
import { Payments } from '../../payments';
/**************************************************************************************************/
/**
 * Is used to handle a basic blockchain-core loading without any account specific stuff
 */
declare let CoreRuntime: CoreInstance;
/**
 * uses the CoreRuntime to enhanche it with account specific stuff
 */
declare let ProfileRuntime: ProfileInstance;
/**
 * Use a ProfileRuntime to interact with Business centers.
 */
declare let BCRuntime: any;
declare let logLog: any[];
declare let logLogLevel: LogLevel;
declare const buffer: {
    new (str: string, encoding?: string): Buffer;
    new (size: number): Buffer;
    new (array: Uint8Array): Buffer;
    new (arrayBuffer: ArrayBuffer): Buffer;
    new (array: any[]): Buffer;
    new (buffer: Buffer): Buffer;
    prototype: Buffer;
    from(array: any[]): Buffer;
    from(arrayBuffer: ArrayBuffer, byteOffset?: number, length?: number): Buffer;
    from(buffer: Buffer): Buffer;
    from(str: string, encoding?: string): Buffer;
    isBuffer(obj: any): obj is Buffer;
    isEncoding(encoding: string): boolean;
    byteLength(string: string | ArrayBuffer | DataView | Buffer, encoding?: string): number;
    concat(list: Buffer[], totalLength?: number): Buffer;
    compare(buf1: Buffer, buf2: Buffer): number;
    alloc(size: number, fill?: string | number | Buffer, encoding?: string): Buffer;
    allocUnsafe(size: number): Buffer;
    allocUnsafeSlow(size: number): Buffer;
    poolSize: number;
};
/**************************************************************************************************/
export interface SolcInterface {
    getContracts(): any;
}
export interface CoreBundle {
    createCore: Function;
    createAndSetCore: Function;
    ContractLoader: ContractLoader;
    CryptoProvider: CryptoProvider;
    Description: Description;
    DfsInterface: DfsInterface;
    EventHub: EventHub;
    Executor: Executor;
    Ipfs: Ipfs;
    NameResolver: NameResolver;
    Unencrypted: Unencrypted;
    CoreRuntime: CoreInstance;
    isAccountOnboarded: Function;
    keystore: any;
    Mnemonic: any;
    KeyProviderInterface: KeyProviderInterface;
    KeyProvider: KeyProvider;
}
export interface CoreBundleOptions {
    web3: any;
    solc: SolcInterface;
    config: any;
    executor?: Executor;
    contractLoader?: ContractLoader;
    description?: Description;
    dfs?: DfsInterface;
    dfsConfig?: any;
    nameResolver?: NameResolver;
    ipfsCache?: any;
}
export interface CoreInstance {
    web3: any;
    description: Description;
    nameResolver: NameResolver;
    dfs: Ipfs;
    contractLoader: ContractLoader;
    executor: Executor;
    solc: SolcInterface;
    contracts: any;
    config: any;
}
export interface ProfileBundle {
    create: Function;
    createAndSet: Function;
    ProfileRuntime: ProfileInstance;
    Aes: Aes;
    Ipld: Ipld;
    KeyExchange: KeyExchange;
    Logger: Logger;
    Mailbox: Mailbox;
    Onboarding: Onboarding;
    Profile: Profile;
    RightsAndRoles: RightsAndRoles;
    Sharing: Sharing;
    SignerExternal: SignerExternal;
    SignerInternal: SignerInternal;
}
export interface ProfileBundleOptions {
    CoreBundle: CoreBundle;
    coreOptions: CoreBundleOptions;
    accountId: string;
    signer: SignerInternal | SignerExternal;
    keyProvider: KeyProvider;
    executor: Executor;
    accountStore: AccountStore;
}
export interface ProfileInstance {
    verifications: Verifications;
    dataContract: DataContract;
    ipldInstance: Ipld;
    keyExchange: KeyExchange;
    keyProvider: KeyProvider;
    mailbox: Mailbox;
    payments: Payments;
    profile: Profile;
    serviceContract: ServiceContract;
    sharing: Sharing;
    coreInstance: CoreInstance;
}
export interface BCBundleOptions {
    ensDomain: string;
    ProfileBundle: ProfileBundle;
}
export interface BCInstance {
    bcAddress: string;
    bcProfiles: BusinessCenterProfile;
    bcRoles: RightsAndRoles;
    businessCenter: any;
    dataContract: DataContract;
    description: any;
    ensDomain: string;
    ipld: Ipld;
    serviceContract: ServiceContract;
}
/**************************************************************************************************/
/**
 * Creates a new CoreInstance
 *
 * @param      {CoreBundleOptions}  options  core bundle options
 * @return     {CoreInstance}       new Core instance
 */
declare const createCore: (options: CoreBundleOptions) => CoreInstance;
/**
 * Creates a new CoreInstance and update the CoreInstance export.
 *
 * @param      {CoreBundleOptions}  options  core bundle options
 * @return     {CoreInstance}       new Core instance
 */
declare let createAndSetCore: (options: CoreBundleOptions) => CoreInstance;
/**************************************************************************************************/
/**
 * Creates a new ProfileInstance
 *
 * @param      {BundleOptions}  options  core bundle options
 * @return     {ProfileInstance}       new Core instance
 */
declare const create: (options: ProfileBundleOptions) => ProfileInstance;
/**
 * Create a new ProfileInstance and update the ProfileInstance export.
 *
 * @param      {BundleOptions}    options  core bundle options
 * @return     {ProfileInstance}  new Core instance
 */
declare let createAndSet: (options: ProfileBundleOptions) => ProfileInstance;
/**************************************************************************************************/
/**
 * Create a new BCInstance.
 *
 * @param      {BundleOptions}    options  bundle options
 * @return     {BCInstance}  new BC instance
 */
declare function createBC(options: BCBundleOptions): Promise<{
    ensDomain: string;
    bcAddress: string;
    businessCenter: any;
    bcRoles: RightsAndRoles;
    ipld: Ipld;
    bcProfiles: BusinessCenterProfile;
    description: any;
    dataContract: DataContract;
    serviceContract: ServiceContract;
}>;
/**
 * Creates and set BCInstance.
 *
 * @param      {BundleOptions}  options  Bundle options
 * @return     {BCInstance}     new BC Instance
 */
declare let createAndSetBC: (options: BCBundleOptions) => BCInstance;
/**
 * Check if a account is onboarded
 *
 * @param      {string}   account  account id to test
 * @return     {boolean}  True if account onboarded, False otherwise
 */
declare const isAccountOnboarded: (account: string) => Promise<boolean>;
export { Aes, AesEcb, BaseContract, BCRuntime, buffer, Verifications, ContractLoader, CoreRuntime, create, createAndSet, createAndSetBC, createAndSetCore, createBC, createCore, createDefaultRuntime, crypto, CryptoProvider, DataContract, Description, DfsInterface, Envelope, EventHub, Executor, ExecutorAgent, Ipfs, Ipld, isAccountOnboarded, KeyExchange, KeyProvider, KeyProviderInterface, keystore, Logger, LogLevel, logLog, logLogLevel, Mailbox, Mnemonic, NameResolver, Onboarding, Profile, ProfileRuntime, prottle, RightsAndRoles, Sharing, SignerExternal, SignerInternal, Unencrypted, Validator, Web3 };
