@libp2p/webrtc 3.2.1 → 3.2.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 +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/dist/typedoc-urls.json +2 -0
- 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/src/private-to-private/handler.ts +0 -177
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../src/private-to-public/transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,KAAK,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EAA8B,MAAM,EAAiC,MAAM,6BAA6B,CAAA;AAC/G,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,KAAK,CAAC,MAAM,iBAAiB,CAAA;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAC9D,OAAO,KAAK,WAAW,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AACtG,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAA;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAQpC,MAAM,GAAG,GAAG,MAAM,CAAC,yBAAyB,CAAC,CAAA;AAE7C;;GAEG;AACH,MAAM,oBAAoB,GAAG,KAAM,CAAA;AAEnC;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAW,SAAS,CAAC,eAAe,CAAC,CAAC,IAAI,CAAA;AAElE;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAW,SAAS,CAAC,UAAU,CAAC,CAAC,IAAI,CAAA;AAkB/D,MAAM,OAAO,qBAAqB;IACf,OAAO,CAAgB;IACvB,UAAU,CAAiC;IAC3C,IAAI,CAA2B;IAChD,YAAa,UAA2C,EAAE,OAAkC,EAAE;QAC5F,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,UAAU,CAAC,OAAO,IAAI,IAAI,EAAE;YAC9B,IAAI,CAAC,OAAO,GAAG;gBACb,YAAY,EAAE,UAAU,CAAC,OAAO,CAAC,oBAAoB,CAAC,0CAA0C,EAAE;oBAChG,KAAK,EAAE,OAAO;oBACd,IAAI,EAAE,kDAAkD;iBACzD,CAAC;aACH,CAAA;SACF;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAE,EAAa,EAAE,OAA0B;QACnD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;QAChD,GAAG,CAAC,qBAAqB,EAAE,
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../src/private-to-public/transport.ts"],"names":[],"mappings":"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"}
|
package/dist/src/stream.d.ts
CHANGED
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
import { AbstractStream, type AbstractStreamInit } from '@libp2p/interface/stream-muxer/stream';
|
|
2
2
|
import { Uint8ArrayList } from 'uint8arraylist';
|
|
3
|
+
import type { DataChannelOptions } from './index.js';
|
|
4
|
+
import type { AbortOptions } from '@libp2p/interface';
|
|
3
5
|
import type { Direction } from '@libp2p/interface/connection';
|
|
4
|
-
export interface
|
|
5
|
-
maxMessageSize: number;
|
|
6
|
-
maxBufferedAmount: number;
|
|
7
|
-
bufferedAmountLowEventTimeout: number;
|
|
8
|
-
}
|
|
9
|
-
export interface WebRTCStreamInit extends AbstractStreamInit {
|
|
6
|
+
export interface WebRTCStreamInit extends AbstractStreamInit, DataChannelOptions {
|
|
10
7
|
/**
|
|
11
8
|
* The network channel used for bidirectional peer-to-peer transfers of
|
|
12
9
|
* arbitrary data
|
|
@@ -14,39 +11,61 @@ export interface WebRTCStreamInit extends AbstractStreamInit {
|
|
|
14
11
|
* {@link https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannel}
|
|
15
12
|
*/
|
|
16
13
|
channel: RTCDataChannel;
|
|
17
|
-
dataChannelOptions?: Partial<DataChannelOpts>;
|
|
18
|
-
maxDataSize: number;
|
|
19
14
|
}
|
|
20
|
-
|
|
15
|
+
/**
|
|
16
|
+
* How much can be buffered to the DataChannel at once
|
|
17
|
+
*/
|
|
21
18
|
export declare const MAX_BUFFERED_AMOUNT: number;
|
|
19
|
+
/**
|
|
20
|
+
* How long time we wait for the 'bufferedamountlow' event to be emitted
|
|
21
|
+
*/
|
|
22
22
|
export declare const BUFFERED_AMOUNT_LOW_TIMEOUT: number;
|
|
23
|
+
/**
|
|
24
|
+
* protobuf field definition overhead
|
|
25
|
+
*/
|
|
23
26
|
export declare const PROTOBUF_OVERHEAD = 5;
|
|
27
|
+
/**
|
|
28
|
+
* Length of varint, in bytes
|
|
29
|
+
*/
|
|
24
30
|
export declare const VARINT_LENGTH = 2;
|
|
31
|
+
/**
|
|
32
|
+
* Max message size that can be sent to the DataChannel
|
|
33
|
+
*/
|
|
34
|
+
export declare const MAX_MESSAGE_SIZE: number;
|
|
35
|
+
/**
|
|
36
|
+
* When closing streams we send a FIN then wait for the remote to
|
|
37
|
+
* reply with a FIN_ACK. If that does not happen within this timeout
|
|
38
|
+
* we close the stream anyway.
|
|
39
|
+
*/
|
|
40
|
+
export declare const FIN_ACK_TIMEOUT = 5000;
|
|
25
41
|
export declare class WebRTCStream extends AbstractStream {
|
|
26
42
|
/**
|
|
27
43
|
* The data channel used to send and receive data
|
|
28
44
|
*/
|
|
29
45
|
private readonly channel;
|
|
30
|
-
/**
|
|
31
|
-
* Data channel options
|
|
32
|
-
*/
|
|
33
|
-
private readonly dataChannelOptions;
|
|
34
46
|
/**
|
|
35
47
|
* push data from the underlying datachannel to the length prefix decoder
|
|
36
48
|
* and then the protobuf decoder.
|
|
37
49
|
*/
|
|
38
50
|
private readonly incomingData;
|
|
39
51
|
private messageQueue?;
|
|
52
|
+
private readonly maxBufferedAmount;
|
|
53
|
+
private readonly bufferedAmountLowEventTimeout;
|
|
40
54
|
/**
|
|
41
55
|
* The maximum size of a message in bytes
|
|
42
56
|
*/
|
|
43
|
-
private readonly
|
|
57
|
+
private readonly maxMessageSize;
|
|
58
|
+
/**
|
|
59
|
+
* When this promise is resolved, the remote has sent us a FIN flag
|
|
60
|
+
*/
|
|
61
|
+
private readonly receiveFinAck;
|
|
62
|
+
private readonly finAckTimeout;
|
|
44
63
|
constructor(init: WebRTCStreamInit);
|
|
45
64
|
sendNewStream(): void;
|
|
46
65
|
_sendMessage(data: Uint8ArrayList, checkBuffer?: boolean): Promise<void>;
|
|
47
66
|
sendData(data: Uint8ArrayList): Promise<void>;
|
|
48
67
|
sendReset(): Promise<void>;
|
|
49
|
-
sendCloseWrite(): Promise<void>;
|
|
68
|
+
sendCloseWrite(options: AbortOptions): Promise<void>;
|
|
50
69
|
sendCloseRead(): Promise<void>;
|
|
51
70
|
/**
|
|
52
71
|
* Handle incoming
|
|
@@ -54,7 +73,7 @@ export declare class WebRTCStream extends AbstractStream {
|
|
|
54
73
|
private processIncomingProtobuf;
|
|
55
74
|
private _sendFlag;
|
|
56
75
|
}
|
|
57
|
-
export interface WebRTCStreamOptions {
|
|
76
|
+
export interface WebRTCStreamOptions extends DataChannelOptions {
|
|
58
77
|
/**
|
|
59
78
|
* The network channel used for bidirectional peer-to-peer transfers of
|
|
60
79
|
* arbitrary data
|
|
@@ -66,9 +85,10 @@ export interface WebRTCStreamOptions {
|
|
|
66
85
|
* The stream direction
|
|
67
86
|
*/
|
|
68
87
|
direction: Direction;
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
88
|
+
/**
|
|
89
|
+
* A callback invoked when the channel ends
|
|
90
|
+
*/
|
|
91
|
+
onEnd?(err?: Error | undefined): void;
|
|
72
92
|
}
|
|
73
93
|
export declare function createStream(options: WebRTCStreamOptions): WebRTCStream;
|
|
74
94
|
//# sourceMappingURL=stream.d.ts.map
|
package/dist/src/stream.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,KAAK,kBAAkB,EAAE,MAAM,uCAAuC,CAAA;
|
|
1
|
+
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,KAAK,kBAAkB,EAAE,MAAM,uCAAuC,CAAA;AAQ/F,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAE/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAG7D,MAAM,WAAW,gBAAiB,SAAQ,kBAAkB,EAAE,kBAAkB;IAC9E;;;;;OAKG;IACH,OAAO,EAAE,cAAc,CAAA;CACxB;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,QAAmB,CAAA;AAEnD;;GAEG;AACH,eAAO,MAAM,2BAA2B,QAAY,CAAA;AAEpD;;GAEG;AACH,eAAO,MAAM,iBAAiB,IAAI,CAAA;AAElC;;GAEG;AACH,eAAO,MAAM,aAAa,IAAI,CAAA;AAE9B;;GAEG;AACH,eAAO,MAAM,gBAAgB,QAAY,CAAA;AAEzC;;;;GAIG;AACH,eAAO,MAAM,eAAe,OAAO,CAAA;AAEnC,qBAAa,YAAa,SAAQ,cAAc;IAC9C;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IAExC;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;IAEnD,OAAO,CAAC,YAAY,CAAC,CAAgB;IAErC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAQ;IAE1C,OAAO,CAAC,QAAQ,CAAC,6BAA6B,CAAQ;IAEtD;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;IAEvC;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAuB;IACrD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAQ;gBAGzB,IAAI,EAAE,gBAAgB;IA6HnC,aAAa,IAAK,IAAI;IAIhB,YAAY,CAAE,IAAI,EAAE,cAAc,EAAE,WAAW,GAAE,OAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAmC/E,QAAQ,CAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB9C,SAAS,IAAK,OAAO,CAAC,IAAI,CAAC;IAI3B,cAAc,CAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBrD,aAAa,IAAK,OAAO,CAAC,IAAI,CAAC;IAIrC;;OAEG;IACH,OAAO,CAAC,uBAAuB;YAuCjB,SAAS;CAuBxB;AAED,MAAM,WAAW,mBAAoB,SAAQ,kBAAkB;IAC7D;;;;;OAKG;IACH,OAAO,EAAE,cAAc,CAAA;IAEvB;;OAEG;IACH,SAAS,EAAE,SAAS,CAAA;IAEpB;;OAEG;IACH,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,IAAI,CAAA;CACtC;AAED,wBAAgB,YAAY,CAAE,OAAO,EAAE,mBAAmB,GAAG,YAAY,CAQxE"}
|
package/dist/src/stream.js
CHANGED
|
@@ -3,50 +3,100 @@ import { AbstractStream } from '@libp2p/interface/stream-muxer/stream';
|
|
|
3
3
|
import { logger } from '@libp2p/logger';
|
|
4
4
|
import * as lengthPrefixed from 'it-length-prefixed';
|
|
5
5
|
import { pushable } from 'it-pushable';
|
|
6
|
+
import pDefer from 'p-defer';
|
|
6
7
|
import { pEvent, TimeoutError } from 'p-event';
|
|
8
|
+
import pTimeout from 'p-timeout';
|
|
9
|
+
import { raceSignal } from 'race-signal';
|
|
7
10
|
import { Uint8ArrayList } from 'uint8arraylist';
|
|
8
11
|
import { Message } from './pb/message.js';
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
+
/**
|
|
13
|
+
* How much can be buffered to the DataChannel at once
|
|
14
|
+
*/
|
|
12
15
|
export const MAX_BUFFERED_AMOUNT = 16 * 1024 * 1024;
|
|
13
|
-
|
|
16
|
+
/**
|
|
17
|
+
* How long time we wait for the 'bufferedamountlow' event to be emitted
|
|
18
|
+
*/
|
|
14
19
|
export const BUFFERED_AMOUNT_LOW_TIMEOUT = 30 * 1000;
|
|
15
|
-
|
|
20
|
+
/**
|
|
21
|
+
* protobuf field definition overhead
|
|
22
|
+
*/
|
|
16
23
|
export const PROTOBUF_OVERHEAD = 5;
|
|
17
|
-
|
|
24
|
+
/**
|
|
25
|
+
* Length of varint, in bytes
|
|
26
|
+
*/
|
|
18
27
|
export const VARINT_LENGTH = 2;
|
|
28
|
+
/**
|
|
29
|
+
* Max message size that can be sent to the DataChannel
|
|
30
|
+
*/
|
|
31
|
+
export const MAX_MESSAGE_SIZE = 16 * 1024;
|
|
32
|
+
/**
|
|
33
|
+
* When closing streams we send a FIN then wait for the remote to
|
|
34
|
+
* reply with a FIN_ACK. If that does not happen within this timeout
|
|
35
|
+
* we close the stream anyway.
|
|
36
|
+
*/
|
|
37
|
+
export const FIN_ACK_TIMEOUT = 5000;
|
|
19
38
|
export class WebRTCStream extends AbstractStream {
|
|
20
39
|
/**
|
|
21
40
|
* The data channel used to send and receive data
|
|
22
41
|
*/
|
|
23
42
|
channel;
|
|
24
|
-
/**
|
|
25
|
-
* Data channel options
|
|
26
|
-
*/
|
|
27
|
-
dataChannelOptions;
|
|
28
43
|
/**
|
|
29
44
|
* push data from the underlying datachannel to the length prefix decoder
|
|
30
45
|
* and then the protobuf decoder.
|
|
31
46
|
*/
|
|
32
47
|
incomingData;
|
|
33
48
|
messageQueue;
|
|
49
|
+
maxBufferedAmount;
|
|
50
|
+
bufferedAmountLowEventTimeout;
|
|
34
51
|
/**
|
|
35
52
|
* The maximum size of a message in bytes
|
|
36
53
|
*/
|
|
37
|
-
|
|
54
|
+
maxMessageSize;
|
|
55
|
+
/**
|
|
56
|
+
* When this promise is resolved, the remote has sent us a FIN flag
|
|
57
|
+
*/
|
|
58
|
+
receiveFinAck;
|
|
59
|
+
finAckTimeout;
|
|
60
|
+
// private sentFinAck: boolean
|
|
38
61
|
constructor(init) {
|
|
62
|
+
// override onEnd to send/receive FIN_ACK before closing the stream
|
|
63
|
+
const originalOnEnd = init.onEnd;
|
|
64
|
+
init.onEnd = (err) => {
|
|
65
|
+
this.log.trace('readable and writeable ends closed', this.status);
|
|
66
|
+
void Promise.resolve(async () => {
|
|
67
|
+
if (this.timeline.abort != null || this.timeline.reset !== null) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
// wait for FIN_ACK if we haven't received it already
|
|
71
|
+
try {
|
|
72
|
+
await pTimeout(this.receiveFinAck.promise, {
|
|
73
|
+
milliseconds: this.finAckTimeout
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
this.log.error('error receiving FIN_ACK', err);
|
|
78
|
+
}
|
|
79
|
+
})
|
|
80
|
+
.then(() => {
|
|
81
|
+
// stop processing incoming messages
|
|
82
|
+
this.incomingData.end();
|
|
83
|
+
// final cleanup
|
|
84
|
+
originalOnEnd?.(err);
|
|
85
|
+
})
|
|
86
|
+
.catch(err => {
|
|
87
|
+
this.log.error('error ending stream', err);
|
|
88
|
+
});
|
|
89
|
+
};
|
|
39
90
|
super(init);
|
|
40
91
|
this.channel = init.channel;
|
|
41
92
|
this.channel.binaryType = 'arraybuffer';
|
|
42
93
|
this.incomingData = pushable();
|
|
43
94
|
this.messageQueue = new Uint8ArrayList();
|
|
44
|
-
this.
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
this.maxDataSize = init.maxDataSize;
|
|
95
|
+
this.bufferedAmountLowEventTimeout = init.bufferedAmountLowEventTimeout ?? BUFFERED_AMOUNT_LOW_TIMEOUT;
|
|
96
|
+
this.maxBufferedAmount = init.maxBufferedAmount ?? MAX_BUFFERED_AMOUNT;
|
|
97
|
+
this.maxMessageSize = (init.maxMessageSize ?? MAX_MESSAGE_SIZE) - PROTOBUF_OVERHEAD - VARINT_LENGTH;
|
|
98
|
+
this.receiveFinAck = pDefer();
|
|
99
|
+
this.finAckTimeout = init.closeTimeout ?? FIN_ACK_TIMEOUT;
|
|
50
100
|
// set up initial state
|
|
51
101
|
switch (this.channel.readyState) {
|
|
52
102
|
case 'open':
|
|
@@ -67,16 +117,21 @@ export class WebRTCStream extends AbstractStream {
|
|
|
67
117
|
// handle RTCDataChannel events
|
|
68
118
|
this.channel.onopen = (_evt) => {
|
|
69
119
|
this.timeline.open = new Date().getTime();
|
|
70
|
-
if (this.messageQueue != null) {
|
|
120
|
+
if (this.messageQueue != null && this.messageQueue.byteLength > 0) {
|
|
121
|
+
this.log.trace('dataChannel opened, sending queued messages', this.messageQueue.byteLength, this.channel.readyState);
|
|
71
122
|
// send any queued messages
|
|
72
123
|
this._sendMessage(this.messageQueue)
|
|
73
124
|
.catch(err => {
|
|
125
|
+
this.log.error('error sending queued messages', err);
|
|
74
126
|
this.abort(err);
|
|
75
127
|
});
|
|
76
|
-
this.messageQueue = undefined;
|
|
77
128
|
}
|
|
129
|
+
this.messageQueue = undefined;
|
|
78
130
|
};
|
|
79
131
|
this.channel.onclose = (_evt) => {
|
|
132
|
+
// if the channel has closed we'll never receive a FIN_ACK so resolve the
|
|
133
|
+
// promise so we don't try to wait later
|
|
134
|
+
this.receiveFinAck.resolve();
|
|
80
135
|
void this.close().catch(err => {
|
|
81
136
|
this.log.error('error closing stream after channel closed', err);
|
|
82
137
|
});
|
|
@@ -85,7 +140,6 @@ export class WebRTCStream extends AbstractStream {
|
|
|
85
140
|
const err = evt.error;
|
|
86
141
|
this.abort(err);
|
|
87
142
|
};
|
|
88
|
-
const self = this;
|
|
89
143
|
this.channel.onmessage = async (event) => {
|
|
90
144
|
const { data } = event;
|
|
91
145
|
if (data === null || data.byteLength === 0) {
|
|
@@ -93,11 +147,12 @@ export class WebRTCStream extends AbstractStream {
|
|
|
93
147
|
}
|
|
94
148
|
this.incomingData.push(new Uint8Array(data, 0, data.byteLength));
|
|
95
149
|
};
|
|
150
|
+
const self = this;
|
|
96
151
|
// pipe framed protobuf messages through a length prefixed decoder, and
|
|
97
152
|
// surface data from the `Message.message` field through a source.
|
|
98
153
|
Promise.resolve().then(async () => {
|
|
99
154
|
for await (const buf of lengthPrefixed.decode(this.incomingData)) {
|
|
100
|
-
const message = self.processIncomingProtobuf(buf
|
|
155
|
+
const message = self.processIncomingProtobuf(buf);
|
|
101
156
|
if (message != null) {
|
|
102
157
|
self.sourcePush(new Uint8ArrayList(message));
|
|
103
158
|
}
|
|
@@ -111,19 +166,19 @@ export class WebRTCStream extends AbstractStream {
|
|
|
111
166
|
// opening new streams is handled by WebRTC so this is a noop
|
|
112
167
|
}
|
|
113
168
|
async _sendMessage(data, checkBuffer = true) {
|
|
114
|
-
if (checkBuffer && this.channel.bufferedAmount > this.
|
|
169
|
+
if (checkBuffer && this.channel.bufferedAmount > this.maxBufferedAmount) {
|
|
115
170
|
try {
|
|
116
|
-
await pEvent(this.channel, 'bufferedamountlow', { timeout: this.
|
|
171
|
+
await pEvent(this.channel, 'bufferedamountlow', { timeout: this.bufferedAmountLowEventTimeout });
|
|
117
172
|
}
|
|
118
173
|
catch (err) {
|
|
119
174
|
if (err instanceof TimeoutError) {
|
|
120
|
-
throw new
|
|
175
|
+
throw new CodeError(`Timed out waiting for DataChannel buffer to clear after ${this.bufferedAmountLowEventTimeout}ms`, 'ERR_BUFFER_CLEAR_TIMEOUT');
|
|
121
176
|
}
|
|
122
177
|
throw err;
|
|
123
178
|
}
|
|
124
179
|
}
|
|
125
180
|
if (this.channel.readyState === 'closed' || this.channel.readyState === 'closing') {
|
|
126
|
-
throw new CodeError(
|
|
181
|
+
throw new CodeError(`Invalid datachannel state - ${this.channel.readyState}`, 'ERR_INVALID_STATE');
|
|
127
182
|
}
|
|
128
183
|
if (this.channel.readyState === 'open') {
|
|
129
184
|
// send message without copying data
|
|
@@ -144,9 +199,11 @@ export class WebRTCStream extends AbstractStream {
|
|
|
144
199
|
}
|
|
145
200
|
}
|
|
146
201
|
async sendData(data) {
|
|
202
|
+
// sending messages is an async operation so use a copy of the list as it
|
|
203
|
+
// may be changed beneath us
|
|
147
204
|
data = data.sublist();
|
|
148
205
|
while (data.byteLength > 0) {
|
|
149
|
-
const toSend = Math.min(data.byteLength, this.
|
|
206
|
+
const toSend = Math.min(data.byteLength, this.maxMessageSize);
|
|
150
207
|
const buf = data.subarray(0, toSend);
|
|
151
208
|
const msgbuf = Message.encode({ message: buf });
|
|
152
209
|
const sendbuf = lengthPrefixed.encode.single(msgbuf);
|
|
@@ -157,8 +214,25 @@ export class WebRTCStream extends AbstractStream {
|
|
|
157
214
|
async sendReset() {
|
|
158
215
|
await this._sendFlag(Message.Flag.RESET);
|
|
159
216
|
}
|
|
160
|
-
async sendCloseWrite() {
|
|
161
|
-
await this._sendFlag(Message.Flag.FIN);
|
|
217
|
+
async sendCloseWrite(options) {
|
|
218
|
+
const sent = await this._sendFlag(Message.Flag.FIN);
|
|
219
|
+
if (sent) {
|
|
220
|
+
this.log.trace('awaiting FIN_ACK');
|
|
221
|
+
try {
|
|
222
|
+
await raceSignal(this.receiveFinAck.promise, options?.signal, {
|
|
223
|
+
errorMessage: 'sending close-write was aborted before FIN_ACK was received',
|
|
224
|
+
errorCode: 'ERR_FIN_ACK_NOT_RECEIVED'
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
catch (err) {
|
|
228
|
+
this.log.error('failed to await FIN_ACK', err);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
this.log.trace('sending FIN failed, not awaiting FIN_ACK');
|
|
233
|
+
}
|
|
234
|
+
// if we've attempted to receive a FIN_ACK, do not try again
|
|
235
|
+
this.receiveFinAck.resolve();
|
|
162
236
|
}
|
|
163
237
|
async sendCloseRead() {
|
|
164
238
|
await this._sendFlag(Message.Flag.STOP_SENDING);
|
|
@@ -169,10 +243,15 @@ export class WebRTCStream extends AbstractStream {
|
|
|
169
243
|
processIncomingProtobuf(buffer) {
|
|
170
244
|
const message = Message.decode(buffer);
|
|
171
245
|
if (message.flag !== undefined) {
|
|
246
|
+
this.log.trace('incoming flag %s, write status "%s", read status "%s"', message.flag, this.writeStatus, this.readStatus);
|
|
172
247
|
if (message.flag === Message.Flag.FIN) {
|
|
173
248
|
// We should expect no more data from the remote, stop reading
|
|
174
|
-
this.incomingData.end();
|
|
175
249
|
this.remoteCloseWrite();
|
|
250
|
+
this.log.trace('sending FIN_ACK');
|
|
251
|
+
void this._sendFlag(Message.Flag.FIN_ACK)
|
|
252
|
+
.catch(err => {
|
|
253
|
+
this.log.error('error sending FIN_ACK immediately', err);
|
|
254
|
+
});
|
|
176
255
|
}
|
|
177
256
|
if (message.flag === Message.Flag.RESET) {
|
|
178
257
|
// Stop reading and writing to the stream immediately
|
|
@@ -182,26 +261,43 @@ export class WebRTCStream extends AbstractStream {
|
|
|
182
261
|
// The remote has stopped reading
|
|
183
262
|
this.remoteCloseRead();
|
|
184
263
|
}
|
|
264
|
+
if (message.flag === Message.Flag.FIN_ACK) {
|
|
265
|
+
this.log.trace('received FIN_ACK');
|
|
266
|
+
this.receiveFinAck.resolve();
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
// ignore data messages if we've closed the readable end already
|
|
270
|
+
if (this.readStatus === 'ready') {
|
|
271
|
+
return message.message;
|
|
185
272
|
}
|
|
186
|
-
return message.message;
|
|
187
273
|
}
|
|
188
274
|
async _sendFlag(flag) {
|
|
189
|
-
this.
|
|
275
|
+
if (this.channel.readyState !== 'open') {
|
|
276
|
+
// flags can be sent while we or the remote are closing the datachannel so
|
|
277
|
+
// if the channel isn't open, don't try to send it but return false to let
|
|
278
|
+
// the caller know and act if they need to
|
|
279
|
+
this.log.trace('not sending flag %s because channel is not open', flag.toString());
|
|
280
|
+
return false;
|
|
281
|
+
}
|
|
282
|
+
this.log.trace('sending flag %s', flag.toString());
|
|
190
283
|
const msgbuf = Message.encode({ flag });
|
|
191
284
|
const prefixedBuf = lengthPrefixed.encode.single(msgbuf);
|
|
192
|
-
|
|
285
|
+
try {
|
|
286
|
+
await this._sendMessage(prefixedBuf, false);
|
|
287
|
+
return true;
|
|
288
|
+
}
|
|
289
|
+
catch (err) {
|
|
290
|
+
this.log.error('could not send flag %s', flag.toString(), err);
|
|
291
|
+
}
|
|
292
|
+
return false;
|
|
193
293
|
}
|
|
194
294
|
}
|
|
195
295
|
export function createStream(options) {
|
|
196
|
-
const { channel, direction
|
|
296
|
+
const { channel, direction } = options;
|
|
197
297
|
return new WebRTCStream({
|
|
198
298
|
id: direction === 'inbound' ? (`i${channel.id}`) : `r${channel.id}`,
|
|
199
|
-
direction,
|
|
200
|
-
|
|
201
|
-
dataChannelOptions,
|
|
202
|
-
onEnd,
|
|
203
|
-
channel,
|
|
204
|
-
log: logger(`libp2p:webrtc:stream:${direction}:${channel.id}`)
|
|
299
|
+
log: logger(`libp2p:webrtc:stream:${direction}:${channel.id}`),
|
|
300
|
+
...options
|
|
205
301
|
});
|
|
206
302
|
}
|
|
207
303
|
//# sourceMappingURL=stream.js.map
|
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,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,EAAE,cAAc,EAA2B,MAAM,uCAAuC,CAAA;AAC/F,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,KAAK,cAAc,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAiB,QAAQ,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAC9C,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,10 @@
|
|
|
1
1
|
export declare const isFirefox: boolean;
|
|
2
2
|
export declare const nopSource: () => AsyncGenerator<Uint8Array, any, unknown>;
|
|
3
3
|
export declare const nopSink: (_: any) => Promise<void>;
|
|
4
|
+
export declare const DATA_CHANNEL_DRAIN_TIMEOUT: number;
|
|
5
|
+
export declare function drainAndClose(channel: RTCDataChannel, direction: string, drainTimeout?: number): void;
|
|
6
|
+
export interface AbortPromiseOptions {
|
|
7
|
+
signal?: AbortSignal;
|
|
8
|
+
message?: string;
|
|
9
|
+
}
|
|
4
10
|
//# 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":"AAQA,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;AAE1D,eAAO,MAAM,0BAA0B,QAAY,CAAA;AAEnD,wBAAgB,aAAa,CAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,GAAE,MAAmC,GAAG,IAAI,CA8ClI;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB"}
|
package/dist/src/util.js
CHANGED
|
@@ -1,6 +1,52 @@
|
|
|
1
|
+
import { logger } from '@libp2p/logger';
|
|
1
2
|
import { detect } from 'detect-browser';
|
|
3
|
+
import pDefer from 'p-defer';
|
|
4
|
+
import pTimeout from 'p-timeout';
|
|
5
|
+
const log = logger('libp2p:webrtc:utils');
|
|
2
6
|
const browser = detect();
|
|
3
7
|
export const isFirefox = ((browser != null) && browser.name === 'firefox');
|
|
4
8
|
export const nopSource = async function* nop() { };
|
|
5
9
|
export const nopSink = async (_) => { };
|
|
10
|
+
export const DATA_CHANNEL_DRAIN_TIMEOUT = 30 * 1000;
|
|
11
|
+
export function drainAndClose(channel, direction, drainTimeout = DATA_CHANNEL_DRAIN_TIMEOUT) {
|
|
12
|
+
if (channel.readyState !== 'open') {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
void Promise.resolve()
|
|
16
|
+
.then(async () => {
|
|
17
|
+
// wait for bufferedAmount to become zero
|
|
18
|
+
if (channel.bufferedAmount > 0) {
|
|
19
|
+
log('%s drain channel with %d buffered bytes', direction, channel.bufferedAmount);
|
|
20
|
+
const deferred = pDefer();
|
|
21
|
+
let drained = false;
|
|
22
|
+
channel.bufferedAmountLowThreshold = 0;
|
|
23
|
+
const closeListener = () => {
|
|
24
|
+
if (!drained) {
|
|
25
|
+
log('%s drain channel closed before drain', direction);
|
|
26
|
+
deferred.resolve();
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
channel.addEventListener('close', closeListener, {
|
|
30
|
+
once: true
|
|
31
|
+
});
|
|
32
|
+
channel.addEventListener('bufferedamountlow', () => {
|
|
33
|
+
drained = true;
|
|
34
|
+
channel.removeEventListener('close', closeListener);
|
|
35
|
+
deferred.resolve();
|
|
36
|
+
});
|
|
37
|
+
await pTimeout(deferred.promise, {
|
|
38
|
+
milliseconds: drainTimeout
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
})
|
|
42
|
+
.then(async () => {
|
|
43
|
+
// only close if the channel is still open
|
|
44
|
+
if (channel.readyState === 'open') {
|
|
45
|
+
channel.close();
|
|
46
|
+
}
|
|
47
|
+
})
|
|
48
|
+
.catch(err => {
|
|
49
|
+
log.error('error closing outbound stream', err);
|
|
50
|
+
});
|
|
51
|
+
}
|
|
6
52
|
//# 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,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,MAAM,MAAM,SAAS,CAAA;AAC5B,OAAO,QAAQ,MAAM,WAAW,CAAA;AAEhC,MAAM,GAAG,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAA;AAEzC,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;AAE1D,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,GAAG,IAAI,CAAA;AAEnD,MAAM,UAAU,aAAa,CAAE,OAAuB,EAAE,SAAiB,EAAE,eAAuB,0BAA0B;IAC1H,IAAI,OAAO,CAAC,UAAU,KAAK,MAAM,EAAE;QACjC,OAAM;KACP;IAED,KAAK,OAAO,CAAC,OAAO,EAAE;SACnB,IAAI,CAAC,KAAK,IAAI,EAAE;QACf,yCAAyC;QACzC,IAAI,OAAO,CAAC,cAAc,GAAG,CAAC,EAAE;YAC9B,GAAG,CAAC,yCAAyC,EAAE,SAAS,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;YACjF,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAA;YACzB,IAAI,OAAO,GAAG,KAAK,CAAA;YAEnB,OAAO,CAAC,0BAA0B,GAAG,CAAC,CAAA;YAEtC,MAAM,aAAa,GAAG,GAAS,EAAE;gBAC/B,IAAI,CAAC,OAAO,EAAE;oBACZ,GAAG,CAAC,sCAAsC,EAAE,SAAS,CAAC,CAAA;oBACtD,QAAQ,CAAC,OAAO,EAAE,CAAA;iBACnB;YACH,CAAC,CAAA;YAED,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,aAAa,EAAE;gBAC/C,IAAI,EAAE,IAAI;aACX,CAAC,CAAA;YAEF,OAAO,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,GAAG,EAAE;gBACjD,OAAO,GAAG,IAAI,CAAA;gBACd,OAAO,CAAC,mBAAmB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;gBACnD,QAAQ,CAAC,OAAO,EAAE,CAAA;YACpB,CAAC,CAAC,CAAA;YAEF,MAAM,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE;gBAC/B,YAAY,EAAE,YAAY;aAC3B,CAAC,CAAA;SACH;IACH,CAAC,CAAC;SACD,IAAI,CAAC,KAAK,IAAI,EAAE;QACf,0CAA0C;QAC1C,IAAI,OAAO,CAAC,UAAU,KAAK,MAAM,EAAE;YACjC,OAAO,CAAC,KAAK,EAAE,CAAA;SAChB;IACH,CAAC,CAAC;SACD,KAAK,CAAC,GAAG,CAAC,EAAE;QACX,GAAG,CAAC,KAAK,CAAC,+BAA+B,EAAE,GAAG,CAAC,CAAA;IACjD,CAAC,CAAC,CAAA;AACN,CAAC"}
|
package/dist/typedoc-urls.json
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
+
"DataChannelOptions": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_webrtc.DataChannelOptions.html",
|
|
3
|
+
".:DataChannelOptions": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_webrtc.DataChannelOptions.html",
|
|
2
4
|
"webRTC": "https://libp2p.github.io/js-libp2p/functions/_libp2p_webrtc.webRTC.html",
|
|
3
5
|
".:webRTC": "https://libp2p.github.io/js-libp2p/functions/_libp2p_webrtc.webRTC.html",
|
|
4
6
|
"webRTCDirect": "https://libp2p.github.io/js-libp2p/functions/_libp2p_webrtc.webRTCDirect.html",
|