Skip to content
This repository was archived by the owner on Jul 21, 2023. It is now read-only.

Commit 018fbe4

Browse files
authored
feat!: update libp2p interfaces (#47)
BREAKING CHANGE: uses new single-issue libp2p interface modules
1 parent 8023ab6 commit 018fbe4

9 files changed

+124
-107
lines changed

README.md

+31-18
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,30 @@
1-
# js-libp2p-utils
1+
# @libp2p/utils <!-- omit in toc -->
22

3-
[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://protocol.ai)
4-
[![](https://img.shields.io/badge/project-libp2p-yellow.svg?style=flat-square)](http://libp2p.io/)
5-
[![](https://img.shields.io/badge/freenode-%23libp2p-yellow.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23libp2p)
6-
[![Discourse posts](https://img.shields.io/discourse/https/discuss.libp2p.io/posts.svg)](https://discuss.libp2p.io)
7-
[![](https://img.shields.io/codecov/c/github/libp2p/js-libp2p-utils.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-utils)
8-
[![](https://img.shields.io/travis/libp2p/js-libp2p-utils.svg?style=flat-square)](https://travis-ci.com/libp2p/js-libp2p-utils)
9-
[![Dependency Status](https://david-dm.org/libp2p/js-libp2p-utils.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-utils)
10-
[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/feross/standard)
3+
[![libp2p.io](https://img.shields.io/badge/project-libp2p-yellow.svg?style=flat-square)](http://libp2p.io/)
4+
[![IRC](https://img.shields.io/badge/freenode-%23libp2p-yellow.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23libp2p)
5+
[![Discuss](https://img.shields.io/discourse/https/discuss.libp2p.io/posts.svg?style=flat-square)](https://discuss.libp2p.io)
6+
[![codecov](https://img.shields.io/codecov/c/github/libp2p/js-libp2p-utils.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-utils)
7+
[![CI](https://img.shields.io/github/workflow/status/libp2p/js-libp2p-interfaces/test%20&%20maybe%20release/master?style=flat-square)](https://github.com/libp2p/js-libp2p-utils/actions/workflows/js-test-and-release.yml)
118

12-
> This package serves as a central repository for shared logic and dependencies for all libp2p packages, using `libp2p-utils` helps to easily re-use small scoped blocks of logic across all libp2p modules and also as a dependency proxy (think `aegir` for domain logic dependencies).
9+
> Package to aggregate shared logic and dependencies for the libp2p ecosystem
1310
11+
## Table of contents <!-- omit in toc -->
12+
13+
- [Install](#install)
14+
- [Lead Maintainer](#lead-maintainer)
15+
- [Usage](#usage)
16+
- [Contribute](#contribute)
17+
- [License](#license)
18+
- [Contribution](#contribution)
19+
20+
## Install
21+
22+
```console
23+
$ npm i @libp2p/utils
24+
```
1425

1526
The libp2p ecosystem has lots of repos with it comes several problems like:
27+
1628
- Domain logic dedupe - all modules shared a lot of logic like validation, streams handling, etc.
1729
- Dependencies management - it's really easy with so many repos for dependencies to go out of control, they become outdated, different repos use different modules to do the same thing (like merging defaults options), browser bundles ends up with multiple versions of the same package, bumping versions is cumbersome to do because we need to go through several repos, etc.
1830

@@ -22,14 +34,8 @@ These problems are the motivation for this package, having shared logic in this
2234

2335
[Vasco Santos](https://github.com/vasco-santos)
2436

25-
## Install
26-
27-
28-
```bash
29-
$ npm install --save @libp2p/utils
30-
```
31-
3237
## Usage
38+
3339
Each function should be imported directly.
3440

3541
```js
@@ -48,4 +54,11 @@ Check out our [contributing document](https://github.com/ipfs/community/blob/mas
4854

4955
## License
5056

51-
[MIT](LICENSE) © Protocol Labs Inc.
57+
Licensed under either of
58+
59+
- Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / <http://www.apache.org/licenses/LICENSE-2.0>)
60+
- MIT ([LICENSE-MIT](LICENSE-MIT) / <http://opensource.org/licenses/MIT>)
61+
62+
## Contribution
63+
64+
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

package.json

+19-17
Original file line numberDiff line numberDiff line change
@@ -41,31 +41,32 @@
4141
],
4242
"exports": {
4343
".": {
44+
"types": "./src/index.d.ts",
4445
"import": "./dist/src/index.js"
4546
},
4647
"./address-sort": {
47-
"import": "./dist/src/address-sort.js",
48-
"types": "./dist/src/address-sort.d.ts"
48+
"types": "./dist/src/address-sort.d.ts",
49+
"import": "./dist/src/address-sort.js"
4950
},
5051
"./array-equals": {
51-
"import": "./dist/src/array-equals.js",
52-
"types": "./dist/src/array-equals.d.ts"
52+
"types": "./dist/src/array-equals.d.ts",
53+
"import": "./dist/src/array-equals.js"
5354
},
5455
"./ip-port-to-multiaddr": {
55-
"import": "./dist/src/ip-port-to-multiaddr.js",
56-
"types": "./dist/src/ip-port-to-multiaddr.d.ts"
56+
"types": "./dist/src/ip-port-to-multiaddr.d.ts",
57+
"import": "./dist/src/ip-port-to-multiaddr.js"
5758
},
5859
"./multiaddr/is-loopback": {
59-
"import": "./dist/src/multiaddr/is-loopback.js",
60-
"types": "./dist/src/multiaddr/is-loopback.d.ts"
60+
"types": "./dist/src/multiaddr/is-loopback.d.ts",
61+
"import": "./dist/src/multiaddr/is-loopback.js"
6162
},
6263
"./multiaddr/is-private": {
63-
"import": "./dist/src/multiaddr/is-private.js",
64-
"types": "./dist/src/multiaddr/is-private.d.ts"
64+
"types": "./dist/src/multiaddr/is-private.d.ts",
65+
"import": "./dist/src/multiaddr/is-private.js"
6566
},
6667
"./stream-to-ma-conn": {
67-
"import": "./dist/src/stream-to-ma-conn.js",
68-
"types": "./dist/src/stream-to-ma-conn.d.ts"
68+
"types": "./dist/src/stream-to-ma-conn.d.ts",
69+
"import": "./dist/src/stream-to-ma-conn.js"
6970
}
7071
},
7172
"eslintConfig": {
@@ -171,19 +172,20 @@
171172
},
172173
"dependencies": {
173174
"@achingbrain/ip-address": "^8.1.0",
174-
"@libp2p/logger": "^1.0.1",
175+
"@libp2p/interface-connection": "^1.0.1",
176+
"@libp2p/interface-peer-store": "^1.0.0",
177+
"@libp2p/interface-transport": "^1.0.0",
178+
"@libp2p/logger": "^2.0.0",
175179
"@multiformats/multiaddr": "^10.1.1",
176180
"abortable-iterator": "^4.0.2",
177181
"err-code": "^3.0.1",
178182
"is-loopback-addr": "^2.0.1",
179183
"it-stream-types": "^1.0.4",
180-
"private-ip": "^2.1.1",
181-
"ts-mocha": "^9.0.2",
182-
"ts-node": "^10.7.0"
184+
"private-ip": "^2.1.1"
183185
},
184186
"devDependencies": {
185187
"@libp2p/interfaces": "^1.0.3",
186-
"aegir": "^37.0.4",
188+
"aegir": "^37.2.0",
187189
"it-all": "^1.0.6",
188190
"it-pair": "^2.0.2",
189191
"it-pipe": "^2.0.2",

src/address-sort.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { Address } from '@libp2p/interfaces/peer-store'
1+
import type { Address } from '@libp2p/interface-peer-store'
22
import { isPrivate } from './multiaddr/is-private.js'
33

44
/**

src/stream-to-ma-conn.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { abortableSource } from 'abortable-iterator'
22
import { logger } from '@libp2p/logger'
33
import type { Multiaddr } from '@multiformats/multiaddr'
4-
import type { MultiaddrConnection } from '@libp2p/interfaces/transport'
4+
import type { MultiaddrConnection } from '@libp2p/interface-connection'
55
import type { Duplex } from 'it-stream-types'
66

77
const log = logger('libp2p:stream:converter')

test/address-sort.spec.ts

+13-13
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,51 @@
11
/* eslint-env mocha */
22

33
import { expect } from 'aegir/chai'
4-
import { Multiaddr } from '@multiformats/multiaddr'
4+
import { multiaddr } from '@multiformats/multiaddr'
55
import { publicAddressesFirst } from '../src/address-sort.js'
66

77
describe('address-sort', () => {
88
it('should sort public addresses first', () => {
99
const addresses = [
1010
{
11-
multiaddr: new Multiaddr('/ip4/127.0.0.1/tcp/4000'),
11+
multiaddr: multiaddr('/ip4/127.0.0.1/tcp/4000'),
1212
isCertified: false
1313
},
1414
{
15-
multiaddr: new Multiaddr('/ip4/30.0.0.1/tcp/4000'),
15+
multiaddr: multiaddr('/ip4/30.0.0.1/tcp/4000'),
1616
isCertified: false
1717
},
1818
{
19-
multiaddr: new Multiaddr('/ip4/31.0.0.1/tcp/4000'),
19+
multiaddr: multiaddr('/ip4/31.0.0.1/tcp/4000'),
2020
isCertified: false
2121
}
2222
]
2323

2424
const sortedAddresses = addresses.sort(publicAddressesFirst)
25-
expect(sortedAddresses[0].multiaddr.equals(new Multiaddr('/ip4/30.0.0.1/tcp/4000'))).to.eql(true)
26-
expect(sortedAddresses[1].multiaddr.equals(new Multiaddr('/ip4/31.0.0.1/tcp/4000'))).to.eql(true)
27-
expect(sortedAddresses[2].multiaddr.equals(new Multiaddr('/ip4/127.0.0.1/tcp/4000'))).to.eql(true)
25+
expect(sortedAddresses[0].multiaddr.equals(multiaddr('/ip4/30.0.0.1/tcp/4000'))).to.eql(true)
26+
expect(sortedAddresses[1].multiaddr.equals(multiaddr('/ip4/31.0.0.1/tcp/4000'))).to.eql(true)
27+
expect(sortedAddresses[2].multiaddr.equals(multiaddr('/ip4/127.0.0.1/tcp/4000'))).to.eql(true)
2828
})
2929

3030
it('should sort public certified addresses first', () => {
3131
const addresses = [
3232
{
33-
multiaddr: new Multiaddr('/ip4/127.0.0.1/tcp/4000'),
33+
multiaddr: multiaddr('/ip4/127.0.0.1/tcp/4000'),
3434
isCertified: false
3535
},
3636
{
37-
multiaddr: new Multiaddr('/ip4/30.0.0.1/tcp/4000'),
37+
multiaddr: multiaddr('/ip4/30.0.0.1/tcp/4000'),
3838
isCertified: false
3939
},
4040
{
41-
multiaddr: new Multiaddr('/ip4/31.0.0.1/tcp/4000'),
41+
multiaddr: multiaddr('/ip4/31.0.0.1/tcp/4000'),
4242
isCertified: true
4343
}
4444
]
4545

4646
const sortedAddresses = addresses.sort(publicAddressesFirst)
47-
expect(sortedAddresses[0].multiaddr.equals(new Multiaddr('/ip4/31.0.0.1/tcp/4000'))).to.eql(true)
48-
expect(sortedAddresses[1].multiaddr.equals(new Multiaddr('/ip4/30.0.0.1/tcp/4000'))).to.eql(true)
49-
expect(sortedAddresses[2].multiaddr.equals(new Multiaddr('/ip4/127.0.0.1/tcp/4000'))).to.eql(true)
47+
expect(sortedAddresses[0].multiaddr.equals(multiaddr('/ip4/31.0.0.1/tcp/4000'))).to.eql(true)
48+
expect(sortedAddresses[1].multiaddr.equals(multiaddr('/ip4/30.0.0.1/tcp/4000'))).to.eql(true)
49+
expect(sortedAddresses[2].multiaddr.equals(multiaddr('/ip4/127.0.0.1/tcp/4000'))).to.eql(true)
5050
})
5151
})

test/array-equals.spec.ts

+24-24
Original file line numberDiff line numberDiff line change
@@ -1,68 +1,68 @@
11
/* eslint-env mocha */
22

33
import { expect } from 'aegir/chai'
4-
import { Multiaddr } from '@multiformats/multiaddr'
4+
import { multiaddr } from '@multiformats/multiaddr'
55
import { arrayEquals } from '../src/array-equals.js'
66

77
describe('non primitive array equals', () => {
88
it('returns true if two arrays of multiaddrs are equal', () => {
99
const a = [
10-
new Multiaddr('/ip4/127.0.0.1/tcp/8000'),
11-
new Multiaddr('/ip4/127.0.0.1/tcp/3000/ws'),
12-
new Multiaddr('/dns4/test.libp2p.io')
10+
multiaddr('/ip4/127.0.0.1/tcp/8000'),
11+
multiaddr('/ip4/127.0.0.1/tcp/3000/ws'),
12+
multiaddr('/dns4/test.libp2p.io')
1313
]
1414

1515
const b = [
16-
new Multiaddr('/ip4/127.0.0.1/tcp/8000'),
17-
new Multiaddr('/ip4/127.0.0.1/tcp/3000/ws'),
18-
new Multiaddr('/dns4/test.libp2p.io')
16+
multiaddr('/ip4/127.0.0.1/tcp/8000'),
17+
multiaddr('/ip4/127.0.0.1/tcp/3000/ws'),
18+
multiaddr('/dns4/test.libp2p.io')
1919
]
2020

2121
expect(arrayEquals(a, b)).to.eql(true)
2222
})
2323

2424
it('returns true if two arrays of multiaddrs have the same content but different orders', () => {
2525
const a = [
26-
new Multiaddr('/ip4/127.0.0.1/tcp/8000'),
27-
new Multiaddr('/ip4/127.0.0.1/tcp/3000/ws'),
28-
new Multiaddr('/dns4/test.libp2p.io')
26+
multiaddr('/ip4/127.0.0.1/tcp/8000'),
27+
multiaddr('/ip4/127.0.0.1/tcp/3000/ws'),
28+
multiaddr('/dns4/test.libp2p.io')
2929
]
3030

3131
const b = [
32-
new Multiaddr('/ip4/127.0.0.1/tcp/3000/ws'),
33-
new Multiaddr('/ip4/127.0.0.1/tcp/8000'),
34-
new Multiaddr('/dns4/test.libp2p.io')
32+
multiaddr('/ip4/127.0.0.1/tcp/3000/ws'),
33+
multiaddr('/ip4/127.0.0.1/tcp/8000'),
34+
multiaddr('/dns4/test.libp2p.io')
3535
]
3636

3737
expect(arrayEquals(a, b)).to.eql(true)
3838
})
3939

4040
it('returns false if two arrays of multiaddrs are different', () => {
4141
const a = [
42-
new Multiaddr('/ip4/127.0.0.1/tcp/8000'),
43-
new Multiaddr('/ip4/127.0.0.1/tcp/3000/ws'),
44-
new Multiaddr('/dns4/test.libp2p.io')
42+
multiaddr('/ip4/127.0.0.1/tcp/8000'),
43+
multiaddr('/ip4/127.0.0.1/tcp/3000/ws'),
44+
multiaddr('/dns4/test.libp2p.io')
4545
]
4646

4747
const b = [
48-
new Multiaddr('/ip4/127.0.0.1/tcp/8001'),
49-
new Multiaddr('/ip4/127.0.0.1/tcp/3000/ws'),
50-
new Multiaddr('/dns4/test.libp2p.io')
48+
multiaddr('/ip4/127.0.0.1/tcp/8001'),
49+
multiaddr('/ip4/127.0.0.1/tcp/3000/ws'),
50+
multiaddr('/dns4/test.libp2p.io')
5151
]
5252

5353
expect(arrayEquals(a, b)).to.eql(false)
5454
})
5555

5656
it('returns false if two arrays of multiaddrs are partially equal, but different lengths', () => {
5757
const a = [
58-
new Multiaddr('/ip4/127.0.0.1/tcp/8000'),
59-
new Multiaddr('/ip4/127.0.0.1/tcp/3000/ws'),
60-
new Multiaddr('/dns4/test.libp2p.io')
58+
multiaddr('/ip4/127.0.0.1/tcp/8000'),
59+
multiaddr('/ip4/127.0.0.1/tcp/3000/ws'),
60+
multiaddr('/dns4/test.libp2p.io')
6161
]
6262

6363
const b = [
64-
new Multiaddr('/ip4/127.0.0.1/tcp/8000'),
65-
new Multiaddr('/dns4/test.libp2p.io')
64+
multiaddr('/ip4/127.0.0.1/tcp/8000'),
65+
multiaddr('/dns4/test.libp2p.io')
6666
]
6767

6868
expect(arrayEquals(a, b)).to.eql(false)

test/multiaddr/is-loopback.spec.ts

+14-14
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,53 @@
11
/* eslint-env mocha */
22

33
import { expect } from 'aegir/chai'
4-
import { Multiaddr } from '@multiformats/multiaddr'
4+
import { multiaddr } from '@multiformats/multiaddr'
55
import { isLoopback } from '../../src/multiaddr/is-loopback.js'
66

77
describe('multiaddr isLoopback', () => {
88
it('identifies loopback ip4 multiaddrs', () => {
99
[
10-
new Multiaddr('/ip4/127.0.0.1/tcp/1000'),
11-
new Multiaddr('/ip4/127.0.1.1/tcp/1000'),
12-
new Multiaddr('/ip4/127.1.1.1/tcp/1000'),
13-
new Multiaddr('/ip4/127.255.255.255/tcp/1000')
10+
multiaddr('/ip4/127.0.0.1/tcp/1000'),
11+
multiaddr('/ip4/127.0.1.1/tcp/1000'),
12+
multiaddr('/ip4/127.1.1.1/tcp/1000'),
13+
multiaddr('/ip4/127.255.255.255/tcp/1000')
1414
].forEach(ma => {
1515
expect(isLoopback(ma)).to.eql(true)
1616
})
1717
})
1818

1919
it('identifies non loopback ip4 multiaddrs', () => {
2020
[
21-
new Multiaddr('/ip4/101.0.26.90/tcp/1000'),
22-
new Multiaddr('/ip4/10.0.0.1/tcp/1000'),
23-
new Multiaddr('/ip4/192.168.0.1/tcp/1000'),
24-
new Multiaddr('/ip4/172.16.0.1/tcp/1000')
21+
multiaddr('/ip4/101.0.26.90/tcp/1000'),
22+
multiaddr('/ip4/10.0.0.1/tcp/1000'),
23+
multiaddr('/ip4/192.168.0.1/tcp/1000'),
24+
multiaddr('/ip4/172.16.0.1/tcp/1000')
2525
].forEach(ma => {
2626
expect(isLoopback(ma)).to.eql(false)
2727
})
2828
})
2929

3030
it('identifies loopback ip6 multiaddrs', () => {
3131
[
32-
new Multiaddr('/ip6/::1/tcp/1000')
32+
multiaddr('/ip6/::1/tcp/1000')
3333
].forEach(ma => {
3434
expect(isLoopback(ma)).to.eql(true)
3535
})
3636
})
3737

3838
it('identifies non loopback ip6 multiaddrs', () => {
3939
[
40-
new Multiaddr('/ip6/2001:8a0:7ac5:4201:3ac9:86ff:fe31:7095/tcp/1000'),
41-
new Multiaddr('/ip6/::/tcp/1000')
40+
multiaddr('/ip6/2001:8a0:7ac5:4201:3ac9:86ff:fe31:7095/tcp/1000'),
41+
multiaddr('/ip6/::/tcp/1000')
4242
].forEach(ma => {
4343
expect(isLoopback(ma)).to.eql(false)
4444
})
4545
})
4646

4747
it('identifies other multiaddrs as not loopback addresses', () => {
4848
[
49-
new Multiaddr('/dns4/wss0.bootstrap.libp2p.io/tcp/443'),
50-
new Multiaddr('/dns6/wss0.bootstrap.libp2p.io/tcp/443')
49+
multiaddr('/dns4/wss0.bootstrap.libp2p.io/tcp/443'),
50+
multiaddr('/dns6/wss0.bootstrap.libp2p.io/tcp/443')
5151
].forEach(ma => {
5252
expect(isLoopback(ma)).to.eql(false)
5353
})

0 commit comments

Comments
 (0)