@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
package/src/mock-muxer.ts DELETED
@@ -1,304 +0,0 @@
1
- import * as cborg from 'cborg'
2
- import * as lp from 'it-length-prefixed'
3
- import { pushable } from 'it-pushable'
4
- import { Uint8ArrayList } from 'uint8arraylist'
5
- import { AbstractStreamMuxer } from './abstract-stream-muxer.ts'
6
- import { AbstractStream } from './abstract-stream.ts'
7
- import { Queue } from './queue/index.js'
8
- import type { SendResult } from './abstract-message-stream.ts'
9
- import type { AbstractStreamInit } from './abstract-stream.ts'
10
- import type { AbortOptions, MessageStreamDirection, CreateStreamOptions, StreamMuxerFactory, StreamMuxer, MultiaddrConnection, StreamMuxerOptions } from '@libp2p/interface'
11
- import type { Pushable } from 'it-pushable'
12
- import type { SupportedEncodings } from 'uint8arrays/from-string'
13
-
14
- interface DataMessage {
15
- id: string
16
- type: 'data'
17
- chunk: Uint8Array
18
- }
19
-
20
- interface ResetMessage {
21
- id: string
22
- type: 'reset'
23
- }
24
-
25
- interface CloseWriteMessage {
26
- id: string
27
- type: 'closeWrite'
28
- }
29
-
30
- interface CloseReadMessage {
31
- id: string
32
- type: 'closeRead'
33
- }
34
-
35
- interface CreateMessage {
36
- id: string
37
- type: 'create'
38
- protocol?: string
39
- }
40
-
41
- interface PauseMessage {
42
- id: string
43
- type: 'pause'
44
- }
45
-
46
- interface ResumeMessage {
47
- id: string
48
- type: 'resume'
49
- }
50
-
51
- type StreamMessage = DataMessage | ResetMessage | CloseWriteMessage | CloseReadMessage | CreateMessage | PauseMessage | ResumeMessage
52
-
53
- export interface MockMuxedStreamInit extends AbstractStreamInit {
54
- sendMessage(message: StreamMessage): boolean
55
- encoding: SupportedEncodings
56
- }
57
-
58
- class MockMuxedStream extends AbstractStream {
59
- private readonly sendMessage: (message: StreamMessage) => boolean
60
- private dataQueue: Queue
61
- private encoding: SupportedEncodings
62
-
63
- constructor (init: MockMuxedStreamInit) {
64
- super(init)
65
-
66
- this.sendMessage = init.sendMessage
67
- this.encoding = init.encoding
68
- this.dataQueue = new Queue({
69
- concurrency: 1
70
- })
71
-
72
- if (this.direction === 'outbound') {
73
- this.sendMessage({
74
- id: this.id,
75
- type: 'create',
76
- protocol: this.protocol
77
- })
78
- }
79
- }
80
-
81
- sendData (data: Uint8ArrayList): SendResult {
82
- const canSendMore = this.sendMessage({
83
- id: this.id,
84
- type: 'data',
85
- chunk: data.subarray()
86
- })
87
-
88
- return {
89
- sentBytes: data.byteLength,
90
- canSendMore
91
- }
92
- }
93
-
94
- sendReset (): void {
95
- this.sendMessage({
96
- id: this.id,
97
- type: 'reset'
98
- })
99
- }
100
-
101
- async sendCloseWrite (options?: AbortOptions): Promise<void> {
102
- this.sendMessage({
103
- id: this.id,
104
- type: 'closeWrite'
105
- })
106
-
107
- options?.signal?.throwIfAborted()
108
- }
109
-
110
- async sendCloseRead (options?: AbortOptions): Promise<void> {
111
- this.sendMessage({
112
- id: this.id,
113
- type: 'closeRead'
114
- })
115
-
116
- options?.signal?.throwIfAborted()
117
- }
118
-
119
- sendPause (): void {
120
- this.sendMessage({
121
- id: this.id,
122
- type: 'pause'
123
- })
124
- }
125
-
126
- sendResume (): void {
127
- this.sendMessage({
128
- id: this.id,
129
- type: 'resume'
130
- })
131
- }
132
-
133
- onRemotePaused (): void {
134
- this.dataQueue.pause()
135
- }
136
-
137
- onRemoteResumed (): void {
138
- this.dataQueue.resume()
139
- }
140
- }
141
-
142
- interface MockMuxerInit extends StreamMuxerOptions {
143
- /**
144
- * How long the input queue can grow
145
- */
146
- maxInputQueueSize?: number
147
-
148
- /**
149
- * How to encode data message
150
- *
151
- * @default base64
152
- */
153
- encoding?: SupportedEncodings
154
-
155
- /**
156
- * How large muxer messages are allowed to be
157
- */
158
- maxMessageSize?: number
159
- }
160
-
161
- // CBOR encoding of non-message data fields
162
- const MESSAGE_OVERHEAD = 30
163
-
164
- class MockMuxer extends AbstractStreamMuxer<MockMuxedStream> {
165
- private input: Pushable<Uint8Array | Uint8ArrayList>
166
- private maxInputQueueSize: number
167
- private encoding: SupportedEncodings
168
- private maxMessageSize: number
169
- private nextStreamId: number
170
-
171
- constructor (maConn: MultiaddrConnection, init: MockMuxerInit) {
172
- super(maConn, {
173
- ...init,
174
- protocol: '/mock-muxer/1.0.0',
175
- name: 'mock-muxer'
176
- })
177
-
178
- this.maxInputQueueSize = init.maxInputQueueSize ?? 1024 * 1024 * 10
179
- this.maxMessageSize = (init.maxMessageSize ?? 1024 * 1024 * 4) + MESSAGE_OVERHEAD
180
- this.encoding = init.encoding ?? 'base64'
181
- this.input = pushable()
182
- this.sendMessage = this.sendMessage.bind(this)
183
- this.nextStreamId = this.maConn.direction === 'outbound' ? 0 : 1
184
-
185
- Promise.resolve()
186
- .then(async () => {
187
- for await (const buf of lp.decode(this.input, {
188
- maxDataLength: this.maxMessageSize
189
- })) {
190
- this.onMessage(cborg.decode(buf.subarray()))
191
- }
192
- })
193
- .catch(err => {
194
- this.abort(err)
195
- })
196
- }
197
-
198
- onData (data: Uint8Array | Uint8ArrayList): void {
199
- if (this.input.readableLength >= this.maxInputQueueSize) {
200
- this.abort(new Error(`Input queue exceeded maximum size ${this.input.readableLength} >= ${this.maxInputQueueSize}`))
201
- return
202
- }
203
-
204
- this.input.push(data)
205
- }
206
-
207
- sendMessage (message: StreamMessage): boolean {
208
- if (message.type === 'data') {
209
- this.log.trace('send message %o', { ...message, chunk: `[ ${message.chunk.byteLength} bytes ]` })
210
- } else {
211
- this.log.trace('send message %o', message)
212
- }
213
-
214
- const buf = cborg.encode(message)
215
- const encoded = lp.encode.single(buf, {
216
- maxDataLength: this.maxMessageSize
217
- })
218
-
219
- return this.send(encoded)
220
- }
221
-
222
- onMessage (message: StreamMessage): void {
223
- if (message.type === 'data') {
224
- this.log.trace('incoming message %o', { ...message, chunk: `[ ${message.chunk.byteLength} bytes ]` })
225
- } else {
226
- this.log.trace('incoming message %o', message)
227
- }
228
-
229
- let stream: MockMuxedStream | undefined = this.streams.find(s => s.id === message.id)
230
-
231
- if (message.type === 'create') {
232
- if (stream != null) {
233
- throw new Error(`Already had stream for ${message.id}`)
234
- }
235
-
236
- this.log.trace('create stream inbound %s', message.id)
237
- stream = this._createStream(message.id, 'inbound', {
238
- protocol: message.protocol
239
- })
240
-
241
- this.onRemoteStream(stream)
242
- }
243
-
244
- if (stream == null) {
245
- this.log.error(`No stream found for ${message.id}`)
246
- return
247
- }
248
-
249
- if (message.type === 'data') {
250
- stream.onData(message.chunk)
251
- } else if (message.type === 'reset') {
252
- stream.onRemoteReset()
253
- } else if (message.type === 'closeWrite') {
254
- stream.onRemoteCloseWrite()
255
- } else if (message.type === 'closeRead') {
256
- stream.onRemoteCloseRead()
257
- } else if (message.type === 'pause') {
258
- stream.onRemotePaused()
259
- } else if (message.type === 'resume') {
260
- stream.onRemoteResumed()
261
- }
262
- }
263
-
264
- onCreateStream (options: CreateStreamOptions): MockMuxedStream {
265
- this.nextStreamId += 2
266
-
267
- return this._createStream(`${this.nextStreamId}`, 'outbound', options)
268
- }
269
-
270
- _createStream (id: string, direction: MessageStreamDirection, options: CreateStreamOptions): MockMuxedStream {
271
- this.log.trace('createStream %s %s', direction, id)
272
-
273
- return new MockMuxedStream({
274
- ...this.streamOptions,
275
- ...options,
276
- id,
277
- direction,
278
- log: this.log.newScope(`stream:${direction}:${id}`),
279
- sendMessage: this.sendMessage,
280
- encoding: this.encoding,
281
- maxMessageSize: this.maxMessageSize - MESSAGE_OVERHEAD,
282
- protocol: ''
283
- })
284
- }
285
- }
286
-
287
- class MockMuxerFactory implements StreamMuxerFactory {
288
- public protocol: string = '/mock-muxer/1.0.0'
289
- private init: MockMuxerInit
290
-
291
- constructor (init: MockMuxerInit) {
292
- this.init = init
293
- }
294
-
295
- createStreamMuxer (maConn: MultiaddrConnection): StreamMuxer {
296
- return new MockMuxer(maConn, {
297
- ...this.init
298
- })
299
- }
300
- }
301
-
302
- export function mockMuxer (init: MockMuxerInit = {}): StreamMuxerFactory {
303
- return new MockMuxerFactory(init)
304
- }
@@ -1,101 +0,0 @@
1
- import { StreamMessageEvent } from '@libp2p/interface'
2
- import { defaultLogger } from '@libp2p/logger'
3
- import { raceSignal } from 'race-signal'
4
- import { AbstractStream } from './abstract-stream.ts'
5
- import type { SendResult } from './abstract-message-stream.ts'
6
- import type { MessageQueue, MessageQueueEvents } from './message-queue.ts'
7
- import type { AbortOptions, MessageStreamDirection, TypedEventTarget } from '@libp2p/interface'
8
- import type { Uint8ArrayList } from 'uint8arraylist'
9
-
10
- interface MockStreamMessages extends MessageQueueEvents {
11
- closeWrite: Event
12
- closeRead: Event
13
- }
14
-
15
- interface MockStreamInit {
16
- delay?: number
17
- direction: MessageStreamDirection
18
- local: MessageQueue<MockStreamMessages>
19
- remote: TypedEventTarget<MockStreamMessages>
20
- }
21
-
22
- let streamId = 0
23
-
24
- export class MockStream extends AbstractStream {
25
- private local: MessageQueue<MockStreamMessages>
26
- private remote: TypedEventTarget<MockStreamMessages>
27
-
28
- constructor (init: MockStreamInit) {
29
- const id = `${streamId++}`
30
-
31
- super({
32
- ...init,
33
- id,
34
- log: defaultLogger().forComponent(`libp2p:stream-pair:${init.direction}:${id}`)
35
- })
36
-
37
- this.local = init.local
38
- this.remote = init.remote
39
-
40
- this.local.addEventListener('drain', () => {
41
- this.safeDispatchEvent('drain')
42
- })
43
-
44
- this.remote.addEventListener('message', (evt) => {
45
- this.onData(evt.data)
46
- })
47
- this.remote.addEventListener('reset', (evt) => {
48
- this.onRemoteReset()
49
- })
50
- this.remote.addEventListener('closeWrite', (evt) => {
51
- this.onRemoteCloseWrite()
52
- })
53
- }
54
-
55
- sendData (data: Uint8ArrayList): SendResult {
56
- const canSendMore = this.local.send(new StreamMessageEvent(data))
57
-
58
- return {
59
- sentBytes: data.byteLength,
60
- canSendMore
61
- }
62
- }
63
-
64
- sendReset (): void {
65
- this.local.send(new Event('reset'))
66
- }
67
-
68
- async sendCloseWrite (options?: AbortOptions): Promise<void> {
69
- return raceSignal(new Promise<void>((resolve, reject) => {
70
- this.local.send(new Event('closeWrite'))
71
- this.local.onIdle().then(resolve, reject)
72
- }), options?.signal)
73
- }
74
-
75
- async sendCloseRead (options?: AbortOptions): Promise<void> {
76
- return raceSignal(new Promise<void>((resolve, reject) => {
77
- this.local.send(new Event('closeRead'))
78
- this.local.onIdle().then(resolve, reject)
79
- }), options?.signal)
80
- }
81
-
82
- sendPause (): void {
83
- this.local.send(new Event('pause'))
84
- }
85
-
86
- sendResume (): void {
87
- this.local.send(new Event('resume'))
88
- }
89
-
90
- onRemotePaused (): void {
91
- this.local.pause()
92
- }
93
-
94
- onRemoteResumed (): void {
95
- this.local.resume()
96
- }
97
-
98
- onMuxerDrain (): void {
99
- this.local.resume()
100
- }
101
- }
@@ -1,112 +0,0 @@
1
- import { InvalidParametersError } from '@libp2p/interface'
2
- import type { Multiaddr } from '@multiformats/multiaddr'
3
-
4
- export interface IP4NetConfig {
5
- type: 'ip4'
6
- host: string
7
- protocol?: 'tcp' | 'udp'
8
- port?: number
9
- cidr?: number
10
- sni?: string
11
- }
12
-
13
- export interface IP6NetConfig {
14
- type: 'ip6'
15
- host: string
16
- protocol?: 'tcp' | 'udp'
17
- port?: number
18
- zone?: string
19
- cidr?: string
20
- sni?: string
21
- }
22
-
23
- export interface DNSNetConfig {
24
- type: 'dns'
25
- host: string
26
- protocol?: 'tcp' | 'udp'
27
- port: number
28
- cidr?: number
29
- }
30
-
31
- export interface DNS4NetConfig {
32
- type: 'dns4'
33
- host: string
34
- protocol?: 'tcp' | 'udp'
35
- port: number
36
- cidr?: number
37
- }
38
-
39
- export interface DNS6NetConfig {
40
- type: 'dns6'
41
- host: string
42
- protocol?: 'tcp' | 'udp'
43
- port: number
44
- cidr?: number
45
- }
46
-
47
- export interface DNSAddrNetConfig {
48
- type: 'dnsaddr'
49
- host: string
50
- protocol?: 'tcp' | 'udp'
51
- port: number
52
- cidr?: number
53
- }
54
-
55
- export type NetConfig = IP4NetConfig | IP6NetConfig | DNSNetConfig | DNS4NetConfig | DNS6NetConfig | DNSAddrNetConfig
56
-
57
- /**
58
- * Returns host/port/etc information for multiaddrs, if it is available.
59
- *
60
- * It will throw if the passed multiaddr does not start with a network address,
61
- * e.g. a IPv4, IPv6, DNS, DNS4, DNS6 or DNSADDR address
62
- */
63
- export function getNetConfig (ma: Multiaddr): NetConfig {
64
- const components = ma.getComponents()
65
- const config: any = {}
66
- let index = 0
67
-
68
- if (components[index]?.name === 'ip6zone') {
69
- config.zone = `${components[index].value}`
70
- index++
71
- }
72
-
73
- if (components[index].name === 'ip4' || components[index].name === 'ip6') {
74
- config.type = components[index].name
75
- config.host = components[index].value
76
- index++
77
- } else if (components[index].name === 'dns' || components[index].name === 'dns4' || components[index].name === 'dns6') {
78
- config.type = components[index].name
79
- config.host = components[index].value
80
- index++
81
- } else if (components[index].name === 'dnsaddr') {
82
- config.type = components[index].name
83
- config.host = `_dnsaddr.${components[index].value}`
84
- index++
85
- }
86
-
87
- if (components[index]?.name === 'tcp' || components[index]?.name === 'udp') {
88
- config.protocol = components[index].name === 'tcp' ? 'tcp' : 'udp'
89
- config.port = parseInt(`${components[index].value}`)
90
- index++
91
- }
92
-
93
- if (components[index]?.name === 'ipcidr') {
94
- if (config.type === 'ip4') {
95
- config.cidr = parseInt(`${components[index].value}`)
96
- } else if (config.type === 'ip6') {
97
- config.cidr = `${components[index].value}`
98
- }
99
- index++
100
- }
101
-
102
- if (config.type == null || config.host == null) {
103
- throw new InvalidParametersError(`Multiaddr ${ma} was not an IPv4, IPv6, DNS, DNS4, DNS6 or DNSADDR address`)
104
- }
105
-
106
- if (components[index]?.name === 'tls' && components[index + 1]?.name === 'sni') {
107
- config.sni = components[index + 1].value
108
- index += 2
109
- }
110
-
111
- return config
112
- }
@@ -1,6 +0,0 @@
1
- export * from './get-net-config.ts'
2
- export * from './is-global-unicast.js'
3
- export * from './is-link-local.js'
4
- export * from './is-loopback.js'
5
- export * from './is-network-address.js'
6
- export * from './is-private.js'
@@ -1,46 +0,0 @@
1
- import { CODE_IP4, CODE_IP6, CODE_IP6ZONE, multiaddr } from '@multiformats/multiaddr'
2
- import type { NetConfig } from './get-net-config.ts'
3
- import type { Multiaddr } from '@multiformats/multiaddr'
4
-
5
- export function getIpFromMultiaddr (ma: Multiaddr): string | undefined {
6
- const components = ma.getComponents()
7
- let index = 0
8
-
9
- if (components[0]?.code === CODE_IP6ZONE) {
10
- index++
11
- }
12
-
13
- if (components[index]?.code !== CODE_IP4 && components[index]?.code !== CODE_IP6) {
14
- return
15
- }
16
-
17
- return components[index]?.value
18
- }
19
-
20
- export function netConfigToMultiaddr (config: NetConfig, port?: number | string, host?: string): Multiaddr {
21
- const parts: Array<string | number> = [
22
- config.type,
23
- host ?? config.host
24
- ]
25
-
26
- if (config.protocol != null) {
27
- const p = port ?? config.port
28
-
29
- if (p != null) {
30
- parts.push(
31
- config.protocol,
32
- p
33
- )
34
- }
35
- }
36
-
37
- if (config.type === 'ip6' && config.zone != null) {
38
- parts.unshift('ip6zone', config.zone)
39
- }
40
-
41
- if (config.cidr != null) {
42
- parts.push('ipcidr', config.cidr)
43
- }
44
-
45
- return multiaddr(`/${parts.join('/')}`)
46
- }
@@ -1,147 +0,0 @@
1
- import { StreamMessageEvent } from '@libp2p/interface'
2
- import { defaultLogger } from '@libp2p/logger'
3
- import { multiaddr } from '@multiformats/multiaddr'
4
- import { pEvent } from 'p-event'
5
- import { raceSignal } from 'race-signal'
6
- import { AbstractMultiaddrConnection } from './abstract-multiaddr-connection.ts'
7
- import { MessageQueue } from './message-queue.ts'
8
- import type { SendResult } from './abstract-message-stream.ts'
9
- import type { AbstractMultiaddrConnectionInit } from './abstract-multiaddr-connection.ts'
10
- import type { MessageQueueEvents, MessageQueueInit } from './message-queue.ts'
11
- import type { AbortOptions, Logger, MultiaddrConnection, MessageStreamDirection, TypedEventTarget } from '@libp2p/interface'
12
- import type { Multiaddr } from '@multiformats/multiaddr'
13
- import type { Uint8ArrayList } from 'uint8arraylist'
14
-
15
- interface MockMultiaddrConnectionMessages extends MessageQueueEvents {
16
- close: Event
17
- pause: Event
18
- resume: Event
19
- }
20
-
21
- export interface MockMultiaddrConnectionInit extends AbstractMultiaddrConnectionInit {
22
- id: string,
23
- log: Logger,
24
- direction: MessageStreamDirection
25
- local: MessageQueue<MockMultiaddrConnectionMessages>
26
- remote: TypedEventTarget<MockMultiaddrConnectionMessages>
27
- remoteAddr: Multiaddr
28
- }
29
-
30
- let multiaddrConnectionId = 0
31
-
32
- class MockMultiaddrConnection extends AbstractMultiaddrConnection {
33
- private local: MessageQueue<MockMultiaddrConnectionMessages>
34
- private remote: TypedEventTarget<MockMultiaddrConnectionMessages>
35
-
36
- constructor (init: MockMultiaddrConnectionInit) {
37
- super(init)
38
-
39
- this.local = init.local
40
- this.remote = init.remote
41
-
42
- this.local.addEventListener('drain', () => {
43
- this.safeDispatchEvent('drain')
44
- })
45
-
46
- this.remote.addEventListener('message', (evt) => {
47
- if (this.status !== 'open') {
48
- return
49
- }
50
-
51
- this.onData(evt.data)
52
- })
53
- this.remote.addEventListener('reset', (evt) => {
54
- if (this.status !== 'open') {
55
- return
56
- }
57
-
58
- this.onRemoteReset()
59
- })
60
- this.remote.addEventListener('close', (evt) => {
61
- this.onTransportClosed()
62
- })
63
- this.remote.addEventListener('pause', (evt) => {
64
- this.local.pause()
65
- })
66
- this.remote.addEventListener('resume', (evt) => {
67
- this.local.resume()
68
- })
69
- }
70
-
71
- sendData (data: Uint8ArrayList): SendResult {
72
- const canSendMore = this.local.send(new StreamMessageEvent(data))
73
-
74
- return {
75
- sentBytes: data.byteLength,
76
- canSendMore
77
- }
78
- }
79
-
80
- sendReset (): void {
81
- this.local.send(new Event('reset'))
82
- }
83
-
84
- async sendClose (options?: AbortOptions): Promise<void> {
85
- if (this.local.needsDrain) {
86
- await pEvent(this.local, 'drain', {
87
- signal: options?.signal
88
- })
89
- }
90
-
91
- return raceSignal(new Promise<void>((resolve, reject) => {
92
- this.local.send(new Event('close'))
93
- this.local.onIdle().then(resolve, reject)
94
- }), options?.signal)
95
- }
96
-
97
- sendPause (): void {
98
- this.local.send(new Event('pause'))
99
- }
100
-
101
- sendResume (): void {
102
- this.local.send(new Event('resume'))
103
- }
104
- }
105
-
106
- export interface MultiaddrConnectionPairOptions extends MessageQueueInit {
107
- outbound?: Partial<MockMultiaddrConnectionInit>
108
- inbound?: Partial<MockMultiaddrConnectionInit>
109
- }
110
-
111
- export function multiaddrConnectionPair (opts: MultiaddrConnectionPairOptions = {}): [MultiaddrConnection, MultiaddrConnection] {
112
- const inboundId = `${multiaddrConnectionId++}`
113
- const outboundId = `${multiaddrConnectionId++}`
114
-
115
- const outboundLog = defaultLogger().forComponent(`libp2p:mock-maconn:outbound:${inboundId}`)
116
- const inboundLog = defaultLogger().forComponent(`libp2p:mock-maconn:inbound:${outboundId}`)
117
-
118
- const targetA = new MessageQueue<MockMultiaddrConnectionMessages>({
119
- ...opts,
120
- log: outboundLog
121
- })
122
- const targetB = new MessageQueue<MockMultiaddrConnectionMessages>({
123
- ...opts,
124
- log: inboundLog
125
- })
126
-
127
- return [
128
- new MockMultiaddrConnection({
129
- ...opts.outbound,
130
- id: outboundId,
131
- direction: 'outbound',
132
- local: targetA,
133
- remote: targetB,
134
- remoteAddr: opts?.outbound?.remoteAddr ?? multiaddr(`/ip4/127.0.0.1/tcp/${outboundId}`),
135
- log: outboundLog
136
- }),
137
- new MockMultiaddrConnection({
138
- ...opts.inbound,
139
- id: inboundId,
140
- direction: 'inbound',
141
- local: targetB,
142
- remote: targetA,
143
- remoteAddr: opts?.inbound?.remoteAddr ?? multiaddr(`/ip4/127.0.0.1/tcp/${inboundId}`),
144
- log: inboundLog
145
- })
146
- ]
147
- }