@libp2p/webrtc 5.2.24-87bc8d4fb → 5.2.24-9a9b11fd4

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.
Files changed (90) hide show
  1. package/README.md +10 -20
  2. package/dist/index.min.js +18 -18
  3. package/dist/index.min.js.map +4 -4
  4. package/dist/src/constants.d.ts +4 -23
  5. package/dist/src/constants.d.ts.map +1 -1
  6. package/dist/src/constants.js +4 -23
  7. package/dist/src/constants.js.map +1 -1
  8. package/dist/src/index.d.ts +20 -22
  9. package/dist/src/index.d.ts.map +1 -1
  10. package/dist/src/index.js +12 -22
  11. package/dist/src/index.js.map +1 -1
  12. package/dist/src/muxer.d.ts +14 -46
  13. package/dist/src/muxer.d.ts.map +1 -1
  14. package/dist/src/muxer.js +30 -138
  15. package/dist/src/muxer.js.map +1 -1
  16. package/dist/src/private-to-private/initiate-connection.d.ts +2 -3
  17. package/dist/src/private-to-private/initiate-connection.d.ts.map +1 -1
  18. package/dist/src/private-to-private/initiate-connection.js +37 -5
  19. package/dist/src/private-to-private/initiate-connection.js.map +1 -1
  20. package/dist/src/private-to-private/signaling-stream-handler.d.ts +4 -4
  21. package/dist/src/private-to-private/signaling-stream-handler.d.ts.map +1 -1
  22. package/dist/src/private-to-private/signaling-stream-handler.js +19 -7
  23. package/dist/src/private-to-private/signaling-stream-handler.js.map +1 -1
  24. package/dist/src/private-to-private/transport.d.ts +2 -9
  25. package/dist/src/private-to-private/transport.d.ts.map +1 -1
  26. package/dist/src/private-to-private/transport.js +30 -15
  27. package/dist/src/private-to-private/transport.js.map +1 -1
  28. package/dist/src/private-to-private/util.d.ts +3 -2
  29. package/dist/src/private-to-private/util.d.ts.map +1 -1
  30. package/dist/src/private-to-private/util.js +26 -14
  31. package/dist/src/private-to-private/util.js.map +1 -1
  32. package/dist/src/private-to-public/listener.d.ts.map +1 -1
  33. package/dist/src/private-to-public/listener.js +21 -15
  34. package/dist/src/private-to-public/listener.js.map +1 -1
  35. package/dist/src/private-to-public/transport.d.ts +0 -8
  36. package/dist/src/private-to-public/transport.d.ts.map +1 -1
  37. package/dist/src/private-to-public/transport.js +3 -2
  38. package/dist/src/private-to-public/transport.js.map +1 -1
  39. package/dist/src/private-to-public/utils/connect.d.ts +1 -1
  40. package/dist/src/private-to-public/utils/connect.d.ts.map +1 -1
  41. package/dist/src/private-to-public/utils/connect.js +17 -14
  42. package/dist/src/private-to-public/utils/connect.js.map +1 -1
  43. package/dist/src/private-to-public/utils/get-rtcpeerconnection.d.ts +4 -4
  44. package/dist/src/private-to-public/utils/get-rtcpeerconnection.d.ts.map +1 -1
  45. package/dist/src/private-to-public/utils/get-rtcpeerconnection.js +13 -2
  46. package/dist/src/private-to-public/utils/get-rtcpeerconnection.js.map +1 -1
  47. package/dist/src/private-to-public/utils/sdp.d.ts.map +1 -1
  48. package/dist/src/private-to-public/utils/sdp.js +25 -13
  49. package/dist/src/private-to-public/utils/sdp.js.map +1 -1
  50. package/dist/src/private-to-public/utils/stun-listener.js +1 -1
  51. package/dist/src/private-to-public/utils/stun-listener.js.map +1 -1
  52. package/dist/src/rtcpeerconnection-to-conn.d.ts +12 -0
  53. package/dist/src/rtcpeerconnection-to-conn.d.ts.map +1 -0
  54. package/dist/src/rtcpeerconnection-to-conn.js +46 -0
  55. package/dist/src/rtcpeerconnection-to-conn.js.map +1 -0
  56. package/dist/src/stream.d.ts +14 -26
  57. package/dist/src/stream.d.ts.map +1 -1
  58. package/dist/src/stream.js +134 -204
  59. package/dist/src/stream.js.map +1 -1
  60. package/dist/src/util.d.ts +3 -1
  61. package/dist/src/util.d.ts.map +1 -1
  62. package/dist/src/util.js +19 -0
  63. package/dist/src/util.js.map +1 -1
  64. package/dist/src/webrtc/index.d.ts +1 -1
  65. package/dist/src/webrtc/index.d.ts.map +1 -1
  66. package/dist/src/webrtc/index.js +1 -1
  67. package/dist/src/webrtc/index.js.map +1 -1
  68. package/package.json +26 -29
  69. package/src/constants.ts +5 -28
  70. package/src/index.ts +21 -22
  71. package/src/muxer.ts +39 -169
  72. package/src/private-to-private/initiate-connection.ts +46 -8
  73. package/src/private-to-private/signaling-stream-handler.ts +23 -10
  74. package/src/private-to-private/transport.ts +33 -25
  75. package/src/private-to-private/util.ts +33 -16
  76. package/src/private-to-public/listener.ts +22 -15
  77. package/src/private-to-public/transport.ts +3 -12
  78. package/src/private-to-public/utils/connect.ts +18 -15
  79. package/src/private-to-public/utils/get-rtcpeerconnection.ts +16 -4
  80. package/src/private-to-public/utils/sdp.ts +29 -13
  81. package/src/private-to-public/utils/stun-listener.ts +1 -1
  82. package/src/rtcpeerconnection-to-conn.ts +66 -0
  83. package/src/stream.ts +153 -237
  84. package/src/util.ts +22 -1
  85. package/src/webrtc/index.ts +1 -1
  86. package/dist/src/maconn.d.ts +0 -58
  87. package/dist/src/maconn.d.ts.map +0 -1
  88. package/dist/src/maconn.js +0 -56
  89. package/dist/src/maconn.js.map +0 -1
  90. package/src/maconn.ts +0 -101
@@ -0,0 +1,46 @@
1
+ import { AbstractMultiaddrConnection } from '@libp2p/utils';
2
+ class RTCPeerConnectionMultiaddrConnection extends AbstractMultiaddrConnection {
3
+ peerConnection;
4
+ constructor(init) {
5
+ super(init);
6
+ this.peerConnection = init.peerConnection;
7
+ const initialState = init.peerConnection.connectionState;
8
+ this.peerConnection.onconnectionstatechange = () => {
9
+ this.log.trace('peer connection state change %s initial state %s', this.peerConnection.connectionState, initialState);
10
+ if (this.peerConnection.connectionState === 'disconnected' || this.peerConnection.connectionState === 'failed' || this.peerConnection.connectionState === 'closed') {
11
+ // nothing else to do but close the connection
12
+ this.onTransportClosed();
13
+ // only necessary with node-datachannel
14
+ // https://github.com/murat-dogan/node-datachannel/issues/366#issuecomment-3228453155
15
+ this.peerConnection.close();
16
+ }
17
+ };
18
+ }
19
+ sendData(data) {
20
+ return {
21
+ sentBytes: data.byteLength,
22
+ canSendMore: true
23
+ };
24
+ }
25
+ async sendClose(options) {
26
+ this.peerConnection.close();
27
+ options?.signal?.throwIfAborted();
28
+ }
29
+ sendReset() {
30
+ this.peerConnection.close();
31
+ }
32
+ sendPause() {
33
+ // TODO: readable backpressure?
34
+ }
35
+ sendResume() {
36
+ // TODO: readable backpressure?
37
+ }
38
+ }
39
+ /**
40
+ * Convert a RTCPeerConnection into a MultiaddrConnection
41
+ * https://github.com/libp2p/interface-transport#multiaddrconnection
42
+ */
43
+ export const toMultiaddrConnection = (init) => {
44
+ return new RTCPeerConnectionMultiaddrConnection(init);
45
+ };
46
+ //# sourceMappingURL=rtcpeerconnection-to-conn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rtcpeerconnection-to-conn.js","sourceRoot":"","sources":["../../src/rtcpeerconnection-to-conn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAA;AAU3D,MAAM,oCAAqC,SAAQ,2BAA2B;IACpE,cAAc,CAAmB;IAEzC,YAAa,IAA8C;QACzD,KAAK,CAAC,IAAI,CAAC,CAAA;QAEX,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,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,kDAAkD,EAAE,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE,YAAY,CAAC,CAAA;YAErH,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,CAAC;gBACnK,8CAA8C;gBAC9C,IAAI,CAAC,iBAAiB,EAAE,CAAA;gBAExB,uCAAuC;gBACvC,qFAAqF;gBACrF,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAA;YAC7B,CAAC;QACH,CAAC,CAAA;IACH,CAAC;IAED,QAAQ,CAAE,IAAoB;QAC5B,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,WAAW,EAAE,IAAI;SAClB,CAAA;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CAAE,OAAsB;QACrC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAA;QAC3B,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAA;IACnC,CAAC;IAED,SAAS;QACP,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAA;IAC7B,CAAC;IAED,SAAS;QACP,+BAA+B;IACjC,CAAC;IAED,UAAU;QACR,+BAA+B;IACjC,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,IAA8C,EAAuB,EAAE;IAC3G,OAAO,IAAI,oCAAoC,CAAC,IAAI,CAAC,CAAA;AACvD,CAAC,CAAA"}
@@ -1,8 +1,8 @@
1
- import { AbstractStream } from '@libp2p/utils/abstract-stream';
1
+ import { AbstractStream } from '@libp2p/utils';
2
2
  import { Uint8ArrayList } from 'uint8arraylist';
3
3
  import type { DataChannelOptions } from './index.js';
4
- import type { AbortOptions, Direction, Logger } from '@libp2p/interface';
5
- import type { AbstractStreamInit } from '@libp2p/utils/abstract-stream';
4
+ import type { AbortOptions, MessageStreamDirection, Logger } from '@libp2p/interface';
5
+ import type { AbstractStreamInit, SendResult } from '@libp2p/utils';
6
6
  export interface WebRTCStreamInit extends AbstractStreamInit, DataChannelOptions {
7
7
  /**
8
8
  * The network channel used for bidirectional peer-to-peer transfers of
@@ -24,30 +24,22 @@ export declare class WebRTCStream extends AbstractStream {
24
24
  */
25
25
  private readonly incomingData;
26
26
  private readonly maxBufferedAmount;
27
- private readonly bufferedAmountLowEventTimeout;
28
- /**
29
- * The maximum size of a message in bytes
30
- */
31
- private readonly maxMessageSize;
32
- /**
33
- * When this promise is resolved, the remote has sent us a FIN flag
34
- */
35
- private readonly receiveFinAck;
36
- private readonly finAckTimeout;
37
- private readonly openTimeout;
38
- private readonly closeController;
27
+ private receivedFinAck?;
28
+ private finAckTimeout;
39
29
  constructor(init: WebRTCStreamInit);
40
30
  sendNewStream(): void;
41
- _sendMessage(data: Uint8ArrayList, checkBuffer?: boolean): Promise<void>;
42
- sendData(data: Uint8ArrayList): Promise<void>;
43
- sendReset(): Promise<void>;
44
- sendCloseWrite(options: AbortOptions): Promise<void>;
45
- sendCloseRead(): Promise<void>;
31
+ _sendMessage(data: Uint8ArrayList): void;
32
+ sendData(data: Uint8ArrayList): SendResult;
33
+ sendReset(err: Error): void;
34
+ sendCloseWrite(options?: AbortOptions): Promise<void>;
35
+ sendCloseRead(options?: AbortOptions): Promise<void>;
46
36
  /**
47
37
  * Handle incoming
48
38
  */
49
39
  private processIncomingProtobuf;
50
40
  private _sendFlag;
41
+ sendPause(): void;
42
+ sendResume(): void;
51
43
  }
52
44
  export interface WebRTCStreamOptions extends DataChannelOptions {
53
45
  /**
@@ -60,11 +52,7 @@ export interface WebRTCStreamOptions extends DataChannelOptions {
60
52
  /**
61
53
  * The stream direction
62
54
  */
63
- direction: Direction;
64
- /**
65
- * A callback invoked when the channel ends
66
- */
67
- onEnd?(err?: Error | undefined): void;
55
+ direction: MessageStreamDirection;
68
56
  /**
69
57
  * The logger to create a scope from
70
58
  */
@@ -73,7 +61,7 @@ export interface WebRTCStreamOptions extends DataChannelOptions {
73
61
  * If true the underlying datachannel is being used to perform the noise
74
62
  * handshake during connection establishment
75
63
  */
76
- handshake?: boolean;
64
+ isHandshake?: boolean;
77
65
  }
78
66
  export declare function createStream(options: WebRTCStreamOptions): WebRTCStream;
79
67
  //# sourceMappingURL=stream.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAQ9D,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAG/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAIvE,MAAM,WAAW,gBAAiB,SAAQ,kBAAkB,EAAE,kBAAkB;IAC9E;;;;;OAKG;IACH,OAAO,EAAE,cAAc,CAAA;IAEvB,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,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,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;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;IACpC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;gBAEpC,IAAI,EAAE,gBAAgB;IA+HnC,aAAa,IAAK,IAAI;IAIhB,YAAY,CAAE,IAAI,EAAE,cAAc,EAAE,WAAW,GAAE,OAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAoD/E,QAAQ,CAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB9C,SAAS,IAAK,OAAO,CAAC,IAAI,CAAC;IAU3B,cAAc,CAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BrD,aAAa,IAAK,OAAO,CAAC,IAAI,CAAC;IAQrC;;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;IAErC;;OAEG;IACH,GAAG,EAAE,MAAM,CAAA;IAEX;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,wBAAgB,YAAY,CAAE,OAAO,EAAE,mBAAmB,GAAG,YAAY,CAQxE"}
1
+ {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAK9C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAI/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AACrF,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAGnE,MAAM,WAAW,gBAAiB,SAAQ,kBAAkB,EAAE,kBAAkB;IAC9E;;;;;OAKG;IACH,OAAO,EAAE,cAAc,CAAA;IAEvB,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,qBAAa,YAAa,SAAQ,cAAc;IAC9C;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IAExC;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;IACnD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAQ;IAC1C,OAAO,CAAC,cAAc,CAAC,CAA4B;IACnD,OAAO,CAAC,aAAa,CAAQ;gBAEhB,IAAI,EAAE,gBAAgB;IAsFnC,aAAa,IAAK,IAAI;IAItB,YAAY,CAAE,IAAI,EAAE,cAAc,GAAG,IAAI;IAqBzC,QAAQ,CAAE,IAAI,EAAE,cAAc,GAAG,UAAU;IAsC3C,SAAS,CAAE,GAAG,EAAE,KAAK,GAAG,IAAI;IAUtB,cAAc,CAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBtD,aAAa,CAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3D;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAmC/B,OAAO,CAAC,SAAS;IAwBjB,SAAS,IAAK,IAAI;IAIlB,UAAU,IAAK,IAAI;CAGpB;AAED,MAAM,WAAW,mBAAoB,SAAQ,kBAAkB;IAC7D;;;;;OAKG;IACH,OAAO,EAAE,cAAc,CAAA;IAEvB;;OAEG;IACH,SAAS,EAAE,sBAAsB,CAAA;IAEjC;;OAEG;IACH,GAAG,EAAE,MAAM,CAAA;IAEX;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,wBAAgB,YAAY,CAAE,OAAO,EAAE,mBAAmB,GAAG,YAAY,CASxE"}
@@ -1,15 +1,13 @@
1
- import { StreamStateError, TimeoutError } from '@libp2p/interface';
2
- import { AbstractStream } from '@libp2p/utils/abstract-stream';
3
- import { anySignal } from 'any-signal';
1
+ import { StreamResetError, StreamStateError } from '@libp2p/interface';
2
+ import { AbstractStream } from '@libp2p/utils';
4
3
  import * as lengthPrefixed from 'it-length-prefixed';
5
4
  import { pushable } from 'it-pushable';
6
- import pDefer from 'p-defer';
7
- import pTimeout from 'p-timeout';
8
- import { raceEvent } from 'race-event';
5
+ import { pEvent } from 'p-event';
9
6
  import { raceSignal } from 'race-signal';
10
7
  import { Uint8ArrayList } from 'uint8arraylist';
11
- import { BUFFERED_AMOUNT_LOW_TIMEOUT, FIN_ACK_TIMEOUT, MAX_BUFFERED_AMOUNT, MAX_MESSAGE_SIZE, OPEN_TIMEOUT, PROTOBUF_OVERHEAD } from './constants.js';
8
+ import { DEFAULT_FIN_ACK_TIMEOUT, MAX_BUFFERED_AMOUNT, MAX_MESSAGE_SIZE, PROTOBUF_OVERHEAD } from './constants.js';
12
9
  import { Message } from './private-to-public/pb/message.js';
10
+ import { isFirefox } from './util.js';
13
11
  export class WebRTCStream extends AbstractStream {
14
12
  /**
15
13
  * The data channel used to send and receive data
@@ -21,266 +19,191 @@ export class WebRTCStream extends AbstractStream {
21
19
  */
22
20
  incomingData;
23
21
  maxBufferedAmount;
24
- bufferedAmountLowEventTimeout;
25
- /**
26
- * The maximum size of a message in bytes
27
- */
28
- maxMessageSize;
29
- /**
30
- * When this promise is resolved, the remote has sent us a FIN flag
31
- */
32
- receiveFinAck;
22
+ receivedFinAck;
33
23
  finAckTimeout;
34
- openTimeout;
35
- closeController;
36
24
  constructor(init) {
37
- // override onEnd to send/receive FIN_ACK before closing the stream
38
- const originalOnEnd = init.onEnd;
39
- init.onEnd = (err) => {
40
- this.log.trace('readable and writeable ends closed with status "%s"', this.status);
41
- void Promise.resolve(async () => {
42
- if (this.timeline.abort != null || this.timeline.reset !== null) {
43
- return;
44
- }
45
- // wait for FIN_ACK if we haven't received it already
46
- try {
47
- await pTimeout(this.receiveFinAck.promise, {
48
- milliseconds: this.finAckTimeout
49
- });
50
- }
51
- catch (err) {
52
- this.log.error('error receiving FIN_ACK', err);
53
- }
54
- })
55
- .then(() => {
56
- // stop processing incoming messages
57
- this.incomingData.end();
58
- // final cleanup
59
- originalOnEnd?.(err);
60
- })
61
- .catch(err => {
62
- this.log.error('error ending stream', err);
63
- })
64
- .finally(() => {
65
- this.channel.close();
66
- });
67
- };
68
- super(init);
25
+ super({
26
+ ...init,
27
+ maxMessageSize: (init.maxMessageSize ?? MAX_MESSAGE_SIZE) - PROTOBUF_OVERHEAD
28
+ });
69
29
  this.channel = init.channel;
70
30
  this.channel.binaryType = 'arraybuffer';
71
31
  this.incomingData = pushable();
72
- this.bufferedAmountLowEventTimeout = init.bufferedAmountLowEventTimeout ?? BUFFERED_AMOUNT_LOW_TIMEOUT;
73
32
  this.maxBufferedAmount = init.maxBufferedAmount ?? MAX_BUFFERED_AMOUNT;
74
- this.maxMessageSize = (init.maxMessageSize ?? MAX_MESSAGE_SIZE) - PROTOBUF_OVERHEAD;
75
- this.receiveFinAck = pDefer();
76
- this.finAckTimeout = init.closeTimeout ?? FIN_ACK_TIMEOUT;
77
- this.openTimeout = init.openTimeout ?? OPEN_TIMEOUT;
78
- this.closeController = new AbortController();
79
- // set up initial state
80
- switch (this.channel.readyState) {
81
- case 'open':
82
- this.timeline.open = new Date().getTime();
83
- break;
84
- case 'closed':
85
- case 'closing':
86
- if (this.timeline.close === undefined || this.timeline.close === 0) {
87
- this.timeline.close = Date.now();
88
- }
89
- break;
90
- case 'connecting':
91
- // noop
92
- break;
93
- default:
94
- this.log.error('unknown datachannel state %s', this.channel.readyState);
95
- throw new StreamStateError('Unknown datachannel state');
96
- }
33
+ this.finAckTimeout = init.finAckTimeout ?? DEFAULT_FIN_ACK_TIMEOUT;
97
34
  // handle RTCDataChannel events
98
- this.channel.onopen = (_evt) => {
99
- this.timeline.open = new Date().getTime();
100
- };
101
- this.channel.onclose = (_evt) => {
102
- this.log.trace('received onclose event');
103
- // stop any in-progress writes
104
- this.closeController.abort();
105
- // if the channel has closed we'll never receive a FIN_ACK so resolve the
106
- // promise so we don't try to wait later
107
- this.receiveFinAck.resolve();
108
- void this.close().catch(err => {
109
- this.log.error('error closing stream after channel closed', err);
110
- });
35
+ this.channel.onclose = () => {
36
+ this.log.trace('received datachannel close event');
37
+ this.onRemoteCloseWrite();
38
+ this.onTransportClosed();
111
39
  };
112
40
  this.channel.onerror = (evt) => {
113
- this.log.trace('received onerror event');
114
- // stop any in-progress writes
115
- this.closeController.abort();
116
41
  const err = evt.error;
42
+ this.log.trace('received datachannel error event - %e', err);
117
43
  this.abort(err);
118
44
  };
119
45
  this.channel.onmessage = async (event) => {
46
+ this.log('incoming message %d bytes', event.data.byteLength);
120
47
  const { data } = event;
121
48
  if (data === null || data.byteLength === 0) {
122
49
  return;
123
50
  }
124
51
  this.incomingData.push(new Uint8Array(data, 0, data.byteLength));
125
52
  };
126
- const self = this;
53
+ // dispatch drain event when the buffered amount drops to zero
54
+ this.channel.bufferedAmountLowThreshold = 0;
55
+ this.channel.onbufferedamountlow = () => {
56
+ if (this.writableNeedsDrain) {
57
+ this.safeDispatchEvent('drain');
58
+ }
59
+ };
60
+ if (this.channel.readyState !== 'open') {
61
+ this.log('channel ready state is "%s" and not "open", waiting for "open" event before sending data', this.channel.readyState);
62
+ pEvent(this.channel, 'open', {
63
+ rejectionEvents: [
64
+ 'close',
65
+ 'error'
66
+ ]
67
+ })
68
+ .then(() => {
69
+ this.log('channel ready state is now "%s", dispatching drain', this.channel.readyState);
70
+ this.safeDispatchEvent('drain');
71
+ })
72
+ .catch(err => {
73
+ this.abort(err.error ?? err);
74
+ });
75
+ }
127
76
  // pipe framed protobuf messages through a length prefixed decoder, and
128
77
  // surface data from the `Message.message` field through a source.
129
78
  Promise.resolve().then(async () => {
130
79
  for await (const buf of lengthPrefixed.decode(this.incomingData)) {
131
- const message = self.processIncomingProtobuf(buf);
132
- if (message != null) {
133
- self.sourcePush(new Uint8ArrayList(message));
134
- }
80
+ this.processIncomingProtobuf(buf);
135
81
  }
136
82
  })
137
83
  .catch(err => {
138
84
  this.log.error('error processing incoming data channel messages', err);
139
85
  });
86
+ // close when both writable ends are closed or an error occurs
87
+ const cleanUpDatachannelOnClose = () => {
88
+ if (this.channel.readyState === 'open') {
89
+ this.log.trace('stream closed, closing underlying datachannel');
90
+ this.channel.close();
91
+ }
92
+ };
93
+ this.addEventListener('close', cleanUpDatachannelOnClose);
140
94
  }
141
95
  sendNewStream() {
142
96
  // opening new streams is handled by WebRTC so this is a noop
143
97
  }
144
- async _sendMessage(data, checkBuffer = true) {
145
- if (this.channel.readyState === 'closed' || this.channel.readyState === 'closing') {
146
- throw new StreamStateError(`Invalid datachannel state - ${this.channel.readyState}`);
147
- }
98
+ _sendMessage(data) {
148
99
  if (this.channel.readyState !== 'open') {
149
- const timeout = AbortSignal.timeout(this.openTimeout);
150
- const signal = anySignal([
151
- this.closeController.signal,
152
- timeout
153
- ]);
154
- try {
155
- this.log('channel state is "%s" and not "open", waiting for "open" event before sending data', this.channel.readyState);
156
- await raceEvent(this.channel, 'open', signal);
157
- }
158
- finally {
159
- signal.clear();
160
- }
161
- this.log('channel state is now "%s", sending data', this.channel.readyState);
162
- }
163
- if (checkBuffer && this.channel.bufferedAmount > this.maxBufferedAmount) {
164
- const timeout = AbortSignal.timeout(this.bufferedAmountLowEventTimeout);
165
- const signal = anySignal([
166
- this.closeController.signal,
167
- timeout
168
- ]);
169
- try {
170
- this.log('channel buffer is %d, wait for "bufferedamountlow" event', this.channel.bufferedAmount);
171
- await raceEvent(this.channel, 'bufferedamountlow', signal);
172
- }
173
- catch (err) {
174
- if (timeout.aborted) {
175
- throw new TimeoutError(`Timed out waiting for DataChannel buffer to clear after ${this.bufferedAmountLowEventTimeout}ms`);
176
- }
177
- throw err;
178
- }
179
- finally {
180
- signal.clear();
181
- }
100
+ throw new StreamStateError(`Invalid datachannel state - ${this.channel.readyState}`);
182
101
  }
183
- try {
184
- this.log.trace('sending message, channel state "%s"', this.channel.readyState);
185
- // send message without copying data
102
+ this.log.trace('sending message, channel state "%s"', this.channel.readyState);
103
+ if (isFirefox) {
104
+ // TODO: firefox can deliver small messages out of order - remove once a
105
+ // browser with https://bugzilla.mozilla.org/show_bug.cgi?id=1983831 is
106
+ // available in playwright-test
186
107
  this.channel.send(data.subarray());
108
+ return;
187
109
  }
188
- catch (err) {
189
- this.log.error('error while sending message', err);
110
+ // send message without copying data
111
+ for (const buf of data) {
112
+ this.channel.send(buf);
190
113
  }
191
114
  }
192
- async sendData(data) {
193
- const bytesTotal = data.byteLength;
194
- // sending messages is an async operation so use a copy of the list as it
195
- // may be changed beneath us
196
- data = data.sublist();
197
- while (data.byteLength > 0) {
198
- const toSend = Math.min(data.byteLength, this.maxMessageSize);
199
- const buf = data.subarray(0, toSend);
200
- const messageBuf = Message.encode({ message: buf });
201
- const sendBuf = lengthPrefixed.encode.single(messageBuf);
202
- this.log.trace('sending %d/%d bytes on channel', buf.byteLength, bytesTotal);
203
- await this._sendMessage(sendBuf);
204
- data.consume(toSend);
205
- }
206
- this.log.trace('finished sending data, channel state "%s"', this.channel.readyState);
115
+ sendData(data) {
116
+ if (this.channel.readyState !== 'open') {
117
+ return {
118
+ sentBytes: 0,
119
+ canSendMore: false
120
+ };
121
+ }
122
+ // TODO: firefox can deliver small messages out of order - remove once a
123
+ // browser with https://bugzilla.mozilla.org/show_bug.cgi?id=1983831 is
124
+ // available in playwright-test
125
+ // ----
126
+ // this is also necessary to work with rust-libp2p 0.54 though 0.53 seems ok
127
+ this._sendMessage(lengthPrefixed.encode.single(Message.encode({
128
+ message: data.subarray()
129
+ })));
130
+ /*
131
+ // TODO: enable this when FF and rust-libp2p are not broken
132
+ // send message without copying data
133
+ for (const message of data) {
134
+ this._sendMessage(
135
+ lengthPrefixed.encode.single(Message.encode({
136
+ message
137
+ }))
138
+ )
139
+ }
140
+ }
141
+ */
142
+ return {
143
+ sentBytes: data.byteLength,
144
+ canSendMore: this.channel.bufferedAmount < this.maxBufferedAmount
145
+ };
207
146
  }
208
- async sendReset() {
147
+ sendReset(err) {
209
148
  try {
210
- await this._sendFlag(Message.Flag.RESET);
149
+ this.log.error('sending reset - %e', err);
150
+ this._sendFlag(Message.Flag.RESET);
151
+ this.receivedFinAck?.reject(err);
211
152
  }
212
153
  catch (err) {
213
154
  this.log.error('failed to send reset - %e', err);
214
155
  }
215
- finally {
216
- this.channel.close();
217
- }
218
156
  }
219
157
  async sendCloseWrite(options) {
220
- if (this.channel.readyState !== 'open') {
221
- this.receiveFinAck.resolve();
222
- return;
223
- }
224
- const sent = await this._sendFlag(Message.Flag.FIN);
225
- if (sent) {
226
- this.log.trace('awaiting FIN_ACK');
227
- try {
228
- await raceSignal(this.receiveFinAck.promise, options?.signal, {
229
- errorMessage: 'sending close-write was aborted before FIN_ACK was received',
230
- errorName: 'FinAckNotReceivedError'
158
+ this._sendFlag(Message.Flag.FIN);
159
+ options?.signal?.throwIfAborted();
160
+ this.receivedFinAck = Promise.withResolvers();
161
+ await Promise.any([
162
+ raceSignal(this.receivedFinAck.promise, options?.signal),
163
+ new Promise(resolve => {
164
+ AbortSignal.timeout(this.finAckTimeout)
165
+ .addEventListener('abort', () => {
166
+ resolve();
231
167
  });
232
- }
233
- catch (err) {
234
- this.log.error('failed to await FIN_ACK', err);
235
- }
236
- }
237
- else {
238
- this.log.trace('sending FIN failed, not awaiting FIN_ACK');
239
- }
240
- // if we've attempted to receive a FIN_ACK, do not try again
241
- this.receiveFinAck.resolve();
168
+ })
169
+ ]);
242
170
  }
243
- async sendCloseRead() {
244
- if (this.channel.readyState !== 'open') {
245
- return;
246
- }
247
- await this._sendFlag(Message.Flag.STOP_SENDING);
171
+ async sendCloseRead(options) {
172
+ this._sendFlag(Message.Flag.STOP_SENDING);
173
+ options?.signal?.throwIfAborted();
248
174
  }
249
175
  /**
250
176
  * Handle incoming
251
177
  */
252
178
  processIncomingProtobuf(buffer) {
253
179
  const message = Message.decode(buffer);
180
+ // ignore data messages if we've closed the readable end already
181
+ if (message.message != null && (this.readStatus === 'readable' || this.readStatus === 'paused')) {
182
+ this.onData(new Uint8ArrayList(message.message));
183
+ }
254
184
  if (message.flag !== undefined) {
255
185
  this.log.trace('incoming flag %s, write status "%s", read status "%s"', message.flag, this.writeStatus, this.readStatus);
256
186
  if (message.flag === Message.Flag.FIN) {
257
- // We should expect no more data from the remote, stop reading
258
- this.remoteCloseWrite();
259
- this.log.trace('sending FIN_ACK');
260
- void this._sendFlag(Message.Flag.FIN_ACK)
261
- .catch(err => {
262
- this.log.error('error sending FIN_ACK immediately', err);
263
- });
187
+ // we should expect no more data from the remote, stop reading
188
+ this._sendFlag(Message.Flag.FIN_ACK);
189
+ this.onRemoteCloseWrite();
264
190
  }
265
191
  if (message.flag === Message.Flag.RESET) {
266
- // Stop reading and writing to the stream immediately
267
- this.reset();
192
+ // stop reading and writing to the stream immediately
193
+ this.receivedFinAck?.reject(new StreamResetError('The stream was reset'));
194
+ this.onRemoteReset();
268
195
  }
269
196
  if (message.flag === Message.Flag.STOP_SENDING) {
270
- // The remote has stopped reading
271
- this.remoteCloseRead();
197
+ // the remote has stopped reading
198
+ this.onRemoteCloseRead();
272
199
  }
273
200
  if (message.flag === Message.Flag.FIN_ACK) {
274
- this.log.trace('received FIN_ACK');
275
- this.receiveFinAck.resolve();
201
+ // remote received our FIN
202
+ this.receivedFinAck?.resolve();
276
203
  }
277
204
  }
278
- // ignore data messages if we've closed the readable end already
279
- if (this.readStatus === 'ready') {
280
- return message.message;
281
- }
282
205
  }
283
- async _sendFlag(flag) {
206
+ _sendFlag(flag) {
284
207
  if (this.channel.readyState !== 'open') {
285
208
  // flags can be sent while we or the remote are closing the datachannel so
286
209
  // if the channel isn't open, don't try to send it but return false to let
@@ -292,7 +215,7 @@ export class WebRTCStream extends AbstractStream {
292
215
  const messageBuf = Message.encode({ flag });
293
216
  const prefixedBuf = lengthPrefixed.encode.single(messageBuf);
294
217
  try {
295
- await this._sendMessage(prefixedBuf, false);
218
+ this._sendMessage(prefixedBuf);
296
219
  return true;
297
220
  }
298
221
  catch (err) {
@@ -300,13 +223,20 @@ export class WebRTCStream extends AbstractStream {
300
223
  }
301
224
  return false;
302
225
  }
226
+ sendPause() {
227
+ // TODO: read backpressure?
228
+ }
229
+ sendResume() {
230
+ // TODO: read backpressure?
231
+ }
303
232
  }
304
233
  export function createStream(options) {
305
- const { channel, direction, handshake } = options;
234
+ const { channel, direction, isHandshake } = options;
306
235
  return new WebRTCStream({
307
236
  ...options,
308
237
  id: `${channel.id}`,
309
- log: options.log.newScope(`${handshake === true ? 'handshake' : direction}:${channel.id}`)
238
+ log: options.log.newScope(`${isHandshake === true ? 'handshake' : direction}:${channel.id}`),
239
+ protocol: ''
310
240
  });
311
241
  }
312
242
  //# sourceMappingURL=stream.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,10 @@
1
- import type { PeerConnection } from '@ipshipyard/node-datachannel';
2
1
  import type { LoggerOptions } from '@libp2p/interface';
2
+ import type { Duplex } from 'it-stream-types';
3
+ import type { PeerConnection } from 'node-datachannel';
3
4
  export declare const isFirefox: boolean;
4
5
  export declare const nopSource: () => AsyncGenerator<Uint8Array, any, unknown>;
5
6
  export declare const nopSink: (_: any) => Promise<void>;
7
+ export declare function inertDuplex(): Duplex<any, any, any>;
6
8
  export declare function drainAndClose(channel: RTCDataChannel, direction: string, drainTimeout: number | undefined, options: LoggerOptions): void;
7
9
  export interface AbortPromiseOptions {
8
10
  signal?: AbortSignal;
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAGtD,eAAO,MAAM,SAAS,SAAoD,CAAA;AAE1E,eAAO,MAAM,SAAS,QAA4B,cAAc,CAAC,UAAU,EAAE,GAAG,EAAE,OAAO,CAAI,CAAA;AAE7F,eAAO,MAAM,OAAO,GAAU,GAAG,GAAG,KAAG,OAAO,CAAC,IAAI,CAAO,CAAA;AAE1D,wBAAgB,aAAa,CAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,YAA6B,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CA8C1J;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,wBAAgB,gBAAgB,CAAE,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,cAAc,CAEjE;AAED,wBAAsB,mBAAmB,CAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CActJ;AAED,eAAO,MAAM,QAAQ,GAAI,MAAK,MAAW,KAAG,MAE3C,CAAA"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,KAAK,EAAE,MAAM,EAAU,MAAM,iBAAiB,CAAA;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAGtD,eAAO,MAAM,SAAS,SAAoD,CAAA;AAE1E,eAAO,MAAM,SAAS,QAA4B,cAAc,CAAC,UAAU,EAAE,GAAG,EAAE,OAAO,CAAI,CAAA;AAE7F,eAAO,MAAM,OAAO,GAAU,GAAG,GAAG,KAAG,OAAO,CAAC,IAAI,CAAO,CAAA;AAG1D,wBAAgB,WAAW,IAAK,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAiBpD;AAED,wBAAgB,aAAa,CAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,YAA6B,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CA8C1J;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,wBAAgB,gBAAgB,CAAE,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,cAAc,CAEjE;AAED,wBAAsB,mBAAmB,CAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CActJ;AAED,eAAO,MAAM,QAAQ,GAAI,MAAK,MAAW,KAAG,MAE3C,CAAA"}