





interface DistributedLedgerTechnologyProvider {
  getState (stateId: string): Promise<any>
  updateState (stateId: string, value: any): Promise<any>
  addStateListener (stateId: string, callback: (state: any) => void): Promise<any>
  removeStateListener (stateId: string, listenerId: string): Promise<any>
  setSyncFrequency (syncTickRate: number): Promise<any>
  setPeerCommunicationCallbacks (discoveryAndConnectionCallback: DiscoConnectionCallback, sendMessageCallback: SendMessageCallback, receiveMessageCallback: ReceiveMessageCallback): void
}

declare type DiscoConnectionCallback = (clientCredential: any) => void
declare type SendMessageCallback = (message: any) => void
declare type ReceiveMessageCallback = () => any

interface DistributedLedgerTechnologyMultiplexer {
  getState (stateId: string, extract?: any): Promise<any[]>
  updateState (stateId: string, value: any, extract?: any): Promise<any[]>
  addStateListener (stateId: string, callback: (state: any) => void, extract?: any): Promise<string[]>
  removeStateListener (stateId: string, listenerId: string, extract?: any): Promise<any[]>
  setSyncFrequency (syncTickRate: number, extract?: any): Promise<any[]>
  setPeerCommunicationCallbacks (
    discoveryAndConnectionCallback: DiscoConnectionCallback,
    sendMessageCallback: SendMessageCallback,
    receiveMessageCallback: ReceiveMessageCallback,
    extract?: any): Promise<any[]>
}

export {
  DistributedLedgerTechnologyProvider,
  DiscoConnectionCallback,
  SendMessageCallback,
  ReceiveMessageCallback,
  DistributedLedgerTechnologyMultiplexer
}

