@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.
- package/README.md +1 -1
- package/dist/index.min.js +1 -6
- package/dist/index.min.js.map +4 -4
- package/dist/src/abort-options.d.ts +7 -0
- package/dist/src/abort-options.d.ts.map +1 -0
- package/dist/src/abort-options.js +14 -0
- package/dist/src/abort-options.js.map +1 -0
- package/dist/src/abstract-stream.d.ts +130 -14
- package/dist/src/abstract-stream.d.ts.map +1 -1
- package/dist/src/abstract-stream.js +321 -39
- package/dist/src/abstract-stream.js.map +1 -1
- package/dist/src/array-equals.d.ts +24 -0
- package/dist/src/array-equals.d.ts.map +1 -0
- package/dist/src/array-equals.js +31 -0
- package/dist/src/array-equals.js.map +1 -0
- package/dist/src/close-source.d.ts +4 -0
- package/dist/src/close-source.d.ts.map +1 -0
- package/dist/src/close-source.js +11 -0
- package/dist/src/close-source.js.map +1 -0
- package/dist/src/close.d.ts +21 -0
- package/dist/src/close.d.ts.map +1 -0
- package/dist/src/close.js +49 -0
- package/dist/src/close.js.map +1 -0
- package/dist/src/errors.d.ts +0 -8
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +0 -8
- package/dist/src/errors.js.map +1 -1
- package/dist/src/get-thin-waist-addresses.browser.d.ts +1 -1
- package/dist/src/get-thin-waist-addresses.browser.d.ts.map +1 -1
- package/dist/src/get-thin-waist-addresses.browser.js +3 -4
- package/dist/src/get-thin-waist-addresses.browser.js.map +1 -1
- package/dist/src/get-thin-waist-addresses.d.ts +1 -1
- package/dist/src/get-thin-waist-addresses.d.ts.map +1 -1
- package/dist/src/get-thin-waist-addresses.js +9 -7
- package/dist/src/get-thin-waist-addresses.js.map +1 -1
- package/dist/src/index.d.ts +1 -33
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -33
- package/dist/src/index.js.map +1 -1
- package/dist/src/multiaddr/is-global-unicast.d.ts.map +1 -1
- package/dist/src/multiaddr/is-global-unicast.js +9 -8
- package/dist/src/multiaddr/is-global-unicast.js.map +1 -1
- package/dist/src/multiaddr/is-ip-based.d.ts +6 -0
- package/dist/src/multiaddr/is-ip-based.d.ts.map +1 -0
- package/dist/src/multiaddr/is-ip-based.js +18 -0
- package/dist/src/multiaddr/is-ip-based.js.map +1 -0
- package/dist/src/multiaddr/is-link-local.d.ts.map +1 -1
- package/dist/src/multiaddr/is-link-local.js +16 -11
- package/dist/src/multiaddr/is-link-local.js.map +1 -1
- package/dist/src/multiaddr/is-loopback.d.ts.map +1 -1
- package/dist/src/multiaddr/is-loopback.js +5 -12
- package/dist/src/multiaddr/is-loopback.js.map +1 -1
- package/dist/src/multiaddr/is-network-address.d.ts.map +1 -1
- package/dist/src/multiaddr/is-network-address.js +16 -4
- package/dist/src/multiaddr/is-network-address.js.map +1 -1
- package/dist/src/multiaddr/is-private.d.ts.map +1 -1
- package/dist/src/multiaddr/is-private.js +10 -9
- package/dist/src/multiaddr/is-private.js.map +1 -1
- package/dist/src/queue/index.d.ts +0 -3
- package/dist/src/queue/index.d.ts.map +1 -1
- package/dist/src/queue/index.js +4 -20
- package/dist/src/queue/index.js.map +1 -1
- package/dist/src/rate-limiter.d.ts +15 -1
- package/dist/src/rate-limiter.d.ts.map +1 -1
- package/dist/src/rate-limiter.js +14 -1
- package/dist/src/rate-limiter.js.map +1 -1
- package/dist/src/stream-to-ma-conn.d.ts +23 -0
- package/dist/src/stream-to-ma-conn.d.ts.map +1 -0
- package/dist/src/stream-to-ma-conn.js +75 -0
- package/dist/src/stream-to-ma-conn.js.map +1 -0
- package/package.json +163 -19
- package/src/abort-options.ts +20 -0
- package/src/abstract-stream.ts +464 -51
- package/src/array-equals.ts +34 -0
- package/src/close-source.ts +14 -0
- package/src/close.ts +65 -0
- package/src/errors.ts +0 -10
- package/src/get-thin-waist-addresses.browser.ts +4 -5
- package/src/get-thin-waist-addresses.ts +12 -8
- package/src/index.ts +1 -33
- package/src/multiaddr/is-global-unicast.ts +11 -8
- package/src/multiaddr/is-ip-based.ts +21 -0
- package/src/multiaddr/is-link-local.ts +20 -11
- package/src/multiaddr/is-loopback.ts +7 -12
- package/src/multiaddr/is-network-address.ts +19 -4
- package/src/multiaddr/is-private.ts +14 -9
- package/src/queue/index.ts +4 -24
- package/src/rate-limiter.ts +30 -3
- package/src/stream-to-ma-conn.ts +106 -0
- package/dist/src/abstract-message-stream.d.ts +0 -129
- package/dist/src/abstract-message-stream.d.ts.map +0 -1
- package/dist/src/abstract-message-stream.js +0 -389
- package/dist/src/abstract-message-stream.js.map +0 -1
- package/dist/src/abstract-multiaddr-connection.d.ts +0 -26
- package/dist/src/abstract-multiaddr-connection.d.ts.map +0 -1
- package/dist/src/abstract-multiaddr-connection.js +0 -66
- package/dist/src/abstract-multiaddr-connection.js.map +0 -1
- package/dist/src/abstract-stream-muxer.d.ts +0 -53
- package/dist/src/abstract-stream-muxer.d.ts.map +0 -1
- package/dist/src/abstract-stream-muxer.js +0 -169
- package/dist/src/abstract-stream-muxer.js.map +0 -1
- package/dist/src/length-prefixed-decoder.d.ts +0 -37
- package/dist/src/length-prefixed-decoder.d.ts.map +0 -1
- package/dist/src/length-prefixed-decoder.js +0 -64
- package/dist/src/length-prefixed-decoder.js.map +0 -1
- package/dist/src/message-queue.d.ts +0 -61
- package/dist/src/message-queue.d.ts.map +0 -1
- package/dist/src/message-queue.js +0 -93
- package/dist/src/message-queue.js.map +0 -1
- package/dist/src/mock-muxer.d.ts +0 -57
- package/dist/src/mock-muxer.d.ts.map +0 -1
- package/dist/src/mock-muxer.js +0 -204
- package/dist/src/mock-muxer.js.map +0 -1
- package/dist/src/mock-stream.d.ts +0 -31
- package/dist/src/mock-stream.d.ts.map +0 -1
- package/dist/src/mock-stream.js +0 -69
- package/dist/src/mock-stream.js.map +0 -1
- package/dist/src/multiaddr/get-net-config.d.ts +0 -55
- package/dist/src/multiaddr/get-net-config.d.ts.map +0 -1
- package/dist/src/multiaddr/get-net-config.js +0 -54
- package/dist/src/multiaddr/get-net-config.js.map +0 -1
- package/dist/src/multiaddr/index.d.ts +0 -7
- package/dist/src/multiaddr/index.d.ts.map +0 -1
- package/dist/src/multiaddr/index.js +0 -7
- package/dist/src/multiaddr/index.js.map +0 -1
- package/dist/src/multiaddr/utils.d.ts +0 -5
- package/dist/src/multiaddr/utils.d.ts.map +0 -1
- package/dist/src/multiaddr/utils.js +0 -32
- package/dist/src/multiaddr/utils.js.map +0 -1
- package/dist/src/multiaddr-connection-pair.d.ts +0 -25
- package/dist/src/multiaddr-connection-pair.d.ts.map +0 -1
- package/dist/src/multiaddr-connection-pair.js +0 -103
- package/dist/src/multiaddr-connection-pair.js.map +0 -1
- package/dist/src/socket-writer.browser.d.ts +0 -2
- package/dist/src/socket-writer.browser.d.ts.map +0 -1
- package/dist/src/socket-writer.browser.js +0 -4
- package/dist/src/socket-writer.browser.js.map +0 -1
- package/dist/src/socket-writer.d.ts +0 -19
- package/dist/src/socket-writer.d.ts.map +0 -1
- package/dist/src/socket-writer.js +0 -43
- package/dist/src/socket-writer.js.map +0 -1
- package/dist/src/stream-pair.d.ts +0 -42
- package/dist/src/stream-pair.d.ts.map +0 -1
- package/dist/src/stream-pair.js +0 -40
- package/dist/src/stream-pair.js.map +0 -1
- package/dist/src/stream-utils.d.ts +0 -198
- package/dist/src/stream-utils.d.ts.map +0 -1
- package/dist/src/stream-utils.js +0 -369
- package/dist/src/stream-utils.js.map +0 -1
- package/src/abstract-message-stream.ts +0 -549
- package/src/abstract-multiaddr-connection.ts +0 -93
- package/src/abstract-stream-muxer.ts +0 -239
- package/src/length-prefixed-decoder.ts +0 -98
- package/src/message-queue.ts +0 -156
- package/src/mock-muxer.ts +0 -304
- package/src/mock-stream.ts +0 -101
- package/src/multiaddr/get-net-config.ts +0 -112
- package/src/multiaddr/index.ts +0 -6
- package/src/multiaddr/utils.ts +0 -46
- package/src/multiaddr-connection-pair.ts +0 -147
- package/src/socket-writer.browser.ts +0 -3
- package/src/socket-writer.ts +0 -64
- package/src/stream-pair.ts +0 -90
- 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
|
-
}
|
package/src/mock-stream.ts
DELETED
|
@@ -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
|
-
}
|
package/src/multiaddr/index.ts
DELETED
package/src/multiaddr/utils.ts
DELETED
|
@@ -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
|
-
}
|