@libp2p/webrtc 2.0.0 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.min.js +20 -21
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/pb/message.d.ts +20 -0
- package/dist/src/pb/message.d.ts.map +1 -0
- package/dist/src/pb/message.js +73 -0
- package/dist/src/pb/message.js.map +1 -0
- package/dist/src/private-to-private/handler.d.ts.map +1 -0
- package/dist/src/{peer_transport → private-to-private}/handler.js +9 -9
- package/dist/src/private-to-private/handler.js.map +1 -0
- package/dist/src/{peer_transport → private-to-private}/listener.d.ts +4 -5
- package/dist/src/private-to-private/listener.d.ts.map +1 -0
- package/dist/src/private-to-private/listener.js +29 -0
- package/dist/src/private-to-private/listener.js.map +1 -0
- package/dist/src/{peer_transport/pb/index.d.ts → private-to-private/pb/message.d.ts} +2 -2
- package/dist/src/private-to-private/pb/message.d.ts.map +1 -0
- package/dist/src/{peer_transport/pb/index.js → private-to-private/pb/message.js} +1 -1
- package/dist/src/private-to-private/pb/message.js.map +1 -0
- package/dist/src/{peer_transport → private-to-private}/transport.d.ts +0 -3
- package/dist/src/private-to-private/transport.d.ts.map +1 -0
- package/dist/src/private-to-private/transport.js.map +1 -0
- package/dist/src/{peer_transport → private-to-private}/util.d.ts +3 -4
- package/dist/src/private-to-private/util.d.ts.map +1 -0
- package/dist/src/{peer_transport → private-to-private}/util.js +3 -5
- package/dist/src/private-to-private/util.js.map +1 -0
- package/dist/src/private-to-public/options.d.ts.map +1 -0
- package/dist/src/private-to-public/options.js.map +1 -0
- package/dist/src/private-to-public/sdp.d.ts.map +1 -0
- package/dist/src/{sdp.js → private-to-public/sdp.js} +1 -1
- package/dist/src/private-to-public/sdp.js.map +1 -0
- package/dist/src/private-to-public/transport.d.ts.map +1 -0
- package/dist/src/{transport.js → private-to-public/transport.js} +5 -5
- package/dist/src/private-to-public/transport.js.map +1 -0
- package/dist/src/private-to-public/util.d.ts +2 -0
- package/dist/src/private-to-public/util.d.ts.map +1 -0
- package/dist/src/private-to-public/util.js +3 -0
- package/dist/src/private-to-public/util.js.map +1 -0
- package/dist/src/stream.d.ts +2 -2
- package/dist/src/stream.d.ts.map +1 -1
- package/dist/src/stream.js +16 -16
- package/dist/src/stream.js.map +1 -1
- package/dist/src/util.d.ts +1 -1
- package/dist/src/util.d.ts.map +1 -1
- package/dist/src/util.js +3 -2
- package/dist/src/util.js.map +1 -1
- package/package.json +4 -7
- package/src/index.ts +3 -3
- package/src/{message.proto → pb/message.proto} +2 -4
- package/src/pb/message.ts +92 -0
- package/src/{peer_transport → private-to-private}/handler.ts +9 -9
- package/src/{peer_transport → private-to-private}/listener.ts +10 -22
- package/src/{peer_transport/pb/index.ts → private-to-private/pb/message.ts} +1 -1
- package/src/{peer_transport → private-to-private}/transport.ts +0 -3
- package/src/{peer_transport → private-to-private}/util.ts +5 -8
- package/src/{sdp.ts → private-to-public/sdp.ts} +1 -1
- package/src/{transport.ts → private-to-public/transport.ts} +5 -5
- package/src/private-to-public/util.ts +3 -0
- package/src/stream.ts +18 -18
- package/src/util.ts +5 -3
- package/dist/proto_ts/message.d.ts +0 -56
- package/dist/proto_ts/message.d.ts.map +0 -1
- package/dist/proto_ts/message.js +0 -86
- package/dist/proto_ts/message.js.map +0 -1
- package/dist/src/options.d.ts.map +0 -1
- package/dist/src/options.js.map +0 -1
- package/dist/src/peer_transport/handler.d.ts.map +0 -1
- package/dist/src/peer_transport/handler.js.map +0 -1
- package/dist/src/peer_transport/listener.d.ts.map +0 -1
- package/dist/src/peer_transport/listener.js +0 -35
- package/dist/src/peer_transport/listener.js.map +0 -1
- package/dist/src/peer_transport/pb/index.d.ts.map +0 -1
- package/dist/src/peer_transport/pb/index.js.map +0 -1
- package/dist/src/peer_transport/transport.d.ts.map +0 -1
- package/dist/src/peer_transport/transport.js.map +0 -1
- package/dist/src/peer_transport/util.d.ts.map +0 -1
- package/dist/src/peer_transport/util.js.map +0 -1
- package/dist/src/sdp.d.ts.map +0 -1
- package/dist/src/sdp.js.map +0 -1
- package/dist/src/transport.d.ts.map +0 -1
- package/dist/src/transport.js.map +0 -1
- package/proto_ts/message.ts +0 -106
- /package/dist/src/{peer_transport → private-to-private}/handler.d.ts +0 -0
- /package/dist/src/{peer_transport → private-to-private}/transport.js +0 -0
- /package/dist/src/{options.d.ts → private-to-public/options.d.ts} +0 -0
- /package/dist/src/{options.js → private-to-public/options.js} +0 -0
- /package/dist/src/{sdp.d.ts → private-to-public/sdp.d.ts} +0 -0
- /package/dist/src/{transport.d.ts → private-to-public/transport.d.ts} +0 -0
- /package/src/{peer_transport/pb/index.proto → private-to-private/pb/message.proto} +0 -0
- /package/src/{options.ts → private-to-public/options.ts} +0 -0
package/dist/src/stream.js
CHANGED
|
@@ -5,7 +5,7 @@ import { pipe } from 'it-pipe';
|
|
|
5
5
|
import { pushable } from 'it-pushable';
|
|
6
6
|
import defer from 'p-defer';
|
|
7
7
|
import { Uint8ArrayList } from 'uint8arraylist';
|
|
8
|
-
import
|
|
8
|
+
import { Message } from './pb/message.js';
|
|
9
9
|
const log = logger('libp2p:webrtc:stream');
|
|
10
10
|
/**
|
|
11
11
|
* Constructs a default StreamStat
|
|
@@ -44,7 +44,7 @@ class StreamState {
|
|
|
44
44
|
}
|
|
45
45
|
if (direction === 'inbound') {
|
|
46
46
|
switch (flag) {
|
|
47
|
-
case
|
|
47
|
+
case Message.Flag.FIN:
|
|
48
48
|
if (this.state === StreamStates.OPEN) {
|
|
49
49
|
this.state = StreamStates.READ_CLOSED;
|
|
50
50
|
}
|
|
@@ -52,7 +52,7 @@ class StreamState {
|
|
|
52
52
|
this.state = StreamStates.CLOSED;
|
|
53
53
|
}
|
|
54
54
|
break;
|
|
55
|
-
case
|
|
55
|
+
case Message.Flag.STOP_SENDING:
|
|
56
56
|
if (this.state === StreamStates.OPEN) {
|
|
57
57
|
this.state = StreamStates.WRITE_CLOSED;
|
|
58
58
|
}
|
|
@@ -60,7 +60,7 @@ class StreamState {
|
|
|
60
60
|
this.state = StreamStates.CLOSED;
|
|
61
61
|
}
|
|
62
62
|
break;
|
|
63
|
-
case
|
|
63
|
+
case Message.Flag.RESET:
|
|
64
64
|
this.state = StreamStates.CLOSED;
|
|
65
65
|
break;
|
|
66
66
|
default:
|
|
@@ -69,7 +69,7 @@ class StreamState {
|
|
|
69
69
|
}
|
|
70
70
|
else {
|
|
71
71
|
switch (flag) {
|
|
72
|
-
case
|
|
72
|
+
case Message.Flag.FIN:
|
|
73
73
|
if (this.state === StreamStates.OPEN) {
|
|
74
74
|
this.state = StreamStates.WRITE_CLOSED;
|
|
75
75
|
}
|
|
@@ -77,7 +77,7 @@ class StreamState {
|
|
|
77
77
|
this.state = StreamStates.CLOSED;
|
|
78
78
|
}
|
|
79
79
|
break;
|
|
80
|
-
case
|
|
80
|
+
case Message.Flag.STOP_SENDING:
|
|
81
81
|
if (this.state === StreamStates.OPEN) {
|
|
82
82
|
this.state = StreamStates.READ_CLOSED;
|
|
83
83
|
}
|
|
@@ -85,7 +85,7 @@ class StreamState {
|
|
|
85
85
|
this.state = StreamStates.CLOSED;
|
|
86
86
|
}
|
|
87
87
|
break;
|
|
88
|
-
case
|
|
88
|
+
case Message.Flag.RESET:
|
|
89
89
|
this.state = StreamStates.CLOSED;
|
|
90
90
|
break;
|
|
91
91
|
default:
|
|
@@ -229,7 +229,7 @@ export class WebRTCStream {
|
|
|
229
229
|
if (this.streamState.isWriteClosed()) {
|
|
230
230
|
return;
|
|
231
231
|
}
|
|
232
|
-
const msgbuf =
|
|
232
|
+
const msgbuf = Message.encode({ message: buf.subarray() });
|
|
233
233
|
const sendbuf = lengthPrefixed.encode.single(msgbuf);
|
|
234
234
|
this.channel.send(sendbuf.subarray());
|
|
235
235
|
}
|
|
@@ -238,7 +238,7 @@ export class WebRTCStream {
|
|
|
238
238
|
* Handle incoming
|
|
239
239
|
*/
|
|
240
240
|
processIncomingProtobuf(buffer) {
|
|
241
|
-
const message =
|
|
241
|
+
const message = Message.decode(buffer);
|
|
242
242
|
if (message.flag !== undefined) {
|
|
243
243
|
const [currentState, nextState] = this.streamState.transition({ direction: 'inbound', flag: message.flag });
|
|
244
244
|
if (currentState !== nextState) {
|
|
@@ -279,13 +279,13 @@ export class WebRTCStream {
|
|
|
279
279
|
* Close a stream for reading only
|
|
280
280
|
*/
|
|
281
281
|
closeRead() {
|
|
282
|
-
const [currentState, nextState] = this.streamState.transition({ direction: 'outbound', flag:
|
|
282
|
+
const [currentState, nextState] = this.streamState.transition({ direction: 'outbound', flag: Message.Flag.STOP_SENDING });
|
|
283
283
|
if (currentState === nextState) {
|
|
284
284
|
// No change, no op
|
|
285
285
|
return;
|
|
286
286
|
}
|
|
287
287
|
if (currentState === StreamStates.OPEN || currentState === StreamStates.WRITE_CLOSED) {
|
|
288
|
-
this._sendFlag(
|
|
288
|
+
this._sendFlag(Message.Flag.STOP_SENDING);
|
|
289
289
|
this._innersrc.end();
|
|
290
290
|
}
|
|
291
291
|
if (nextState === StreamStates.CLOSED) {
|
|
@@ -296,13 +296,13 @@ export class WebRTCStream {
|
|
|
296
296
|
* Close a stream for writing only
|
|
297
297
|
*/
|
|
298
298
|
closeWrite() {
|
|
299
|
-
const [currentState, nextState] = this.streamState.transition({ direction: 'outbound', flag:
|
|
299
|
+
const [currentState, nextState] = this.streamState.transition({ direction: 'outbound', flag: Message.Flag.FIN });
|
|
300
300
|
if (currentState === nextState) {
|
|
301
301
|
// No change, no op
|
|
302
302
|
return;
|
|
303
303
|
}
|
|
304
304
|
if (currentState === StreamStates.OPEN || currentState === StreamStates.READ_CLOSED) {
|
|
305
|
-
this._sendFlag(
|
|
305
|
+
this._sendFlag(Message.Flag.FIN);
|
|
306
306
|
this.closeWritePromise.resolve();
|
|
307
307
|
}
|
|
308
308
|
if (nextState === StreamStates.CLOSED) {
|
|
@@ -322,18 +322,18 @@ export class WebRTCStream {
|
|
|
322
322
|
* @see this.closeWrite
|
|
323
323
|
*/
|
|
324
324
|
reset() {
|
|
325
|
-
const [currentState, nextState] = this.streamState.transition({ direction: 'outbound', flag:
|
|
325
|
+
const [currentState, nextState] = this.streamState.transition({ direction: 'outbound', flag: Message.Flag.RESET });
|
|
326
326
|
if (currentState === nextState) {
|
|
327
327
|
// No change, no op
|
|
328
328
|
return;
|
|
329
329
|
}
|
|
330
|
-
this._sendFlag(
|
|
330
|
+
this._sendFlag(Message.Flag.RESET);
|
|
331
331
|
this.close();
|
|
332
332
|
}
|
|
333
333
|
_sendFlag(flag) {
|
|
334
334
|
try {
|
|
335
335
|
log.trace('Sending flag: %s', flag.toString());
|
|
336
|
-
const msgbuf =
|
|
336
|
+
const msgbuf = Message.encode({ flag });
|
|
337
337
|
this.channel.send(lengthPrefixed.encode.single(msgbuf).subarray());
|
|
338
338
|
}
|
|
339
339
|
catch (err) {
|
package/dist/src/stream.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,KAAK,cAAc,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,MAAM,UAAU,CAAA;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,KAA+B,MAAM,SAAS,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,
|
|
1
|
+
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":"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"}
|
package/dist/src/util.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
+
export declare const isFirefox: boolean;
|
|
1
2
|
export declare const nopSource: () => AsyncGenerator<Uint8Array, any, unknown>;
|
|
2
3
|
export declare const nopSink: (_: any) => Promise<void>;
|
|
3
|
-
export declare const genUfrag: (len: number) => string;
|
|
4
4
|
//# sourceMappingURL=util.d.ts.map
|
package/dist/src/util.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,SAAS,SAAoD,CAAA;AAE1E,eAAO,MAAM,SAAS,QAA4B,eAAe,UAAU,EAAE,GAAG,EAAE,OAAO,CAAI,CAAA;AAE7F,eAAO,MAAM,OAAO,MAAa,GAAG,KAAG,QAAQ,IAAI,CAAO,CAAA"}
|
package/dist/src/util.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { detect } from 'detect-browser';
|
|
2
|
+
const browser = detect();
|
|
3
|
+
export const isFirefox = ((browser != null) && browser.name === 'firefox');
|
|
1
4
|
export const nopSource = async function* nop() { };
|
|
2
5
|
export const nopSink = async (_) => { };
|
|
3
|
-
const charset = Array.from('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/');
|
|
4
|
-
export const genUfrag = (len) => [...Array(len)].map(() => charset.at(Math.floor(Math.random() * charset.length))).join('');
|
|
5
6
|
//# sourceMappingURL=util.js.map
|
package/dist/src/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAEvC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAA;AACxB,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAA;AAE1E,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,SAAU,CAAC,CAAC,GAAG,KAA+C,CAAC,CAAA;AAE7F,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,EAAE,CAAM,EAAiB,EAAE,GAAE,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@libp2p/webrtc",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.2",
|
|
4
4
|
"description": "A libp2p transport using WebRTC connections",
|
|
5
5
|
"author": "",
|
|
6
6
|
"license": "Apache-2.0 OR MIT",
|
|
@@ -123,8 +123,7 @@
|
|
|
123
123
|
]
|
|
124
124
|
},
|
|
125
125
|
"scripts": {
|
|
126
|
-
"generate
|
|
127
|
-
"generate:webrtc-direct": "protons src/peer_transport/pb/index.proto",
|
|
126
|
+
"generate": "protons src/private-to-private/pb/message.proto src/pb/message.proto",
|
|
128
127
|
"build": "aegir build",
|
|
129
128
|
"test": "aegir test -t browser",
|
|
130
129
|
"test:chrome": "aegir test -t browser --cov",
|
|
@@ -138,17 +137,16 @@
|
|
|
138
137
|
"dependencies": {
|
|
139
138
|
"@chainsafe/libp2p-noise": "^12.0.0",
|
|
140
139
|
"@libp2p/interface-connection": "^5.0.2",
|
|
141
|
-
"@libp2p/interface-libp2p": "^3.1.0",
|
|
142
140
|
"@libp2p/interface-metrics": "^4.0.8",
|
|
143
141
|
"@libp2p/interface-peer-id": "^2.0.2",
|
|
144
142
|
"@libp2p/interface-registrar": "^2.0.12",
|
|
145
143
|
"@libp2p/interface-stream-muxer": "^4.0.1",
|
|
146
|
-
"@libp2p/interface-transport": "^4.0.
|
|
144
|
+
"@libp2p/interface-transport": "^4.0.3",
|
|
147
145
|
"@libp2p/interfaces": "^3.3.2",
|
|
148
146
|
"@libp2p/logger": "^2.0.7",
|
|
149
147
|
"@libp2p/peer-id": "^2.0.3",
|
|
148
|
+
"@multiformats/mafmt": "^12.1.2",
|
|
150
149
|
"@multiformats/multiaddr": "^12.1.2",
|
|
151
|
-
"@protobuf-ts/runtime": "^2.9.0",
|
|
152
150
|
"abortable-iterator": "^5.0.1",
|
|
153
151
|
"detect-browser": "^5.3.0",
|
|
154
152
|
"it-length-prefixed": "^9.0.1",
|
|
@@ -167,7 +165,6 @@
|
|
|
167
165
|
"devDependencies": {
|
|
168
166
|
"@libp2p/interface-mocks": "^12.0.1",
|
|
169
167
|
"@libp2p/peer-id-factory": "^2.0.3",
|
|
170
|
-
"@protobuf-ts/protoc": "^2.9.0",
|
|
171
168
|
"@types/sinon": "^10.0.14",
|
|
172
169
|
"aegir": "^39.0.6",
|
|
173
170
|
"it-pair": "^2.0.6",
|
package/src/index.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { WebRTCTransport } from './
|
|
2
|
-
import { WebRTCDirectTransport, type WebRTCDirectTransportComponents } from './transport.js'
|
|
3
|
-
import type { WebRTCTransportComponents, WebRTCTransportInit } from './
|
|
1
|
+
import { WebRTCTransport } from './private-to-private/transport.js'
|
|
2
|
+
import { WebRTCDirectTransport, type WebRTCDirectTransportComponents } from './private-to-public/transport.js'
|
|
3
|
+
import type { WebRTCTransportComponents, WebRTCTransportInit } from './private-to-private/transport.js'
|
|
4
4
|
import type { Transport } from '@libp2p/interface-transport'
|
|
5
5
|
|
|
6
6
|
function webRTCDirect (): (components: WebRTCDirectTransportComponents) => Transport {
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
syntax = "
|
|
2
|
-
|
|
3
|
-
package webrtc.pb;
|
|
1
|
+
syntax = "proto3";
|
|
4
2
|
|
|
5
3
|
message Message {
|
|
6
4
|
enum Flag {
|
|
@@ -10,7 +8,7 @@ message Message {
|
|
|
10
8
|
// The sender will no longer read messages on the stream. Incoming data is
|
|
11
9
|
// being discarded on receipt.
|
|
12
10
|
STOP_SENDING = 1;
|
|
13
|
-
|
|
11
|
+
|
|
14
12
|
// The sender abruptly terminates the sending part of the stream. The
|
|
15
13
|
// receiver can discard any data that it already received on that stream.
|
|
16
14
|
RESET = 2;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/* eslint-disable import/export */
|
|
2
|
+
/* eslint-disable complexity */
|
|
3
|
+
/* eslint-disable @typescript-eslint/no-namespace */
|
|
4
|
+
/* eslint-disable @typescript-eslint/no-unnecessary-boolean-literal-compare */
|
|
5
|
+
/* eslint-disable @typescript-eslint/no-empty-interface */
|
|
6
|
+
|
|
7
|
+
import { enumeration, encodeMessage, decodeMessage, message } from 'protons-runtime'
|
|
8
|
+
import type { Codec } from 'protons-runtime'
|
|
9
|
+
import type { Uint8ArrayList } from 'uint8arraylist'
|
|
10
|
+
|
|
11
|
+
export interface Message {
|
|
12
|
+
flag?: Message.Flag
|
|
13
|
+
message?: Uint8Array
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export namespace Message {
|
|
17
|
+
export enum Flag {
|
|
18
|
+
FIN = 'FIN',
|
|
19
|
+
STOP_SENDING = 'STOP_SENDING',
|
|
20
|
+
RESET = 'RESET'
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
enum __FlagValues {
|
|
24
|
+
FIN = 0,
|
|
25
|
+
STOP_SENDING = 1,
|
|
26
|
+
RESET = 2
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export namespace Flag {
|
|
30
|
+
export const codec = (): Codec<Flag> => {
|
|
31
|
+
return enumeration<Flag>(__FlagValues)
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
let _codec: Codec<Message>
|
|
36
|
+
|
|
37
|
+
export const codec = (): Codec<Message> => {
|
|
38
|
+
if (_codec == null) {
|
|
39
|
+
_codec = message<Message>((obj, w, opts = {}) => {
|
|
40
|
+
if (opts.lengthDelimited !== false) {
|
|
41
|
+
w.fork()
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
if (obj.flag != null) {
|
|
45
|
+
w.uint32(8)
|
|
46
|
+
Message.Flag.codec().encode(obj.flag, w)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
if (obj.message != null) {
|
|
50
|
+
w.uint32(18)
|
|
51
|
+
w.bytes(obj.message)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if (opts.lengthDelimited !== false) {
|
|
55
|
+
w.ldelim()
|
|
56
|
+
}
|
|
57
|
+
}, (reader, length) => {
|
|
58
|
+
const obj: any = {}
|
|
59
|
+
|
|
60
|
+
const end = length == null ? reader.len : reader.pos + length
|
|
61
|
+
|
|
62
|
+
while (reader.pos < end) {
|
|
63
|
+
const tag = reader.uint32()
|
|
64
|
+
|
|
65
|
+
switch (tag >>> 3) {
|
|
66
|
+
case 1:
|
|
67
|
+
obj.flag = Message.Flag.codec().decode(reader)
|
|
68
|
+
break
|
|
69
|
+
case 2:
|
|
70
|
+
obj.message = reader.bytes()
|
|
71
|
+
break
|
|
72
|
+
default:
|
|
73
|
+
reader.skipType(tag & 7)
|
|
74
|
+
break
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return obj
|
|
79
|
+
})
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return _codec
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export const encode = (obj: Partial<Message>): Uint8Array => {
|
|
86
|
+
return encodeMessage(obj, Message.codec())
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export const decode = (buf: Uint8Array | Uint8ArrayList): Message => {
|
|
90
|
+
return decodeMessage(buf, Message.codec())
|
|
91
|
+
}
|
|
92
|
+
}
|
|
@@ -3,7 +3,7 @@ import { abortableDuplex } from 'abortable-iterator'
|
|
|
3
3
|
import { pbStream } from 'it-pb-stream'
|
|
4
4
|
import pDefer, { type DeferredPromise } from 'p-defer'
|
|
5
5
|
import { DataChannelMuxerFactory } from '../muxer.js'
|
|
6
|
-
import
|
|
6
|
+
import { Message } from './pb/message.js'
|
|
7
7
|
import { readCandidatesUntilConnected, resolveOnConnected } from './util.js'
|
|
8
8
|
import type { Stream } from '@libp2p/interface-connection'
|
|
9
9
|
import type { IncomingStreamData } from '@libp2p/interface-registrar'
|
|
@@ -17,7 +17,7 @@ export type IncomingStreamOpts = { rtcConfiguration?: RTCConfiguration } & Incom
|
|
|
17
17
|
|
|
18
18
|
export async function handleIncomingStream ({ rtcConfiguration, stream: rawStream }: IncomingStreamOpts): Promise<{ pc: RTCPeerConnection, muxerFactory: StreamMuxerFactory, remoteAddress: string }> {
|
|
19
19
|
const signal = AbortSignal.timeout(DEFAULT_TIMEOUT)
|
|
20
|
-
const stream = pbStream(abortableDuplex(rawStream, signal)).pb(
|
|
20
|
+
const stream = pbStream(abortableDuplex(rawStream, signal)).pb(Message)
|
|
21
21
|
const pc = new RTCPeerConnection(rtcConfiguration)
|
|
22
22
|
const muxerFactory = new DataChannelMuxerFactory(pc)
|
|
23
23
|
|
|
@@ -30,7 +30,7 @@ export async function handleIncomingStream ({ rtcConfiguration, stream: rawStrea
|
|
|
30
30
|
answerSentPromise.promise.then(
|
|
31
31
|
() => {
|
|
32
32
|
stream.write({
|
|
33
|
-
type:
|
|
33
|
+
type: Message.Type.ICE_CANDIDATE,
|
|
34
34
|
data: (candidate != null) ? JSON.stringify(candidate.toJSON()) : ''
|
|
35
35
|
})
|
|
36
36
|
},
|
|
@@ -44,7 +44,7 @@ export async function handleIncomingStream ({ rtcConfiguration, stream: rawStrea
|
|
|
44
44
|
|
|
45
45
|
// read an SDP offer
|
|
46
46
|
const pbOffer = await stream.read()
|
|
47
|
-
if (pbOffer.type !==
|
|
47
|
+
if (pbOffer.type !== Message.Type.SDP_OFFER) {
|
|
48
48
|
throw new Error(`expected message type SDP_OFFER, received: ${pbOffer.type ?? 'undefined'} `)
|
|
49
49
|
}
|
|
50
50
|
const offer = new RTCSessionDescription({
|
|
@@ -64,7 +64,7 @@ export async function handleIncomingStream ({ rtcConfiguration, stream: rawStrea
|
|
|
64
64
|
throw new Error('Failed to create answer')
|
|
65
65
|
})
|
|
66
66
|
// write the answer to the remote
|
|
67
|
-
stream.write({ type:
|
|
67
|
+
stream.write({ type: Message.Type.SDP_ANSWER, data: answer.sdp })
|
|
68
68
|
|
|
69
69
|
await pc.setLocalDescription(answer).catch(err => {
|
|
70
70
|
log.error('could not execute setLocalDescription', err)
|
|
@@ -89,7 +89,7 @@ export interface ConnectOptions {
|
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
export async function initiateConnection ({ rtcConfiguration, signal, stream: rawStream }: ConnectOptions): Promise<{ pc: RTCPeerConnection, muxerFactory: StreamMuxerFactory, remoteAddress: string }> {
|
|
92
|
-
const stream = pbStream(abortableDuplex(rawStream, signal)).pb(
|
|
92
|
+
const stream = pbStream(abortableDuplex(rawStream, signal)).pb(Message)
|
|
93
93
|
// setup peer connection
|
|
94
94
|
const pc = new RTCPeerConnection(rtcConfiguration)
|
|
95
95
|
const muxerFactory = new DataChannelMuxerFactory(pc)
|
|
@@ -107,14 +107,14 @@ export async function initiateConnection ({ rtcConfiguration, signal, stream: ra
|
|
|
107
107
|
// peer
|
|
108
108
|
pc.onicecandidate = ({ candidate }) => {
|
|
109
109
|
stream.write({
|
|
110
|
-
type:
|
|
110
|
+
type: Message.Type.ICE_CANDIDATE,
|
|
111
111
|
data: (candidate != null) ? JSON.stringify(candidate.toJSON()) : ''
|
|
112
112
|
})
|
|
113
113
|
}
|
|
114
114
|
// create an offer
|
|
115
115
|
const offerSdp = await pc.createOffer()
|
|
116
116
|
// write the offer to the stream
|
|
117
|
-
stream.write({ type:
|
|
117
|
+
stream.write({ type: Message.Type.SDP_OFFER, data: offerSdp.sdp })
|
|
118
118
|
// set offer as local description
|
|
119
119
|
await pc.setLocalDescription(offerSdp).catch(err => {
|
|
120
120
|
log.error('could not execute setLocalDescription', err)
|
|
@@ -123,7 +123,7 @@ export async function initiateConnection ({ rtcConfiguration, signal, stream: ra
|
|
|
123
123
|
|
|
124
124
|
// read answer
|
|
125
125
|
const answerMessage = await stream.read()
|
|
126
|
-
if (answerMessage.type !==
|
|
126
|
+
if (answerMessage.type !== Message.Type.SDP_ANSWER) {
|
|
127
127
|
throw new Error('remote should send an SDP answer')
|
|
128
128
|
}
|
|
129
129
|
|
|
@@ -1,47 +1,35 @@
|
|
|
1
1
|
import { EventEmitter } from '@libp2p/interfaces/events'
|
|
2
|
-
import
|
|
2
|
+
import { Circuit } from '@multiformats/mafmt'
|
|
3
3
|
import type { PeerId } from '@libp2p/interface-peer-id'
|
|
4
|
-
import type { ListenerEvents, Listener } from '@libp2p/interface-transport'
|
|
4
|
+
import type { ListenerEvents, Listener, TransportManager } from '@libp2p/interface-transport'
|
|
5
5
|
import type { Multiaddr } from '@multiformats/multiaddr'
|
|
6
6
|
|
|
7
7
|
export interface ListenerOptions {
|
|
8
8
|
peerId: PeerId
|
|
9
|
-
|
|
9
|
+
transportManager: TransportManager
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
export class WebRTCPeerListener extends EventEmitter<ListenerEvents> implements Listener {
|
|
13
13
|
private readonly peerId: PeerId
|
|
14
|
-
private
|
|
14
|
+
private readonly transportManager: TransportManager
|
|
15
15
|
|
|
16
16
|
constructor (opts: ListenerOptions) {
|
|
17
17
|
super()
|
|
18
18
|
|
|
19
19
|
this.peerId = opts.peerId
|
|
20
|
-
|
|
21
|
-
opts.events.addEventListener('transport:listening', (event) => {
|
|
22
|
-
const listener = event.detail
|
|
23
|
-
|
|
24
|
-
if (listener === this || this.listeners.includes(listener)) {
|
|
25
|
-
return
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
this.listeners.push(listener)
|
|
29
|
-
})
|
|
30
|
-
|
|
31
|
-
opts.events.addEventListener('transport:close', (event) => {
|
|
32
|
-
const listener = event.detail
|
|
33
|
-
|
|
34
|
-
this.listeners = this.listeners.filter(l => l !== listener)
|
|
35
|
-
})
|
|
20
|
+
this.transportManager = opts.transportManager
|
|
36
21
|
}
|
|
37
22
|
|
|
38
|
-
async listen (
|
|
23
|
+
async listen (): Promise<void> {
|
|
39
24
|
this.safeDispatchEvent('listening', {})
|
|
40
25
|
}
|
|
41
26
|
|
|
42
27
|
getAddrs (): Multiaddr[] {
|
|
43
|
-
return this.
|
|
28
|
+
return this.transportManager
|
|
29
|
+
.getListeners()
|
|
30
|
+
.filter(l => l !== this)
|
|
44
31
|
.map(l => l.getAddrs()
|
|
32
|
+
.filter(ma => Circuit.matches(ma))
|
|
45
33
|
.map(ma => {
|
|
46
34
|
return ma.encapsulate(`/webrtc/p2p/${this.peerId}`)
|
|
47
35
|
})
|
|
@@ -8,10 +8,8 @@ import { WebRTCMultiaddrConnection } from '../maconn.js'
|
|
|
8
8
|
import { initiateConnection, handleIncomingStream } from './handler.js'
|
|
9
9
|
import { WebRTCPeerListener } from './listener.js'
|
|
10
10
|
import type { Connection } from '@libp2p/interface-connection'
|
|
11
|
-
import type { Libp2pEvents } from '@libp2p/interface-libp2p'
|
|
12
11
|
import type { PeerId } from '@libp2p/interface-peer-id'
|
|
13
12
|
import type { IncomingStreamData, Registrar } from '@libp2p/interface-registrar'
|
|
14
|
-
import type { EventEmitter } from '@libp2p/interfaces/events'
|
|
15
13
|
import type { Startable } from '@libp2p/interfaces/startable'
|
|
16
14
|
|
|
17
15
|
const log = logger('libp2p:webrtc:peer')
|
|
@@ -30,7 +28,6 @@ export interface WebRTCTransportComponents {
|
|
|
30
28
|
registrar: Registrar
|
|
31
29
|
upgrader: Upgrader
|
|
32
30
|
transportManager: TransportManager
|
|
33
|
-
events: EventEmitter<Libp2pEvents>
|
|
34
31
|
}
|
|
35
32
|
|
|
36
33
|
export class WebRTCTransport implements Transport, Startable {
|
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
import { logger } from '@libp2p/logger'
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
2
|
+
import { isFirefox } from '../util.js'
|
|
3
|
+
import { Message } from './pb/message.js'
|
|
4
4
|
import type { DeferredPromise } from 'p-defer'
|
|
5
5
|
|
|
6
|
-
const browser = detect()
|
|
7
|
-
export const isFirefox = ((browser != null) && browser.name === 'firefox')
|
|
8
|
-
|
|
9
6
|
interface MessageStream {
|
|
10
|
-
read: () => Promise<
|
|
11
|
-
write: (d:
|
|
7
|
+
read: () => Promise<Message>
|
|
8
|
+
write: (d: Message) => void | Promise<void>
|
|
12
9
|
}
|
|
13
10
|
|
|
14
11
|
const log = logger('libp2p:webrtc:peer:util')
|
|
@@ -19,7 +16,7 @@ export const readCandidatesUntilConnected = async (connectedPromise: DeferredPro
|
|
|
19
16
|
// check if readResult is a message
|
|
20
17
|
if (readResult instanceof Object) {
|
|
21
18
|
const message = readResult
|
|
22
|
-
if (message.type !==
|
|
19
|
+
if (message.type !== Message.Type.ICE_CANDIDATE) {
|
|
23
20
|
throw new Error('expected only ice candidates')
|
|
24
21
|
}
|
|
25
22
|
// end of candidates has been signalled
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { logger } from '@libp2p/logger'
|
|
2
2
|
import { bases } from 'multiformats/basics'
|
|
3
3
|
import * as multihashes from 'multihashes'
|
|
4
|
-
import { inappropriateMultiaddr, invalidArgument, invalidFingerprint, unsupportedHashAlgorithm } from '
|
|
4
|
+
import { inappropriateMultiaddr, invalidArgument, invalidFingerprint, unsupportedHashAlgorithm } from '../error.js'
|
|
5
5
|
import { CERTHASH_CODE } from './transport.js'
|
|
6
6
|
import type { Multiaddr } from '@multiformats/multiaddr'
|
|
7
7
|
import type { HashCode, HashName } from 'multihashes'
|
|
@@ -6,12 +6,12 @@ import { protocols } from '@multiformats/multiaddr'
|
|
|
6
6
|
import * as multihashes from 'multihashes'
|
|
7
7
|
import { concat } from 'uint8arrays/concat'
|
|
8
8
|
import { fromString as uint8arrayFromString } from 'uint8arrays/from-string'
|
|
9
|
-
import { dataChannelError, inappropriateMultiaddr, unimplemented, invalidArgument } from '
|
|
10
|
-
import { WebRTCMultiaddrConnection } from '
|
|
11
|
-
import { DataChannelMuxerFactory } from '
|
|
12
|
-
import {
|
|
9
|
+
import { dataChannelError, inappropriateMultiaddr, unimplemented, invalidArgument } from '../error.js'
|
|
10
|
+
import { WebRTCMultiaddrConnection } from '../maconn.js'
|
|
11
|
+
import { DataChannelMuxerFactory } from '../muxer.js'
|
|
12
|
+
import { WebRTCStream } from '../stream.js'
|
|
13
|
+
import { isFirefox } from '../util.js'
|
|
13
14
|
import * as sdp from './sdp.js'
|
|
14
|
-
import { WebRTCStream } from './stream.js'
|
|
15
15
|
import { genUfrag } from './util.js'
|
|
16
16
|
import type { WebRTCDialOptions } from './options.js'
|
|
17
17
|
import type { Connection } from '@libp2p/interface-connection'
|