@libp2p/webrtc 3.2.1 → 3.2.2-77e3cbc3
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 +13 -13
- package/dist/src/index.d.ts +29 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/maconn.d.ts.map +1 -1
- package/dist/src/maconn.js +5 -2
- package/dist/src/maconn.js.map +1 -1
- package/dist/src/muxer.d.ts +10 -13
- package/dist/src/muxer.d.ts.map +1 -1
- package/dist/src/muxer.js +44 -29
- package/dist/src/muxer.js.map +1 -1
- package/dist/src/pb/message.d.ts +2 -1
- package/dist/src/pb/message.d.ts.map +1 -1
- package/dist/src/pb/message.js +2 -0
- package/dist/src/pb/message.js.map +1 -1
- package/dist/src/private-to-private/initiate-connection.d.ts +25 -0
- package/dist/src/private-to-private/initiate-connection.d.ts.map +1 -0
- package/dist/src/private-to-private/initiate-connection.js +145 -0
- package/dist/src/private-to-private/initiate-connection.js.map +1 -0
- package/dist/src/private-to-private/listener.d.ts +6 -2
- package/dist/src/private-to-private/listener.d.ts.map +1 -1
- package/dist/src/private-to-private/listener.js +6 -3
- package/dist/src/private-to-private/listener.js.map +1 -1
- package/dist/src/private-to-private/signaling-stream-handler.d.ts +10 -0
- package/dist/src/private-to-private/signaling-stream-handler.d.ts.map +1 -0
- package/dist/src/private-to-private/signaling-stream-handler.js +97 -0
- package/dist/src/private-to-private/signaling-stream-handler.js.map +1 -0
- package/dist/src/private-to-private/transport.d.ts +12 -2
- package/dist/src/private-to-private/transport.d.ts.map +1 -1
- package/dist/src/private-to-private/transport.js +67 -56
- package/dist/src/private-to-private/transport.js.map +1 -1
- package/dist/src/private-to-private/util.d.ts +6 -5
- package/dist/src/private-to-private/util.d.ts.map +1 -1
- package/dist/src/private-to-private/util.js +72 -21
- package/dist/src/private-to-private/util.js.map +1 -1
- package/dist/src/private-to-public/transport.d.ts +2 -2
- package/dist/src/private-to-public/transport.d.ts.map +1 -1
- package/dist/src/private-to-public/transport.js +2 -2
- package/dist/src/private-to-public/transport.js.map +1 -1
- package/dist/src/stream.d.ts +39 -19
- package/dist/src/stream.d.ts.map +1 -1
- package/dist/src/stream.js +135 -39
- package/dist/src/stream.js.map +1 -1
- package/dist/src/util.d.ts +6 -0
- package/dist/src/util.d.ts.map +1 -1
- package/dist/src/util.js +46 -0
- package/dist/src/util.js.map +1 -1
- package/package.json +17 -11
- package/src/index.ts +34 -0
- package/src/maconn.ts +7 -2
- package/src/muxer.ts +58 -44
- package/src/pb/message.proto +6 -1
- package/src/pb/message.ts +4 -2
- package/src/private-to-private/initiate-connection.ts +191 -0
- package/src/private-to-private/listener.ts +12 -4
- package/src/private-to-private/signaling-stream-handler.ts +129 -0
- package/src/private-to-private/transport.ts +87 -59
- package/src/private-to-private/util.ts +89 -24
- package/src/private-to-public/transport.ts +4 -4
- package/src/stream.ts +163 -61
- package/src/util.ts +60 -0
- package/dist/src/private-to-private/handler.d.ts +0 -26
- package/dist/src/private-to-private/handler.d.ts.map +0 -1
- package/dist/src/private-to-private/handler.js +0 -137
- package/dist/src/private-to-private/handler.js.map +0 -1
- package/dist/typedoc-urls.json +0 -6
- package/src/private-to-private/handler.ts +0 -177
package/dist/src/index.d.ts
CHANGED
|
@@ -1,6 +1,35 @@
|
|
|
1
1
|
import { type WebRTCTransportDirectInit, type WebRTCDirectTransportComponents } from './private-to-public/transport.js';
|
|
2
2
|
import type { WebRTCTransportComponents, WebRTCTransportInit } from './private-to-private/transport.js';
|
|
3
3
|
import type { Transport } from '@libp2p/interface/transport';
|
|
4
|
+
export interface DataChannelOptions {
|
|
5
|
+
/**
|
|
6
|
+
* The maximum message size sendable over the channel in bytes (default 16KB)
|
|
7
|
+
*/
|
|
8
|
+
maxMessageSize?: number;
|
|
9
|
+
/**
|
|
10
|
+
* If the channel's `bufferedAmount` grows over this amount in bytes, wait
|
|
11
|
+
* for it to drain before sending more data (default: 16MB)
|
|
12
|
+
*/
|
|
13
|
+
maxBufferedAmount?: number;
|
|
14
|
+
/**
|
|
15
|
+
* When `bufferedAmount` is above `maxBufferedAmount`, we pause sending until
|
|
16
|
+
* the `bufferedAmountLow` event fires - this controls how long we wait for
|
|
17
|
+
* that event in ms (default: 30s)
|
|
18
|
+
*/
|
|
19
|
+
bufferedAmountLowEventTimeout?: number;
|
|
20
|
+
/**
|
|
21
|
+
* When closing a stream, we wait for `bufferedAmount` to become 0 before
|
|
22
|
+
* closing the underlying RTCDataChannel - this controls how long we wait
|
|
23
|
+
* in ms (default: 30s)
|
|
24
|
+
*/
|
|
25
|
+
drainTimeout?: number;
|
|
26
|
+
/**
|
|
27
|
+
* When closing a stream we first send a FIN flag to the remote and wait
|
|
28
|
+
* for a FIN_ACK reply before closing the underlying RTCDataChannel - this
|
|
29
|
+
* controls how long we wait for the acknowledgement in ms (default: 5s)
|
|
30
|
+
*/
|
|
31
|
+
closeTimeout?: number;
|
|
32
|
+
}
|
|
4
33
|
/**
|
|
5
34
|
* @param {WebRTCTransportDirectInit} init - WebRTC direct transport configuration
|
|
6
35
|
* @param init.dataChannel - DataChannel configurations
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,KAAK,yBAAyB,EAAE,KAAK,+BAA+B,EAAE,MAAM,kCAAkC,CAAA;AAC9I,OAAO,KAAK,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAA;AACvG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAE5D;;;;;;;GAOG;AACH,iBAAS,YAAY,CAAE,IAAI,CAAC,EAAE,yBAAyB,GAAG,CAAC,UAAU,EAAE,+BAA+B,KAAK,SAAS,CAEnH;AAED;;;;;;;;GAQG;AACH,iBAAS,MAAM,CAAE,IAAI,CAAC,EAAE,mBAAmB,GAAG,CAAC,UAAU,EAAE,yBAAyB,KAAK,SAAS,CAEjG;AAED,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,KAAK,yBAAyB,EAAE,KAAK,+BAA+B,EAAE,MAAM,kCAAkC,CAAA;AAC9I,OAAO,KAAK,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAA;AACvG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAE5D,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAE1B;;;;OAIG;IACH,6BAA6B,CAAC,EAAE,MAAM,CAAA;IAEtC;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IAErB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED;;;;;;;GAOG;AACH,iBAAS,YAAY,CAAE,IAAI,CAAC,EAAE,yBAAyB,GAAG,CAAC,UAAU,EAAE,+BAA+B,KAAK,SAAS,CAEnH;AAED;;;;;;;;GAQG;AACH,iBAAS,MAAM,CAAE,IAAI,CAAC,EAAE,mBAAmB,GAAG,CAAC,UAAU,EAAE,yBAAyB,KAAK,SAAS,CAEjG;AAED,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAA"}
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAA;AACnE,OAAO,EAAE,qBAAqB,EAAwE,MAAM,kCAAkC,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAA;AACnE,OAAO,EAAE,qBAAqB,EAAwE,MAAM,kCAAkC,CAAA;AAsC9I;;;;;;;GAOG;AACH,SAAS,YAAY,CAAE,IAAgC;IACrD,OAAO,CAAC,UAA2C,EAAE,EAAE,CAAC,IAAI,qBAAqB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;AACrG,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,MAAM,CAAE,IAA0B;IACzC,OAAO,CAAC,UAAqC,EAAE,EAAE,CAAC,IAAI,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;AACzF,CAAC;AAED,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAA"}
|
package/dist/src/maconn.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"maconn.d.ts","sourceRoot":"","sources":["../../src/maconn.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAA;AACpG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACtE,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAInD,UAAU,6BAA6B;IACrC;;OAEG;IACH,cAAc,EAAE,iBAAiB,CAAA;IAEjC;;OAEG;IACH,UAAU,EAAE,SAAS,CAAA;IAErB;;OAEG;IACH,QAAQ,EAAE,2BAA2B,CAAA;IAErC;;OAEG;IACH,OAAO,CAAC,EAAE,YAAY,CAAA;CACvB;AAED,qBAAa,yBAA0B,YAAW,mBAAmB;IACnE;;OAEG;IACH,QAAQ,CAAC,cAAc,EAAE,iBAAiB,CAAA;IAE1C;;OAEG;IACH,UAAU,EAAE,SAAS,CAAA;IAErB;;OAEG;IACH,QAAQ,EAAE,2BAA2B,CAAA;IAErC;;OAEG;IACH,OAAO,CAAC,EAAE,YAAY,CAAA;IAEtB;;OAEG;IACH,MAAM,EAAE,cAAc,CAAC,UAAU,EAAE,GAAG,EAAE,OAAO,CAAC,CAAc;IAE9D;;OAEG;IACH,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAU;gBAE1C,IAAI,EAAE,6BAA6B;
|
|
1
|
+
{"version":3,"file":"maconn.d.ts","sourceRoot":"","sources":["../../src/maconn.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAA;AACpG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACtE,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAInD,UAAU,6BAA6B;IACrC;;OAEG;IACH,cAAc,EAAE,iBAAiB,CAAA;IAEjC;;OAEG;IACH,UAAU,EAAE,SAAS,CAAA;IAErB;;OAEG;IACH,QAAQ,EAAE,2BAA2B,CAAA;IAErC;;OAEG;IACH,OAAO,CAAC,EAAE,YAAY,CAAA;CACvB;AAED,qBAAa,yBAA0B,YAAW,mBAAmB;IACnE;;OAEG;IACH,QAAQ,CAAC,cAAc,EAAE,iBAAiB,CAAA;IAE1C;;OAEG;IACH,UAAU,EAAE,SAAS,CAAA;IAErB;;OAEG;IACH,QAAQ,EAAE,2BAA2B,CAAA;IAErC;;OAEG;IACH,OAAO,CAAC,EAAE,YAAY,CAAA;IAEtB;;OAEG;IACH,MAAM,EAAE,cAAc,CAAC,UAAU,EAAE,GAAG,EAAE,OAAO,CAAC,CAAc;IAE9D;;OAEG;IACH,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAU;gBAE1C,IAAI,EAAE,6BAA6B;IAiB1C,KAAK,CAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAQnD,KAAK,CAAE,GAAG,EAAE,KAAK,GAAG,IAAI;CAOzB"}
|
package/dist/src/maconn.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { logger } from '@libp2p/logger';
|
|
2
2
|
import { nopSink, nopSource } from './util.js';
|
|
3
|
-
const log = logger('libp2p:webrtc:
|
|
3
|
+
const log = logger('libp2p:webrtc:maconn');
|
|
4
4
|
export class WebRTCMultiaddrConnection {
|
|
5
5
|
/**
|
|
6
6
|
* WebRTC Peer Connection
|
|
@@ -30,8 +30,11 @@ export class WebRTCMultiaddrConnection {
|
|
|
30
30
|
this.remoteAddr = init.remoteAddr;
|
|
31
31
|
this.timeline = init.timeline;
|
|
32
32
|
this.peerConnection = init.peerConnection;
|
|
33
|
+
const initialState = this.peerConnection.connectionState;
|
|
33
34
|
this.peerConnection.onconnectionstatechange = () => {
|
|
34
|
-
|
|
35
|
+
log.trace('peer connection state change', this.peerConnection.connectionState, 'initial state', initialState);
|
|
36
|
+
if (this.peerConnection.connectionState === 'disconnected' || this.peerConnection.connectionState === 'failed' || this.peerConnection.connectionState === 'closed') {
|
|
37
|
+
// nothing else to do but close the connection
|
|
35
38
|
this.timeline.close = Date.now();
|
|
36
39
|
}
|
|
37
40
|
};
|
package/dist/src/maconn.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"maconn.js","sourceRoot":"","sources":["../../src/maconn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAM9C,MAAM,GAAG,GAAG,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"maconn.js","sourceRoot":"","sources":["../../src/maconn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAM9C,MAAM,GAAG,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAA;AAwB1C,MAAM,OAAO,yBAAyB;IACpC;;OAEG;IACM,cAAc,CAAmB;IAE1C;;OAEG;IACH,UAAU,CAAW;IAErB;;OAEG;IACH,QAAQ,CAA6B;IAErC;;OAEG;IACH,OAAO,CAAe;IAEtB;;OAEG;IACH,MAAM,GAA6C,SAAS,EAAE,CAAA;IAE9D;;OAEG;IACH,IAAI,GAA4C,OAAO,CAAA;IAEvD,YAAa,IAAmC;QAC9C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAA;QACjC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;QAC7B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAA;QAEzC,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,eAAe,CAAA;QAExD,IAAI,CAAC,cAAc,CAAC,uBAAuB,GAAG,GAAG,EAAE;YACjD,GAAG,CAAC,KAAK,CAAC,8BAA8B,EAAE,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE,eAAe,EAAE,YAAY,CAAC,CAAA;YAE7G,IAAI,IAAI,CAAC,cAAc,CAAC,eAAe,KAAK,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,eAAe,KAAK,QAAQ,IAAI,IAAI,CAAC,cAAc,CAAC,eAAe,KAAK,QAAQ,EAAE;gBAClK,8CAA8C;gBAC9C,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;aACjC;QACH,CAAC,CAAA;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAE,OAAsB;QACjC,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAA;QAE/B,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAA;QAC3B,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAChC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1C,CAAC;IAED,KAAK,CAAE,GAAU;QACf,GAAG,CAAC,KAAK,CAAC,iCAAiC,EAAE,GAAG,CAAC,CAAA;QAEjD,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAA;QAC3B,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAChC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1C,CAAC;CACF"}
|
package/dist/src/muxer.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { DataChannelOptions } from './index.js';
|
|
2
2
|
import type { Stream } from '@libp2p/interface/connection';
|
|
3
3
|
import type { CounterGroup } from '@libp2p/interface/metrics';
|
|
4
4
|
import type { StreamMuxer, StreamMuxerFactory, StreamMuxerInit } from '@libp2p/interface/stream-muxer';
|
|
@@ -10,18 +10,15 @@ export interface DataChannelMuxerFactoryInit {
|
|
|
10
10
|
* WebRTC Peer Connection
|
|
11
11
|
*/
|
|
12
12
|
peerConnection: RTCPeerConnection;
|
|
13
|
-
/**
|
|
14
|
-
* Optional metrics for this data channel muxer
|
|
15
|
-
*/
|
|
16
|
-
metrics?: CounterGroup;
|
|
17
|
-
/**
|
|
18
|
-
* Data channel options
|
|
19
|
-
*/
|
|
20
|
-
dataChannelOptions?: Partial<DataChannelOpts>;
|
|
21
13
|
/**
|
|
22
14
|
* The protocol to use
|
|
23
15
|
*/
|
|
24
16
|
protocol?: string;
|
|
17
|
+
/**
|
|
18
|
+
* Optional metrics for this data channel muxer
|
|
19
|
+
*/
|
|
20
|
+
metrics?: CounterGroup;
|
|
21
|
+
dataChannelOptions?: DataChannelOptions;
|
|
25
22
|
}
|
|
26
23
|
export declare class DataChannelMuxerFactory implements StreamMuxerFactory {
|
|
27
24
|
readonly protocol: string;
|
|
@@ -49,16 +46,17 @@ export declare class DataChannelMuxer implements StreamMuxer {
|
|
|
49
46
|
streams: Stream[];
|
|
50
47
|
protocol: string;
|
|
51
48
|
private readonly peerConnection;
|
|
52
|
-
private readonly dataChannelOptions
|
|
49
|
+
private readonly dataChannelOptions;
|
|
53
50
|
private readonly metrics?;
|
|
51
|
+
constructor(init: DataChannelMuxerInit);
|
|
54
52
|
/**
|
|
55
53
|
* Gracefully close all tracked streams and stop the muxer
|
|
56
54
|
*/
|
|
57
|
-
close
|
|
55
|
+
close(options?: AbortOptions): Promise<void>;
|
|
58
56
|
/**
|
|
59
57
|
* Abort all tracked streams and stop the muxer
|
|
60
58
|
*/
|
|
61
|
-
abort
|
|
59
|
+
abort(err: Error): void;
|
|
62
60
|
/**
|
|
63
61
|
* The stream source, a no-op as the transport natively supports multiplexing
|
|
64
62
|
*/
|
|
@@ -67,7 +65,6 @@ export declare class DataChannelMuxer implements StreamMuxer {
|
|
|
67
65
|
* The stream destination, a no-op as the transport natively supports multiplexing
|
|
68
66
|
*/
|
|
69
67
|
sink: Sink<Source<Uint8Array | Uint8ArrayList>, Promise<void>>;
|
|
70
|
-
constructor(init: DataChannelMuxerInit);
|
|
71
68
|
newStream(): Stream;
|
|
72
69
|
}
|
|
73
70
|
//# sourceMappingURL=muxer.d.ts.map
|
package/dist/src/muxer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"muxer.d.ts","sourceRoot":"","sources":["../../src/muxer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"muxer.d.ts","sourceRoot":"","sources":["../../src/muxer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AACtG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAMpD,MAAM,WAAW,2BAA2B;IAC1C;;OAEG;IACH,cAAc,EAAE,iBAAiB,CAAA;IAEjC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;OAEG;IACH,OAAO,CAAC,EAAE,YAAY,CAAA;IAEtB,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;CACxC;AAED,qBAAa,uBAAwB,YAAW,kBAAkB;IAChE,SAAgB,QAAQ,EAAE,MAAM,CAAA;IAEhC;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmB;IAClD,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAc;IACvC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAoB;gBAE3C,IAAI,EAAE,2BAA2B;IAoB9C,iBAAiB,CAAE,IAAI,CAAC,EAAE,eAAe,GAAG,WAAW;CAUxD;AAED,MAAM,WAAW,oBAAqB,SAAQ,2BAA2B,EAAE,eAAe;IACxF,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAED;;GAEG;AACH,qBAAa,gBAAiB,YAAW,WAAW;IAWrC,QAAQ,CAAC,IAAI,EAAE,oBAAoB;IAVhD;;OAEG;IACI,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAEvB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmB;IAClD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAoB;IACvD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAc;gBAEjB,IAAI,EAAE,oBAAoB;IAsChD;;OAEG;IACG,KAAK,CAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAUnD;;OAEG;IACH,KAAK,CAAE,GAAG,EAAE,KAAK,GAAG,IAAI;IAMxB;;OAEG;IACH,MAAM,EAAE,cAAc,CAAC,UAAU,EAAE,GAAG,EAAE,OAAO,CAAC,CAAc;IAE9D;;OAEG;IACH,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,cAAc,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAU;IAExE,SAAS,IAAK,MAAM;CAoBrB"}
|
package/dist/src/muxer.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import { logger } from '@libp2p/logger';
|
|
1
2
|
import { createStream } from './stream.js';
|
|
2
|
-
import { nopSink, nopSource } from './util.js';
|
|
3
|
+
import { drainAndClose, nopSink, nopSource } from './util.js';
|
|
4
|
+
const log = logger('libp2p:webrtc:muxer');
|
|
3
5
|
const PROTOCOL = '/webrtc';
|
|
4
6
|
export class DataChannelMuxerFactory {
|
|
5
7
|
protocol;
|
|
@@ -14,16 +16,16 @@ export class DataChannelMuxerFactory {
|
|
|
14
16
|
this.peerConnection = init.peerConnection;
|
|
15
17
|
this.metrics = init.metrics;
|
|
16
18
|
this.protocol = init.protocol ?? PROTOCOL;
|
|
17
|
-
this.dataChannelOptions = init.dataChannelOptions;
|
|
19
|
+
this.dataChannelOptions = init.dataChannelOptions ?? {};
|
|
18
20
|
// store any datachannels opened before upgrade has been completed
|
|
19
21
|
this.peerConnection.ondatachannel = ({ channel }) => {
|
|
20
22
|
const stream = createStream({
|
|
21
23
|
channel,
|
|
22
24
|
direction: 'inbound',
|
|
23
|
-
dataChannelOptions: init.dataChannelOptions,
|
|
24
25
|
onEnd: () => {
|
|
25
26
|
this.streamBuffer = this.streamBuffer.filter(s => s.id !== stream.id);
|
|
26
|
-
}
|
|
27
|
+
},
|
|
28
|
+
...this.dataChannelOptions
|
|
27
29
|
});
|
|
28
30
|
this.streamBuffer.push(stream);
|
|
29
31
|
};
|
|
@@ -52,28 +54,13 @@ export class DataChannelMuxer {
|
|
|
52
54
|
peerConnection;
|
|
53
55
|
dataChannelOptions;
|
|
54
56
|
metrics;
|
|
55
|
-
/**
|
|
56
|
-
* Gracefully close all tracked streams and stop the muxer
|
|
57
|
-
*/
|
|
58
|
-
close = async () => { };
|
|
59
|
-
/**
|
|
60
|
-
* Abort all tracked streams and stop the muxer
|
|
61
|
-
*/
|
|
62
|
-
abort = () => { };
|
|
63
|
-
/**
|
|
64
|
-
* The stream source, a no-op as the transport natively supports multiplexing
|
|
65
|
-
*/
|
|
66
|
-
source = nopSource();
|
|
67
|
-
/**
|
|
68
|
-
* The stream destination, a no-op as the transport natively supports multiplexing
|
|
69
|
-
*/
|
|
70
|
-
sink = nopSink;
|
|
71
57
|
constructor(init) {
|
|
72
58
|
this.init = init;
|
|
73
59
|
this.streams = init.streams;
|
|
74
60
|
this.peerConnection = init.peerConnection;
|
|
75
61
|
this.protocol = init.protocol ?? PROTOCOL;
|
|
76
62
|
this.metrics = init.metrics;
|
|
63
|
+
this.dataChannelOptions = init.dataChannelOptions ?? {};
|
|
77
64
|
/**
|
|
78
65
|
* Fired when a data channel has been added to the connection has been
|
|
79
66
|
* added by the remote peer.
|
|
@@ -84,37 +71,65 @@ export class DataChannelMuxer {
|
|
|
84
71
|
const stream = createStream({
|
|
85
72
|
channel,
|
|
86
73
|
direction: 'inbound',
|
|
87
|
-
dataChannelOptions: this.dataChannelOptions,
|
|
88
74
|
onEnd: () => {
|
|
75
|
+
log.trace('stream %s %s %s onEnd', stream.direction, stream.id, stream.protocol);
|
|
76
|
+
drainAndClose(channel, `inbound ${stream.id} ${stream.protocol}`, this.dataChannelOptions.drainTimeout);
|
|
89
77
|
this.streams = this.streams.filter(s => s.id !== stream.id);
|
|
90
78
|
this.metrics?.increment({ stream_end: true });
|
|
91
79
|
init?.onStreamEnd?.(stream);
|
|
92
|
-
}
|
|
80
|
+
},
|
|
81
|
+
...this.dataChannelOptions
|
|
93
82
|
});
|
|
94
83
|
this.streams.push(stream);
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
init.onIncomingStream(stream);
|
|
98
|
-
}
|
|
84
|
+
this.metrics?.increment({ incoming_stream: true });
|
|
85
|
+
init?.onIncomingStream?.(stream);
|
|
99
86
|
};
|
|
100
87
|
const onIncomingStream = init?.onIncomingStream;
|
|
101
88
|
if (onIncomingStream != null) {
|
|
102
89
|
this.streams.forEach(s => { onIncomingStream(s); });
|
|
103
90
|
}
|
|
104
91
|
}
|
|
92
|
+
/**
|
|
93
|
+
* Gracefully close all tracked streams and stop the muxer
|
|
94
|
+
*/
|
|
95
|
+
async close(options) {
|
|
96
|
+
try {
|
|
97
|
+
await Promise.all(this.streams.map(async (stream) => stream.close(options)));
|
|
98
|
+
}
|
|
99
|
+
catch (err) {
|
|
100
|
+
this.abort(err);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Abort all tracked streams and stop the muxer
|
|
105
|
+
*/
|
|
106
|
+
abort(err) {
|
|
107
|
+
for (const stream of this.streams) {
|
|
108
|
+
stream.abort(err);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* The stream source, a no-op as the transport natively supports multiplexing
|
|
113
|
+
*/
|
|
114
|
+
source = nopSource();
|
|
115
|
+
/**
|
|
116
|
+
* The stream destination, a no-op as the transport natively supports multiplexing
|
|
117
|
+
*/
|
|
118
|
+
sink = nopSink;
|
|
105
119
|
newStream() {
|
|
106
120
|
// The spec says the label SHOULD be an empty string: https://github.com/libp2p/specs/blob/master/webrtc/README.md#rtcdatachannel-label
|
|
107
121
|
const channel = this.peerConnection.createDataChannel('');
|
|
108
122
|
const stream = createStream({
|
|
109
123
|
channel,
|
|
110
124
|
direction: 'outbound',
|
|
111
|
-
dataChannelOptions: this.dataChannelOptions,
|
|
112
125
|
onEnd: () => {
|
|
113
|
-
|
|
126
|
+
log.trace('stream %s %s %s onEnd', stream.direction, stream.id, stream.protocol);
|
|
127
|
+
drainAndClose(channel, `outbound ${stream.id} ${stream.protocol}`, this.dataChannelOptions.drainTimeout);
|
|
114
128
|
this.streams = this.streams.filter(s => s.id !== stream.id);
|
|
115
129
|
this.metrics?.increment({ stream_end: true });
|
|
116
130
|
this.init?.onStreamEnd?.(stream);
|
|
117
|
-
}
|
|
131
|
+
},
|
|
132
|
+
...this.dataChannelOptions
|
|
118
133
|
});
|
|
119
134
|
this.streams.push(stream);
|
|
120
135
|
this.metrics?.increment({ outgoing_stream: true });
|
package/dist/src/muxer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"muxer.js","sourceRoot":"","sources":["../../src/muxer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"muxer.js","sourceRoot":"","sources":["../../src/muxer.ts"],"names":[],"mappings":"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"}
|
package/dist/src/pb/message.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../../src/pb/message.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,MAAM,WAAW,OAAO;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAA;IACnB,OAAO,CAAC,EAAE,UAAU,CAAA;CACrB;AAED,yBAAiB,OAAO,CAAC;IACvB,KAAY,IAAI;QACd,GAAG,QAAQ;QACX,YAAY,iBAAiB;QAC7B,KAAK,UAAU;
|
|
1
|
+
{"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../../src/pb/message.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,MAAM,WAAW,OAAO;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAA;IACnB,OAAO,CAAC,EAAE,UAAU,CAAA;CACrB;AAED,yBAAiB,OAAO,CAAC;IACvB,KAAY,IAAI;QACd,GAAG,QAAQ;QACX,YAAY,iBAAiB;QAC7B,KAAK,UAAU;QACf,OAAO,YAAY;KACpB;IASD,UAAiB,IAAI,CAAC;QACb,MAAM,KAAK,QAAO,MAAM,IAAI,CAElC,CAAA;KACF;IAIM,MAAM,KAAK,QAAO,MAAM,OAAO,CA8CrC,CAAA;IAEM,MAAM,MAAM,QAAS,QAAQ,OAAO,CAAC,KAAG,UAE9C,CAAA;IAEM,MAAM,MAAM,QAAS,UAAU,GAAG,cAAc,KAAG,OAEzD,CAAA;CACF"}
|
package/dist/src/pb/message.js
CHANGED
|
@@ -11,12 +11,14 @@ export var Message;
|
|
|
11
11
|
Flag["FIN"] = "FIN";
|
|
12
12
|
Flag["STOP_SENDING"] = "STOP_SENDING";
|
|
13
13
|
Flag["RESET"] = "RESET";
|
|
14
|
+
Flag["FIN_ACK"] = "FIN_ACK";
|
|
14
15
|
})(Flag = Message.Flag || (Message.Flag = {}));
|
|
15
16
|
let __FlagValues;
|
|
16
17
|
(function (__FlagValues) {
|
|
17
18
|
__FlagValues[__FlagValues["FIN"] = 0] = "FIN";
|
|
18
19
|
__FlagValues[__FlagValues["STOP_SENDING"] = 1] = "STOP_SENDING";
|
|
19
20
|
__FlagValues[__FlagValues["RESET"] = 2] = "RESET";
|
|
21
|
+
__FlagValues[__FlagValues["FIN_ACK"] = 3] = "FIN_ACK";
|
|
20
22
|
})(__FlagValues || (__FlagValues = {}));
|
|
21
23
|
(function (Flag) {
|
|
22
24
|
Flag.codec = () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message.js","sourceRoot":"","sources":["../../../src/pb/message.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAClC,+BAA+B;AAC/B,oDAAoD;AACpD,8EAA8E;AAC9E,0DAA0D;AAE1D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AASpF,MAAM,KAAW,OAAO,
|
|
1
|
+
{"version":3,"file":"message.js","sourceRoot":"","sources":["../../../src/pb/message.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type Multiaddr } from '@multiformats/multiaddr';
|
|
2
|
+
import { type RTCPeerConnection } from '../webrtc/index.js';
|
|
3
|
+
import { type WebRTCTransportMetrics } from './transport.js';
|
|
4
|
+
import type { DataChannelOptions } from '../index.js';
|
|
5
|
+
import type { ConnectionManager } from '@libp2p/interface-internal/connection-manager';
|
|
6
|
+
import type { IncomingStreamData } from '@libp2p/interface-internal/registrar';
|
|
7
|
+
import type { TransportManager } from '@libp2p/interface-internal/transport-manager';
|
|
8
|
+
export interface IncomingStreamOpts extends IncomingStreamData {
|
|
9
|
+
rtcConfiguration?: RTCConfiguration;
|
|
10
|
+
dataChannelOptions?: Partial<DataChannelOptions>;
|
|
11
|
+
signal: AbortSignal;
|
|
12
|
+
}
|
|
13
|
+
export interface ConnectOptions {
|
|
14
|
+
peerConnection: RTCPeerConnection;
|
|
15
|
+
multiaddr: Multiaddr;
|
|
16
|
+
connectionManager: ConnectionManager;
|
|
17
|
+
transportManager: TransportManager;
|
|
18
|
+
dataChannelOptions?: Partial<DataChannelOptions>;
|
|
19
|
+
signal?: AbortSignal;
|
|
20
|
+
metrics?: WebRTCTransportMetrics;
|
|
21
|
+
}
|
|
22
|
+
export declare function initiateConnection({ peerConnection, signal, metrics, multiaddr: ma, connectionManager, transportManager }: ConnectOptions): Promise<{
|
|
23
|
+
remoteAddress: Multiaddr;
|
|
24
|
+
}>;
|
|
25
|
+
//# sourceMappingURL=initiate-connection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"initiate-connection.d.ts","sourceRoot":"","sources":["../../../src/private-to-private/initiate-connection.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAGnE,OAAO,EAAE,KAAK,iBAAiB,EAAyB,MAAM,oBAAoB,CAAA;AAElF,OAAO,EAAiC,KAAK,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAE3F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAErD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAA;AACtF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAA;AAC9E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAA;AAIpF,MAAM,WAAW,kBAAmB,SAAQ,kBAAkB;IAC5D,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC,kBAAkB,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAChD,MAAM,EAAE,WAAW,CAAA;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,iBAAiB,CAAA;IACjC,SAAS,EAAE,SAAS,CAAA;IACpB,iBAAiB,EAAE,iBAAiB,CAAA;IACpC,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,kBAAkB,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAChD,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,OAAO,CAAC,EAAE,sBAAsB,CAAA;CACjC;AAED,wBAAsB,kBAAkB,CAAE,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC;IAAE,aAAa,EAAE,SAAS,CAAA;CAAE,CAAC,CA4JxL"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { CodeError } from '@libp2p/interface/errors';
|
|
2
|
+
import { logger } from '@libp2p/logger';
|
|
3
|
+
import { peerIdFromString } from '@libp2p/peer-id';
|
|
4
|
+
import { multiaddr } from '@multiformats/multiaddr';
|
|
5
|
+
import { pbStream } from 'it-protobuf-stream';
|
|
6
|
+
import pDefer, {} from 'p-defer';
|
|
7
|
+
import { RTCSessionDescription } from '../webrtc/index.js';
|
|
8
|
+
import { Message } from './pb/message.js';
|
|
9
|
+
import { SIGNALING_PROTO_ID, splitAddr } from './transport.js';
|
|
10
|
+
import { parseRemoteAddress, readCandidatesUntilConnected, resolveOnConnected } from './util.js';
|
|
11
|
+
const log = logger('libp2p:webrtc:initiate-connection');
|
|
12
|
+
export async function initiateConnection({ peerConnection, signal, metrics, multiaddr: ma, connectionManager, transportManager }) {
|
|
13
|
+
const { baseAddr, peerId } = splitAddr(ma);
|
|
14
|
+
metrics?.dialerEvents.increment({ open: true });
|
|
15
|
+
log.trace('dialing base address: %a', baseAddr);
|
|
16
|
+
const relayPeer = baseAddr.getPeerId();
|
|
17
|
+
if (relayPeer == null) {
|
|
18
|
+
throw new CodeError('Relay peer was missing', 'ERR_INVALID_ADDRESS');
|
|
19
|
+
}
|
|
20
|
+
const connections = connectionManager.getConnections(peerIdFromString(relayPeer));
|
|
21
|
+
let connection;
|
|
22
|
+
let shouldCloseConnection = false;
|
|
23
|
+
if (connections.length === 0) {
|
|
24
|
+
// use the transport manager to open a connection. Initiating a WebRTC
|
|
25
|
+
// connection takes place in the context of a dial - if we use the
|
|
26
|
+
// connection manager instead we can end up joining our own dial context
|
|
27
|
+
connection = await transportManager.dial(baseAddr, {
|
|
28
|
+
signal
|
|
29
|
+
});
|
|
30
|
+
// this connection is unmanaged by the connection manager so we should
|
|
31
|
+
// close it when we are done
|
|
32
|
+
shouldCloseConnection = true;
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
connection = connections[0];
|
|
36
|
+
}
|
|
37
|
+
try {
|
|
38
|
+
const stream = await connection.newStream(SIGNALING_PROTO_ID, {
|
|
39
|
+
signal,
|
|
40
|
+
runOnTransientConnection: true
|
|
41
|
+
});
|
|
42
|
+
const messageStream = pbStream(stream).pb(Message);
|
|
43
|
+
const connectedPromise = pDefer();
|
|
44
|
+
const sdpAbortedListener = () => {
|
|
45
|
+
connectedPromise.reject(new CodeError('SDP handshake aborted', 'ERR_SDP_HANDSHAKE_ABORTED'));
|
|
46
|
+
};
|
|
47
|
+
try {
|
|
48
|
+
resolveOnConnected(peerConnection, connectedPromise);
|
|
49
|
+
// reject the connectedPromise if the signal aborts
|
|
50
|
+
signal?.addEventListener('abort', sdpAbortedListener);
|
|
51
|
+
// we create the channel so that the RTCPeerConnection has a component for
|
|
52
|
+
// which to collect candidates. The label is not relevant to connection
|
|
53
|
+
// initiation but can be useful for debugging
|
|
54
|
+
const channel = peerConnection.createDataChannel('init');
|
|
55
|
+
// setup callback to write ICE candidates to the remote peer
|
|
56
|
+
peerConnection.onicecandidate = ({ candidate }) => {
|
|
57
|
+
// a null candidate means end-of-candidates, an empty string candidate
|
|
58
|
+
// means end-of-candidates for this generation, otherwise this should
|
|
59
|
+
// be a valid candidate object
|
|
60
|
+
// see - https://www.w3.org/TR/webrtc/#rtcpeerconnectioniceevent
|
|
61
|
+
const data = JSON.stringify(candidate?.toJSON() ?? null);
|
|
62
|
+
log.trace('initiator sending ICE candidate %s', data);
|
|
63
|
+
void messageStream.write({
|
|
64
|
+
type: Message.Type.ICE_CANDIDATE,
|
|
65
|
+
data
|
|
66
|
+
}, {
|
|
67
|
+
signal
|
|
68
|
+
})
|
|
69
|
+
.catch(err => {
|
|
70
|
+
log.error('error sending ICE candidate', err);
|
|
71
|
+
});
|
|
72
|
+
};
|
|
73
|
+
peerConnection.onicecandidateerror = (event) => {
|
|
74
|
+
log('initiator ICE candidate error', event);
|
|
75
|
+
};
|
|
76
|
+
// create an offer
|
|
77
|
+
const offerSdp = await peerConnection.createOffer();
|
|
78
|
+
log.trace('initiator send SDP offer %s', offerSdp.sdp);
|
|
79
|
+
// write the offer to the stream
|
|
80
|
+
await messageStream.write({ type: Message.Type.SDP_OFFER, data: offerSdp.sdp }, {
|
|
81
|
+
signal
|
|
82
|
+
});
|
|
83
|
+
// set offer as local description
|
|
84
|
+
await peerConnection.setLocalDescription(offerSdp).catch(err => {
|
|
85
|
+
log.error('could not execute setLocalDescription', err);
|
|
86
|
+
throw new CodeError('Failed to set localDescription', 'ERR_SDP_HANDSHAKE_FAILED');
|
|
87
|
+
});
|
|
88
|
+
// read answer
|
|
89
|
+
const answerMessage = await messageStream.read({
|
|
90
|
+
signal
|
|
91
|
+
});
|
|
92
|
+
if (answerMessage.type !== Message.Type.SDP_ANSWER) {
|
|
93
|
+
throw new CodeError('remote should send an SDP answer', 'ERR_SDP_HANDSHAKE_FAILED');
|
|
94
|
+
}
|
|
95
|
+
log.trace('initiator receive SDP answer %s', answerMessage.data);
|
|
96
|
+
const answerSdp = new RTCSessionDescription({ type: 'answer', sdp: answerMessage.data });
|
|
97
|
+
await peerConnection.setRemoteDescription(answerSdp).catch(err => {
|
|
98
|
+
log.error('could not execute setRemoteDescription', err);
|
|
99
|
+
throw new CodeError('Failed to set remoteDescription', 'ERR_SDP_HANDSHAKE_FAILED');
|
|
100
|
+
});
|
|
101
|
+
log.trace('initiator read candidates until connected');
|
|
102
|
+
await readCandidatesUntilConnected(connectedPromise, peerConnection, messageStream, {
|
|
103
|
+
direction: 'initiator',
|
|
104
|
+
signal
|
|
105
|
+
});
|
|
106
|
+
log.trace('initiator connected, closing init channel');
|
|
107
|
+
channel.close();
|
|
108
|
+
log.trace('initiator closing signalling stream');
|
|
109
|
+
await messageStream.unwrap().unwrap().close({
|
|
110
|
+
signal
|
|
111
|
+
});
|
|
112
|
+
const remoteAddress = parseRemoteAddress(peerConnection.currentRemoteDescription?.sdp ?? '');
|
|
113
|
+
log.trace('initiator connected to remote address %s', remoteAddress);
|
|
114
|
+
return {
|
|
115
|
+
remoteAddress: multiaddr(remoteAddress).encapsulate(`/p2p/${peerId.toString()}`)
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
peerConnection.close();
|
|
120
|
+
stream.abort(err);
|
|
121
|
+
throw err;
|
|
122
|
+
}
|
|
123
|
+
finally {
|
|
124
|
+
// remove event listeners
|
|
125
|
+
signal?.removeEventListener('abort', sdpAbortedListener);
|
|
126
|
+
peerConnection.onicecandidate = null;
|
|
127
|
+
peerConnection.onicecandidateerror = null;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
finally {
|
|
131
|
+
// if we had to open a connection to perform the SDP handshake
|
|
132
|
+
// close it because it's not tracked by the connection manager
|
|
133
|
+
if (shouldCloseConnection) {
|
|
134
|
+
try {
|
|
135
|
+
await connection.close({
|
|
136
|
+
signal
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
catch (err) {
|
|
140
|
+
connection.abort(err);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=initiate-connection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"initiate-connection.js","sourceRoot":"","sources":["../../../src/private-to-private/initiate-connection.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,14 +3,18 @@ import type { PeerId } from '@libp2p/interface/peer-id';
|
|
|
3
3
|
import type { ListenerEvents, Listener } from '@libp2p/interface/transport';
|
|
4
4
|
import type { TransportManager } from '@libp2p/interface-internal/transport-manager';
|
|
5
5
|
import type { Multiaddr } from '@multiformats/multiaddr';
|
|
6
|
-
export interface
|
|
6
|
+
export interface WebRTCPeerListenerComponents {
|
|
7
7
|
peerId: PeerId;
|
|
8
8
|
transportManager: TransportManager;
|
|
9
9
|
}
|
|
10
|
+
export interface WebRTCPeerListenerInit {
|
|
11
|
+
shutdownController: AbortController;
|
|
12
|
+
}
|
|
10
13
|
export declare class WebRTCPeerListener extends EventEmitter<ListenerEvents> implements Listener {
|
|
11
14
|
private readonly peerId;
|
|
12
15
|
private readonly transportManager;
|
|
13
|
-
|
|
16
|
+
private readonly shutdownController;
|
|
17
|
+
constructor(components: WebRTCPeerListenerComponents, init: WebRTCPeerListenerInit);
|
|
14
18
|
listen(): Promise<void>;
|
|
15
19
|
getAddrs(): Multiaddr[];
|
|
16
20
|
close(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listener.d.ts","sourceRoot":"","sources":["../../../src/private-to-private/listener.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAEvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AAC3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAA;AACpF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAExD,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"listener.d.ts","sourceRoot":"","sources":["../../../src/private-to-private/listener.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAEvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AAC3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAA;AACpF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAExD,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,MAAM,CAAA;IACd,gBAAgB,EAAE,gBAAgB,CAAA;CACnC;AAED,MAAM,WAAW,sBAAsB;IACrC,kBAAkB,EAAE,eAAe,CAAA;CACpC;AAED,qBAAa,kBAAmB,SAAQ,YAAY,CAAC,cAAc,CAAE,YAAW,QAAQ;IACtF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkB;IACnD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAiB;gBAEvC,UAAU,EAAE,4BAA4B,EAAE,IAAI,EAAE,sBAAsB;IAS7E,MAAM,IAAK,OAAO,CAAC,IAAI,CAAC;IAI9B,QAAQ,IAAK,SAAS,EAAE;IAalB,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;CAI9B"}
|
|
@@ -3,10 +3,12 @@ import { Circuit } from '@multiformats/mafmt';
|
|
|
3
3
|
export class WebRTCPeerListener extends EventEmitter {
|
|
4
4
|
peerId;
|
|
5
5
|
transportManager;
|
|
6
|
-
|
|
6
|
+
shutdownController;
|
|
7
|
+
constructor(components, init) {
|
|
7
8
|
super();
|
|
8
|
-
this.peerId =
|
|
9
|
-
this.transportManager =
|
|
9
|
+
this.peerId = components.peerId;
|
|
10
|
+
this.transportManager = components.transportManager;
|
|
11
|
+
this.shutdownController = init.shutdownController;
|
|
10
12
|
}
|
|
11
13
|
async listen() {
|
|
12
14
|
this.safeDispatchEvent('listening', {});
|
|
@@ -23,6 +25,7 @@ export class WebRTCPeerListener extends EventEmitter {
|
|
|
23
25
|
.flat();
|
|
24
26
|
}
|
|
25
27
|
async close() {
|
|
28
|
+
this.shutdownController.abort();
|
|
26
29
|
this.safeDispatchEvent('close', {});
|
|
27
30
|
}
|
|
28
31
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listener.js","sourceRoot":"","sources":["../../../src/private-to-private/listener.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"listener.js","sourceRoot":"","sources":["../../../src/private-to-private/listener.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAe7C,MAAM,OAAO,kBAAmB,SAAQ,YAA4B;IACjD,MAAM,CAAQ;IACd,gBAAgB,CAAkB;IAClC,kBAAkB,CAAiB;IAEpD,YAAa,UAAwC,EAAE,IAA4B;QACjF,KAAK,EAAE,CAAA;QAEP,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAA;QAC/B,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC,gBAAgB,CAAA;QAEnD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAA;IACnD,CAAC;IAED,KAAK,CAAC,MAAM;QACV,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;IACzC,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,gBAAgB;aACzB,YAAY,EAAE;aACd,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC;aACvB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;aACnB,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;aACjC,GAAG,CAAC,EAAE,CAAC,EAAE;YACR,OAAO,EAAE,CAAC,WAAW,CAAC,eAAe,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;QACrD,CAAC,CAAC,CACH;aACA,IAAI,EAAE,CAAA;IACX,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAA;QAC/B,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;IACrC,CAAC;CACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type RTCPeerConnection } from '../webrtc/index.js';
|
|
2
|
+
import type { IncomingStreamData } from '@libp2p/interface-internal/registrar';
|
|
3
|
+
export interface IncomingStreamOpts extends IncomingStreamData {
|
|
4
|
+
peerConnection: RTCPeerConnection;
|
|
5
|
+
signal: AbortSignal;
|
|
6
|
+
}
|
|
7
|
+
export declare function handleIncomingStream({ peerConnection, stream, signal, connection }: IncomingStreamOpts): Promise<{
|
|
8
|
+
remoteAddress: string;
|
|
9
|
+
}>;
|
|
10
|
+
//# sourceMappingURL=signaling-stream-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signaling-stream-handler.d.ts","sourceRoot":"","sources":["../../../src/private-to-private/signaling-stream-handler.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,iBAAiB,EAAyB,MAAM,oBAAoB,CAAA;AAGlF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAA;AAI9E,MAAM,WAAW,kBAAmB,SAAQ,kBAAkB;IAC5D,cAAc,EAAE,iBAAiB,CAAA;IACjC,MAAM,EAAE,WAAW,CAAA;CACpB;AAED,wBAAsB,oBAAoB,CAAE,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,kBAAkB,GAAG,OAAO,CAAC;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC,CAgHlJ"}
|