@thenewlabs/entangle-protocol 2.0.2 → 2.0.3
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/dist/frame.d.ts +1 -1
- package/dist/frame.d.ts.map +1 -1
- package/dist/frame.js +33 -22
- package/dist/frame.js.map +1 -1
- package/package.json +1 -1
package/dist/frame.d.ts
CHANGED
package/dist/frame.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frame.d.ts","sourceRoot":"","sources":["../src/frame.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnD,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,GAAG,UAAU,CAS5E;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAQhG;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,WAAW,CAAwB;IAC3C,OAAO,CAAC,aAAa,
|
|
1
|
+
{"version":3,"file":"frame.d.ts","sourceRoot":"","sources":["../src/frame.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnD,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,GAAG,UAAU,CAS5E;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAQhG;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,WAAW,CAAwB;IAC3C,OAAO,CAAC,aAAa,CAAK;IAK1B,OAAO,CAAC,gBAAgB,CAAK;IAE7B,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,KAAK,EAAE;CA8DjC"}
|
package/dist/frame.js
CHANGED
|
@@ -19,10 +19,23 @@ export class FrameReader {
|
|
|
19
19
|
buffer = new Uint8Array(0);
|
|
20
20
|
headerParsed = false;
|
|
21
21
|
currentType;
|
|
22
|
-
currentLength;
|
|
23
|
-
|
|
22
|
+
currentLength = 0;
|
|
23
|
+
// Bytes of an oversize payload still to be discarded. While > 0 incoming
|
|
24
|
+
// bytes are dropped WITHOUT ever entering `buffer`, so a frame declaring a
|
|
25
|
+
// huge (e.g. UINT64_MAX) length cannot grow memory while we wait for a
|
|
26
|
+
// payload that never fully arrives.
|
|
27
|
+
discardRemaining = 0;
|
|
24
28
|
push(chunk) {
|
|
25
29
|
const frames = [];
|
|
30
|
+
// Consume any pending oversize payload straight from the incoming chunk;
|
|
31
|
+
// only the unconsumed tail is ever buffered.
|
|
32
|
+
if (this.discardRemaining > 0) {
|
|
33
|
+
const drop = Math.min(this.discardRemaining, chunk.length);
|
|
34
|
+
this.discardRemaining -= drop;
|
|
35
|
+
chunk = chunk.subarray(drop);
|
|
36
|
+
if (this.discardRemaining > 0)
|
|
37
|
+
return frames;
|
|
38
|
+
}
|
|
26
39
|
const newBuffer = new Uint8Array(this.buffer.length + chunk.length);
|
|
27
40
|
newBuffer.set(this.buffer);
|
|
28
41
|
newBuffer.set(chunk, this.buffer.length);
|
|
@@ -35,37 +48,35 @@ export class FrameReader {
|
|
|
35
48
|
if (!header)
|
|
36
49
|
break;
|
|
37
50
|
this.currentType = header.type;
|
|
38
|
-
this.currentLength = header.length;
|
|
39
51
|
this.headerParsed = true;
|
|
40
52
|
this.buffer = this.buffer.slice(9);
|
|
41
|
-
//
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
if (this.buffer.length < length)
|
|
51
|
-
break;
|
|
52
|
-
if (this.droppingOversize) {
|
|
53
|
-
// Discard the oversize payload without emitting a frame
|
|
54
|
-
this.buffer = this.buffer.slice(length);
|
|
53
|
+
// Reject oversize frames up front so we never buffer more than a single
|
|
54
|
+
// frame's worth. Discard exactly `length` payload bytes across chunks
|
|
55
|
+
// and emit nothing. BigInt comparison avoids precision loss for lengths
|
|
56
|
+
// beyond 2^53.
|
|
57
|
+
if (header.length > BigInt(MAX_FRAME_BYTES)) {
|
|
58
|
+
const available = BigInt(this.buffer.length);
|
|
59
|
+
const dropNow = header.length < available ? header.length : available;
|
|
60
|
+
this.buffer = this.buffer.slice(Number(dropNow));
|
|
61
|
+
this.discardRemaining = Number(header.length - dropNow);
|
|
55
62
|
this.headerParsed = false;
|
|
56
63
|
this.currentType = undefined;
|
|
57
|
-
this.
|
|
58
|
-
|
|
64
|
+
if (this.discardRemaining > 0)
|
|
65
|
+
break;
|
|
59
66
|
continue;
|
|
60
67
|
}
|
|
68
|
+
this.currentLength = Number(header.length);
|
|
69
|
+
}
|
|
70
|
+
if (this.headerParsed) {
|
|
71
|
+
if (this.buffer.length < this.currentLength)
|
|
72
|
+
break;
|
|
61
73
|
frames.push({
|
|
62
74
|
type: this.currentType,
|
|
63
|
-
payload: this.buffer.slice(0,
|
|
75
|
+
payload: this.buffer.slice(0, this.currentLength),
|
|
64
76
|
});
|
|
65
|
-
this.buffer = this.buffer.slice(
|
|
77
|
+
this.buffer = this.buffer.slice(this.currentLength);
|
|
66
78
|
this.headerParsed = false;
|
|
67
79
|
this.currentType = undefined;
|
|
68
|
-
this.currentLength = undefined;
|
|
69
80
|
}
|
|
70
81
|
}
|
|
71
82
|
return frames;
|
package/dist/frame.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frame.js","sourceRoot":"","sources":["../src/frame.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,UAAU,WAAW,CAAC,IAAe,EAAE,OAAmB;IAC9D,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAExC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAChB,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;IACpD,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAEtB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAkB;IAClD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAEnC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAC/E,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAc,CAAC;IACpC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAE3C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,OAAO,WAAW;IACd,MAAM,GAAe,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IACvC,YAAY,GAAG,KAAK,CAAC;IACrB,WAAW,CAAwB;IACnC,aAAa,
|
|
1
|
+
{"version":3,"file":"frame.js","sourceRoot":"","sources":["../src/frame.ts"],"names":[],"mappings":"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"}
|