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

Commit 1d55fba

Browse files
authored
feat!: update libp2p interfaces (#172)
BREAKING CHANGE: uses new single-issue libp2p interface modules
1 parent 38ecc2b commit 1d55fba

10 files changed

+72
-62
lines changed

.aegir.cjs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ const ECHO_PROTOCOL = '/echo/1.0.0'
1111
async function before () {
1212
const { WebRTCDirect } = await import('./dist/src/index.js')
1313
const { pipe } = await import('it-pipe')
14-
const { Multiaddr } = await import('@multiformats/multiaddr')
15-
const { mockUpgrader, mockRegistrar } = await import('@libp2p/interface-compliance-tests/mocks')
14+
const { multiaddr } = await import('@multiformats/multiaddr')
15+
const { mockUpgrader, mockRegistrar } = await import('@libp2p/interface-mocks')
1616

17-
const REMOTE_MULTIADDR_IP4 = new Multiaddr('/ip4/127.0.0.1/tcp/12345/http/p2p-webrtc-direct')
18-
const REMOTE_MULTIADDR_IP6 = new Multiaddr('/ip6/::1/tcp/12346/http/p2p-webrtc-direct')
17+
const REMOTE_MULTIADDR_IP4 = multiaddr('/ip4/127.0.0.1/tcp/12345/http/p2p-webrtc-direct')
18+
const REMOTE_MULTIADDR_IP6 = multiaddr('/ip6/::1/tcp/12346/http/p2p-webrtc-direct')
1919

2020
const registrar = mockRegistrar()
2121
void registrar.handle(ECHO_PROTOCOL, ({ stream }) => {

README.md

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,14 @@
1-
# js-libp2p-webrtc-direct <!-- omit in toc -->
1+
# @libp2p/webrtc-direct <!-- 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-webrtc-direct.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-direct)
8-
[![Build Status](https://github.com/libp2p/js-libp2p-webrtc-direct/actions/workflows/js-test-and-release.yml/badge.svg?branch=main)](https://github.com/libp2p/js-libp2p-webrtc-direct/actions/workflows/js-test-and-release.yml)
9-
[![Dependency Status](https://david-dm.org/libp2p/js-libp2p-webrtc-direct.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-direct) [![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-webrtc-direct.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-direct)
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-webrtc-direct/actions/workflows/js-test-and-release.yml)
108

11-
![](https://raw.githubusercontent.com/libp2p/js-libp2p-interfaces/master/packages/libp2p-interfaces/src/connection/img/badge.png)
12-
![](https://raw.githubusercontent.com/libp2p/js-libp2p-interfaces/master/packages/libp2p-interfaces/src/transport/img/badge.png)
13-
14-
> A WebRTC transport built for libp2p (not mandatory to use with libp2p) that doesn't require the set up a signalling server. Caveat, you can only establish Browser to Node.js and Node.js to Node.js connections.
9+
> Dial using WebRTC without the need to set up any Signalling Rendezvous Point!
1510
16-
## Table of Contents <!-- omit in toc -->
11+
## Table of contents <!-- omit in toc -->
1712

1813
- [Install](#install)
1914
- [Usage](#usage)
@@ -22,13 +17,17 @@
2217
- [Connection](#connection)
2318
- [Contribute](#contribute)
2419
- [License](#license)
20+
- [Contribution](#contribution)
2521

2622
## Install
2723

28-
```bash
29-
> npm install @libp2p/webrtc-direct
24+
```console
25+
$ npm i @libp2p/webrtc-direct
3026
```
3127

28+
![](https://raw.githubusercontent.com/libp2p/js-libp2p-interfaces/master/packages/libp2p-interfaces/src/connection/img/badge.png)
29+
![](https://raw.githubusercontent.com/libp2p/js-libp2p-interfaces/master/packages/libp2p-interfaces/src/transport/img/badge.png)
30+
3231
**NOTE:** To run build scripts `node-pre-gyp` is required. You can install it by running `npm install -g node-pre-gyp`.
3332

3433
## Usage
@@ -40,7 +39,7 @@ import { pipe } from 'it-pipe'
4039
import all from 'it-all'
4140

4241
const ECHO_PROTOCOL = '/echo/1.0.0'
43-
const addr = new Multiaddr('/ip4/127.0.0.1/tcp/9090/http/p2p-webrtc-direct')
42+
const addr = multiaddr('/ip4/127.0.0.1/tcp/9090/http/p2p-webrtc-direct')
4443
const webRTCDirect = new WebRTCDirect()
4544

4645
const listener = webRTCDirect.createListener({
@@ -80,6 +79,7 @@ listening
8079
new connection opened
8180
Value: hello
8281
```
82+
8383
Note that it may take some time for the connection to be established.
8484

8585
## API
@@ -96,10 +96,17 @@ Note that it may take some time for the connection to be established.
9696

9797
The libp2p implementation in JavaScript is a work in progress. As such, there are a few things you can do right now to help out:
9898

99-
- Go through the modules and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS/libp2p may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.
100-
- **Perform code reviews**.
101-
- **Add tests**. There can never be enough tests.
99+
- Go through the modules and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS/libp2p may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.
100+
- **Perform code reviews**.
101+
- **Add tests**. There can never be enough tests.
102102

103103
## License
104104

105-
[MIT](LICENCE-MIT) & [Apache](LICENCE-APACHE) - Protocol Labs 2019
105+
Licensed under either of
106+
107+
- Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / <http://www.apache.org/licenses/LICENSE-2.0>)
108+
- MIT ([LICENSE-MIT](LICENSE-MIT) / <http://opensource.org/licenses/MIT>)
109+
110+
## Contribution
111+
112+
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

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
],
3333
"exports": {
3434
".": {
35+
"types": "./src/index.d.ts",
3536
"import": "./dist/src/index.js"
3637
}
3738
},
@@ -134,10 +135,11 @@
134135
"release": "aegir release"
135136
},
136137
"dependencies": {
137-
"@libp2p/interfaces": "^2.0.1",
138-
"@libp2p/logger": "^1.1.2",
139-
"@libp2p/utils": "^1.0.9",
140-
"@libp2p/webrtc-peer": "^1.0.7",
138+
"@libp2p/interface-transport": "^1.0.0",
139+
"@libp2p/interfaces": "^3.0.2",
140+
"@libp2p/logger": "^2.0.0",
141+
"@libp2p/utils": "^2.0.0",
142+
"@libp2p/webrtc-peer": "^2.0.0",
141143
"@multiformats/mafmt": "^11.0.2",
142144
"@multiformats/multiaddr": "^10.1.7",
143145
"abortable-iterator": "^4.0.2",
@@ -150,9 +152,10 @@
150152
"wherearewe": "^1.0.1"
151153
},
152154
"devDependencies": {
153-
"@libp2p/interface-compliance-tests": "^2.0.1",
155+
"@libp2p/interface-mocks": "^1.0.1",
156+
"@libp2p/interface-transport-compliance-tests": "^1.0.0",
154157
"@mapbox/node-pre-gyp": "^1.0.8",
155-
"aegir": "^37.0.15",
158+
"aegir": "^37.2.0",
156159
"it-all": "^1.0.6",
157160
"it-pipe": "^2.0.3",
158161
"multiaddr": "^10.0.0",

src/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ import { CODE_CIRCUIT, CODE_P2P } from './constants.js'
99
import { toMultiaddrConnection } from './socket-to-conn.js'
1010
import { createListener } from './listener.js'
1111
import { Signal, WebRTCInitiator, WebRTCInitiatorInit, WebRTCReceiverInit, WRTC } from '@libp2p/webrtc-peer'
12-
import { symbol } from '@libp2p/interfaces/transport'
13-
import type { CreateListenerOptions, DialOptions, Listener, Transport } from '@libp2p/interfaces/transport'
12+
import { symbol } from '@libp2p/interface-transport'
13+
import type { CreateListenerOptions, DialOptions, Listener, Transport } from '@libp2p/interface-transport'
1414
import type { Multiaddr } from '@multiformats/multiaddr'
1515

1616
const log = logger('libp2p:webrtc-direct')

src/listener.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ import { fromString } from 'uint8arrays/from-string'
66
import type { Multiaddr } from '@multiformats/multiaddr'
77
import type { IncomingMessage, ServerResponse } from 'http'
88
import { EventEmitter, CustomEvent } from '@libp2p/interfaces/events'
9-
import type { Connection } from '@libp2p/interfaces/connection'
10-
import type { Listener, CreateListenerOptions, MultiaddrConnection, ConnectionHandler, ListenerEvents, Upgrader } from '@libp2p/interfaces/transport'
9+
import type { MultiaddrConnection, Connection } from '@libp2p/interface-connection'
10+
import type { Listener, CreateListenerOptions, ConnectionHandler, ListenerEvents, Upgrader } from '@libp2p/interface-transport'
1111
import { ipPortToMultiaddr } from '@libp2p/utils/ip-port-to-multiaddr'
1212
import { toMultiaddrConnection } from './socket-to-conn.js'
1313
import { Signal, WebRTCReceiver, WebRTCReceiverInit, WRTC } from '@libp2p/webrtc-peer'

src/socket-to-conn.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { abortableSource } from 'abortable-iterator'
22
import { CLOSE_TIMEOUT } from './constants.js'
33
import { logger } from '@libp2p/logger'
4-
import type { MultiaddrConnection } from '@libp2p/interfaces/transport'
4+
import type { MultiaddrConnection } from '@libp2p/interface-connection'
55
import type { WebRTCPeer } from '@libp2p/webrtc-peer'
66
import type { AbortOptions } from '@libp2p/interfaces'
77
import type { Multiaddr } from '@multiformats/multiaddr'

test/compliance.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/* eslint-env mocha */
22

3-
import tests from '@libp2p/interface-compliance-tests/transport'
4-
import { Multiaddr } from '@multiformats/multiaddr'
3+
import tests from '@libp2p/interface-transport-compliance-tests'
4+
import { multiaddr } from '@multiformats/multiaddr'
55
import type { WebRTCDirect } from '../src/index.js'
66

77
export default (create: () => Promise<WebRTCDirect>) => {
@@ -13,10 +13,10 @@ export default (create: () => Promise<WebRTCDirect>) => {
1313
const ws = await create()
1414

1515
const addrs = [
16-
new Multiaddr('/ip4/127.0.0.1/tcp/22222/http/p2p-webrtc-direct'),
17-
new Multiaddr('/ip4/127.0.0.1/tcp/33333/http/p2p-webrtc-direct'),
18-
new Multiaddr('/ip4/127.0.0.1/tcp/44444/http/p2p-webrtc-direct'),
19-
new Multiaddr('/ip4/127.0.0.1/tcp/55555/http/p2p-webrtc-direct')
16+
multiaddr('/ip4/127.0.0.1/tcp/22222/http/p2p-webrtc-direct'),
17+
multiaddr('/ip4/127.0.0.1/tcp/33333/http/p2p-webrtc-direct'),
18+
multiaddr('/ip4/127.0.0.1/tcp/44444/http/p2p-webrtc-direct'),
19+
multiaddr('/ip4/127.0.0.1/tcp/55555/http/p2p-webrtc-direct')
2020
]
2121

2222
// Used by the dial tests to simulate a delayed connect

test/dial.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
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 { pipe } from 'it-pipe'
66
import all from 'it-all'
77
import { fromString } from 'uint8arrays/from-string'
8-
import { mockRegistrar, mockUpgrader } from '@libp2p/interface-compliance-tests/mocks'
8+
import { mockRegistrar, mockUpgrader } from '@libp2p/interface-mocks'
99
import type { WebRTCDirect } from '../src/index.js'
10-
import type { Upgrader } from '@libp2p/interfaces/transport'
10+
import type { Upgrader } from '@libp2p/interface-transport'
1111

1212
// this node is started in aegir.cjs before the test run
13-
const REMOTE_MULTIADDR_IP4 = new Multiaddr('/ip4/127.0.0.1/tcp/12345/http/p2p-webrtc-direct')
14-
const REMOTE_MULTIADDR_IP6 = new Multiaddr('/ip6/::1/tcp/12346/http/p2p-webrtc-direct')
13+
const REMOTE_MULTIADDR_IP4 = multiaddr('/ip4/127.0.0.1/tcp/12345/http/p2p-webrtc-direct')
14+
const REMOTE_MULTIADDR_IP6 = multiaddr('/ip6/::1/tcp/12346/http/p2p-webrtc-direct')
1515

1616
const ECHO_PROTOCOL = '/echo/1.0.0'
1717

@@ -83,7 +83,7 @@ export default (create: () => Promise<WebRTCDirect>) => {
8383

8484
it('dial offline / non-existent node on IPv4, check callback', async () => {
8585
const wd = await create()
86-
const maOffline = new Multiaddr('/ip4/127.0.0.1/tcp/55555/http/p2p-webrtc-direct')
86+
const maOffline = multiaddr('/ip4/127.0.0.1/tcp/55555/http/p2p-webrtc-direct')
8787

8888
await expect(wd.dial(maOffline, { upgrader })).to.eventually.be.rejected()
8989
})

test/filter.spec.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
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 { WebRTCDirect } from '../src/index.js'
66

77
describe('filter', () => {
88
it('filters non valid webrtc-direct multiaddrs', () => {
99
const wd = new WebRTCDirect()
1010
const maArr = [
11-
new Multiaddr('/ip4/1.2.3.4/tcp/3456/http/p2p-webrtc-direct'),
12-
new Multiaddr('/ip4/127.0.0.1/tcp/9090/ws'),
13-
new Multiaddr('/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-direct/ipfs/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSoooo2'),
14-
new Multiaddr('/ip4/127.0.0.1/tcp/9090/ipfs/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSoooo4'),
15-
new Multiaddr('/ip4/127.0.0.1/tcp/9090/ipfs/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSoooo4' +
11+
multiaddr('/ip4/1.2.3.4/tcp/3456/http/p2p-webrtc-direct'),
12+
multiaddr('/ip4/127.0.0.1/tcp/9090/ws'),
13+
multiaddr('/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-direct/ipfs/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSoooo2'),
14+
multiaddr('/ip4/127.0.0.1/tcp/9090/ipfs/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSoooo4'),
15+
multiaddr('/ip4/127.0.0.1/tcp/9090/ipfs/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSoooo4' +
1616
'/p2p-circuit/ipfs/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSoooo5')
1717
]
1818

@@ -22,7 +22,7 @@ describe('filter', () => {
2222

2323
it('filter a single addr for this transport', () => {
2424
const wd = new WebRTCDirect()
25-
const ma = new Multiaddr('/ip4/127.0.0.1/tcp/9090/http/p2p-webrtc-direct')
25+
const ma = multiaddr('/ip4/127.0.0.1/tcp/9090/http/p2p-webrtc-direct')
2626

2727
const filtered = wd.filter([ma])
2828
expect(filtered.length).to.equal(1)

test/listen.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
/* eslint-env mocha */
22

33
import { expect } from 'aegir/chai'
4-
import { Multiaddr } from '@multiformats/multiaddr'
5-
import { mockRegistrar, mockUpgrader } from '@libp2p/interface-compliance-tests/mocks'
4+
import { multiaddr } from '@multiformats/multiaddr'
5+
import { mockRegistrar, mockUpgrader } from '@libp2p/interface-mocks'
66
import { isBrowser } from 'wherearewe'
77
import type { WebRTCDirect } from '../src/index.js'
88
import { pipe } from 'it-pipe'
@@ -20,7 +20,7 @@ export default (create: () => Promise<WebRTCDirect>) => {
2020

2121
let wd: WebRTCDirect
2222

23-
const ma = new Multiaddr('/ip4/127.0.0.1/tcp/20123/http/p2p-webrtc-direct')
23+
const ma = multiaddr('/ip4/127.0.0.1/tcp/20123/http/p2p-webrtc-direct')
2424

2525
before(async () => {
2626
wd = await create()
@@ -67,7 +67,7 @@ export default (create: () => Promise<WebRTCDirect>) => {
6767
upgrader: mockUpgrader()
6868
})
6969

70-
await listener.listen(new Multiaddr('/ip4/0.0.0.0/tcp/48322'))
70+
await listener.listen(multiaddr('/ip4/0.0.0.0/tcp/48322'))
7171
await listener.close()
7272
})
7373

@@ -76,7 +76,7 @@ export default (create: () => Promise<WebRTCDirect>) => {
7676
upgrader: mockUpgrader()
7777
})
7878

79-
await listener.listen(new Multiaddr('/ip4/127.0.0.1/tcp/0'))
79+
await listener.listen(multiaddr('/ip4/127.0.0.1/tcp/0'))
8080
await listener.close()
8181
})
8282

@@ -85,7 +85,7 @@ export default (create: () => Promise<WebRTCDirect>) => {
8585
upgrader: mockUpgrader()
8686
})
8787

88-
await listener.listen(new Multiaddr('/ip6/::1/tcp/48322'))
88+
await listener.listen(multiaddr('/ip6/::1/tcp/48322'))
8989
await listener.close()
9090
})
9191

@@ -103,7 +103,7 @@ export default (create: () => Promise<WebRTCDirect>) => {
103103
})
104104

105105
it('should untrack conn after being closed', async function () {
106-
const ma1 = new Multiaddr('/ip4/127.0.0.1/tcp/12346/http/p2p-webrtc-direct')
106+
const ma1 = multiaddr('/ip4/127.0.0.1/tcp/12346/http/p2p-webrtc-direct')
107107
const registrar = mockRegistrar()
108108
void registrar.handle(ECHO_PROTOCOL, ({ stream }) => {
109109
void pipe(
@@ -151,7 +151,7 @@ export default (create: () => Promise<WebRTCDirect>) => {
151151
})
152152

153153
it('should have remoteAddress in listener connection', async function () {
154-
const ma1 = new Multiaddr('/ip4/127.0.0.1/tcp/12346/http/p2p-webrtc-direct')
154+
const ma1 = multiaddr('/ip4/127.0.0.1/tcp/12346/http/p2p-webrtc-direct')
155155
const registrar = mockRegistrar()
156156
void registrar.handle(ECHO_PROTOCOL, ({ stream }) => {
157157
void pipe(

0 commit comments

Comments
 (0)