@@ -20,6 +20,16 @@ const DNS_CODES = [
20
20
getProtocol ( 'dnsaddr' ) . code
21
21
]
22
22
23
+ const P2P_CODES = [
24
+ getProtocol ( 'p2p' ) . code ,
25
+ getProtocol ( 'ipfs' ) . code
26
+ ]
27
+
28
+ const TCP_UDP_CODES = [
29
+ getProtocol ( 'tcp' ) . code ,
30
+ getProtocol ( 'udp' ) . code
31
+ ]
32
+
23
33
export interface Protocol {
24
34
code : number
25
35
size : number
@@ -459,20 +469,20 @@ export class Multiaddr {
459
469
const codes = this . protoCodes ( )
460
470
const names = this . protoNames ( )
461
471
const parts = this . toString ( ) . split ( '/' ) . slice ( 1 )
462
- let protocol = parts [ 2 ]
472
+ let protocol = getProtocol ( parts [ 2 ] ) . code
463
473
let port = parseInt ( parts [ 3 ] )
464
474
465
475
// default to https when protocol & port are omitted from DNS addrs
466
- if ( DNS_CODES . includes ( codes [ 0 ] ) && protocol === 'p2p' ) {
467
- protocol = 'tcp'
476
+ if ( DNS_CODES . includes ( codes [ 0 ] ) && P2P_CODES . includes ( codes [ 1 ] ) ) {
477
+ protocol = getProtocol ( 'tcp' ) . code
468
478
port = 443
469
479
}
470
480
471
481
if ( parts . length < 4 ) {
472
482
throw new Error ( 'multiaddr must have a valid format: "/{ip4, ip6, dns4, dns6, dnsaddr}/{address}/{tcp, udp}/{port}".' )
473
483
} else if ( ! IP_CODES . includes ( codes [ 0 ] ) && ! DNS_CODES . includes ( codes [ 0 ] ) ) {
474
484
throw new Error ( `no protocol with name: "'${ names [ 0 ] } '". Must have a valid family name: "{ip4, ip6, dns, dns4, dns6, dnsaddr}".` )
475
- } else if ( protocol !== 'tcp' && protocol !== 'udp' ) {
485
+ } else if ( ! TCP_UDP_CODES . includes ( protocol ) ) {
476
486
throw new Error ( `no protocol with name: "'${ names [ 1 ] } '". Must have a valid transport protocol: "{tcp, udp}".` )
477
487
}
478
488
0 commit comments