@libp2p/utils 6.7.1 → 6.7.2-8484de8a2

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 (165) hide show
  1. package/README.md +16 -1
  2. package/dist/index.min.js +6 -1
  3. package/dist/index.min.js.map +4 -4
  4. package/dist/src/abstract-message-stream.d.ts +129 -0
  5. package/dist/src/abstract-message-stream.d.ts.map +1 -0
  6. package/dist/src/abstract-message-stream.js +389 -0
  7. package/dist/src/abstract-message-stream.js.map +1 -0
  8. package/dist/src/abstract-multiaddr-connection.d.ts +26 -0
  9. package/dist/src/abstract-multiaddr-connection.d.ts.map +1 -0
  10. package/dist/src/abstract-multiaddr-connection.js +66 -0
  11. package/dist/src/abstract-multiaddr-connection.js.map +1 -0
  12. package/dist/src/abstract-stream-muxer.d.ts +53 -0
  13. package/dist/src/abstract-stream-muxer.d.ts.map +1 -0
  14. package/dist/src/abstract-stream-muxer.js +169 -0
  15. package/dist/src/abstract-stream-muxer.js.map +1 -0
  16. package/dist/src/abstract-stream.d.ts +14 -130
  17. package/dist/src/abstract-stream.d.ts.map +1 -1
  18. package/dist/src/abstract-stream.js +39 -321
  19. package/dist/src/abstract-stream.js.map +1 -1
  20. package/dist/src/errors.d.ts +8 -0
  21. package/dist/src/errors.d.ts.map +1 -1
  22. package/dist/src/errors.js +8 -0
  23. package/dist/src/errors.js.map +1 -1
  24. package/dist/src/get-thin-waist-addresses.browser.d.ts +1 -1
  25. package/dist/src/get-thin-waist-addresses.browser.d.ts.map +1 -1
  26. package/dist/src/get-thin-waist-addresses.browser.js +4 -3
  27. package/dist/src/get-thin-waist-addresses.browser.js.map +1 -1
  28. package/dist/src/get-thin-waist-addresses.d.ts +1 -1
  29. package/dist/src/get-thin-waist-addresses.d.ts.map +1 -1
  30. package/dist/src/get-thin-waist-addresses.js +7 -9
  31. package/dist/src/get-thin-waist-addresses.js.map +1 -1
  32. package/dist/src/index.d.ts +33 -1
  33. package/dist/src/index.d.ts.map +1 -1
  34. package/dist/src/index.js +33 -1
  35. package/dist/src/index.js.map +1 -1
  36. package/dist/src/length-prefixed-decoder.d.ts +37 -0
  37. package/dist/src/length-prefixed-decoder.d.ts.map +1 -0
  38. package/dist/src/length-prefixed-decoder.js +64 -0
  39. package/dist/src/length-prefixed-decoder.js.map +1 -0
  40. package/dist/src/message-queue.d.ts +61 -0
  41. package/dist/src/message-queue.d.ts.map +1 -0
  42. package/dist/src/message-queue.js +93 -0
  43. package/dist/src/message-queue.js.map +1 -0
  44. package/dist/src/mock-muxer.d.ts +57 -0
  45. package/dist/src/mock-muxer.d.ts.map +1 -0
  46. package/dist/src/mock-muxer.js +204 -0
  47. package/dist/src/mock-muxer.js.map +1 -0
  48. package/dist/src/mock-stream.d.ts +31 -0
  49. package/dist/src/mock-stream.d.ts.map +1 -0
  50. package/dist/src/mock-stream.js +69 -0
  51. package/dist/src/mock-stream.js.map +1 -0
  52. package/dist/src/multiaddr/get-net-config.d.ts +55 -0
  53. package/dist/src/multiaddr/get-net-config.d.ts.map +1 -0
  54. package/dist/src/multiaddr/get-net-config.js +54 -0
  55. package/dist/src/multiaddr/get-net-config.js.map +1 -0
  56. package/dist/src/multiaddr/index.d.ts +7 -0
  57. package/dist/src/multiaddr/index.d.ts.map +1 -0
  58. package/dist/src/multiaddr/index.js +7 -0
  59. package/dist/src/multiaddr/index.js.map +1 -0
  60. package/dist/src/multiaddr/is-global-unicast.d.ts.map +1 -1
  61. package/dist/src/multiaddr/is-global-unicast.js +8 -9
  62. package/dist/src/multiaddr/is-global-unicast.js.map +1 -1
  63. package/dist/src/multiaddr/is-link-local.d.ts.map +1 -1
  64. package/dist/src/multiaddr/is-link-local.js +11 -16
  65. package/dist/src/multiaddr/is-link-local.js.map +1 -1
  66. package/dist/src/multiaddr/is-loopback.d.ts.map +1 -1
  67. package/dist/src/multiaddr/is-loopback.js +12 -5
  68. package/dist/src/multiaddr/is-loopback.js.map +1 -1
  69. package/dist/src/multiaddr/is-network-address.d.ts.map +1 -1
  70. package/dist/src/multiaddr/is-network-address.js +4 -16
  71. package/dist/src/multiaddr/is-network-address.js.map +1 -1
  72. package/dist/src/multiaddr/is-private.d.ts.map +1 -1
  73. package/dist/src/multiaddr/is-private.js +9 -10
  74. package/dist/src/multiaddr/is-private.js.map +1 -1
  75. package/dist/src/multiaddr/utils.d.ts +5 -0
  76. package/dist/src/multiaddr/utils.d.ts.map +1 -0
  77. package/dist/src/multiaddr/utils.js +32 -0
  78. package/dist/src/multiaddr/utils.js.map +1 -0
  79. package/dist/src/multiaddr-connection-pair.d.ts +25 -0
  80. package/dist/src/multiaddr-connection-pair.d.ts.map +1 -0
  81. package/dist/src/multiaddr-connection-pair.js +103 -0
  82. package/dist/src/multiaddr-connection-pair.js.map +1 -0
  83. package/dist/src/queue/index.d.ts +5 -0
  84. package/dist/src/queue/index.d.ts.map +1 -1
  85. package/dist/src/queue/index.js +24 -9
  86. package/dist/src/queue/index.js.map +1 -1
  87. package/dist/src/rate-limiter.d.ts +1 -15
  88. package/dist/src/rate-limiter.d.ts.map +1 -1
  89. package/dist/src/rate-limiter.js +1 -14
  90. package/dist/src/rate-limiter.js.map +1 -1
  91. package/dist/src/socket-writer.browser.d.ts +2 -0
  92. package/dist/src/socket-writer.browser.d.ts.map +1 -0
  93. package/dist/src/socket-writer.browser.js +4 -0
  94. package/dist/src/socket-writer.browser.js.map +1 -0
  95. package/dist/src/socket-writer.d.ts +19 -0
  96. package/dist/src/socket-writer.d.ts.map +1 -0
  97. package/dist/src/socket-writer.js +43 -0
  98. package/dist/src/socket-writer.js.map +1 -0
  99. package/dist/src/stream-pair.d.ts +42 -0
  100. package/dist/src/stream-pair.d.ts.map +1 -0
  101. package/dist/src/stream-pair.js +40 -0
  102. package/dist/src/stream-pair.js.map +1 -0
  103. package/dist/src/stream-utils.d.ts +198 -0
  104. package/dist/src/stream-utils.d.ts.map +1 -0
  105. package/dist/src/stream-utils.js +369 -0
  106. package/dist/src/stream-utils.js.map +1 -0
  107. package/package.json +19 -163
  108. package/src/abstract-message-stream.ts +549 -0
  109. package/src/abstract-multiaddr-connection.ts +93 -0
  110. package/src/abstract-stream-muxer.ts +239 -0
  111. package/src/abstract-stream.ts +51 -464
  112. package/src/errors.ts +10 -0
  113. package/src/get-thin-waist-addresses.browser.ts +5 -4
  114. package/src/get-thin-waist-addresses.ts +8 -12
  115. package/src/index.ts +33 -1
  116. package/src/length-prefixed-decoder.ts +98 -0
  117. package/src/message-queue.ts +156 -0
  118. package/src/mock-muxer.ts +304 -0
  119. package/src/mock-stream.ts +101 -0
  120. package/src/multiaddr/get-net-config.ts +112 -0
  121. package/src/multiaddr/index.ts +6 -0
  122. package/src/multiaddr/is-global-unicast.ts +8 -11
  123. package/src/multiaddr/is-link-local.ts +11 -20
  124. package/src/multiaddr/is-loopback.ts +12 -7
  125. package/src/multiaddr/is-network-address.ts +4 -19
  126. package/src/multiaddr/is-private.ts +9 -14
  127. package/src/multiaddr/utils.ts +46 -0
  128. package/src/multiaddr-connection-pair.ts +147 -0
  129. package/src/queue/index.ts +30 -9
  130. package/src/rate-limiter.ts +3 -30
  131. package/src/socket-writer.browser.ts +3 -0
  132. package/src/socket-writer.ts +64 -0
  133. package/src/stream-pair.ts +90 -0
  134. package/src/stream-utils.ts +873 -0
  135. package/dist/src/abort-options.d.ts +0 -7
  136. package/dist/src/abort-options.d.ts.map +0 -1
  137. package/dist/src/abort-options.js +0 -14
  138. package/dist/src/abort-options.js.map +0 -1
  139. package/dist/src/array-equals.d.ts +0 -24
  140. package/dist/src/array-equals.d.ts.map +0 -1
  141. package/dist/src/array-equals.js +0 -31
  142. package/dist/src/array-equals.js.map +0 -1
  143. package/dist/src/close-source.d.ts +0 -4
  144. package/dist/src/close-source.d.ts.map +0 -1
  145. package/dist/src/close-source.js +0 -11
  146. package/dist/src/close-source.js.map +0 -1
  147. package/dist/src/close.d.ts +0 -21
  148. package/dist/src/close.d.ts.map +0 -1
  149. package/dist/src/close.js +0 -49
  150. package/dist/src/close.js.map +0 -1
  151. package/dist/src/multiaddr/is-ip-based.d.ts +0 -6
  152. package/dist/src/multiaddr/is-ip-based.d.ts.map +0 -1
  153. package/dist/src/multiaddr/is-ip-based.js +0 -18
  154. package/dist/src/multiaddr/is-ip-based.js.map +0 -1
  155. package/dist/src/stream-to-ma-conn.d.ts +0 -23
  156. package/dist/src/stream-to-ma-conn.d.ts.map +0 -1
  157. package/dist/src/stream-to-ma-conn.js +0 -75
  158. package/dist/src/stream-to-ma-conn.js.map +0 -1
  159. package/dist/typedoc-urls.json +0 -147
  160. package/src/abort-options.ts +0 -20
  161. package/src/array-equals.ts +0 -34
  162. package/src/close-source.ts +0 -14
  163. package/src/close.ts +0 -65
  164. package/src/multiaddr/is-ip-based.ts +0 -21
  165. package/src/stream-to-ma-conn.ts +0 -105
@@ -0,0 +1,64 @@
1
+ import stream from 'node:stream'
2
+ import { Uint8ArrayList } from 'uint8arraylist'
3
+
4
+ export interface SocketWriter {
5
+ /**
6
+ * Write any available data into the socket, if the socket's internal write
7
+ * buffer has available capacity
8
+ */
9
+ pull (): boolean
10
+
11
+ /**
12
+ * Write data into the socket, returns false if the socket's internal write
13
+ * buffer is at capacity
14
+ */
15
+ write (data: Uint8Array | Uint8Array[] | Uint8ArrayList): boolean
16
+ }
17
+
18
+ /**
19
+ * @deprecated delete if unused
20
+ */
21
+ export function socketWriter (socket: stream.Duplex): SocketWriter {
22
+ const queue = new Uint8ArrayList()
23
+
24
+ return {
25
+ pull (): boolean {
26
+ if (socket.writableNeedDrain) {
27
+ return false
28
+ }
29
+
30
+ for (const buf of queue) {
31
+ queue.consume(buf.byteLength)
32
+
33
+ if (!socket.write(buf)) {
34
+ // continue writing after drain event. this is a synchronous operation
35
+ // so it will not interleave with the `this.writeToSocket()`
36
+ // invocation in this.sendData so all data will be sent in-order
37
+ if (queue.byteLength > 0) {
38
+ socket.once('drain', () => {
39
+ this.pull()
40
+ })
41
+ }
42
+
43
+ return false
44
+ }
45
+ }
46
+
47
+ return true
48
+ },
49
+
50
+ write (data: Uint8Array | Uint8Array[] | Uint8ArrayList): boolean {
51
+ if (Array.isArray(data)) {
52
+ queue.appendAll(data)
53
+ } else {
54
+ queue.append(data)
55
+ }
56
+
57
+ if (socket.writableNeedDrain) {
58
+ return false
59
+ }
60
+
61
+ return this.pull()
62
+ }
63
+ }
64
+ }
@@ -0,0 +1,90 @@
1
+ import { pEvent } from 'p-event'
2
+ import { mockMuxer } from './mock-muxer.ts'
3
+ import { multiaddrConnectionPair } from './multiaddr-connection-pair.ts'
4
+ import { echo } from './stream-utils.ts'
5
+ import type { MockMultiaddrConnectionInit } from './multiaddr-connection-pair.ts'
6
+ import type { Stream, StreamOptions } from '@libp2p/interface'
7
+
8
+ export interface StreamPairOptions {
9
+ /**
10
+ * How long to wait in ms before sending messages
11
+ *
12
+ * @default 1
13
+ */
14
+ delay?: number
15
+
16
+ /**
17
+ * If more than this many messages are sent within delay, write backpressure
18
+ * will be applied
19
+ */
20
+ capacity?: number
21
+
22
+ /**
23
+ * Simulate having pre-negotiated a protocol by passing it here
24
+ */
25
+ protocol?: string
26
+
27
+ /**
28
+ * Configuration options for the outbound stream
29
+ */
30
+ outbound?: StreamOptions
31
+
32
+ /**
33
+ * Configuration options for underlying outbound connection
34
+ */
35
+ outboundConnection?: Partial<MockMultiaddrConnectionInit>
36
+
37
+ /**
38
+ * Configuration options for the inbound stream
39
+ */
40
+ inbound?: StreamOptions
41
+
42
+ /**
43
+ * Configuration options for underlying inbound connection
44
+ */
45
+ inboundConnection?: Partial<MockMultiaddrConnectionInit>
46
+ }
47
+
48
+ /**
49
+ * Returns two streams connected to each other with a slight delay in sending
50
+ * messages to simulate a network
51
+ */
52
+ export async function streamPair (opts: StreamPairOptions = {}): Promise<[Stream, Stream]> {
53
+ const [outboundConnection, inboundConnection] = multiaddrConnectionPair({
54
+ ...opts,
55
+ outbound: opts.outboundConnection,
56
+ inbound: opts.inboundConnection
57
+ })
58
+
59
+ const localMuxer = mockMuxer({
60
+ streamOptions: opts.outbound
61
+ }).createStreamMuxer(outboundConnection)
62
+ const remoteMuxer = mockMuxer({
63
+ streamOptions: opts.inbound
64
+ }).createStreamMuxer(inboundConnection)
65
+
66
+ const [
67
+ inboundStream,
68
+ outboundStream
69
+ ] = await Promise.all([
70
+ pEvent<'stream', CustomEvent<Stream>>(remoteMuxer, 'stream').then(evt => {
71
+ return evt.detail
72
+ }),
73
+ localMuxer.createStream({
74
+ ...opts.outbound,
75
+ protocol: opts.protocol
76
+ })
77
+ ])
78
+
79
+ return [
80
+ outboundStream,
81
+ inboundStream
82
+ ]
83
+ }
84
+
85
+ export async function echoStream (opts: StreamPairOptions = {}): Promise<Stream> {
86
+ const [outbound, inbound] = await streamPair(opts)
87
+ echo(inbound)
88
+
89
+ return outbound
90
+ }