0.8.8 • Published 7 years ago

mm-services-kademlia v0.8.8

Weekly downloads
30
License
MIT
Repository
github
Last release
7 years ago

mm-services-kademlia

DHT to store connection information for remote peers and act as generic key/value store

works with MicroMinion platform

Initialization

var MicroMinionPlatform = require('mm-platform')
var Kademlia = require('mm-services-kademlia')
var kadfs = require('kad-fs')
var path = require('path')

var storageDir = './data'

var platform = new MicroMinionPlatform({
  storage: kadfs(path.join(storageDir, 'platform'))
})

var kademlia = new Kademlia({
  platform: platform,
  storage: kadfs(path.join(storageDir, 'dht'))
  seeds: null //Extra seeds
})

Messaging API

Data structures

nodeInfo: Javascript object with node information

  • boxId: base64 encoded public encryption key used by nacl
  • signId: base64 encoded public signature key used by nacl
  • connectionInfo: javascript dictionary with 1tp connection information

Published messages

self.transports.nodeInfo

Publishes connection information for remote node

var MicroMinionPlatform = require('mm-platform')
var Kademlia = require('mm-services-kademlia')
var kadfs = require('kad-fs')
var path = require('path')

var storageDir = './data'

var platform = new MicroMinionPlatform({
  storage: kadfs(path.join(storageDir, 'platform'))
})

var kademlia = new Kademlia({
  platform: platform,
  storage: kadfs(path.join(storageDir, 'dht'))
  seeds: null //Extra seeds
})

platform.messaging.on('self.transports.nodeInfo', function(topic, sender, nodeInfo) {
  console.log(topic) // 'self.transports.nodeInfo'
  console.log(sender) // 'local'
  console.log(nodeInfo) // {boxId: <boxId>, signId: <signId>, connectionInfo: <1tp connectionInfo>}
})

self.transports.requestBootstrapNodeInfo

Requests bootstrap nodes in order to start DHT (in addition to potential seed nodes)

var MicroMinionPlatform = require('mm-platform')
var Kademlia = require('mm-services-kademlia')
var kadfs = require('kad-fs')
var path = require('path')

var storageDir = './data'

var platform = new MicroMinionPlatform({
  storage: kadfs(path.join(storageDir, 'platform'))
})

var kademlia = new Kademlia({
  platform: platform,
  storage: kadfs(path.join(storageDir, 'dht'))
  seeds: null //Extra seeds
})

//local nodeInfo. This method is used for sending remote nodeInfo
var nodeInfo = {
  boxId: platform.directory.identity.getBoxId()
  signId: platform.directory.identity.getSignId()
  connectionInfo: platform.directory._connectionInfo
}

platform.messaging.on('self.transports.requestBootstrapNodeInfo', function(topic, sender, data) {
  platform.messaging.send('transports.nodeInfoBootstrap', 'local', nodeInfo)
})

self.directory.getReply

Reply to previously received get message

var MicroMinionPlatform = require('mm-platform')
var Kademlia = require('mm-services-kademlia')
var kadfs = require('kad-fs')
var path = require('path')

var storageDir = './data'

var platform = new MicroMinionPlatform({
  storage: kadfs(path.join(storageDir, 'platform'))
})

var kademlia = new Kademlia({
  platform: platform,
  storage: kadfs(path.join(storageDir, 'dht'))
  seeds: null //Extra seeds
})

platform.messaging.on('self.directory.getReply', function(topic, sender, getReply) {
  console.log(getReply.key)
  console.log(getReply.value)
})

platform.messaging.send('directory.get', 'local', 'KeyToRetrieve')

Subscribed messages

self.transports.myNodeInfo

Uses our own node information to add to DHT

You'll never need to send this message since this is triggered from the platform object

var MicroMinionPlatform = require('mm-platform')
var Kademlia = require('mm-services-kademlia')
var kadfs = require('kad-fs')
var path = require('path')

var storageDir = './data'

var platform = new MicroMinionPlatform({
  storage: kadfs(path.join(storageDir, 'platform'))
})

var kademlia = new Kademlia({
  platform: platform,
  storage: kadfs(path.join(storageDir, 'dht'))
  seeds: null //Extra seeds
})

var nodeInfo = {
  boxId: platform.directory.identity.getBoxId()
  signId: platform.directory.identity.getSignId()
  connectionInfo: platform.directory._connectionInfo
}

platform.messaging.send('transports.myNodeInfo', 'local', nodeInfo)

self.transports.nodeInfoBootstrap

Bootstrap messages with nodeInfo (to allow DHT to function even if not connected to the Internet by using e.g., other nodes on local network to form DHT).

var MicroMinionPlatform = require('mm-platform')
var Kademlia = require('mm-services-kademlia')
var kadfs = require('kad-fs')
var path = require('path')

var storageDir = './data'

var platform = new MicroMinionPlatform({
  storage: kadfs(path.join(storageDir, 'platform'))
})

var kademlia = new Kademlia({
  platform: platform,
  storage: kadfs(path.join(storageDir, 'dht'))
  seeds: null //Extra seeds
})

//local nodeInfo. This method is used for sending remote nodeInfo
var nodeInfo = {
  boxId: platform.directory.identity.getBoxId()
  signId: platform.directory.identity.getSignId()
  connectionInfo: platform.directory._connectionInfo
}

platform.messaging.on('self.transports.requestBootstrapNodeInfo', function(topic, sender, data) {
  platform.messaging.send('transports.nodeInfoBootstrap', 'local', nodeInfo)
})

self.transports.requestNodeInfo

Requests node info from directory services (like DHT)

var MicroMinionPlatform = require('mm-platform')
var Kademlia = require('mm-services-kademlia')
var kadfs = require('kad-fs')
var path = require('path')

var storageDir = './data'

var platform = new MicroMinionPlatform({
  storage: kadfs(path.join(storageDir, 'platform'))
})

var kademlia = new Kademlia({
  platform: platform,
  storage: kadfs(path.join(storageDir, 'dht'))
  seeds: null //Extra seeds
})

platform.messaging.on('self.transports.nodeInfo', function(topic, sender, nodeInfo) {
  console.log(topic) // 'self.transports.nodeInfo'
  console.log(sender) // 'local'
  console.log(nodeInfo) // nodeInfo object
})

var signId = 'NeedToImplement' //signId (base64 encoded) for node where we want to get full nodeInfo

platform.messaging.send('transports.requestNodeInfo', 'local', signId)

self.directory.get

get key/value pair from DHT

var MicroMinionPlatform = require('mm-platform')
var Kademlia = require('mm-services-kademlia')
var kadfs = require('kad-fs')
var path = require('path')

var storageDir = './data'

var platform = new MicroMinionPlatform({
  storage: kadfs(path.join(storageDir, 'platform'))
})

var kademlia = new Kademlia({
  platform: platform,
  storage: kadfs(path.join(storageDir, 'dht'))
  seeds: null //Extra seeds
})

platform.messaging.on('self.directory.getReply', function(topic, sender, getReply) {
  console.log(getReply.key)
  console.log(getReply.value)
})

platform.messaging.send('directory.get', 'local', 'KeyToRetrieve')

self.directory.put

add key/value pair to DHT

var MicroMinionPlatform = require('mm-platform')
var Kademlia = require('mm-services-kademlia')
var kadfs = require('kad-fs')
var path = require('path')

var storageDir = './data'

var platform = new MicroMinionPlatform({
  storage: kadfs(path.join(storageDir, 'platform'))
})

var kademlia = new Kademlia({
  platform: platform,
  storage: kadfs(path.join(storageDir, 'dht'))
  seeds: null //Extra seeds
})

platform.messaging.send('directory.put', 'local', {key: 'KeyToRetrieve', value: 'ValueToRetrieve'})
0.8.8

7 years ago

0.8.7

7 years ago

0.8.6

8 years ago

0.8.5

8 years ago

0.8.4

8 years ago

0.8.3

8 years ago

0.8.2

8 years ago

0.8.1

8 years ago

0.8.0

8 years ago

0.7.0

8 years ago

0.6.5

8 years ago

0.6.4

8 years ago

0.6.3

8 years ago

0.6.2

8 years ago

0.6.1

8 years ago

0.6.0

8 years ago

0.5.9

8 years ago

0.5.8

8 years ago

0.5.7

8 years ago

0.5.6

8 years ago

0.5.5

8 years ago

0.5.4

8 years ago

0.5.3

8 years ago

0.5.2

8 years ago

0.5.0

8 years ago