Skip to content

Commit 18567b7

Browse files
authored
fix(@libp2p/utils): switch to @chainsafe/is-ip (#1957)
The `@achingbrain/ip-address` module is a fork of `ip-address` which seems to have dependencies on older modules that break modern runtimes like react native. `@Chainsafe/is-ip` does not have these limitations so switch to that. Fixes #1926
1 parent a31b420 commit 18567b7

File tree

3 files changed

+12
-18
lines changed

3 files changed

+12
-18
lines changed

packages/utils/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@
8585
"test:electron-main": "aegir test -t electron-main"
8686
},
8787
"dependencies": {
88-
"@achingbrain/ip-address": "^8.1.0",
88+
"@chainsafe/is-ip": "^2.0.2",
8989
"@libp2p/interface": "^0.1.1",
9090
"@libp2p/logger": "^3.0.1",
9191
"@multiformats/multiaddr": "^12.1.5",

packages/utils/src/ip-port-to-multiaddr.ts

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Address4, Address6 } from '@achingbrain/ip-address'
1+
import { isIPv4, isIPv6 } from '@chainsafe/is-ip'
22
import { CodeError } from '@libp2p/interface/errors'
33
import { logger } from '@libp2p/logger'
44
import { type Multiaddr, multiaddr } from '@multiformats/multiaddr'
@@ -27,21 +27,15 @@ export function ipPortToMultiaddr (ip: string, port: number | string): Multiaddr
2727
throw new CodeError(`invalid port provided: ${port}`, Errors.ERR_INVALID_PORT_PARAMETER)
2828
}
2929

30-
try {
31-
// Test valid IPv4
32-
new Address4(ip) // eslint-disable-line no-new
30+
if (isIPv4(ip)) {
3331
return multiaddr(`/ip4/${ip}/tcp/${port}`)
34-
} catch {}
35-
36-
try {
37-
// Test valid IPv6
38-
const ip6 = new Address6(ip)
39-
return ip6.is4()
40-
? multiaddr(`/ip4/${ip6.to4().correctForm()}/tcp/${port}`)
41-
: multiaddr(`/ip6/${ip}/tcp/${port}`)
42-
} catch (err) {
43-
const errMsg = `invalid ip:port for creating a multiaddr: ${ip}:${port}`
44-
log.error(errMsg)
45-
throw new CodeError(errMsg, Errors.ERR_INVALID_IP)
4632
}
33+
34+
if (isIPv6(ip)) {
35+
return multiaddr(`/ip6/${ip}/tcp/${port}`)
36+
}
37+
38+
const errMsg = `invalid ip:port for creating a multiaddr: ${ip}:${port}`
39+
log.error(errMsg)
40+
throw new CodeError(errMsg, Errors.ERR_INVALID_IP)
4741
}

packages/utils/test/ip-port-to-multiaddr.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ describe('IP and port to Multiaddr', () => {
1919
it('creates multiaddr from valid IPv4 in IPv6 IP and port', () => {
2020
const ip = '0:0:0:0:0:0:101.45.75.219'
2121
const port = '9090'
22-
expect(ipPortToMultiaddr(ip, port).toString()).to.equal(`/ip4/101.45.75.219/tcp/${port}`)
22+
expect(ipPortToMultiaddr(ip, port).toString()).to.equal(`/ip6/::652d:4bdb/tcp/${port}`)
2323
})
2424

2525
it('creates multiaddr from valid IPv6 IP and port', () => {

0 commit comments

Comments
 (0)