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