feat: p2p and dns support (#42)

This commit is contained in:
Jacob Heun 2019-08-08 12:02:02 +02:00 committed by Vasco Santos
parent 3fc9234f52
commit 09160b5167
4 changed files with 39 additions and 32 deletions

View File

@ -53,7 +53,7 @@ Where `<FORMAT>` may be:
| `WebRTCDirect` | a "p2p-webrtc-direct" over `HTTP` or "p2p-webrtc-direct" over `HTTPS` format multiaddr | `/ip4/1.2.3.4/tcp/3456/http/p2p-webrtc-direct` | | `WebRTCDirect` | a "p2p-webrtc-direct" over `HTTP` or "p2p-webrtc-direct" over `HTTPS` format multiaddr | `/ip4/1.2.3.4/tcp/3456/http/p2p-webrtc-direct` |
| `Reliable` | a `WebSockets` or `WebSocketsSecure` or `HTTP` or `HTTPS` or `WebRTCStar` or `WebRTCDirect` or `TCP` or `UTP` format multiaddr | `/dnsaddr/ipfs.io/wss` | | `Reliable` | a `WebSockets` or `WebSocketsSecure` or `HTTP` or `HTTPS` or `WebRTCStar` or `WebRTCDirect` or `TCP` or `UTP` format multiaddr | `/dnsaddr/ipfs.io/wss` |
| `Circuit` | | `/ipfs/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSoooo4/p2p-circuit/ipfs/QmUjNmr8TgJCn1Ao7DvMy4cjoZU15b9bwSCBLE3vwXiwgj` | | `Circuit` | | `/ipfs/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSoooo4/p2p-circuit/ipfs/QmUjNmr8TgJCn1Ao7DvMy4cjoZU15b9bwSCBLE3vwXiwgj` |
| `IPFS` | "ipfs" over `Reliable` or `WebRTCStar` or "ipfs" format multiaddr | `/ipfs/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSoooo4` <br> `/ip4/127.0.0.1/tcp/20008/ws/ipfs/QmUjNmr8TgJCn1Ao7DvMy4cjoZU15b9bwSCBLE3vwXiwgj` | | `P2P` | "p2p", aka "ipfs", over `Reliable` or `WebRTCStar` or "p2p" format multiaddr | `/p2p/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSoooo4` <br> `/ip4/127.0.0.1/tcp/20008/ws/p2p/QmUjNmr8TgJCn1Ao7DvMy4cjoZU15b9bwSCBLE3vwXiwgj` |
Where `multiaddr` may be: Where `multiaddr` may be:

View File

@ -28,11 +28,11 @@
"bugs": "https://github.com/multiformats/js-mafmt/issues", "bugs": "https://github.com/multiformats/js-mafmt/issues",
"homepage": "https://github.com/multiformats/js-mafmt#readme", "homepage": "https://github.com/multiformats/js-mafmt#readme",
"devDependencies": { "devDependencies": {
"aegir": "^18.0.3", "aegir": "^20.0.0",
"chai": "^4.2.0" "chai": "^4.2.0"
}, },
"dependencies": { "dependencies": {
"multiaddr": "^6.0.4" "multiaddr": "^6.1.0"
}, },
"contributors": [ "contributors": [
"Alan Shaw <alan@tableflip.io>", "Alan Shaw <alan@tableflip.io>",

View File

@ -7,7 +7,8 @@ const multiaddr = require('multiaddr')
*/ */
const DNS4 = base('dns4') const DNS4 = base('dns4')
const DNS6 = base('dns6') const DNS6 = base('dns6')
const _DNS = or( const DNS = or(
base('dns'),
base('dnsaddr'), base('dnsaddr'),
DNS4, DNS4,
DNS6 DNS6
@ -16,16 +17,11 @@ const _DNS = or(
const IP = or(base('ip4'), base('ip6')) const IP = or(base('ip4'), base('ip6'))
const TCP = or( const TCP = or(
and(IP, base('tcp')), and(IP, base('tcp')),
and(_DNS, base('tcp')) and(DNS, base('tcp'))
) )
const UDP = and(IP, base('udp')) const UDP = and(IP, base('udp'))
const UTP = and(UDP, base('utp')) const UTP = and(UDP, base('utp'))
const DNS = or(
and(_DNS, base('tcp')),
_DNS
)
const WebSockets = or( const WebSockets = or(
and(TCP, base('ws')), and(TCP, base('ws')),
and(DNS, base('ws')) and(DNS, base('ws'))
@ -39,8 +35,7 @@ const WebSocketsSecure = or(
const HTTP = or( const HTTP = or(
and(TCP, base('http')), and(TCP, base('http')),
and(IP, base('http')), and(IP, base('http')),
and(DNS, base('http')), and(DNS, base('http'))
and(DNS)
) )
const HTTPS = or( const HTTPS = or(
@ -51,12 +46,16 @@ const HTTPS = or(
const WebRTCStar = or( const WebRTCStar = or(
and(WebSockets, base('p2p-webrtc-star'), base('ipfs')), and(WebSockets, base('p2p-webrtc-star'), base('ipfs')),
and(WebSocketsSecure, base('p2p-webrtc-star'), base('ipfs')) and(WebSocketsSecure, base('p2p-webrtc-star'), base('ipfs')),
and(WebSockets, base('p2p-webrtc-star'), base('p2p')),
and(WebSocketsSecure, base('p2p-webrtc-star'), base('p2p'))
) )
const WebSocketStar = or( const WebSocketStar = or(
and(WebSockets, base('p2p-websocket-star'), base('ipfs')), and(WebSockets, base('p2p-websocket-star'), base('ipfs')),
and(WebSocketsSecure, base('p2p-websocket-star'), base('ipfs')), and(WebSocketsSecure, base('p2p-websocket-star'), base('ipfs')),
and(WebSockets, base('p2p-websocket-star'), base('p2p')),
and(WebSocketsSecure, base('p2p-websocket-star'), base('p2p')),
and(WebSockets, base('p2p-websocket-star')), and(WebSockets, base('p2p-websocket-star')),
and(WebSocketsSecure, base('p2p-websocket-star')) and(WebSocketsSecure, base('p2p-websocket-star'))
) )
@ -83,16 +82,18 @@ const Stardust = or(
and(Reliable, base('p2p-stardust')) and(Reliable, base('p2p-stardust'))
) )
let _IPFS = or( const _P2P = or(
and(Reliable, base('ipfs')), and(Reliable, base('ipfs')),
and(Reliable, base('p2p')),
WebRTCStar, WebRTCStar,
base('ipfs') base('ipfs'),
base('p2p')
) )
const _Circuit = or( const _Circuit = or(
and(_IPFS, base('p2p-circuit'), _IPFS), and(_P2P, base('p2p-circuit'), _P2P),
and(_IPFS, base('p2p-circuit')), and(_P2P, base('p2p-circuit')),
and(base('p2p-circuit'), _IPFS), and(base('p2p-circuit'), _P2P),
and(Reliable, base('p2p-circuit')), and(Reliable, base('p2p-circuit')),
and(base('p2p-circuit'), Reliable), and(base('p2p-circuit'), Reliable),
base('p2p-circuit') base('p2p-circuit')
@ -105,12 +106,12 @@ const CircuitRecursive = () => or(
const Circuit = CircuitRecursive() const Circuit = CircuitRecursive()
const IPFS = or( const P2P = or(
and(Circuit, _IPFS, Circuit), and(Circuit, _P2P, Circuit),
and(_IPFS, Circuit), and(_P2P, Circuit),
and(Circuit, _IPFS), and(Circuit, _P2P),
Circuit, Circuit,
_IPFS _P2P
) )
exports.DNS = DNS exports.DNS = DNS
@ -130,7 +131,8 @@ exports.WebRTCDirect = WebRTCDirect
exports.Reliable = Reliable exports.Reliable = Reliable
exports.Stardust = Stardust exports.Stardust = Stardust
exports.Circuit = Circuit exports.Circuit = Circuit
exports.IPFS = IPFS exports.P2P = P2P
exports.IPFS = P2P
/* /*
* Validation funcs * Validation funcs
@ -145,7 +147,7 @@ function makeMatchesFunction (partialMatch) {
return false // also if it's invalid it's propably not matching as well so return false return false // also if it's invalid it's propably not matching as well so return false
} }
} }
let out = partialMatch(a.protoNames()) const out = partialMatch(a.protoNames())
if (out === null) { if (out === null) {
return false return false
} }

View File

@ -8,13 +8,11 @@ const multiaddr = require('multiaddr')
describe('multiaddr validation', function () { describe('multiaddr validation', function () {
const goodDNS = [ const goodDNS = [
'/dns/ipfs.io',
'/dnsaddr/ipfs.io', '/dnsaddr/ipfs.io',
'/dns4/ipfs.io', '/dns4/ipfs.io',
'/dns4/libp2p.io', '/dns4/libp2p.io',
'/dns6/protocol.ai', '/dns6/protocol.ai'
'/dns4/protocol.ai/tcp/80',
'/dns6/protocol.ai/tcp/80',
'/dnsaddr/protocol.ai/tcp/80'
] ]
const badDNS = [ const badDNS = [
@ -35,6 +33,7 @@ describe('multiaddr validation', function () {
'/ip4/0.0.7.6/tcp/1234', '/ip4/0.0.7.6/tcp/1234',
'/ip6/::/tcp/0', '/ip6/::/tcp/0',
'/dns4/protocol.ai/tcp/80', '/dns4/protocol.ai/tcp/80',
'/dns6/protocol.ai/tcp/80',
'/dnsaddr/protocol.ai/tcp/80' '/dnsaddr/protocol.ai/tcp/80'
] ]
@ -65,7 +64,6 @@ describe('multiaddr validation', function () {
] ]
const goodHTTP = [ const goodHTTP = [
'/dnsaddr/ipfs.io',
'/dnsaddr/ipfs.io/http', '/dnsaddr/ipfs.io/http',
'/dnsaddr/ipfs.io/tcp/3456/http', '/dnsaddr/ipfs.io/tcp/3456/http',
'/ip4/0.0.0.0/http', '/ip4/0.0.0.0/http',
@ -100,7 +98,9 @@ describe('multiaddr validation', function () {
'/dnsaddr/ipfs.io/ws/p2p-webrtc-star/ipfs/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSoooo4', '/dnsaddr/ipfs.io/ws/p2p-webrtc-star/ipfs/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSoooo4',
'/dnsaddr/ipfs.io/wss/p2p-webrtc-star/ipfs/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSoooo4', '/dnsaddr/ipfs.io/wss/p2p-webrtc-star/ipfs/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSoooo4',
'/ip6/::/tcp/0/ws/p2p-webrtc-star/ipfs/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSoooo5', '/ip6/::/tcp/0/ws/p2p-webrtc-star/ipfs/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSoooo5',
'/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star/ipfs/QmTysQQiTGMdfRsDQp516oZ9bR3FiSCDnicUnqny2q1d79' '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star/ipfs/QmTysQQiTGMdfRsDQp516oZ9bR3FiSCDnicUnqny2q1d79',
'/dns/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star/ipfs/QmTysQQiTGMdfRsDQp516oZ9bR3FiSCDnicUnqny2q1d79',
'/dns/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star/ipfs/QmTysQQiTGMdfRsDQp516oZ9bR3FiSCDnicUnqny2q1d79'
] ]
const goodWebRTCDirect = [ const goodWebRTCDirect = [
@ -160,7 +160,12 @@ describe('multiaddr validation', function () {
'/ip4/1.2.3.4/tcp/3456/ws/p2p-webrtc-star/ipfs/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSoooo4', '/ip4/1.2.3.4/tcp/3456/ws/p2p-webrtc-star/ipfs/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSoooo4',
'/ip4/1.2.3.4/tcp/3456/ipfs/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSoooo4', '/ip4/1.2.3.4/tcp/3456/ipfs/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSoooo4',
'/ipfs/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSoooo4/p2p-circuit', '/ipfs/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSoooo4/p2p-circuit',
'/ipfs/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSoooo4/p2p-circuit/ipfs/QmUjNmr8TgJCn1Ao7DvMy4cjoZU15b9bwSCBLE3vwXiwgj' '/ipfs/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSoooo4/p2p-circuit/ipfs/QmUjNmr8TgJCn1Ao7DvMy4cjoZU15b9bwSCBLE3vwXiwgj',
'/ip4/127.0.0.1/tcp/20008/ws/p2p/QmUjNmr8TgJCn1Ao7DvMy4cjoZU15b9bwSCBLE3vwXiwgj',
'/ip4/1.2.3.4/tcp/3456/ws/p2p-webrtc-star/p2p/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSoooo4',
'/ip4/1.2.3.4/tcp/3456/p2p/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSoooo4',
'/p2p/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSoooo4/p2p-circuit',
'/p2p/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSoooo4/p2p-circuit/p2p/QmUjNmr8TgJCn1Ao7DvMy4cjoZU15b9bwSCBLE3vwXiwgj'
].concat(goodCircuit) ].concat(goodCircuit)
function assertMatches (p) { function assertMatches (p) {