69 lines
1.5 KiB
JavaScript
Raw Normal View History

2016-03-23 16:23:10 +01:00
'use strict'
2016-08-11 14:50:44 +02:00
const connect = require('pull-ws/client')
2016-03-14 21:19:42 +00:00
const mafmt = require('mafmt')
2018-04-05 17:21:26 +01:00
const withIs = require('class-is')
const Connection = require('interface-connection').Connection
const toUri = require('multiaddr-to-uri')
2016-08-11 14:50:44 +02:00
const debug = require('debug')
const log = debug('libp2p:websockets:dialer')
2016-08-11 14:50:44 +02:00
const createListener = require('./listener')
2016-03-14 20:25:00 +00:00
2017-03-23 15:09:06 +00:00
class WebSockets {
2016-08-11 14:50:44 +02:00
dial (ma, options, callback) {
if (typeof options === 'function') {
callback = options
2016-03-14 20:25:00 +00:00
options = {}
}
callback = callback || function () { }
const url = toUri(ma)
2016-08-11 14:50:44 +02:00
log('dialing %s', url)
const socket = connect(url, {
binary: true,
2017-10-20 11:25:14 +01:00
onConnect: (err) => {
callback(err)
}
})
2016-08-11 14:50:44 +02:00
const conn = new Connection(socket)
2017-10-20 11:25:14 +01:00
conn.getObservedAddrs = (cb) => cb(null, [ma])
conn.close = (cb) => socket.close(cb)
2016-03-14 20:25:00 +00:00
return conn
}
2016-08-11 14:50:44 +02:00
createListener (options, handler) {
2016-03-14 20:25:00 +00:00
if (typeof options === 'function') {
handler = options
options = {}
}
2016-08-11 14:50:44 +02:00
return createListener(options, handler)
2016-03-14 20:25:00 +00:00
}
2016-08-11 14:50:44 +02:00
filter (multiaddrs) {
if (!Array.isArray(multiaddrs)) {
multiaddrs = [multiaddrs]
}
2016-08-11 14:50:44 +02:00
2016-03-14 20:25:00 +00:00
return multiaddrs.filter((ma) => {
2018-12-15 22:00:29 +00:00
if (ma.protoNames().includes('p2p-circuit')) {
return false
}
2018-12-15 22:00:29 +00:00
if (ma.protoNames().includes('ipfs')) {
ma = ma.decapsulate('ipfs')
}
return mafmt.WebSockets.matches(ma) ||
mafmt.WebSocketsSecure.matches(ma)
2016-03-14 20:25:00 +00:00
})
}
}
2017-03-23 15:09:06 +00:00
2018-04-05 17:21:26 +01:00
module.exports = withIs(WebSockets, { className: 'WebSockets', symbolName: '@libp2p/js-libp2p-websockets/websockets' })