UNPKG

@hyperswarm/secret-stream

Version:

Secret stream backed by Noise and libsodium's secretstream

77 lines (62 loc) 1.28 kB
const { Duplex, Writable } = require('streamx') class ReversePassThrough extends Duplex { constructor (s) { super() this._stream = s this._ondrain = null } _write (data, cb) { if (this._stream.push(data) === false) { this._stream._ondrain = cb } else { cb(null) } } _final (cb) { this._stream.push(null) cb(null) } _read (cb) { const ondrain = this._ondrain this._ondrain = null if (ondrain) ondrain() cb(null) } } module.exports = class Bridge extends Duplex { constructor (noiseStream) { super() this.noiseStream = noiseStream this._ondrain = null this.reverse = new ReversePassThrough(this) } get publicKey () { return this.noiseStream.publicKey } get remotePublicKey () { return this.noiseStream.remotePublicKey } get handshakeHash () { return this.noiseStream.handshakeHash } flush () { return Writable.drained(this) } _read (cb) { const ondrain = this._ondrain this._ondrain = null if (ondrain) ondrain() cb(null) } _write (data, cb) { if (this.reverse.push(data) === false) { this.reverse._ondrain = cb } else { cb(null) } } _final (cb) { this.reverse.push(null) cb(null) } }