@libp2p/mplex 7.0.3 → 7.0.5
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 -0
- package/dist/src/decode.d.ts +3 -1
- package/dist/src/decode.d.ts.map +1 -1
- package/dist/src/decode.js +25 -9
- package/dist/src/decode.js.map +1 -1
- package/dist/src/encode.d.ts +1 -1
- package/dist/src/encode.d.ts.map +1 -1
- package/dist/src/encode.js +9 -11
- package/dist/src/encode.js.map +1 -1
- package/dist/src/index.d.ts +10 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/mplex.d.ts +1 -1
- package/dist/src/mplex.d.ts.map +1 -1
- package/dist/src/mplex.js +2 -3
- package/dist/src/mplex.js.map +1 -1
- package/dist/src/stream.d.ts.map +1 -1
- package/dist/src/stream.js +9 -17
- package/dist/src/stream.js.map +1 -1
- package/package.json +3 -2
- package/src/decode.ts +31 -8
- package/src/encode.ts +12 -12
- package/src/index.ts +11 -1
- package/src/mplex.ts +2 -4
- package/src/stream.ts +9 -18
- package/dist/src/restrict-size.d.ts +0 -9
- package/dist/src/restrict-size.d.ts.map +0 -1
- package/dist/src/restrict-size.js +0 -32
- package/dist/src/restrict-size.js.map +0 -1
- package/src/restrict-size.ts +0 -36
package/README.md
CHANGED
@@ -70,6 +70,7 @@ Creates a factory that can be used to create new muxers.
|
|
70
70
|
`options` is an optional `Object` that may have the following properties:
|
71
71
|
|
72
72
|
- `maxMsgSize` - a number that defines how large mplex data messages can be in bytes, if messages are larger than this they will be sent as multiple messages (default: 1048576 - e.g. 1MB)
|
73
|
+
- `maxUnprocessedMessageQueueSize` - a number that limits the size of the unprocessed input buffer (default: 4194304 - e.g. 4MB)
|
73
74
|
- `maxInboundStreams` - a number that defines how many incoming streams are allowed per connection (default: 1024)
|
74
75
|
- `maxOutboundStreams` - a number that defines how many outgoing streams are allowed per connection (default: 1024)
|
75
76
|
- `maxStreamBufferSize` - a number that defines how large the message buffer is allowed to grow (default: 1024 \* 1024 \* 4 - e.g. 4MB)
|
package/dist/src/decode.d.ts
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
import type { Source } from 'it-stream-types';
|
2
2
|
import type { Message } from './message-types.js';
|
3
|
+
export declare const MAX_MSG_SIZE: number;
|
4
|
+
export declare const MAX_MSG_QUEUE_SIZE: number;
|
3
5
|
/**
|
4
6
|
* Decode a chunk and yield an _array_ of decoded messages
|
5
7
|
*/
|
6
|
-
export declare function decode(source: Source<Uint8Array>)
|
8
|
+
export declare function decode(maxMessageSize?: number, maxUnprocessedMessageQueueSize?: number): (source: Source<Uint8Array>) => Source<Message>;
|
7
9
|
//# sourceMappingURL=decode.d.ts.map
|
package/dist/src/decode.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"decode.d.ts","sourceRoot":"","sources":["../../src/decode.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;
|
1
|
+
{"version":3,"file":"decode.d.ts","sourceRoot":"","sources":["../../src/decode.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAEjD,eAAO,MAAM,YAAY,QAAU,CAAA;AACnC,eAAO,MAAM,kBAAkB,QAAU,CAAA;AAqIzC;;GAEG;AACH,wBAAgB,MAAM,CAAE,cAAc,GAAE,MAAqB,EAAE,8BAA8B,GAAE,MAA2B,YACxE,OAAO,UAAU,CAAC,KAAG,OAAO,OAAO,CAAC,CAWrF"}
|
package/dist/src/decode.js
CHANGED
@@ -1,22 +1,32 @@
|
|
1
1
|
import { MessageTypeNames, MessageTypes } from './message-types.js';
|
2
2
|
import { Uint8ArrayList } from 'uint8arraylist';
|
3
|
+
export const MAX_MSG_SIZE = 1 << 20; // 1MB
|
4
|
+
export const MAX_MSG_QUEUE_SIZE = 4 << 20; // 4MB
|
3
5
|
class Decoder {
|
4
|
-
constructor() {
|
6
|
+
constructor(maxMessageSize = MAX_MSG_SIZE, maxUnprocessedMessageQueueSize = MAX_MSG_QUEUE_SIZE) {
|
5
7
|
this._buffer = new Uint8ArrayList();
|
6
8
|
this._headerInfo = null;
|
9
|
+
this._maxMessageSize = maxMessageSize;
|
10
|
+
this._maxUnprocessedMessageQueueSize = maxUnprocessedMessageQueueSize;
|
7
11
|
}
|
8
12
|
write(chunk) {
|
9
13
|
if (chunk == null || chunk.length === 0) {
|
10
14
|
return [];
|
11
15
|
}
|
12
16
|
this._buffer.append(chunk);
|
17
|
+
if (this._buffer.byteLength > this._maxUnprocessedMessageQueueSize) {
|
18
|
+
throw Object.assign(new Error('unprocessed message queue size too large!'), { code: 'ERR_MSG_QUEUE_TOO_BIG' });
|
19
|
+
}
|
13
20
|
const msgs = [];
|
14
21
|
while (this._buffer.length !== 0) {
|
15
22
|
if (this._headerInfo == null) {
|
16
23
|
try {
|
17
24
|
this._headerInfo = this._decodeHeader(this._buffer);
|
18
25
|
}
|
19
|
-
catch (
|
26
|
+
catch (err) {
|
27
|
+
if (err.code === 'ERR_MSG_TOO_BIG') {
|
28
|
+
throw err;
|
29
|
+
}
|
20
30
|
break; // We haven't received enough data yet
|
21
31
|
}
|
22
32
|
}
|
@@ -49,6 +59,10 @@ class Decoder {
|
|
49
59
|
if (MessageTypeNames[type] == null) {
|
50
60
|
throw new Error(`Invalid type received: ${type}`);
|
51
61
|
}
|
62
|
+
// test message type varint + data length
|
63
|
+
if (length > this._maxMessageSize) {
|
64
|
+
throw Object.assign(new Error('message size too large!'), { code: 'ERR_MSG_TOO_BIG' });
|
65
|
+
}
|
52
66
|
// @ts-expect-error h is a number not a CODE
|
53
67
|
return { id: h >> 3, type, offset: offset + end, length };
|
54
68
|
}
|
@@ -81,13 +95,15 @@ function readVarInt(buf, offset = 0) {
|
|
81
95
|
/**
|
82
96
|
* Decode a chunk and yield an _array_ of decoded messages
|
83
97
|
*/
|
84
|
-
export
|
85
|
-
|
86
|
-
|
87
|
-
const
|
88
|
-
|
89
|
-
|
98
|
+
export function decode(maxMessageSize = MAX_MSG_SIZE, maxUnprocessedMessageQueueSize = MAX_MSG_QUEUE_SIZE) {
|
99
|
+
return async function* decodeMessages(source) {
|
100
|
+
const decoder = new Decoder(maxMessageSize, maxUnprocessedMessageQueueSize);
|
101
|
+
for await (const chunk of source) {
|
102
|
+
const msgs = decoder.write(chunk);
|
103
|
+
if (msgs.length > 0) {
|
104
|
+
yield* msgs;
|
105
|
+
}
|
90
106
|
}
|
91
|
-
}
|
107
|
+
};
|
92
108
|
}
|
93
109
|
//# sourceMappingURL=decode.js.map
|
package/dist/src/decode.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"decode.js","sourceRoot":"","sources":["../../src/decode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;
|
1
|
+
{"version":3,"file":"decode.js","sourceRoot":"","sources":["../../src/decode.ts"],"names":[],"mappings":"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"}
|
package/dist/src/encode.d.ts
CHANGED
@@ -3,5 +3,5 @@ import { Message } from './message-types.js';
|
|
3
3
|
/**
|
4
4
|
* Encode and yield one or more messages
|
5
5
|
*/
|
6
|
-
export declare function encode(source: Source<Message | Message[]>): AsyncGenerator<Uint8Array, void,
|
6
|
+
export declare function encode(source: Source<Message | Message[]>): AsyncGenerator<Uint8Array, void, unknown>;
|
7
7
|
//# sourceMappingURL=encode.d.ts.map
|
package/dist/src/encode.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"encode.d.ts","sourceRoot":"","sources":["../../src/encode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;
|
1
|
+
{"version":3,"file":"encode.d.ts","sourceRoot":"","sources":["../../src/encode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAI7C,OAAO,EAAE,OAAO,EAAgB,MAAM,oBAAoB,CAAA;AAkD1D;;GAEG;AACH,wBAAwB,MAAM,CAAE,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,OAAO,EAAE,CAAC,6CAclE"}
|
package/dist/src/encode.js
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
import varint from 'varint';
|
2
|
+
import { Uint8ArrayList } from 'uint8arraylist';
|
2
3
|
import { allocUnsafe } from './alloc-unsafe.js';
|
3
4
|
import { MessageTypes } from './message-types.js';
|
4
5
|
const POOL_SIZE = 10 * 1024;
|
@@ -8,9 +9,9 @@ class Encoder {
|
|
8
9
|
this._poolOffset = 0;
|
9
10
|
}
|
10
11
|
/**
|
11
|
-
* Encodes the given message and
|
12
|
+
* Encodes the given message and adds it to the passed list
|
12
13
|
*/
|
13
|
-
write(msg) {
|
14
|
+
write(msg, list) {
|
14
15
|
const pool = this._pool;
|
15
16
|
let offset = this._poolOffset;
|
16
17
|
varint.encode(msg.id << 3 | msg.type, pool, offset);
|
@@ -30,15 +31,10 @@ class Encoder {
|
|
30
31
|
else {
|
31
32
|
this._poolOffset = offset;
|
32
33
|
}
|
34
|
+
list.append(header);
|
33
35
|
if ((msg.type === MessageTypes.NEW_STREAM || msg.type === MessageTypes.MESSAGE_INITIATOR || msg.type === MessageTypes.MESSAGE_RECEIVER) && msg.data != null) {
|
34
|
-
|
35
|
-
header,
|
36
|
-
...(msg.data instanceof Uint8Array ? [msg.data] : msg.data)
|
37
|
-
];
|
36
|
+
list.append(msg.data);
|
38
37
|
}
|
39
|
-
return [
|
40
|
-
header
|
41
|
-
];
|
42
38
|
}
|
43
39
|
}
|
44
40
|
const encoder = new Encoder();
|
@@ -47,14 +43,16 @@ const encoder = new Encoder();
|
|
47
43
|
*/
|
48
44
|
export async function* encode(source) {
|
49
45
|
for await (const msg of source) {
|
46
|
+
const list = new Uint8ArrayList();
|
50
47
|
if (Array.isArray(msg)) {
|
51
48
|
for (const m of msg) {
|
52
|
-
|
49
|
+
encoder.write(m, list);
|
53
50
|
}
|
54
51
|
}
|
55
52
|
else {
|
56
|
-
|
53
|
+
encoder.write(msg, list);
|
57
54
|
}
|
55
|
+
yield list.subarray();
|
58
56
|
}
|
59
57
|
}
|
60
58
|
//# sourceMappingURL=encode.js.map
|
package/dist/src/encode.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"encode.js","sourceRoot":"","sources":["../../src/encode.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAW,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAE1D,MAAM,SAAS,GAAG,EAAE,GAAG,IAAI,CAAA;AAE3B,MAAM,OAAO;IAIX;QACE,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC,CAAA;QACnC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAA;IACtB,CAAC;IAED;;OAEG;IACH,KAAK,CAAE,GAAY;
|
1
|
+
{"version":3,"file":"encode.js","sourceRoot":"","sources":["../../src/encode.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAC3B,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAW,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAE1D,MAAM,SAAS,GAAG,EAAE,GAAG,IAAI,CAAA;AAE3B,MAAM,OAAO;IAIX;QACE,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC,CAAA;QACnC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAA;IACtB,CAAC;IAED;;OAEG;IACH,KAAK,CAAE,GAAY,EAAE,IAAoB;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAA;QACvB,IAAI,MAAM,GAAG,IAAI,CAAC,WAAW,CAAA;QAE7B,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;QACnD,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAA;QAElC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,UAAU,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,iBAAiB,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,gBAAgB,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE;YAC3J,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;SAC7C;aAAM;YACL,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;SAC/B;QAED,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAA;QAElC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;QAEtD,IAAI,SAAS,GAAG,MAAM,GAAG,GAAG,EAAE;YAC5B,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC,CAAA;YACnC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAA;SACrB;aAAM;YACL,IAAI,CAAC,WAAW,GAAG,MAAM,CAAA;SAC1B;QAED,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAEnB,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,UAAU,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,iBAAiB,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,gBAAgB,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE;YAC3J,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;SACtB;IACH,CAAC;CACF;AAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B;;GAEG;AACH,MAAM,CAAC,KAAK,SAAU,CAAC,CAAC,MAAM,CAAE,MAAmC;IACjE,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,MAAM,EAAE;QAC9B,MAAM,IAAI,GAAG,IAAI,cAAc,EAAE,CAAA;QAEjC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACtB,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE;gBACnB,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;aACvB;SACF;aAAM;YACL,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;SACzB;QAED,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAA;KACtB;AACH,CAAC"}
|
package/dist/src/index.d.ts
CHANGED
@@ -3,9 +3,18 @@ export interface MplexInit {
|
|
3
3
|
/**
|
4
4
|
* The maximum size of message that can be sent in one go in bytes.
|
5
5
|
* Messages larger than this will be split into multiple smaller
|
6
|
-
* messages
|
6
|
+
* messages. If we receive a message larger than this an error will
|
7
|
+
* be thrown and the connection closed. (default: 1MB)
|
7
8
|
*/
|
8
9
|
maxMsgSize?: number;
|
10
|
+
/**
|
11
|
+
* Constrains the size of the unprocessed message queue buffer.
|
12
|
+
* Before messages are deserialized, the raw bytes are buffered to ensure
|
13
|
+
* we have the complete message to deserialized. If the queue gets longer
|
14
|
+
* than this value an error will be thrown and the connection closed.
|
15
|
+
* (default: 4MB)
|
16
|
+
*/
|
17
|
+
maxUnprocessedMessageQueueSize?: number;
|
9
18
|
/**
|
10
19
|
* The maximum number of multiplexed streams that can be open at any
|
11
20
|
* one time. A request to open more than this will have a stream
|
package/dist/src/index.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,kBAAkB,EAAmB,MAAM,gCAAgC,CAAA;AAGtG,MAAM,WAAW,SAAS;IACxB
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,kBAAkB,EAAmB,MAAM,gCAAgC,CAAA;AAGtG,MAAM,WAAW,SAAS;IACxB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;;;;;OAMG;IACH,8BAA8B,CAAC,EAAE,MAAM,CAAA;IAEvC;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAE1B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAE3B;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAE5B;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAC7B;AAkBD,wBAAgB,KAAK,CAAE,IAAI,GAAE,SAAc,GAAG,MAAM,kBAAkB,CAErE"}
|
package/dist/src/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAiD7C,MAAM,KAAK;IAIT,YAAa,OAAkB,EAAE;QAH1B,aAAQ,GAAG,cAAc,CAAA;QAI9B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;IACnB,CAAC;IAED,iBAAiB,CAAE,OAAwB,EAAE;QAC3C,OAAO,IAAI,gBAAgB,CAAC;YAC1B,GAAG,IAAI;YACP,GAAG,IAAI,CAAC,KAAK;SACd,CAAC,CAAA;IACJ,CAAC;CACF;AAED,MAAM,UAAU,KAAK,CAAE,OAAkB,EAAE;IACzC,OAAO,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAA;AAC9B,CAAC"}
|
package/dist/src/mplex.d.ts
CHANGED
@@ -56,7 +56,7 @@ export declare class MplexStreamMuxer implements StreamMuxer {
|
|
56
56
|
* Creates a source that restricts outgoing message sizes
|
57
57
|
* and varint encodes them
|
58
58
|
*/
|
59
|
-
_createSource(): AsyncGenerator<Uint8Array, void,
|
59
|
+
_createSource(): AsyncGenerator<Uint8Array, void, unknown> & {
|
60
60
|
push: (value: Message) => import("it-pushable").PushableV<Message>;
|
61
61
|
end: (err?: Error | undefined) => import("it-pushable").PushableV<Message>;
|
62
62
|
return: () => {
|
package/dist/src/mplex.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"mplex.d.ts","sourceRoot":"","sources":["../../src/mplex.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"mplex.d.ts","sourceRoot":"","sources":["../../src/mplex.ts"],"names":[],"mappings":"AAKA,OAAO,EAAkC,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAM5E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAClF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAE3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AA0BpD,MAAM,WAAW,WAAY,SAAQ,MAAM;IACzC,oBAAoB,EAAE,MAAM,MAAM,CAAA;IAClC,UAAU,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAA;CAC3C;AAED,UAAU,oBAAqB,SAAQ,SAAS,EAAE,eAAe;CAAG;AAEpE,qBAAa,gBAAiB,YAAW,WAAW;IAC3C,QAAQ,SAAiB;IAEzB,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;IACtB,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;IAExC,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA+E;IACxG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAsB;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8D;IACtF,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IACjD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAmB;gBAElC,IAAI,CAAC,EAAE,oBAAoB;IAuCxC;;OAEG;IACH,IAAI,OAAO,aAWV;IAED;;;OAGG;IACH,SAAS,CAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM;IAUjC;;OAEG;IACH,KAAK,CAAE,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,IAAI;IAWrC;;OAEG;IACH,kBAAkB,CAAE,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;IAMzD,UAAU,CAAE,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,WAAW,GAAG,UAAU,CAAC;QAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;KAAE;IAmCrH;;;OAGG;IACH,WAAW;IA8BX;;;OAGG;IACH,aAAa;;;;;;;IAgBP,eAAe,CAAE,OAAO,EAAE,OAAO;CAwFxC"}
|
package/dist/src/mplex.js
CHANGED
@@ -3,7 +3,6 @@ import { pushableV } from 'it-pushable';
|
|
3
3
|
import { abortableSource } from 'abortable-iterator';
|
4
4
|
import { encode } from './encode.js';
|
5
5
|
import { decode } from './decode.js';
|
6
|
-
import { restrictSize } from './restrict-size.js';
|
7
6
|
import { MessageTypes, MessageTypeNames } from './message-types.js';
|
8
7
|
import { createStream } from './stream.js';
|
9
8
|
import { toString as uint8ArrayToString } from 'uint8arrays';
|
@@ -115,7 +114,7 @@ export class MplexStreamMuxer {
|
|
115
114
|
}
|
116
115
|
_newStream(options) {
|
117
116
|
const { id, name, type, registry } = options;
|
118
|
-
log('new %s stream %s
|
117
|
+
log('new %s stream %s', type, id);
|
119
118
|
if (type === 'initiator' && this._streams.initiators.size === (this._init.maxOutboundStreams ?? MAX_STREAMS_OUTBOUND_STREAMS_PER_CONNECTION)) {
|
120
119
|
throw errCode(new Error('Too many outbound streams open'), 'ERR_TOO_MANY_OUTBOUND_STREAMS');
|
121
120
|
}
|
@@ -152,7 +151,7 @@ export class MplexStreamMuxer {
|
|
152
151
|
}
|
153
152
|
source = abortableSource(source, anySignal(abortSignals));
|
154
153
|
try {
|
155
|
-
await pipe(source, decode,
|
154
|
+
await pipe(source, decode(this._init.maxMsgSize, this._init.maxUnprocessedMessageQueueSize), async (source) => {
|
156
155
|
for await (const msg of source) {
|
157
156
|
await this._handleIncoming(msg);
|
158
157
|
}
|
package/dist/src/mplex.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"mplex.js","sourceRoot":"","sources":["../../src/mplex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,YAAY,EAAE,
|
1
|
+
{"version":3,"file":"mplex.js","sourceRoot":"","sources":["../../src/mplex.ts"],"names":[],"mappings":"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"}
|
package/dist/src/stream.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAGjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAS7C,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAA;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,IAAI,CAAA;IAC7B,IAAI,CAAC,EAAE,WAAW,GAAG,UAAU,CAAA;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,wBAAgB,YAAY,CAAE,OAAO,EAAE,OAAO,GAAG,WAAW,
|
1
|
+
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAGjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAS7C,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAA;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,IAAI,CAAA;IAC7B,IAAI,CAAC,EAAE,WAAW,GAAG,UAAU,CAAA;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,wBAAgB,YAAY,CAAE,OAAO,EAAE,OAAO,GAAG,WAAW,CA0N3D"}
|
package/dist/src/stream.js
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
import { abortableSource } from 'abortable-iterator';
|
2
2
|
import { pushable } from 'it-pushable';
|
3
3
|
import errCode from 'err-code';
|
4
|
-
import { MAX_MSG_SIZE } from './
|
4
|
+
import { MAX_MSG_SIZE } from './decode.js';
|
5
5
|
import { anySignal } from 'any-signal';
|
6
6
|
import { InitiatorMessageTypes, ReceiverMessageTypes } from './message-types.js';
|
7
7
|
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
|
@@ -124,23 +124,15 @@ export function createStream(options) {
|
|
124
124
|
if (type === 'initiator') { // If initiator, open a new stream
|
125
125
|
send({ id, type: InitiatorMessageTypes.NEW_STREAM, data: new Uint8ArrayList(uint8ArrayFromString(streamName)) });
|
126
126
|
}
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
else {
|
133
|
-
uint8ArrayList.append(data);
|
134
|
-
while (uint8ArrayList.length !== 0) {
|
135
|
-
// eslint-disable-next-line max-depth
|
136
|
-
if (uint8ArrayList.length <= maxMsgSize) {
|
137
|
-
send({ id, type: Types.MESSAGE, data: uint8ArrayList.sublist() });
|
138
|
-
uint8ArrayList.consume(uint8ArrayList.length);
|
139
|
-
break;
|
140
|
-
}
|
141
|
-
send({ id, type: Types.MESSAGE, data: uint8ArrayList.sublist(0, maxMsgSize) });
|
142
|
-
uint8ArrayList.consume(maxMsgSize);
|
127
|
+
for await (let data of source) {
|
128
|
+
while (data.length > 0) {
|
129
|
+
if (data.length <= maxMsgSize) {
|
130
|
+
send({ id, type: Types.MESSAGE, data: data instanceof Uint8Array ? new Uint8ArrayList(data) : data });
|
131
|
+
break;
|
143
132
|
}
|
133
|
+
data = data instanceof Uint8Array ? new Uint8ArrayList(data) : data;
|
134
|
+
send({ id, type: Types.MESSAGE, data: data.sublist(0, maxMsgSize) });
|
135
|
+
data.consume(maxMsgSize);
|
144
136
|
}
|
145
137
|
}
|
146
138
|
}
|
package/dist/src/stream.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,OAAO,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,
|
1
|
+
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@libp2p/mplex",
|
3
|
-
"version": "7.0.
|
3
|
+
"version": "7.0.5",
|
4
4
|
"description": "JavaScript implementation of https://github.com/libp2p/mplex",
|
5
5
|
"license": "Apache-2.0 OR MIT",
|
6
6
|
"homepage": "https://github.com/libp2p/js-libp2p-mplex#readme",
|
@@ -171,7 +171,8 @@
|
|
171
171
|
"it-all": "^2.0.0",
|
172
172
|
"it-drain": "^2.0.0",
|
173
173
|
"it-foreach": "^1.0.0",
|
174
|
-
"it-map": "^
|
174
|
+
"it-map": "^2.0.0",
|
175
|
+
"it-to-buffer": "^3.0.0",
|
175
176
|
"p-defer": "^4.0.0",
|
176
177
|
"random-int": "^3.0.0",
|
177
178
|
"typescript": "^4.7.4"
|
package/src/decode.ts
CHANGED
@@ -3,6 +3,9 @@ import { Uint8ArrayList } from 'uint8arraylist'
|
|
3
3
|
import type { Source } from 'it-stream-types'
|
4
4
|
import type { Message } from './message-types.js'
|
5
5
|
|
6
|
+
export const MAX_MSG_SIZE = 1 << 20 // 1MB
|
7
|
+
export const MAX_MSG_QUEUE_SIZE = 4 << 20 // 4MB
|
8
|
+
|
6
9
|
interface MessageHeader {
|
7
10
|
id: number
|
8
11
|
type: keyof typeof MessageTypeNames
|
@@ -13,10 +16,14 @@ interface MessageHeader {
|
|
13
16
|
class Decoder {
|
14
17
|
private readonly _buffer: Uint8ArrayList
|
15
18
|
private _headerInfo: MessageHeader | null
|
19
|
+
private readonly _maxMessageSize: number
|
20
|
+
private readonly _maxUnprocessedMessageQueueSize: number
|
16
21
|
|
17
|
-
constructor () {
|
22
|
+
constructor (maxMessageSize: number = MAX_MSG_SIZE, maxUnprocessedMessageQueueSize: number = MAX_MSG_QUEUE_SIZE) {
|
18
23
|
this._buffer = new Uint8ArrayList()
|
19
24
|
this._headerInfo = null
|
25
|
+
this._maxMessageSize = maxMessageSize
|
26
|
+
this._maxUnprocessedMessageQueueSize = maxUnprocessedMessageQueueSize
|
20
27
|
}
|
21
28
|
|
22
29
|
write (chunk: Uint8Array) {
|
@@ -25,13 +32,22 @@ class Decoder {
|
|
25
32
|
}
|
26
33
|
|
27
34
|
this._buffer.append(chunk)
|
35
|
+
|
36
|
+
if (this._buffer.byteLength > this._maxUnprocessedMessageQueueSize) {
|
37
|
+
throw Object.assign(new Error('unprocessed message queue size too large!'), { code: 'ERR_MSG_QUEUE_TOO_BIG' })
|
38
|
+
}
|
39
|
+
|
28
40
|
const msgs: Message[] = []
|
29
41
|
|
30
42
|
while (this._buffer.length !== 0) {
|
31
43
|
if (this._headerInfo == null) {
|
32
44
|
try {
|
33
45
|
this._headerInfo = this._decodeHeader(this._buffer)
|
34
|
-
} catch (
|
46
|
+
} catch (err: any) {
|
47
|
+
if (err.code === 'ERR_MSG_TOO_BIG') {
|
48
|
+
throw err
|
49
|
+
}
|
50
|
+
|
35
51
|
break // We haven't received enough data yet
|
36
52
|
}
|
37
53
|
}
|
@@ -81,6 +97,11 @@ class Decoder {
|
|
81
97
|
throw new Error(`Invalid type received: ${type}`)
|
82
98
|
}
|
83
99
|
|
100
|
+
// test message type varint + data length
|
101
|
+
if (length > this._maxMessageSize) {
|
102
|
+
throw Object.assign(new Error('message size too large!'), { code: 'ERR_MSG_TOO_BIG' })
|
103
|
+
}
|
104
|
+
|
84
105
|
// @ts-expect-error h is a number not a CODE
|
85
106
|
return { id: h >> 3, type, offset: offset + end, length }
|
86
107
|
}
|
@@ -119,14 +140,16 @@ function readVarInt (buf: Uint8ArrayList, offset: number = 0) {
|
|
119
140
|
/**
|
120
141
|
* Decode a chunk and yield an _array_ of decoded messages
|
121
142
|
*/
|
122
|
-
export
|
123
|
-
|
143
|
+
export function decode (maxMessageSize: number = MAX_MSG_SIZE, maxUnprocessedMessageQueueSize: number = MAX_MSG_QUEUE_SIZE) {
|
144
|
+
return async function * decodeMessages (source: Source<Uint8Array>): Source<Message> {
|
145
|
+
const decoder = new Decoder(maxMessageSize, maxUnprocessedMessageQueueSize)
|
124
146
|
|
125
|
-
|
126
|
-
|
147
|
+
for await (const chunk of source) {
|
148
|
+
const msgs = decoder.write(chunk)
|
127
149
|
|
128
|
-
|
129
|
-
|
150
|
+
if (msgs.length > 0) {
|
151
|
+
yield * msgs
|
152
|
+
}
|
130
153
|
}
|
131
154
|
}
|
132
155
|
}
|
package/src/encode.ts
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
import type { Source } from 'it-stream-types'
|
2
2
|
import varint from 'varint'
|
3
|
+
import { Uint8ArrayList } from 'uint8arraylist'
|
3
4
|
import { allocUnsafe } from './alloc-unsafe.js'
|
4
5
|
import { Message, MessageTypes } from './message-types.js'
|
5
6
|
|
@@ -15,9 +16,9 @@ class Encoder {
|
|
15
16
|
}
|
16
17
|
|
17
18
|
/**
|
18
|
-
* Encodes the given message and
|
19
|
+
* Encodes the given message and adds it to the passed list
|
19
20
|
*/
|
20
|
-
write (msg: Message):
|
21
|
+
write (msg: Message, list: Uint8ArrayList): void {
|
21
22
|
const pool = this._pool
|
22
23
|
let offset = this._poolOffset
|
23
24
|
|
@@ -41,16 +42,11 @@ class Encoder {
|
|
41
42
|
this._poolOffset = offset
|
42
43
|
}
|
43
44
|
|
45
|
+
list.append(header)
|
46
|
+
|
44
47
|
if ((msg.type === MessageTypes.NEW_STREAM || msg.type === MessageTypes.MESSAGE_INITIATOR || msg.type === MessageTypes.MESSAGE_RECEIVER) && msg.data != null) {
|
45
|
-
|
46
|
-
header,
|
47
|
-
...(msg.data instanceof Uint8Array ? [msg.data] : msg.data)
|
48
|
-
]
|
48
|
+
list.append(msg.data)
|
49
49
|
}
|
50
|
-
|
51
|
-
return [
|
52
|
-
header
|
53
|
-
]
|
54
50
|
}
|
55
51
|
}
|
56
52
|
|
@@ -61,12 +57,16 @@ const encoder = new Encoder()
|
|
61
57
|
*/
|
62
58
|
export async function * encode (source: Source<Message | Message[]>) {
|
63
59
|
for await (const msg of source) {
|
60
|
+
const list = new Uint8ArrayList()
|
61
|
+
|
64
62
|
if (Array.isArray(msg)) {
|
65
63
|
for (const m of msg) {
|
66
|
-
|
64
|
+
encoder.write(m, list)
|
67
65
|
}
|
68
66
|
} else {
|
69
|
-
|
67
|
+
encoder.write(msg, list)
|
70
68
|
}
|
69
|
+
|
70
|
+
yield list.subarray()
|
71
71
|
}
|
72
72
|
}
|
package/src/index.ts
CHANGED
@@ -5,10 +5,20 @@ export interface MplexInit {
|
|
5
5
|
/**
|
6
6
|
* The maximum size of message that can be sent in one go in bytes.
|
7
7
|
* Messages larger than this will be split into multiple smaller
|
8
|
-
* messages
|
8
|
+
* messages. If we receive a message larger than this an error will
|
9
|
+
* be thrown and the connection closed. (default: 1MB)
|
9
10
|
*/
|
10
11
|
maxMsgSize?: number
|
11
12
|
|
13
|
+
/**
|
14
|
+
* Constrains the size of the unprocessed message queue buffer.
|
15
|
+
* Before messages are deserialized, the raw bytes are buffered to ensure
|
16
|
+
* we have the complete message to deserialized. If the queue gets longer
|
17
|
+
* than this value an error will be thrown and the connection closed.
|
18
|
+
* (default: 4MB)
|
19
|
+
*/
|
20
|
+
maxUnprocessedMessageQueueSize?: number
|
21
|
+
|
12
22
|
/**
|
13
23
|
* The maximum number of multiplexed streams that can be open at any
|
14
24
|
* one time. A request to open more than this will have a stream
|
package/src/mplex.ts
CHANGED
@@ -3,7 +3,6 @@ import { pushableV } from 'it-pushable'
|
|
3
3
|
import { abortableSource } from 'abortable-iterator'
|
4
4
|
import { encode } from './encode.js'
|
5
5
|
import { decode } from './decode.js'
|
6
|
-
import { restrictSize } from './restrict-size.js'
|
7
6
|
import { MessageTypes, MessageTypeNames, Message } from './message-types.js'
|
8
7
|
import { createStream } from './stream.js'
|
9
8
|
import { toString as uint8ArrayToString } from 'uint8arrays'
|
@@ -156,7 +155,7 @@ export class MplexStreamMuxer implements StreamMuxer {
|
|
156
155
|
_newStream (options: { id: number, name: string, type: 'initiator' | 'receiver', registry: Map<number, MplexStream> }) {
|
157
156
|
const { id, name, type, registry } = options
|
158
157
|
|
159
|
-
log('new %s stream %s
|
158
|
+
log('new %s stream %s', type, id)
|
160
159
|
|
161
160
|
if (type === 'initiator' && this._streams.initiators.size === (this._init.maxOutboundStreams ?? MAX_STREAMS_OUTBOUND_STREAMS_PER_CONNECTION)) {
|
162
161
|
throw errCode(new Error('Too many outbound streams open'), 'ERR_TOO_MANY_OUTBOUND_STREAMS')
|
@@ -204,8 +203,7 @@ export class MplexStreamMuxer implements StreamMuxer {
|
|
204
203
|
try {
|
205
204
|
await pipe(
|
206
205
|
source,
|
207
|
-
decode,
|
208
|
-
restrictSize(this._init.maxMsgSize),
|
206
|
+
decode(this._init.maxMsgSize, this._init.maxUnprocessedMessageQueueSize),
|
209
207
|
async source => {
|
210
208
|
for await (const msg of source) {
|
211
209
|
await this._handleIncoming(msg)
|
package/src/stream.ts
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
import { abortableSource } from 'abortable-iterator'
|
2
2
|
import { pushable } from 'it-pushable'
|
3
3
|
import errCode from 'err-code'
|
4
|
-
import { MAX_MSG_SIZE } from './
|
4
|
+
import { MAX_MSG_SIZE } from './decode.js'
|
5
5
|
import { anySignal } from 'any-signal'
|
6
6
|
import { InitiatorMessageTypes, ReceiverMessageTypes } from './message-types.js'
|
7
7
|
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
|
@@ -171,24 +171,15 @@ export function createStream (options: Options): MplexStream {
|
|
171
171
|
send({ id, type: InitiatorMessageTypes.NEW_STREAM, data: new Uint8ArrayList(uint8ArrayFromString(streamName)) })
|
172
172
|
}
|
173
173
|
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
} else {
|
180
|
-
uint8ArrayList.append(data)
|
181
|
-
|
182
|
-
while (uint8ArrayList.length !== 0) {
|
183
|
-
// eslint-disable-next-line max-depth
|
184
|
-
if (uint8ArrayList.length <= maxMsgSize) {
|
185
|
-
send({ id, type: Types.MESSAGE, data: uint8ArrayList.sublist() })
|
186
|
-
uint8ArrayList.consume(uint8ArrayList.length)
|
187
|
-
break
|
188
|
-
}
|
189
|
-
send({ id, type: Types.MESSAGE, data: uint8ArrayList.sublist(0, maxMsgSize) })
|
190
|
-
uint8ArrayList.consume(maxMsgSize)
|
174
|
+
for await (let data of source) {
|
175
|
+
while (data.length > 0) {
|
176
|
+
if (data.length <= maxMsgSize) {
|
177
|
+
send({ id, type: Types.MESSAGE, data: data instanceof Uint8Array ? new Uint8ArrayList(data) : data })
|
178
|
+
break
|
191
179
|
}
|
180
|
+
data = data instanceof Uint8Array ? new Uint8ArrayList(data) : data
|
181
|
+
send({ id, type: Types.MESSAGE, data: data.sublist(0, maxMsgSize) })
|
182
|
+
data.consume(maxMsgSize)
|
192
183
|
}
|
193
184
|
}
|
194
185
|
} catch (err: any) {
|
@@ -1,9 +0,0 @@
|
|
1
|
-
import { Message } from './message-types.js';
|
2
|
-
import type { Transform } from 'it-stream-types';
|
3
|
-
export declare const MAX_MSG_SIZE: number;
|
4
|
-
/**
|
5
|
-
* Creates an iterable transform that restricts message sizes to
|
6
|
-
* the given maximum size.
|
7
|
-
*/
|
8
|
-
export declare function restrictSize(max?: number): Transform<Message | Message[], Message>;
|
9
|
-
//# sourceMappingURL=restrict-size.d.ts.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"restrict-size.d.ts","sourceRoot":"","sources":["../../src/restrict-size.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAgB,MAAM,oBAAoB,CAAA;AAC1D,OAAO,KAAK,EAAU,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAExD,eAAO,MAAM,YAAY,QAAU,CAAA;AAEnC;;;GAGG;AACH,wBAAgB,YAAY,CAAE,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC,OAAO,GAAG,OAAO,EAAE,EAAE,OAAO,CAAC,CA0BnF"}
|
@@ -1,32 +0,0 @@
|
|
1
|
-
import { MessageTypes } from './message-types.js';
|
2
|
-
export const MAX_MSG_SIZE = 1 << 20; // 1MB
|
3
|
-
/**
|
4
|
-
* Creates an iterable transform that restricts message sizes to
|
5
|
-
* the given maximum size.
|
6
|
-
*/
|
7
|
-
export function restrictSize(max) {
|
8
|
-
const maxSize = max ?? MAX_MSG_SIZE;
|
9
|
-
const checkSize = (msg) => {
|
10
|
-
if (msg.type !== MessageTypes.NEW_STREAM && msg.type !== MessageTypes.MESSAGE_INITIATOR && msg.type !== MessageTypes.MESSAGE_RECEIVER) {
|
11
|
-
return;
|
12
|
-
}
|
13
|
-
if (msg.data.byteLength > maxSize) {
|
14
|
-
throw Object.assign(new Error('message size too large!'), { code: 'ERR_MSG_TOO_BIG' });
|
15
|
-
}
|
16
|
-
};
|
17
|
-
return (source) => {
|
18
|
-
return (async function* restrictSize() {
|
19
|
-
for await (const msg of source) {
|
20
|
-
if (Array.isArray(msg)) {
|
21
|
-
msg.forEach(checkSize);
|
22
|
-
yield* msg;
|
23
|
-
}
|
24
|
-
else {
|
25
|
-
checkSize(msg);
|
26
|
-
yield msg;
|
27
|
-
}
|
28
|
-
}
|
29
|
-
})();
|
30
|
-
};
|
31
|
-
}
|
32
|
-
//# sourceMappingURL=restrict-size.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"restrict-size.js","sourceRoot":"","sources":["../../src/restrict-size.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAG1D,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,CAAA,CAAC,MAAM;AAE1C;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAE,GAAY;IACxC,MAAM,OAAO,GAAG,GAAG,IAAI,YAAY,CAAA;IAEnC,MAAM,SAAS,GAAG,CAAC,GAAY,EAAE,EAAE;QACjC,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,UAAU,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,iBAAiB,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,gBAAgB,EAAE;YACrI,OAAM;SACP;QAED,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,OAAO,EAAE;YACjC,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAyB,CAAC,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAA;SACvF;IACH,CAAC,CAAA;IAED,OAAO,CAAC,MAAmC,EAAE,EAAE;QAC7C,OAAO,CAAC,KAAK,SAAU,CAAC,CAAC,YAAY;YACnC,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,MAAM,EAAE;gBAC9B,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;oBACtB,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;oBACtB,KAAM,CAAC,CAAC,GAAG,CAAA;iBACZ;qBAAM;oBACL,SAAS,CAAC,GAAG,CAAC,CAAA;oBACd,MAAM,GAAG,CAAA;iBACV;aACF;QACH,CAAC,CAAC,EAAE,CAAA;IACN,CAAC,CAAA;AACH,CAAC"}
|
package/src/restrict-size.ts
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
import { Message, MessageTypes } from './message-types.js'
|
2
|
-
import type { Source, Transform } from 'it-stream-types'
|
3
|
-
|
4
|
-
export const MAX_MSG_SIZE = 1 << 20 // 1MB
|
5
|
-
|
6
|
-
/**
|
7
|
-
* Creates an iterable transform that restricts message sizes to
|
8
|
-
* the given maximum size.
|
9
|
-
*/
|
10
|
-
export function restrictSize (max?: number): Transform<Message | Message[], Message> {
|
11
|
-
const maxSize = max ?? MAX_MSG_SIZE
|
12
|
-
|
13
|
-
const checkSize = (msg: Message) => {
|
14
|
-
if (msg.type !== MessageTypes.NEW_STREAM && msg.type !== MessageTypes.MESSAGE_INITIATOR && msg.type !== MessageTypes.MESSAGE_RECEIVER) {
|
15
|
-
return
|
16
|
-
}
|
17
|
-
|
18
|
-
if (msg.data.byteLength > maxSize) {
|
19
|
-
throw Object.assign(new Error('message size too large!'), { code: 'ERR_MSG_TOO_BIG' })
|
20
|
-
}
|
21
|
-
}
|
22
|
-
|
23
|
-
return (source: Source<Message | Message[]>) => {
|
24
|
-
return (async function * restrictSize () {
|
25
|
-
for await (const msg of source) {
|
26
|
-
if (Array.isArray(msg)) {
|
27
|
-
msg.forEach(checkSize)
|
28
|
-
yield * msg
|
29
|
-
} else {
|
30
|
-
checkSize(msg)
|
31
|
-
yield msg
|
32
|
-
}
|
33
|
-
}
|
34
|
-
})()
|
35
|
-
}
|
36
|
-
}
|