@libp2p/utils 6.7.1 → 6.7.2-a02cb0461
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/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/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-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 +199 -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/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/index.ts +6 -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 +874 -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/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/stream-to-ma-conn.ts +0 -105
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { Uint8ArrayList } from 'uint8arraylist';
|
|
2
|
+
import type { MessageStream, Stream } from '@libp2p/interface';
|
|
3
|
+
import type { AbortOptions } from '@multiformats/multiaddr';
|
|
4
|
+
import type { Duplex, Transform, Sink } from 'it-stream-types';
|
|
5
|
+
export declare class UnwrappedError extends Error {
|
|
6
|
+
static name: string;
|
|
7
|
+
name: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* The reported length of the next data message was not a positive integer
|
|
11
|
+
*/
|
|
12
|
+
export declare class InvalidMessageLengthError extends Error {
|
|
13
|
+
name: string;
|
|
14
|
+
code: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* The reported length of the next data message was larger than the configured
|
|
18
|
+
* max allowable value
|
|
19
|
+
*/
|
|
20
|
+
export declare class InvalidDataLengthError extends Error {
|
|
21
|
+
name: string;
|
|
22
|
+
code: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* The varint used to specify the length of the next data message contained more
|
|
26
|
+
* bytes than the configured max allowable value
|
|
27
|
+
*/
|
|
28
|
+
export declare class InvalidDataLengthLengthError extends Error {
|
|
29
|
+
name: string;
|
|
30
|
+
code: string;
|
|
31
|
+
}
|
|
32
|
+
export interface ByteStreamOpts {
|
|
33
|
+
/**
|
|
34
|
+
* Incoming bytes are buffered until read, this setting limits how many bytes
|
|
35
|
+
* will be buffered.
|
|
36
|
+
*
|
|
37
|
+
* @default 4_194_304
|
|
38
|
+
*/
|
|
39
|
+
maxBufferSize?: number;
|
|
40
|
+
/**
|
|
41
|
+
* If true, prevent message events propagating after they have been received,
|
|
42
|
+
*
|
|
43
|
+
* This is useful for when there are be other observers of messages and the
|
|
44
|
+
* caller does not wish to them to receive anything
|
|
45
|
+
*/
|
|
46
|
+
stopPropagation?: boolean;
|
|
47
|
+
}
|
|
48
|
+
export interface ReadBytesOptions extends AbortOptions {
|
|
49
|
+
/**
|
|
50
|
+
* If specified, read this number of bytes from the stream
|
|
51
|
+
*/
|
|
52
|
+
bytes: number;
|
|
53
|
+
}
|
|
54
|
+
export interface ByteStream<S extends MessageStream> {
|
|
55
|
+
/**
|
|
56
|
+
* Read bytes from the stream.
|
|
57
|
+
*
|
|
58
|
+
* If a required number of bytes is passed as an option, this will wait for
|
|
59
|
+
* the underlying stream to supply that number of bytes, throwing an
|
|
60
|
+
* `UnexpectedEOFError` if the stream closes before this happens.
|
|
61
|
+
*
|
|
62
|
+
* If no required number of bytes is passed, this will return `null` if the
|
|
63
|
+
* underlying stream closes before supplying any bytes.
|
|
64
|
+
*/
|
|
65
|
+
read(options: ReadBytesOptions): Promise<Uint8ArrayList>;
|
|
66
|
+
read(options?: AbortOptions): Promise<Uint8ArrayList | null>;
|
|
67
|
+
/**
|
|
68
|
+
* Write the passed bytes to the stream
|
|
69
|
+
*/
|
|
70
|
+
write(data: Uint8Array | Uint8ArrayList, options?: AbortOptions): Promise<void>;
|
|
71
|
+
/**
|
|
72
|
+
* After calling this method the stream can no longer be used. Any unread data
|
|
73
|
+
* will be emitted as a message event during the microtask queue of the
|
|
74
|
+
* current event loop tick.
|
|
75
|
+
*/
|
|
76
|
+
unwrap(): S;
|
|
77
|
+
}
|
|
78
|
+
export declare function byteStream<T extends MessageStream>(stream: T, opts?: ByteStreamOpts): ByteStream<T>;
|
|
79
|
+
export interface LengthPrefixedStream<S extends MessageStream = MessageStream> {
|
|
80
|
+
/**
|
|
81
|
+
* Read the next length-prefixed number of bytes from the stream
|
|
82
|
+
*/
|
|
83
|
+
read(options?: AbortOptions): Promise<Uint8ArrayList>;
|
|
84
|
+
/**
|
|
85
|
+
* Write the passed bytes to the stream prefixed by their length
|
|
86
|
+
*/
|
|
87
|
+
write(data: Uint8Array | Uint8ArrayList, options?: AbortOptions): Promise<void>;
|
|
88
|
+
/**
|
|
89
|
+
* Write passed list of bytes, prefix by their individual lengths to the stream as a single write
|
|
90
|
+
*/
|
|
91
|
+
writeV(input: Array<Uint8Array | Uint8ArrayList>, options?: AbortOptions): Promise<void>;
|
|
92
|
+
/**
|
|
93
|
+
* Returns the underlying stream
|
|
94
|
+
*/
|
|
95
|
+
unwrap(): S;
|
|
96
|
+
}
|
|
97
|
+
export interface LengthPrefixedStreamOpts extends ByteStreamOpts {
|
|
98
|
+
lengthEncoder(value: number): Uint8ArrayList | Uint8Array;
|
|
99
|
+
lengthDecoder(data: Uint8ArrayList): number;
|
|
100
|
+
maxLengthLength: number;
|
|
101
|
+
maxDataLength: number;
|
|
102
|
+
}
|
|
103
|
+
export declare function lpStream<T extends MessageStream>(stream: T, opts?: Partial<LengthPrefixedStreamOpts>): LengthPrefixedStream<T>;
|
|
104
|
+
/**
|
|
105
|
+
* A protobuf decoder - takes a byte array and returns an object
|
|
106
|
+
*/
|
|
107
|
+
export interface ProtobufDecoder<T> {
|
|
108
|
+
(data: Uint8Array | Uint8ArrayList): T;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* A protobuf encoder - takes an object and returns a byte array
|
|
112
|
+
*/
|
|
113
|
+
export interface ProtobufEncoder<T> {
|
|
114
|
+
(data: T): Uint8Array;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Convenience methods for working with protobuf streams
|
|
118
|
+
*/
|
|
119
|
+
export interface ProtobufStream<S extends MessageStream = MessageStream> {
|
|
120
|
+
/**
|
|
121
|
+
* Read the next length-prefixed byte array from the stream and decode it as the passed protobuf format
|
|
122
|
+
*/
|
|
123
|
+
read<T>(proto: {
|
|
124
|
+
decode: ProtobufDecoder<T>;
|
|
125
|
+
}, options?: AbortOptions): Promise<T>;
|
|
126
|
+
/**
|
|
127
|
+
* Encode the passed object as a protobuf message and write it's length-prefixed bytes to the stream
|
|
128
|
+
*/
|
|
129
|
+
write<T>(data: T, proto: {
|
|
130
|
+
encode: ProtobufEncoder<T>;
|
|
131
|
+
}, options?: AbortOptions): Promise<void>;
|
|
132
|
+
/**
|
|
133
|
+
* Encode the passed objects as protobuf messages and write their length-prefixed bytes to the stream as a single write
|
|
134
|
+
*/
|
|
135
|
+
writeV<T>(input: T[], proto: {
|
|
136
|
+
encode: ProtobufEncoder<T>;
|
|
137
|
+
}, options?: AbortOptions): Promise<void>;
|
|
138
|
+
/**
|
|
139
|
+
* Returns an object with read/write methods for operating on one specific type of protobuf message
|
|
140
|
+
*/
|
|
141
|
+
pb<T>(proto: {
|
|
142
|
+
encode: ProtobufEncoder<T>;
|
|
143
|
+
decode: ProtobufDecoder<T>;
|
|
144
|
+
}): ProtobufMessageStream<T, S>;
|
|
145
|
+
/**
|
|
146
|
+
* Returns the underlying stream
|
|
147
|
+
*/
|
|
148
|
+
unwrap(): S;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* A message reader/writer that only uses one type of message
|
|
152
|
+
*/
|
|
153
|
+
export interface ProtobufMessageStream<T, S extends MessageStream = MessageStream> {
|
|
154
|
+
/**
|
|
155
|
+
* Read a message from the stream
|
|
156
|
+
*/
|
|
157
|
+
read(options?: AbortOptions): Promise<T>;
|
|
158
|
+
/**
|
|
159
|
+
* Write a message to the stream
|
|
160
|
+
*/
|
|
161
|
+
write(d: T, options?: AbortOptions): Promise<void>;
|
|
162
|
+
/**
|
|
163
|
+
* Write several messages to the stream
|
|
164
|
+
*/
|
|
165
|
+
writeV(d: T[], options?: AbortOptions): Promise<void>;
|
|
166
|
+
/**
|
|
167
|
+
* Unwrap the underlying protobuf stream
|
|
168
|
+
*/
|
|
169
|
+
unwrap(): ProtobufStream<S>;
|
|
170
|
+
}
|
|
171
|
+
export interface ProtobufStreamOpts extends LengthPrefixedStreamOpts {
|
|
172
|
+
}
|
|
173
|
+
export declare function pbStream<T extends MessageStream = Stream>(stream: T, opts?: Partial<ProtobufStreamOpts>): ProtobufStream<T>;
|
|
174
|
+
export declare function echo(stream: MessageStream, options?: AbortOptions): Promise<void>;
|
|
175
|
+
export type PipeInput = Iterable<Uint8Array | Uint8ArrayList> | AsyncIterable<Uint8Array | Uint8ArrayList> | Stream;
|
|
176
|
+
export declare function messageStreamToDuplex(stream: Stream): Duplex<AsyncGenerator<Uint8ArrayList | Uint8Array>, Iterable<Uint8ArrayList | Uint8Array> | AsyncIterable<Uint8ArrayList | Uint8Array>, Promise<void>>;
|
|
177
|
+
interface SourceFn<A = any> {
|
|
178
|
+
(): A;
|
|
179
|
+
}
|
|
180
|
+
type PipeSource<A = any> = Iterable<A> | AsyncIterable<A> | SourceFn<A> | Duplex<A, any, any> | MessageStream;
|
|
181
|
+
type PipeTransform<A = any, B = any> = Transform<A, B> | Duplex<B, A> | MessageStream;
|
|
182
|
+
type PipeSink<A = any, B = any> = Sink<A, B> | Duplex<any, A, B> | MessageStream;
|
|
183
|
+
type PipeOutput<A> = A extends Sink<any> ? ReturnType<A> : A extends Duplex<any, any, any> ? ReturnType<A['sink']> : A extends MessageStream ? Promise<void> : never;
|
|
184
|
+
type SingleItemPipeOutput<A> = A extends Iterable<any> ? A : A extends AsyncIterable<any> ? A : A extends SourceFn ? ReturnType<A> : A extends Duplex<any, any, any> ? A['source'] : PipeOutput<A>;
|
|
185
|
+
type PipeFnInput<A> = A extends Iterable<any> ? A : A extends AsyncIterable<any> ? A : A extends SourceFn ? ReturnType<A> : A extends Transform<any, any> ? ReturnType<A> : A extends Duplex<any, any, any> ? A['source'] : never;
|
|
186
|
+
export declare function pipe<A extends PipeSource>(source: A): SingleItemPipeOutput<A>;
|
|
187
|
+
export declare function pipe<A extends PipeSource, B extends PipeSink<PipeFnInput<A>>>(source: A, sink: B): PipeOutput<B>;
|
|
188
|
+
export declare function pipe<A extends PipeSource, B extends PipeTransform<PipeFnInput<A>>, C extends PipeSink<PipeFnInput<B>>>(source: A, transform1: B, sink: C): PipeOutput<C>;
|
|
189
|
+
export declare function pipe<A extends PipeSource, B extends PipeTransform<PipeFnInput<A>>, C extends PipeTransform<PipeFnInput<B>>, D extends PipeSink<PipeFnInput<C>>>(source: A, transform1: B, transform2: C, sink: D): PipeOutput<D>;
|
|
190
|
+
export declare function pipe<A extends PipeSource, B extends PipeTransform<PipeFnInput<A>>, C extends PipeTransform<PipeFnInput<B>>, D extends PipeTransform<PipeFnInput<C>>, E extends PipeSink<PipeFnInput<D>>>(source: A, transform1: B, transform2: C, transform3: D, sink: E): PipeOutput<E>;
|
|
191
|
+
export declare function pipe<A extends PipeSource, B extends PipeTransform<PipeFnInput<A>>, C extends PipeTransform<PipeFnInput<B>>, D extends PipeTransform<PipeFnInput<C>>, E extends PipeTransform<PipeFnInput<D>>, F extends PipeSink<PipeFnInput<E>>>(source: A, transform1: B, transform2: C, transform3: D, transform4: E, sink: F): PipeOutput<F>;
|
|
192
|
+
export declare function pipe<A extends PipeSource, B extends PipeTransform<PipeFnInput<A>>, C extends PipeTransform<PipeFnInput<B>>, D extends PipeTransform<PipeFnInput<C>>, E extends PipeTransform<PipeFnInput<D>>, F extends PipeTransform<PipeFnInput<E>>, G extends PipeSink<PipeFnInput<F>>>(source: A, transform1: B, transform2: C, transform3: D, transform4: E, transform5: F, sink: G): PipeOutput<G>;
|
|
193
|
+
export declare function pipe<A extends PipeSource, B extends PipeTransform<PipeFnInput<A>>, C extends PipeTransform<PipeFnInput<B>>, D extends PipeTransform<PipeFnInput<C>>, E extends PipeTransform<PipeFnInput<D>>, F extends PipeTransform<PipeFnInput<E>>, G extends PipeTransform<PipeFnInput<F>>, H extends PipeSink<PipeFnInput<G>>>(source: A, transform1: B, transform2: C, transform3: D, transform4: E, transform5: F, transform6: G, sink: H): PipeOutput<H>;
|
|
194
|
+
export declare function pipe<A extends PipeSource, B extends PipeTransform<PipeFnInput<A>>, C extends PipeTransform<PipeFnInput<B>>, D extends PipeTransform<PipeFnInput<C>>, E extends PipeTransform<PipeFnInput<D>>, F extends PipeTransform<PipeFnInput<E>>, G extends PipeTransform<PipeFnInput<F>>, H extends PipeTransform<PipeFnInput<G>>, I extends PipeSink<PipeFnInput<H>>>(source: A, transform1: B, transform2: C, transform3: D, transform4: E, transform5: F, transform6: G, transform7: H, sink: I): PipeOutput<I>;
|
|
195
|
+
export declare function pipe<A extends PipeSource, B extends PipeTransform<PipeFnInput<A>>, C extends PipeTransform<PipeFnInput<B>>, D extends PipeTransform<PipeFnInput<C>>, E extends PipeTransform<PipeFnInput<D>>, F extends PipeTransform<PipeFnInput<E>>, G extends PipeTransform<PipeFnInput<F>>, H extends PipeTransform<PipeFnInput<G>>, I extends PipeTransform<PipeFnInput<H>>, J extends PipeSink<PipeFnInput<I>>>(source: A, transform1: B, transform2: C, transform3: D, transform4: E, transform5: F, transform6: G, transform7: H, transform8: I, sink: J): PipeOutput<J>;
|
|
196
|
+
export declare function pipe<A extends PipeSource, B extends PipeTransform<PipeFnInput<A>>, C extends PipeTransform<PipeFnInput<B>>, D extends PipeTransform<PipeFnInput<C>>, E extends PipeTransform<PipeFnInput<D>>, F extends PipeTransform<PipeFnInput<E>>, G extends PipeTransform<PipeFnInput<F>>, H extends PipeTransform<PipeFnInput<G>>, I extends PipeTransform<PipeFnInput<H>>, J extends PipeTransform<PipeFnInput<I>>, K extends PipeSink<PipeFnInput<J>>>(source: A, transform1: B, transform2: C, transform3: D, transform4: E, transform5: F, transform6: G, transform7: H, transform8: I, transform9: J, sink: K): PipeOutput<K>;
|
|
197
|
+
export declare function pipe<A extends PipeSource, B extends PipeTransform<PipeFnInput<A>>, C extends PipeTransform<PipeFnInput<B>>, D extends PipeTransform<PipeFnInput<C>>, E extends PipeTransform<PipeFnInput<D>>, F extends PipeTransform<PipeFnInput<E>>, G extends PipeTransform<PipeFnInput<F>>, H extends PipeTransform<PipeFnInput<G>>, I extends PipeTransform<PipeFnInput<H>>, J extends PipeTransform<PipeFnInput<I>>, K extends PipeTransform<PipeFnInput<J>>, L extends PipeSink<PipeFnInput<K>>>(source: A, transform1: B, transform2: C, transform3: D, transform4: E, transform5: F, transform6: G, transform7: H, transform8: I, transform9: J, transform10: K, sink: L): PipeOutput<L>;
|
|
198
|
+
export {};
|
|
199
|
+
//# sourceMappingURL=stream-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-utils.d.ts","sourceRoot":"","sources":["../../src/stream-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
import { StreamMessageEvent, StreamCloseEvent, InvalidParametersError } from '@libp2p/interface';
|
|
2
|
+
import { pipe as itPipe } from 'it-pipe';
|
|
3
|
+
import { pushable } from 'it-pushable';
|
|
4
|
+
import { pEvent } from 'p-event';
|
|
5
|
+
import { raceSignal } from 'race-signal';
|
|
6
|
+
import * as varint from 'uint8-varint';
|
|
7
|
+
import { Uint8ArrayList } from 'uint8arraylist';
|
|
8
|
+
import { UnexpectedEOFError } from './errors.js';
|
|
9
|
+
const DEFAULT_MAX_BUFFER_SIZE = 4_194_304;
|
|
10
|
+
export class UnwrappedError extends Error {
|
|
11
|
+
static name = 'UnwrappedError';
|
|
12
|
+
name = 'UnwrappedError';
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* The reported length of the next data message was not a positive integer
|
|
16
|
+
*/
|
|
17
|
+
export class InvalidMessageLengthError extends Error {
|
|
18
|
+
name = 'InvalidMessageLengthError';
|
|
19
|
+
code = 'ERR_INVALID_MSG_LENGTH';
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* The reported length of the next data message was larger than the configured
|
|
23
|
+
* max allowable value
|
|
24
|
+
*/
|
|
25
|
+
export class InvalidDataLengthError extends Error {
|
|
26
|
+
name = 'InvalidDataLengthError';
|
|
27
|
+
code = 'ERR_MSG_DATA_TOO_LONG';
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* The varint used to specify the length of the next data message contained more
|
|
31
|
+
* bytes than the configured max allowable value
|
|
32
|
+
*/
|
|
33
|
+
export class InvalidDataLengthLengthError extends Error {
|
|
34
|
+
name = 'InvalidDataLengthLengthError';
|
|
35
|
+
code = 'ERR_MSG_LENGTH_TOO_LONG';
|
|
36
|
+
}
|
|
37
|
+
function isStream(obj) {
|
|
38
|
+
return typeof obj?.closeRead === 'function';
|
|
39
|
+
}
|
|
40
|
+
function isMultiaddrConnection(obj) {
|
|
41
|
+
return typeof obj?.close === 'function';
|
|
42
|
+
}
|
|
43
|
+
function isEOF(obj) {
|
|
44
|
+
if (isStream(obj)) {
|
|
45
|
+
return obj.readStatus === 'closing' || obj.readStatus === 'closed';
|
|
46
|
+
}
|
|
47
|
+
if (isMultiaddrConnection(obj)) {
|
|
48
|
+
return obj.status !== 'open';
|
|
49
|
+
}
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
function isValid(obj) {
|
|
53
|
+
return obj?.addEventListener != null && obj?.removeEventListener != null && obj?.send != null && obj?.push != null && obj?.log != null;
|
|
54
|
+
}
|
|
55
|
+
export function byteStream(stream, opts) {
|
|
56
|
+
const maxBufferSize = opts?.maxBufferSize ?? DEFAULT_MAX_BUFFER_SIZE;
|
|
57
|
+
const readBuffer = new Uint8ArrayList();
|
|
58
|
+
let hasBytes = Promise.withResolvers();
|
|
59
|
+
let unwrapped = false;
|
|
60
|
+
if (!isValid(stream)) {
|
|
61
|
+
throw new InvalidParametersError('Argument should be a Stream or a Multiaddr');
|
|
62
|
+
}
|
|
63
|
+
const byteStreamOnMessageListener = (evt) => {
|
|
64
|
+
if (opts?.stopPropagation === true) {
|
|
65
|
+
// evt.stopImmediatePropagation()
|
|
66
|
+
}
|
|
67
|
+
readBuffer.append(evt.data);
|
|
68
|
+
if (readBuffer.byteLength > maxBufferSize) {
|
|
69
|
+
const readBufferSize = readBuffer.byteLength;
|
|
70
|
+
readBuffer.consume(readBuffer.byteLength);
|
|
71
|
+
hasBytes.reject(new Error(`Read buffer overflow - ${readBufferSize} > ${maxBufferSize}`));
|
|
72
|
+
}
|
|
73
|
+
hasBytes.resolve();
|
|
74
|
+
};
|
|
75
|
+
stream.addEventListener('message', byteStreamOnMessageListener);
|
|
76
|
+
const byteStreamOnCloseListener = (evt) => {
|
|
77
|
+
if (evt.error != null) {
|
|
78
|
+
hasBytes.reject(evt.error);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
hasBytes.resolve();
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
stream.addEventListener('close', byteStreamOnCloseListener);
|
|
85
|
+
const byteStreamOnRemoteCloseWrite = () => {
|
|
86
|
+
hasBytes.resolve();
|
|
87
|
+
};
|
|
88
|
+
stream.addEventListener('remoteCloseWrite', byteStreamOnRemoteCloseWrite);
|
|
89
|
+
const byteStream = {
|
|
90
|
+
readBuffer,
|
|
91
|
+
// @ts-expect-error options type prevents type inference
|
|
92
|
+
async read(options) {
|
|
93
|
+
if (unwrapped === true) {
|
|
94
|
+
throw new UnwrappedError('Stream was unwrapped');
|
|
95
|
+
}
|
|
96
|
+
if (isEOF(stream)) {
|
|
97
|
+
if (options?.bytes == null) {
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
if (readBuffer.byteLength < options.bytes) {
|
|
101
|
+
throw new UnexpectedEOFError(`Unexpected EOF - stream closed after reading ${readBuffer.byteLength}/${options.bytes} bytes`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
const bytesToRead = options?.bytes ?? 1;
|
|
105
|
+
while (true) {
|
|
106
|
+
if (readBuffer.byteLength >= bytesToRead) {
|
|
107
|
+
// if we are about to exit the loop this promise will not be awaited
|
|
108
|
+
// so resolve it to prevent and unhandled promise rejections that may
|
|
109
|
+
// occur
|
|
110
|
+
hasBytes.resolve();
|
|
111
|
+
break;
|
|
112
|
+
}
|
|
113
|
+
await raceSignal(hasBytes.promise, options?.signal);
|
|
114
|
+
if (isEOF(stream)) {
|
|
115
|
+
if (readBuffer.byteLength === 0 && options?.bytes == null) {
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
120
|
+
hasBytes = Promise.withResolvers();
|
|
121
|
+
}
|
|
122
|
+
const toRead = options?.bytes ?? readBuffer.byteLength;
|
|
123
|
+
if (readBuffer.byteLength < toRead) {
|
|
124
|
+
if (isEOF(stream)) {
|
|
125
|
+
throw new UnexpectedEOFError(`Unexpected EOF - stream closed while reading ${readBuffer.byteLength}/${toRead} bytes`);
|
|
126
|
+
}
|
|
127
|
+
return byteStream.read(options);
|
|
128
|
+
}
|
|
129
|
+
const output = readBuffer.sublist(0, toRead);
|
|
130
|
+
readBuffer.consume(toRead);
|
|
131
|
+
return output;
|
|
132
|
+
},
|
|
133
|
+
async write(data, options) {
|
|
134
|
+
if (unwrapped === true) {
|
|
135
|
+
throw new UnwrappedError('Stream was unwrapped');
|
|
136
|
+
}
|
|
137
|
+
if (!stream.send(data)) {
|
|
138
|
+
await pEvent(stream, 'drain', {
|
|
139
|
+
signal: options?.signal,
|
|
140
|
+
rejectionEvents: ['close']
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
unwrap() {
|
|
145
|
+
// already unwrapped, just return the original stream
|
|
146
|
+
if (unwrapped) {
|
|
147
|
+
return stream;
|
|
148
|
+
}
|
|
149
|
+
// only unwrap once
|
|
150
|
+
unwrapped = true;
|
|
151
|
+
stream.removeEventListener('message', byteStreamOnMessageListener);
|
|
152
|
+
stream.removeEventListener('close', byteStreamOnCloseListener);
|
|
153
|
+
stream.removeEventListener('remoteCloseWrite', byteStreamOnRemoteCloseWrite);
|
|
154
|
+
// emit any unread data
|
|
155
|
+
if (readBuffer.byteLength > 0) {
|
|
156
|
+
stream.log('stream unwrapped with %d unread bytes', readBuffer.byteLength);
|
|
157
|
+
stream.push(readBuffer);
|
|
158
|
+
}
|
|
159
|
+
return stream;
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
return byteStream;
|
|
163
|
+
}
|
|
164
|
+
export function lpStream(stream, opts = {}) {
|
|
165
|
+
const bytes = byteStream(stream, opts);
|
|
166
|
+
if (opts.maxDataLength != null && opts.maxLengthLength == null) {
|
|
167
|
+
// if max data length is set but max length length is not, calculate the
|
|
168
|
+
// max length length needed to encode max data length
|
|
169
|
+
opts.maxLengthLength = varint.encodingLength(opts.maxDataLength);
|
|
170
|
+
}
|
|
171
|
+
const decodeLength = opts?.lengthDecoder ?? varint.decode;
|
|
172
|
+
const encodeLength = opts?.lengthEncoder ?? varint.encode;
|
|
173
|
+
const lpStream = {
|
|
174
|
+
async read(options) {
|
|
175
|
+
let dataLength = -1;
|
|
176
|
+
const lengthBuffer = new Uint8ArrayList();
|
|
177
|
+
while (true) {
|
|
178
|
+
// read one byte at a time until we can decode a varint
|
|
179
|
+
const buf = await bytes.read({
|
|
180
|
+
...options,
|
|
181
|
+
bytes: 1
|
|
182
|
+
});
|
|
183
|
+
// the underlying resource closed gracefully
|
|
184
|
+
if (buf == null) {
|
|
185
|
+
break;
|
|
186
|
+
}
|
|
187
|
+
// append byte and try to decode
|
|
188
|
+
lengthBuffer.append(buf);
|
|
189
|
+
try {
|
|
190
|
+
dataLength = decodeLength(lengthBuffer);
|
|
191
|
+
}
|
|
192
|
+
catch (err) {
|
|
193
|
+
if (err instanceof RangeError) {
|
|
194
|
+
continue;
|
|
195
|
+
}
|
|
196
|
+
throw err;
|
|
197
|
+
}
|
|
198
|
+
if (dataLength < 0) {
|
|
199
|
+
throw new InvalidMessageLengthError('Invalid message length');
|
|
200
|
+
}
|
|
201
|
+
if (opts?.maxLengthLength != null && lengthBuffer.byteLength > opts.maxLengthLength) {
|
|
202
|
+
throw new InvalidDataLengthLengthError(`Message length length too long - ${lengthBuffer.byteLength} > ${opts.maxLengthLength}`);
|
|
203
|
+
}
|
|
204
|
+
if (dataLength > -1) {
|
|
205
|
+
break;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
if (opts?.maxDataLength != null && dataLength > opts.maxDataLength) {
|
|
209
|
+
throw new InvalidDataLengthError(`Message length too long - ${dataLength} > ${opts.maxDataLength}`);
|
|
210
|
+
}
|
|
211
|
+
const buf = await bytes.read({
|
|
212
|
+
...options,
|
|
213
|
+
bytes: dataLength
|
|
214
|
+
});
|
|
215
|
+
if (buf == null) {
|
|
216
|
+
throw new UnexpectedEOFError(`Unexpected EOF - tried to read ${dataLength} bytes but the stream closed`);
|
|
217
|
+
}
|
|
218
|
+
if (buf.byteLength !== dataLength) {
|
|
219
|
+
throw new UnexpectedEOFError(`Unexpected EOF - read ${buf.byteLength}/${dataLength} bytes before the stream closed`);
|
|
220
|
+
}
|
|
221
|
+
return buf;
|
|
222
|
+
},
|
|
223
|
+
async write(data, options) {
|
|
224
|
+
// encode, write
|
|
225
|
+
await bytes.write(new Uint8ArrayList(encodeLength(data.byteLength), data), options);
|
|
226
|
+
},
|
|
227
|
+
async writeV(data, options) {
|
|
228
|
+
const list = new Uint8ArrayList(...data.flatMap(buf => ([encodeLength(buf.byteLength), buf])));
|
|
229
|
+
// encode, write
|
|
230
|
+
await bytes.write(list, options);
|
|
231
|
+
},
|
|
232
|
+
unwrap() {
|
|
233
|
+
return bytes.unwrap();
|
|
234
|
+
}
|
|
235
|
+
};
|
|
236
|
+
return lpStream;
|
|
237
|
+
}
|
|
238
|
+
export function pbStream(stream, opts) {
|
|
239
|
+
const lp = lpStream(stream, opts);
|
|
240
|
+
const pbStream = {
|
|
241
|
+
read: async (proto, options) => {
|
|
242
|
+
// readLP, decode
|
|
243
|
+
const value = await lp.read(options);
|
|
244
|
+
return proto.decode(value);
|
|
245
|
+
},
|
|
246
|
+
write: async (message, proto, options) => {
|
|
247
|
+
// encode, writeLP
|
|
248
|
+
await lp.write(proto.encode(message), options);
|
|
249
|
+
},
|
|
250
|
+
writeV: async (messages, proto, options) => {
|
|
251
|
+
// encode, writeLP
|
|
252
|
+
await lp.writeV(messages.map(message => proto.encode(message)), options);
|
|
253
|
+
},
|
|
254
|
+
pb: (proto) => {
|
|
255
|
+
return {
|
|
256
|
+
read: async (options) => pbStream.read(proto, options),
|
|
257
|
+
write: async (d, options) => pbStream.write(d, proto, options),
|
|
258
|
+
writeV: async (d, options) => pbStream.writeV(d, proto, options),
|
|
259
|
+
unwrap: () => pbStream
|
|
260
|
+
};
|
|
261
|
+
},
|
|
262
|
+
unwrap: () => {
|
|
263
|
+
return lp.unwrap();
|
|
264
|
+
}
|
|
265
|
+
};
|
|
266
|
+
return pbStream;
|
|
267
|
+
}
|
|
268
|
+
export async function echo(stream, options) {
|
|
269
|
+
const log = stream.log.newScope('echo');
|
|
270
|
+
const start = Date.now();
|
|
271
|
+
let bytes = 0;
|
|
272
|
+
try {
|
|
273
|
+
for await (const buf of stream) {
|
|
274
|
+
bytes += buf.byteLength;
|
|
275
|
+
if (!stream.send(buf)) {
|
|
276
|
+
stream.pause();
|
|
277
|
+
await pEvent(stream, 'drain', {
|
|
278
|
+
rejectionEvents: [
|
|
279
|
+
'close'
|
|
280
|
+
],
|
|
281
|
+
...options
|
|
282
|
+
});
|
|
283
|
+
stream.resume();
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
log('echoed %d bytes in %dms', bytes, Date.now() - start);
|
|
287
|
+
await stream.close(options);
|
|
288
|
+
}
|
|
289
|
+
catch (err) {
|
|
290
|
+
stream.abort(err);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
function isMessageStream(obj) {
|
|
294
|
+
return obj?.addEventListener != null;
|
|
295
|
+
}
|
|
296
|
+
export function messageStreamToDuplex(stream) {
|
|
297
|
+
const source = pushable();
|
|
298
|
+
let onError;
|
|
299
|
+
const onMessage = (evt) => {
|
|
300
|
+
source.push(evt.data);
|
|
301
|
+
};
|
|
302
|
+
const onRemoteCloseWrite = () => {
|
|
303
|
+
source.end();
|
|
304
|
+
stream.removeEventListener('message', onMessage);
|
|
305
|
+
stream.removeEventListener('close', onClose);
|
|
306
|
+
stream.removeEventListener('remoteCloseWrite', onRemoteCloseWrite);
|
|
307
|
+
};
|
|
308
|
+
const onClose = (evt) => {
|
|
309
|
+
source.end(evt.error);
|
|
310
|
+
if (evt.error != null) {
|
|
311
|
+
onError?.reject(evt.error);
|
|
312
|
+
}
|
|
313
|
+
stream.removeEventListener('message', onMessage);
|
|
314
|
+
stream.removeEventListener('close', onClose);
|
|
315
|
+
stream.removeEventListener('remoteCloseWrite', onRemoteCloseWrite);
|
|
316
|
+
};
|
|
317
|
+
stream.addEventListener('message', onMessage);
|
|
318
|
+
stream.addEventListener('close', onClose, {
|
|
319
|
+
once: true
|
|
320
|
+
});
|
|
321
|
+
stream.addEventListener('remoteCloseWrite', onRemoteCloseWrite, {
|
|
322
|
+
once: true
|
|
323
|
+
});
|
|
324
|
+
return {
|
|
325
|
+
source,
|
|
326
|
+
async sink(source) {
|
|
327
|
+
async function* toGenerator() {
|
|
328
|
+
yield* source;
|
|
329
|
+
}
|
|
330
|
+
const gen = toGenerator();
|
|
331
|
+
while (true) {
|
|
332
|
+
onError = Promise.withResolvers();
|
|
333
|
+
const { done, value } = await Promise.race([
|
|
334
|
+
gen.next(),
|
|
335
|
+
onError.promise
|
|
336
|
+
]);
|
|
337
|
+
if (stream.writeStatus === 'closing' || stream.writeStatus === 'closed') {
|
|
338
|
+
break;
|
|
339
|
+
}
|
|
340
|
+
if (value != null) {
|
|
341
|
+
if (!stream.send(value)) {
|
|
342
|
+
await Promise.race([
|
|
343
|
+
pEvent(stream, 'drain', {
|
|
344
|
+
rejectionEvents: [
|
|
345
|
+
'close'
|
|
346
|
+
]
|
|
347
|
+
})
|
|
348
|
+
]);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
if (done === true) {
|
|
352
|
+
break;
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
await stream.close();
|
|
356
|
+
}
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
export function pipe(...input) {
|
|
360
|
+
const sources = input.map(source => {
|
|
361
|
+
if (isMessageStream(source)) {
|
|
362
|
+
return messageStreamToDuplex(source);
|
|
363
|
+
}
|
|
364
|
+
return source;
|
|
365
|
+
});
|
|
366
|
+
// @ts-expect-error it-pipe types say args cannot be spread like this
|
|
367
|
+
return itPipe(...sources);
|
|
368
|
+
}
|
|
369
|
+
//# sourceMappingURL=stream-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-utils.js","sourceRoot":"","sources":["../../src/stream-utils.ts"],"names":[],"mappings":"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"}
|