diff --git a/src/index.js b/src/index.js index c73ff77..99d65fb 100644 --- a/src/index.js +++ b/src/index.js @@ -5,6 +5,7 @@ const mafmt = require('mafmt') const withIs = require('class-is') const includes = require('lodash.includes') const Connection = require('interface-connection').Connection +const safe = require('./safe-socket') const maToUrl = require('./ma-to-url') const debug = require('debug') @@ -30,7 +31,7 @@ class WebSockets { } }) - const conn = new Connection(socket) + const conn = new Connection(safe(socket)) conn.getObservedAddrs = (cb) => cb(null, [ma]) conn.close = (cb) => socket.close(cb) diff --git a/src/listener.js b/src/listener.js index 159173c..88df9b7 100644 --- a/src/listener.js +++ b/src/listener.js @@ -4,32 +4,10 @@ const Connection = require('interface-connection').Connection const includes = require('lodash.includes') const multiaddr = require('multiaddr') const os = require('os') -const pull = require('pull-stream') +const safe = require('./safe-socket') function noop () {} -function handle (data) { - if (Buffer.isBuffer(data)) return data - try { - return Buffer.from(data) - } catch (e) { - return Buffer.from('') - } -} - -function safe (conn) { - return { - sink: pull( - pull.map(handle), - conn.sink - ), - source: pull( - conn.source, - pull.map(handle) - ) - } -} - const createServer = require('pull-ws/server') || noop module.exports = (options, handler) => { diff --git a/src/safe-socket.js b/src/safe-socket.js new file mode 100644 index 0000000..04adf66 --- /dev/null +++ b/src/safe-socket.js @@ -0,0 +1,26 @@ +'use strict' + +const pull = require('pull-stream') +function toBuffer (data) { + if (Buffer.isBuffer(data)) return data + try { + return Buffer.from(data) + } catch (e) { + return Buffer.from('') + } +} + +function safe (conn) { + return { + sink: pull( + pull.map(toBuffer), + conn.sink + ), + source: pull( + conn.source, + pull.map(toBuffer) + ) + } +} + +module.exports = safe