@libp2p/utils 6.7.2-8484de8a2 → 6.7.2-87bc8d4fb

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 (164) hide show
  1. package/README.md +1 -1
  2. package/dist/index.min.js +1 -6
  3. package/dist/index.min.js.map +4 -4
  4. package/dist/src/abort-options.d.ts +7 -0
  5. package/dist/src/abort-options.d.ts.map +1 -0
  6. package/dist/src/abort-options.js +14 -0
  7. package/dist/src/abort-options.js.map +1 -0
  8. package/dist/src/abstract-stream.d.ts +130 -14
  9. package/dist/src/abstract-stream.d.ts.map +1 -1
  10. package/dist/src/abstract-stream.js +321 -39
  11. package/dist/src/abstract-stream.js.map +1 -1
  12. package/dist/src/array-equals.d.ts +24 -0
  13. package/dist/src/array-equals.d.ts.map +1 -0
  14. package/dist/src/array-equals.js +31 -0
  15. package/dist/src/array-equals.js.map +1 -0
  16. package/dist/src/close-source.d.ts +4 -0
  17. package/dist/src/close-source.d.ts.map +1 -0
  18. package/dist/src/close-source.js +11 -0
  19. package/dist/src/close-source.js.map +1 -0
  20. package/dist/src/close.d.ts +21 -0
  21. package/dist/src/close.d.ts.map +1 -0
  22. package/dist/src/close.js +49 -0
  23. package/dist/src/close.js.map +1 -0
  24. package/dist/src/errors.d.ts +0 -8
  25. package/dist/src/errors.d.ts.map +1 -1
  26. package/dist/src/errors.js +0 -8
  27. package/dist/src/errors.js.map +1 -1
  28. package/dist/src/get-thin-waist-addresses.browser.d.ts +1 -1
  29. package/dist/src/get-thin-waist-addresses.browser.d.ts.map +1 -1
  30. package/dist/src/get-thin-waist-addresses.browser.js +3 -4
  31. package/dist/src/get-thin-waist-addresses.browser.js.map +1 -1
  32. package/dist/src/get-thin-waist-addresses.d.ts +1 -1
  33. package/dist/src/get-thin-waist-addresses.d.ts.map +1 -1
  34. package/dist/src/get-thin-waist-addresses.js +9 -7
  35. package/dist/src/get-thin-waist-addresses.js.map +1 -1
  36. package/dist/src/index.d.ts +1 -33
  37. package/dist/src/index.d.ts.map +1 -1
  38. package/dist/src/index.js +1 -33
  39. package/dist/src/index.js.map +1 -1
  40. package/dist/src/multiaddr/is-global-unicast.d.ts.map +1 -1
  41. package/dist/src/multiaddr/is-global-unicast.js +9 -8
  42. package/dist/src/multiaddr/is-global-unicast.js.map +1 -1
  43. package/dist/src/multiaddr/is-ip-based.d.ts +6 -0
  44. package/dist/src/multiaddr/is-ip-based.d.ts.map +1 -0
  45. package/dist/src/multiaddr/is-ip-based.js +18 -0
  46. package/dist/src/multiaddr/is-ip-based.js.map +1 -0
  47. package/dist/src/multiaddr/is-link-local.d.ts.map +1 -1
  48. package/dist/src/multiaddr/is-link-local.js +16 -11
  49. package/dist/src/multiaddr/is-link-local.js.map +1 -1
  50. package/dist/src/multiaddr/is-loopback.d.ts.map +1 -1
  51. package/dist/src/multiaddr/is-loopback.js +5 -12
  52. package/dist/src/multiaddr/is-loopback.js.map +1 -1
  53. package/dist/src/multiaddr/is-network-address.d.ts.map +1 -1
  54. package/dist/src/multiaddr/is-network-address.js +16 -4
  55. package/dist/src/multiaddr/is-network-address.js.map +1 -1
  56. package/dist/src/multiaddr/is-private.d.ts.map +1 -1
  57. package/dist/src/multiaddr/is-private.js +10 -9
  58. package/dist/src/multiaddr/is-private.js.map +1 -1
  59. package/dist/src/queue/index.d.ts +0 -3
  60. package/dist/src/queue/index.d.ts.map +1 -1
  61. package/dist/src/queue/index.js +4 -20
  62. package/dist/src/queue/index.js.map +1 -1
  63. package/dist/src/rate-limiter.d.ts +15 -1
  64. package/dist/src/rate-limiter.d.ts.map +1 -1
  65. package/dist/src/rate-limiter.js +14 -1
  66. package/dist/src/rate-limiter.js.map +1 -1
  67. package/dist/src/stream-to-ma-conn.d.ts +23 -0
  68. package/dist/src/stream-to-ma-conn.d.ts.map +1 -0
  69. package/dist/src/stream-to-ma-conn.js +75 -0
  70. package/dist/src/stream-to-ma-conn.js.map +1 -0
  71. package/package.json +163 -19
  72. package/src/abort-options.ts +20 -0
  73. package/src/abstract-stream.ts +464 -51
  74. package/src/array-equals.ts +34 -0
  75. package/src/close-source.ts +14 -0
  76. package/src/close.ts +65 -0
  77. package/src/errors.ts +0 -10
  78. package/src/get-thin-waist-addresses.browser.ts +4 -5
  79. package/src/get-thin-waist-addresses.ts +12 -8
  80. package/src/index.ts +1 -33
  81. package/src/multiaddr/is-global-unicast.ts +11 -8
  82. package/src/multiaddr/is-ip-based.ts +21 -0
  83. package/src/multiaddr/is-link-local.ts +20 -11
  84. package/src/multiaddr/is-loopback.ts +7 -12
  85. package/src/multiaddr/is-network-address.ts +19 -4
  86. package/src/multiaddr/is-private.ts +14 -9
  87. package/src/queue/index.ts +4 -24
  88. package/src/rate-limiter.ts +30 -3
  89. package/src/stream-to-ma-conn.ts +106 -0
  90. package/dist/src/abstract-message-stream.d.ts +0 -129
  91. package/dist/src/abstract-message-stream.d.ts.map +0 -1
  92. package/dist/src/abstract-message-stream.js +0 -389
  93. package/dist/src/abstract-message-stream.js.map +0 -1
  94. package/dist/src/abstract-multiaddr-connection.d.ts +0 -26
  95. package/dist/src/abstract-multiaddr-connection.d.ts.map +0 -1
  96. package/dist/src/abstract-multiaddr-connection.js +0 -66
  97. package/dist/src/abstract-multiaddr-connection.js.map +0 -1
  98. package/dist/src/abstract-stream-muxer.d.ts +0 -53
  99. package/dist/src/abstract-stream-muxer.d.ts.map +0 -1
  100. package/dist/src/abstract-stream-muxer.js +0 -169
  101. package/dist/src/abstract-stream-muxer.js.map +0 -1
  102. package/dist/src/length-prefixed-decoder.d.ts +0 -37
  103. package/dist/src/length-prefixed-decoder.d.ts.map +0 -1
  104. package/dist/src/length-prefixed-decoder.js +0 -64
  105. package/dist/src/length-prefixed-decoder.js.map +0 -1
  106. package/dist/src/message-queue.d.ts +0 -61
  107. package/dist/src/message-queue.d.ts.map +0 -1
  108. package/dist/src/message-queue.js +0 -93
  109. package/dist/src/message-queue.js.map +0 -1
  110. package/dist/src/mock-muxer.d.ts +0 -57
  111. package/dist/src/mock-muxer.d.ts.map +0 -1
  112. package/dist/src/mock-muxer.js +0 -204
  113. package/dist/src/mock-muxer.js.map +0 -1
  114. package/dist/src/mock-stream.d.ts +0 -31
  115. package/dist/src/mock-stream.d.ts.map +0 -1
  116. package/dist/src/mock-stream.js +0 -69
  117. package/dist/src/mock-stream.js.map +0 -1
  118. package/dist/src/multiaddr/get-net-config.d.ts +0 -55
  119. package/dist/src/multiaddr/get-net-config.d.ts.map +0 -1
  120. package/dist/src/multiaddr/get-net-config.js +0 -54
  121. package/dist/src/multiaddr/get-net-config.js.map +0 -1
  122. package/dist/src/multiaddr/index.d.ts +0 -7
  123. package/dist/src/multiaddr/index.d.ts.map +0 -1
  124. package/dist/src/multiaddr/index.js +0 -7
  125. package/dist/src/multiaddr/index.js.map +0 -1
  126. package/dist/src/multiaddr/utils.d.ts +0 -5
  127. package/dist/src/multiaddr/utils.d.ts.map +0 -1
  128. package/dist/src/multiaddr/utils.js +0 -32
  129. package/dist/src/multiaddr/utils.js.map +0 -1
  130. package/dist/src/multiaddr-connection-pair.d.ts +0 -25
  131. package/dist/src/multiaddr-connection-pair.d.ts.map +0 -1
  132. package/dist/src/multiaddr-connection-pair.js +0 -103
  133. package/dist/src/multiaddr-connection-pair.js.map +0 -1
  134. package/dist/src/socket-writer.browser.d.ts +0 -2
  135. package/dist/src/socket-writer.browser.d.ts.map +0 -1
  136. package/dist/src/socket-writer.browser.js +0 -4
  137. package/dist/src/socket-writer.browser.js.map +0 -1
  138. package/dist/src/socket-writer.d.ts +0 -19
  139. package/dist/src/socket-writer.d.ts.map +0 -1
  140. package/dist/src/socket-writer.js +0 -43
  141. package/dist/src/socket-writer.js.map +0 -1
  142. package/dist/src/stream-pair.d.ts +0 -42
  143. package/dist/src/stream-pair.d.ts.map +0 -1
  144. package/dist/src/stream-pair.js +0 -40
  145. package/dist/src/stream-pair.js.map +0 -1
  146. package/dist/src/stream-utils.d.ts +0 -198
  147. package/dist/src/stream-utils.d.ts.map +0 -1
  148. package/dist/src/stream-utils.js +0 -369
  149. package/dist/src/stream-utils.js.map +0 -1
  150. package/src/abstract-message-stream.ts +0 -549
  151. package/src/abstract-multiaddr-connection.ts +0 -93
  152. package/src/abstract-stream-muxer.ts +0 -239
  153. package/src/length-prefixed-decoder.ts +0 -98
  154. package/src/message-queue.ts +0 -156
  155. package/src/mock-muxer.ts +0 -304
  156. package/src/mock-stream.ts +0 -101
  157. package/src/multiaddr/get-net-config.ts +0 -112
  158. package/src/multiaddr/index.ts +0 -6
  159. package/src/multiaddr/utils.ts +0 -46
  160. package/src/multiaddr-connection-pair.ts +0 -147
  161. package/src/socket-writer.browser.ts +0 -3
  162. package/src/socket-writer.ts +0 -64
  163. package/src/stream-pair.ts +0 -90
  164. package/src/stream-utils.ts +0 -873
@@ -0,0 +1,7 @@
1
+ import type { AbortOptions } from '@libp2p/interface';
2
+ import type { ClearableSignal } from 'any-signal';
3
+ export declare function createTimeoutOptions(timeout: number): AbortOptions;
4
+ export declare function createTimeoutOptions(timeout: number, ...existingSignals: AbortSignal[]): {
5
+ signal: ClearableSignal;
6
+ };
7
+ //# sourceMappingURL=abort-options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abort-options.d.ts","sourceRoot":"","sources":["../../src/abort-options.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD,wBAAgB,oBAAoB,CAAE,OAAO,EAAE,MAAM,GAAG,YAAY,CAAA;AACpE,wBAAgB,oBAAoB,CAAE,OAAO,EAAE,MAAM,EAAE,GAAG,eAAe,EAAE,WAAW,EAAE,GAAG;IAAE,MAAM,EAAE,eAAe,CAAA;CAAE,CAAA"}
@@ -0,0 +1,14 @@
1
+ import { anySignal } from 'any-signal';
2
+ import { setMaxListeners } from 'main-event';
3
+ export function createTimeoutOptions(timeout, ...existingSignals) {
4
+ let signal = AbortSignal.timeout(timeout);
5
+ setMaxListeners(Infinity, signal);
6
+ if (existingSignals.length > 0) {
7
+ signal = anySignal([signal, ...existingSignals]);
8
+ setMaxListeners(Infinity, signal);
9
+ }
10
+ return {
11
+ signal
12
+ };
13
+ }
14
+ //# sourceMappingURL=abort-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abort-options.js","sourceRoot":"","sources":["../../src/abort-options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAM5C,MAAM,UAAU,oBAAoB,CAAE,OAAe,EAAE,GAAG,eAA8B;IACtF,IAAI,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IACzC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IAEjC,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,MAAM,GAAG,SAAS,CAAC,CAAC,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC,CAAA;QAChD,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IACnC,CAAC;IAED,OAAO;QACL,MAAM;KACP,CAAA;AACH,CAAC"}
@@ -1,31 +1,147 @@
1
- import { AbstractMessageStream } from './abstract-message-stream.js';
2
- import type { MessageStreamInit } from './abstract-message-stream.js';
3
- import type { AbortOptions, Stream } from '@libp2p/interface';
4
- export interface AbstractStreamInit extends MessageStreamInit {
1
+ import { Uint8ArrayList } from 'uint8arraylist';
2
+ import type { AbortOptions, Direction, ReadStatus, Stream, StreamStatus, StreamTimeline, WriteStatus } from '@libp2p/interface';
3
+ import type { Logger } from '@libp2p/logger';
4
+ import type { Source } from 'it-stream-types';
5
+ export interface AbstractStreamInit {
5
6
  /**
6
7
  * A unique identifier for this stream
7
8
  */
8
9
  id: string;
9
10
  /**
10
- * The protocol name for the stream, if it is known
11
+ * The stream direction
11
12
  */
12
- protocol?: string;
13
+ direction: Direction;
14
+ /**
15
+ * A Logger implementation used to log stream-specific information
16
+ */
17
+ log: Logger;
18
+ /**
19
+ * User specific stream metadata
20
+ */
21
+ metadata?: Record<string, unknown>;
22
+ /**
23
+ * Invoked when the stream ends
24
+ */
25
+ onEnd?(err?: Error): void;
26
+ /**
27
+ * Invoked when the readable end of the stream is closed
28
+ */
29
+ onCloseRead?(): void;
30
+ /**
31
+ * Invoked when the writable end of the stream is closed
32
+ */
33
+ onCloseWrite?(): void;
34
+ /**
35
+ * Invoked when the stream has been reset by the remote
36
+ */
37
+ onReset?(): void;
38
+ /**
39
+ * Invoked when the stream has errored
40
+ */
41
+ onAbort?(err: Error): void;
42
+ /**
43
+ * How long to wait in ms for stream data to be written to the underlying
44
+ * connection when closing the writable end of the stream.
45
+ *
46
+ * @default 500
47
+ */
48
+ closeTimeout?: number;
49
+ /**
50
+ * After the stream sink has closed, a limit on how long it takes to send
51
+ * a close-write message to the remote peer.
52
+ */
53
+ sendCloseWriteTimeout?: number;
13
54
  }
14
- export declare abstract class AbstractStream extends AbstractMessageStream implements Stream {
55
+ export declare abstract class AbstractStream implements Stream {
15
56
  id: string;
16
- protocol: string;
57
+ direction: Direction;
58
+ timeline: StreamTimeline;
59
+ protocol?: string;
60
+ metadata: Record<string, unknown>;
61
+ source: AsyncGenerator<Uint8ArrayList, void, unknown>;
62
+ status: StreamStatus;
63
+ readStatus: ReadStatus;
64
+ writeStatus: WriteStatus;
65
+ readonly log: Logger;
66
+ private readonly sinkController;
67
+ private readonly sinkEnd;
68
+ private readonly closed;
69
+ private endErr;
70
+ private readonly streamSource;
71
+ private readonly onEnd?;
72
+ private readonly onCloseRead?;
73
+ private readonly onCloseWrite?;
74
+ private readonly onReset?;
75
+ private readonly onAbort?;
76
+ private readonly sendCloseWriteTimeout;
77
+ private sendingData?;
17
78
  constructor(init: AbstractStreamInit);
79
+ sink(source: Source<Uint8ArrayList | Uint8Array>): Promise<void>;
80
+ protected onSourceEnd(err?: Error): void;
81
+ protected onSinkEnd(err?: Error): void;
18
82
  close(options?: AbortOptions): Promise<void>;
19
83
  closeRead(options?: AbortOptions): Promise<void>;
84
+ closeWrite(options?: AbortOptions): Promise<void>;
85
+ /**
86
+ * Close immediately for reading and writing and send a reset message (local
87
+ * error)
88
+ */
89
+ abort(err: Error): void;
90
+ /**
91
+ * Receive a reset message - close immediately for reading and writing (remote
92
+ * error)
93
+ */
94
+ reset(): void;
95
+ _closeSinkAndSource(err?: Error): void;
96
+ _closeSink(err?: Error): void;
97
+ _closeSource(err?: Error): void;
98
+ /**
99
+ * The remote closed for writing so we should expect to receive no more
100
+ * messages
101
+ */
102
+ remoteCloseWrite(): void;
103
+ /**
104
+ * The remote closed for reading so we should not send any more
105
+ * messages
106
+ */
107
+ remoteCloseRead(): void;
108
+ /**
109
+ * The underlying muxer has closed, no more messages can be sent or will
110
+ * be received, close immediately to free up resources
111
+ */
112
+ destroy(): void;
113
+ /**
114
+ * When an extending class reads data from it's implementation-specific source,
115
+ * call this method to allow the stream consumer to read the data.
116
+ */
117
+ sourcePush(data: Uint8ArrayList): void;
118
+ /**
119
+ * Returns the amount of unread data - can be used to prevent large amounts of
120
+ * data building up when the stream consumer is too slow.
121
+ */
122
+ sourceReadableLength(): number;
123
+ /**
124
+ * Send a message to the remote muxer informing them a new stream is being
125
+ * opened
126
+ */
127
+ abstract sendNewStream(options?: AbortOptions): void | Promise<void>;
128
+ /**
129
+ * Send a data message to the remote muxer
130
+ */
131
+ abstract sendData(buf: Uint8ArrayList, options?: AbortOptions): void | Promise<void>;
132
+ /**
133
+ * Send a reset message to the remote muxer
134
+ */
135
+ abstract sendReset(options?: AbortOptions): void | Promise<void>;
20
136
  /**
21
- * Send a message to the remote end of the stream, informing them that we will
22
- * send no more data messages.
137
+ * Send a message to the remote muxer, informing them no more data messages
138
+ * will be sent by this end of the stream
23
139
  */
24
- abstract sendCloseWrite(options?: AbortOptions): Promise<void>;
140
+ abstract sendCloseWrite(options?: AbortOptions): void | Promise<void>;
25
141
  /**
26
- * If supported, send a message to the remote end of the stream, informing
27
- * them that we will read no more data messages.
142
+ * Send a message to the remote muxer, informing them no more data messages
143
+ * will be read by this end of the stream
28
144
  */
29
- abstract sendCloseRead(options?: AbortOptions): Promise<void>;
145
+ abstract sendCloseRead(options?: AbortOptions): void | Promise<void>;
30
146
  }
31
147
  //# sourceMappingURL=abstract-stream.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"abstract-stream.d.ts","sourceRoot":"","sources":["../../src/abstract-stream.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE7D,MAAM,WAAW,kBAAmB,SAAQ,iBAAiB;IAC3D;;OAEG;IACH,EAAE,EAAE,MAAM,CAAA;IAEV;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,8BAAsB,cAAe,SAAQ,qBAAsB,YAAW,MAAM;IAC3E,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,CAAA;gBAEV,IAAI,EAAE,kBAAkB;IAO/B,KAAK,CAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IA2C7C,SAAS,CAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBvD;;;OAGG;IACH,QAAQ,CAAC,cAAc,CAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAE/D;;;OAGG;IACH,QAAQ,CAAC,aAAa,CAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;CAC/D"}
1
+ {"version":3,"file":"abstract-stream.d.ts","sourceRoot":"","sources":["../../src/abstract-stream.ts"],"names":[],"mappings":"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"}
@@ -1,60 +1,342 @@
1
- import { pEvent } from 'p-event';
2
- import { AbstractMessageStream } from './abstract-message-stream.js';
3
- export class AbstractStream extends AbstractMessageStream {
1
+ import { StreamResetError, StreamStateError } from '@libp2p/interface';
2
+ import { pushable } from 'it-pushable';
3
+ import defer from 'p-defer';
4
+ import { raceSignal } from 'race-signal';
5
+ import { Uint8ArrayList } from 'uint8arraylist';
6
+ import { closeSource } from './close-source.js';
7
+ const DEFAULT_SEND_CLOSE_WRITE_TIMEOUT = 5000;
8
+ function isPromise(thing) {
9
+ if (thing == null) {
10
+ return false;
11
+ }
12
+ return typeof thing.then === 'function' &&
13
+ typeof thing.catch === 'function' &&
14
+ typeof thing.finally === 'function';
15
+ }
16
+ export class AbstractStream {
4
17
  id;
18
+ direction;
19
+ timeline;
5
20
  protocol;
21
+ metadata;
22
+ source;
23
+ status;
24
+ readStatus;
25
+ writeStatus;
26
+ log;
27
+ sinkController;
28
+ sinkEnd;
29
+ closed;
30
+ endErr;
31
+ streamSource;
32
+ onEnd;
33
+ onCloseRead;
34
+ onCloseWrite;
35
+ onReset;
36
+ onAbort;
37
+ sendCloseWriteTimeout;
38
+ sendingData;
6
39
  constructor(init) {
7
- super(init);
40
+ this.sinkController = new AbortController();
41
+ this.sinkEnd = defer();
42
+ this.closed = defer();
43
+ this.log = init.log;
44
+ // stream status
45
+ this.status = 'open';
46
+ this.readStatus = 'ready';
47
+ this.writeStatus = 'ready';
8
48
  this.id = init.id;
9
- this.protocol = init.protocol ?? '';
49
+ this.metadata = init.metadata ?? {};
50
+ this.direction = init.direction;
51
+ this.timeline = {
52
+ open: Date.now()
53
+ };
54
+ this.sendCloseWriteTimeout = init.sendCloseWriteTimeout ?? DEFAULT_SEND_CLOSE_WRITE_TIMEOUT;
55
+ this.onEnd = init.onEnd;
56
+ this.onCloseRead = init.onCloseRead;
57
+ this.onCloseWrite = init.onCloseWrite;
58
+ this.onReset = init.onReset;
59
+ this.onAbort = init.onAbort;
60
+ this.source = this.streamSource = pushable({
61
+ onEnd: (err) => {
62
+ if (err != null) {
63
+ this.log.trace('source ended with error', err);
64
+ }
65
+ else {
66
+ this.log.trace('source ended');
67
+ }
68
+ this.onSourceEnd(err);
69
+ }
70
+ });
71
+ // necessary because the libp2p upgrader wraps the sink function
72
+ this.sink = this.sink.bind(this);
73
+ }
74
+ async sink(source) {
75
+ if (this.writeStatus !== 'ready') {
76
+ throw new StreamStateError(`writable end state is "${this.writeStatus}" not "ready"`);
77
+ }
78
+ try {
79
+ this.writeStatus = 'writing';
80
+ const options = {
81
+ signal: this.sinkController.signal
82
+ };
83
+ if (this.direction === 'outbound') { // If initiator, open a new stream
84
+ const res = this.sendNewStream(options);
85
+ if (isPromise(res)) {
86
+ await res;
87
+ }
88
+ }
89
+ const abortListener = () => {
90
+ closeSource(source, this.log);
91
+ };
92
+ try {
93
+ this.sinkController.signal.addEventListener('abort', abortListener);
94
+ this.log.trace('sink reading from source');
95
+ for await (let data of source) {
96
+ data = data instanceof Uint8Array ? new Uint8ArrayList(data) : data;
97
+ const res = this.sendData(data, options);
98
+ if (isPromise(res)) {
99
+ this.sendingData = defer();
100
+ await res;
101
+ this.sendingData.resolve();
102
+ this.sendingData = undefined;
103
+ }
104
+ }
105
+ }
106
+ finally {
107
+ this.sinkController.signal.removeEventListener('abort', abortListener);
108
+ }
109
+ this.log.trace('sink finished reading from source, write status is "%s"', this.writeStatus);
110
+ if (this.writeStatus === 'writing') {
111
+ this.writeStatus = 'closing';
112
+ this.log.trace('send close write to remote');
113
+ await this.sendCloseWrite({
114
+ signal: AbortSignal.timeout(this.sendCloseWriteTimeout)
115
+ });
116
+ this.writeStatus = 'closed';
117
+ }
118
+ this.onSinkEnd();
119
+ }
120
+ catch (err) {
121
+ this.log.trace('sink ended with error, calling abort with error', err);
122
+ this.abort(err);
123
+ throw err;
124
+ }
125
+ finally {
126
+ this.log.trace('resolve sink end');
127
+ this.sinkEnd.resolve();
128
+ }
129
+ }
130
+ onSourceEnd(err) {
131
+ if (this.timeline.closeRead != null) {
132
+ return;
133
+ }
134
+ this.timeline.closeRead = Date.now();
135
+ this.readStatus = 'closed';
136
+ if (err != null && this.endErr == null) {
137
+ this.endErr = err;
138
+ }
139
+ this.onCloseRead?.();
140
+ if (this.timeline.closeWrite != null) {
141
+ this.log.trace('source and sink ended');
142
+ this.timeline.close = Date.now();
143
+ if (this.status !== 'aborted' && this.status !== 'reset') {
144
+ this.status = 'closed';
145
+ }
146
+ if (this.onEnd != null) {
147
+ this.onEnd(this.endErr);
148
+ }
149
+ this.closed.resolve();
150
+ }
151
+ else {
152
+ this.log.trace('source ended, waiting for sink to end');
153
+ }
10
154
  }
155
+ onSinkEnd(err) {
156
+ if (this.timeline.closeWrite != null) {
157
+ return;
158
+ }
159
+ this.timeline.closeWrite = Date.now();
160
+ this.writeStatus = 'closed';
161
+ if (err != null && this.endErr == null) {
162
+ this.endErr = err;
163
+ }
164
+ this.onCloseWrite?.();
165
+ if (this.timeline.closeRead != null) {
166
+ this.log.trace('sink and source ended');
167
+ this.timeline.close = Date.now();
168
+ if (this.status !== 'aborted' && this.status !== 'reset') {
169
+ this.status = 'closed';
170
+ }
171
+ if (this.onEnd != null) {
172
+ this.onEnd(this.endErr);
173
+ }
174
+ this.closed.resolve();
175
+ }
176
+ else {
177
+ this.log.trace('sink ended, waiting for source to end');
178
+ }
179
+ }
180
+ // Close for both Reading and Writing
11
181
  async close(options) {
182
+ if (this.status !== 'open') {
183
+ return;
184
+ }
185
+ this.log.trace('closing gracefully');
186
+ this.status = 'closing';
187
+ // wait for read and write ends to close
188
+ await raceSignal(Promise.all([
189
+ this.closeWrite(options),
190
+ this.closeRead(options),
191
+ this.closed.promise
192
+ ]), options?.signal);
193
+ this.status = 'closed';
194
+ this.log.trace('closed gracefully');
195
+ }
196
+ async closeRead(options = {}) {
197
+ if (this.readStatus === 'closing' || this.readStatus === 'closed') {
198
+ return;
199
+ }
200
+ this.log.trace('closing readable end of stream with starting read status "%s"', this.readStatus);
201
+ const readStatus = this.readStatus;
202
+ this.readStatus = 'closing';
203
+ if (this.status !== 'reset' && this.status !== 'aborted' && this.timeline.closeRead == null) {
204
+ this.log.trace('send close read to remote');
205
+ await this.sendCloseRead(options);
206
+ }
207
+ if (readStatus === 'ready') {
208
+ this.log.trace('ending internal source queue with %d queued bytes', this.streamSource.readableLength);
209
+ this.streamSource.end();
210
+ }
211
+ this.log.trace('closed readable end of stream');
212
+ }
213
+ async closeWrite(options = {}) {
12
214
  if (this.writeStatus === 'closing' || this.writeStatus === 'closed') {
13
215
  return;
14
216
  }
15
- this.writeStatus = 'closing';
16
- // if we are currently sending data, wait for all the data to be written
17
- // into the underlying transport
18
- if (this.sendingData || this.writeBuffer.byteLength > 0) {
19
- this.log('waiting for write queue to become idle before closing writable end of stream, %d unsent bytes', this.writeBuffer.byteLength);
20
- await pEvent(this, 'idle', {
21
- ...options,
22
- rejectionEvents: [
23
- 'close'
24
- ]
25
- });
217
+ this.log.trace('closing writable end of stream with starting write status "%s"', this.writeStatus);
218
+ if (this.writeStatus === 'ready') {
219
+ this.log.trace('sink was never sunk, sink an empty array');
220
+ await raceSignal(this.sink([]), options.signal);
26
221
  }
27
- // now that the underlying transport has all the data, if the buffer is full
28
- // wait for it to be emptied
29
- if (this.writableNeedsDrain) {
30
- this.log('waiting for write queue to drain before closing writable end of stream, %d unsent bytes, sending %s', this.writeBuffer.byteLength, this.sendingData);
31
- await pEvent(this, 'drain', {
32
- ...options,
33
- rejectionEvents: [
34
- 'close'
35
- ]
36
- });
37
- this.log('write queue drained, closing writable end of stream, %d unsent bytes, sending %s', this.writeBuffer.byteLength, this.sendingData);
222
+ if (this.writeStatus === 'writing') {
223
+ // try to let sending outgoing data succeed
224
+ if (this.sendingData != null) {
225
+ await raceSignal(this.sendingData.promise, options.signal);
226
+ }
227
+ // stop reading from the source passed to `.sink`
228
+ this.log.trace('aborting source passed to .sink');
229
+ this.sinkController.abort();
230
+ await raceSignal(this.sinkEnd.promise, options.signal);
38
231
  }
39
- await this.sendCloseWrite(options);
40
232
  this.writeStatus = 'closed';
41
- this.log('closed writable end gracefully');
42
- if (this.remoteWriteStatus === 'closed') {
43
- this.onTransportClosed();
233
+ this.log.trace('closed writable end of stream');
234
+ }
235
+ /**
236
+ * Close immediately for reading and writing and send a reset message (local
237
+ * error)
238
+ */
239
+ abort(err) {
240
+ if (this.status === 'closed' || this.status === 'aborted' || this.status === 'reset') {
241
+ return;
44
242
  }
243
+ this.log('abort with error', err);
244
+ // try to send a reset message
245
+ this.log('try to send reset to remote');
246
+ const res = this.sendReset();
247
+ if (isPromise(res)) {
248
+ res.catch((err) => {
249
+ this.log.error('error sending reset message', err);
250
+ });
251
+ }
252
+ this.status = 'aborted';
253
+ this.timeline.abort = Date.now();
254
+ this._closeSinkAndSource(err);
255
+ this.onAbort?.(err);
45
256
  }
46
- async closeRead(options) {
257
+ /**
258
+ * Receive a reset message - close immediately for reading and writing (remote
259
+ * error)
260
+ */
261
+ reset() {
262
+ if (this.status === 'closed' || this.status === 'aborted' || this.status === 'reset') {
263
+ return;
264
+ }
265
+ const err = new StreamResetError('stream reset');
266
+ this.status = 'reset';
267
+ this.timeline.reset = Date.now();
268
+ this._closeSinkAndSource(err);
269
+ this.onReset?.();
270
+ }
271
+ _closeSinkAndSource(err) {
272
+ this._closeSink(err);
273
+ this._closeSource(err);
274
+ }
275
+ _closeSink(err) {
276
+ // if the sink function is running, cause it to end
277
+ if (this.writeStatus === 'writing') {
278
+ this.log.trace('end sink source');
279
+ this.sinkController.abort();
280
+ }
281
+ this.onSinkEnd(err);
282
+ }
283
+ _closeSource(err) {
284
+ // if the source is not ending, end it
285
+ if (this.readStatus !== 'closing' && this.readStatus !== 'closed') {
286
+ this.log.trace('ending source with %d bytes to be read by consumer', this.streamSource.readableLength);
287
+ this.readStatus = 'closing';
288
+ this.streamSource.end(err);
289
+ }
290
+ }
291
+ /**
292
+ * The remote closed for writing so we should expect to receive no more
293
+ * messages
294
+ */
295
+ remoteCloseWrite() {
47
296
  if (this.readStatus === 'closing' || this.readStatus === 'closed') {
297
+ this.log('received remote close write but local source is already closed');
48
298
  return;
49
299
  }
50
- // throw away any unread data
51
- if (this.readBuffer.byteLength > 0) {
52
- this.readBuffer.consume(this.readBuffer.byteLength);
300
+ this.log.trace('remote close write');
301
+ this._closeSource();
302
+ }
303
+ /**
304
+ * The remote closed for reading so we should not send any more
305
+ * messages
306
+ */
307
+ remoteCloseRead() {
308
+ if (this.writeStatus === 'closing' || this.writeStatus === 'closed') {
309
+ this.log('received remote close read but local sink is already closed');
310
+ return;
53
311
  }
54
- this.readStatus = 'closing';
55
- await this.sendCloseRead(options);
56
- this.readStatus = 'closed';
57
- this.log('closed readable end gracefully');
312
+ this.log.trace('remote close read');
313
+ this._closeSink();
314
+ }
315
+ /**
316
+ * The underlying muxer has closed, no more messages can be sent or will
317
+ * be received, close immediately to free up resources
318
+ */
319
+ destroy() {
320
+ if (this.status === 'closed' || this.status === 'aborted' || this.status === 'reset') {
321
+ this.log('received destroy but we are already closed');
322
+ return;
323
+ }
324
+ this.log.trace('stream destroyed');
325
+ this._closeSinkAndSource();
326
+ }
327
+ /**
328
+ * When an extending class reads data from it's implementation-specific source,
329
+ * call this method to allow the stream consumer to read the data.
330
+ */
331
+ sourcePush(data) {
332
+ this.streamSource.push(data);
333
+ }
334
+ /**
335
+ * Returns the amount of unread data - can be used to prevent large amounts of
336
+ * data building up when the stream consumer is too slow.
337
+ */
338
+ sourceReadableLength() {
339
+ return this.streamSource.readableLength;
58
340
  }
59
341
  }
60
342
  //# sourceMappingURL=abstract-stream.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"abstract-stream.js","sourceRoot":"","sources":["../../src/abstract-stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AAgBpE,MAAM,OAAgB,cAAe,SAAQ,qBAAqB;IACzD,EAAE,CAAQ;IACV,QAAQ,CAAQ;IAEvB,YAAa,IAAwB;QACnC,KAAK,CAAC,IAAI,CAAC,CAAA;QAEX,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAA;QACjB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAA;IACrC,CAAC;IAED,KAAK,CAAC,KAAK,CAAE,OAAsB;QACjC,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;YACpE,OAAM;QACR,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,SAAS,CAAA;QAE5B,wEAAwE;QACxE,gCAAgC;QAChC,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;YACxD,IAAI,CAAC,GAAG,CAAC,+FAA+F,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;YACtI,MAAM,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE;gBACzB,GAAG,OAAO;gBACV,eAAe,EAAE;oBACf,OAAO;iBACR;aACF,CAAC,CAAA;QACJ,CAAC;QAED,4EAA4E;QAC5E,4BAA4B;QAC5B,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,IAAI,CAAC,GAAG,CAAC,qGAAqG,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;YAC9J,MAAM,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE;gBAC1B,GAAG,OAAO;gBACV,eAAe,EAAE;oBACf,OAAO;iBACR;aACF,CAAC,CAAA;YACF,IAAI,CAAC,GAAG,CAAC,kFAAkF,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;QAC7I,CAAC;QAED,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;QAElC,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAA;QAE3B,IAAI,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAA;QAE1C,IAAI,IAAI,CAAC,iBAAiB,KAAK,QAAQ,EAAE,CAAC;YACxC,IAAI,CAAC,iBAAiB,EAAE,CAAA;QAC1B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CAAE,OAAsB;QACrC,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;YAClE,OAAM;QACR,CAAC;QAED,6BAA6B;QAC7B,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;QACrD,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,SAAS,CAAA;QAE3B,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;QAEjC,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAA;QAE1B,IAAI,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAA;IAC5C,CAAC;CAaF"}
1
+ {"version":3,"file":"abstract-stream.js","sourceRoot":"","sources":["../../src/abstract-stream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * @packageDocumentation
3
+ *
4
+ * Provides strategies ensure arrays are equivalent.
5
+ *
6
+ * @example
7
+ *
8
+ * ```typescript
9
+ * import { arrayEquals } from '@libp2p/utils/array-equals'
10
+ * import { multiaddr } from '@multformats/multiaddr'
11
+ *
12
+ * const ma1 = multiaddr('/ip4/127.0.0.1/tcp/9000'),
13
+ * const ma2 = multiaddr('/ip4/82.41.53.1/tcp/9000')
14
+ *
15
+ * console.info(arrayEquals([ma1], [ma1])) // true
16
+ * console.info(arrayEquals([ma1], [ma2])) // false
17
+ * ```
18
+ */
19
+ /**
20
+ * Verify if two arrays of non primitive types with the "equals" function are equal.
21
+ * Compatible with multiaddr, peer-id and others.
22
+ */
23
+ export declare function arrayEquals(a: any[], b: any[]): boolean;
24
+ //# sourceMappingURL=array-equals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array-equals.d.ts","sourceRoot":"","sources":["../../src/array-equals.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH;;;GAGG;AACH,wBAAgB,WAAW,CAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAUxD"}