@coryfoundation/translink

Link your nodes simple without the need for queues and intermediate servers!

Usage no npm install needed!

<script type="module">
  import coryfoundationTranslink from 'https://cdn.skypack.dev/@coryfoundation/translink';
</script>

README

translink GitHub Repo stars

A high-level API for connecting nodes together using P2P and DHT without using message brokers, queues and intermediate servers.

All messages are encrypted with end-to-end encryption (more: https://hypercore-protocol.org)

Installation

npm install @coryfoundation/translink
import Translink from '@coryfoundation/translink'

const bridge = new Translink(options)

// Subscriptions here

bridge.connect()
  .then(() => console.log('Connected'))
  .catch((e) => console.error('Connection error', e))

Options

namespace (string)

Namespace for recognition on the network. Must be the same on all nodes.

  • Required: true

nodeID (string)

Node identifier. Must be unique.

  • Required: false
  • Default: random string

log (boolean)

Determines whether to write module messages to the console.

  • Required: false
  • Default: true

logger (console-like class)

Allows you to set your console-like class for logging.

  • Required: false
  • Default: console

encoding (string)

The encoding that should be used to encode and decode messages. utf8 is currently supported only.

  • Required: false
  • Default: utf8

requestTimeout (number)

Timeout for the request, after which Error will be thrown on the sender's side. In milliseconds.

  • Required: false
  • Default: 10000

heartbeatInterval (number)

The interval after which the heartbeat will be sent to other nodes.

  • Required: false
  • Default: 5000

heartbeatTimeout (number)

Timeout, after which the node will be removed from the list of available nodes.

  • Required: false
  • Default: 10000

maxClientConnections (number)

Maximum client connections to be allowed.

  • Required: false
  • Default: Infinity

maxServerConnections (number)

Maximum server connections to be allowed.

  • Required: false
  • Default: Infinity

maxPeers (number)

Maximum peers to be allowed.

  • Required: false
  • Default: Infinity

maxParallel (number)

Maximum parallel connections to be allowed.

  • Required: false
  • Default: Infinity

broadcastReqConcurrency (number)

Request concurrency for broadcastReq() method

  • Required: false
  • Default: 5

broadcastReqTimeout (number)

Request timeout for broadcastReq() method

  • Required: false
  • Default: 1000

Usage

Request

Subscribe

bridge.subscribeReq('my.request', async (data) => {
  // Something to do with data
  return { hello: 'world' }
})

Send

bridge.get('my.request', { something: 'data' })
.then((response) => {
  // Something to do with response
}).catch((error) => {
  console.error('Error', error)
})

Event

Subscribe

bridge.subscribe('my.event', async (data) => {
  // Something to do with data
})

Send

bridge.emit('my.event', { world: 'hello' })

Broadcast

Request

No all node responses needed
bridge.broadcastReq('my.request', { world: 'hello' })
.then((results) => {
  // results is array with all responses
}).catch((error) => {
  console.error('Error', error)
})

Event

With same event subscription
bridge.broadcast('my.event', { world: 'hello' })
All nodes
bridge.broadcastToAllNodes('my.event', { world: 'hello' })

Replic nodes

You can duplicate nodes with the same subscriptions an infinite number of times. Translink will send a message to a random available suitable node.

License

MIT