@lukks/noise-network

Authenticated P2P network backed by HyperSwarm and NOISE

Usage no npm install needed!

<script type="module">
  import lukksNoiseNetwork from 'https://cdn.skypack.dev/@lukks/noise-network';
</script>

README

noise-network

Authenticated network P2P backed by Hyperswarm and Noise

Install

npm i @lukks/noise-network

Usage

First spin up a server

const noise = require('noise-network')

const server = noise.createServer()

server.on('connection', function (encryptedStream) {
  console.log('new encrypted stream!')

  // encryptedStream is a noise-peer stream instance
  encryptedStream.on('data', function (data) {
    console.log('client wrote:', data)
  })
})

const keyPair = noise.keygen()

// Announce ourself to the HyperSwarm DHT on the following keyPair's publicKey
server.listen(keyPair, function () {
  console.log('Server is listening on:', server.publicKey.toString('hex'))
})

Then connect to the server by connecting to the public key

// noise guarantees that we connect to the server in a E2E encrypted stream
const client = noise.connect('{public key from above}')

// client is a noise-peer stream instance
client.write('hello server')

API

const server = noise.createServer([options])

Create a new Noise server.

Options include:

{
  // validate the remote client's public key before allowing them to connect
  validate (remoteKey, done) { ... },
  // you can add the onconnection handler here also
  onconnection (connection) { ... }
}

server.listen(keyPair, [alias], [cb])

alias must be of type string.

const client = noise.connect(serverPublicKey, [serverAlias], [keyPair], [timeout])

Connect to a server. Does UDP hole punching if necessary. serverPublicKey must be of type Buffer or hex. serverAlias must be of type string.

License

MIT