@fails-components/webtransport 1.6.8 → 1.6.10

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.
@@ -1,12 +1,3 @@
1
- /**
2
- * @param{{offset: Number, buffer: Uint8Array, size: Number}} bs
3
- * @param{Number|bigint} int
4
- */
5
- export function writeVarInt(bs: {
6
- offset: number;
7
- buffer: Uint8Array;
8
- size: number;
9
- }, int: number | bigint): void;
10
1
  export class BrowserParser extends ParserBase {
11
2
  static WS_CONTINUE: number;
12
3
  static WS_TEXT: number;
@@ -19,15 +10,21 @@ export class BrowserParser extends ParserBase {
19
10
  */
20
11
  constructor({ ws, nativesession, isclient, initialStreamSendWindowOffsetUnidi, initialStreamSendWindowOffsetBidi, initialStreamReceiveWindowOffset, streamShouldAutoTuneReceiveWindow, streamReceiveWindowSizeLimit }: import('../../types.js').ParserWebsocketInit);
21
12
  ws: WebSocket;
22
- /** @type {Buffer|undefined} */
23
- saveddata: Buffer | undefined;
13
+ bufferstate: {
14
+ /** @type {number} */
15
+ offset: number;
16
+ /** @type {number} */
17
+ size: number;
18
+ /** @type {Uint8Array[]} */
19
+ buffer: Uint8Array[];
20
+ /** @type {number} */
21
+ curBuf: number;
22
+ /** @type {number} */
23
+ curBufOffset: number;
24
+ };
24
25
  /** @type {Number|undefined} */
25
26
  rtype: number | undefined;
26
27
  closesend: boolean;
27
- /**
28
- * @param {Uint8Array} data
29
- */
30
- parseData(data: Uint8Array): void;
31
28
  /**
32
29
  * @param{{type: Number, headerVints: Array<Number|bigint>, payload: Uint8Array|undefined, end?: () => void}} bs
33
30
  */
@@ -1 +1 @@
1
- {"version":3,"file":"browserparser.d.ts","sourceRoot":"","sources":["../../../../lib/http2/browser/browserparser.js"],"names":[],"mappings":"AAyCA;;;GAGG;AACH,gCAHU;IAAC,MAAM,SAAS;IAAC,MAAM,EAAE,UAAU,CAAC;IAAC,IAAI,SAAQ;CAAC,OAClD,SAAO,MAAM,QAyBtB;AAED;IACE,2BAAwB;IACxB,uBAAoB;IACpB,yBAAsB;IACtB,wBAAqB;IACrB,uBAAoB;IACpB,uBAAoB;IACpB;;OAEG;IACH,uNAFW,OAAO,gBAAgB,EAAE,mBAAmB,EAsCtD;IAjBC,cAAY;IACZ,+BAA+B;IAC/B,WADW,MAAM,GAAC,SAAS,CACD;IAC1B,+BAA+B;IAC/B,OADW,SAAO,SAAS,CACL;IAEtB,mBAAsB;IAaxB;;OAEG;IACH,gBAFW,UAAU,QAuIpB;IAED;;OAEG;IACH,kDAFU;QAAC,IAAI,SAAS;QAAC,WAAW,EAAE,MAAM,SAAO,MAAM,CAAC,CAAC;QAAC,OAAO,EAAE,UAAU,GAAC,SAAS,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAA;KAAC,WAuB3G;CAaF"}
1
+ {"version":3,"file":"browserparser.d.ts","sourceRoot":"","sources":["../../../../lib/http2/browser/browserparser.js"],"names":[],"mappings":"AAeA;IACE,2BAAwB;IACxB,uBAAoB;IACpB,yBAAsB;IACtB,wBAAqB;IACrB,uBAAoB;IACpB,uBAAoB;IACpB;;OAEG;IACH,uNAFW,OAAO,gBAAgB,EAAE,mBAAmB,EAgDtD;IA3BC,cAAY;IACZ;QACE,qBAAqB;gBAAV,MAAM;QAEjB,qBAAqB;cAAV,MAAM;QAEjB,2BAA2B;gBAAhB,UAAU,EAAE;QAEvB,qBAAqB;gBAAV,MAAM;QAEjB,qBAAqB;sBAAV,MAAM;MAElB;IACD,+BAA+B;IAC/B,OADW,SAAO,SAAS,CACL;IAEtB,mBAAsB;IA0JxB;;OAEG;IACH,kDAFU;QAAC,IAAI,SAAS;QAAC,WAAW,EAAE,MAAM,SAAO,MAAM,CAAC,CAAC;QAAC,OAAO,EAAE,UAAU,GAAC,SAAS,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAA;KAAC,WA6B3G;CAaF"}
@@ -0,0 +1,178 @@
1
+ /**
2
+ * @param{Number|bigint} int
3
+ * @returns {Number}
4
+ */
5
+ export function lengthVarInt(int: number | bigint): number;
6
+ /**
7
+ * @param{{offset: Number, buffer: Uint8Array[], size: Number, curBuf: Number, curBufOffset: Number}} bs
8
+ */
9
+ export function advanceBuffer(bs: {
10
+ offset: number;
11
+ buffer: Uint8Array[];
12
+ size: number;
13
+ curBuf: number;
14
+ curBufOffset: number;
15
+ }): void;
16
+ /**
17
+ * @param{{offset: Number, buffer: Uint8Array[], size: Number, curBuf: Number, curBufOffset: Number}} bs
18
+ * @param{number} offset
19
+ */
20
+ export function advanceBufferToOffset(bs: {
21
+ offset: number;
22
+ buffer: Uint8Array[];
23
+ size: number;
24
+ curBuf: number;
25
+ curBufOffset: number;
26
+ }, offset: number): void;
27
+ /**
28
+ * @param{{offset: Number, buffer: Uint8Array[], size: Number, curBuf: Number, curBufOffset: Number}} bs
29
+ * @param{number} length
30
+ */
31
+ export function advanceBufferBy(bs: {
32
+ offset: number;
33
+ buffer: Uint8Array[];
34
+ size: number;
35
+ curBuf: number;
36
+ curBufOffset: number;
37
+ }, length: number): void;
38
+ /**
39
+ * @param{{offset: Number, buffer: Uint8Array[], size: Number, curBuf: Number, curBufOffset: Number}} bs
40
+ */
41
+ export function detachReadBuffers(bs: {
42
+ offset: number;
43
+ buffer: Uint8Array[];
44
+ size: number;
45
+ curBuf: number;
46
+ curBufOffset: number;
47
+ }): void;
48
+ /**
49
+ * @param{{offset: Number, buffer: Uint8Array[], size: Number, curBuf: Number, curBufOffset: Number}} bs
50
+ * @param {number} length
51
+ */
52
+ export function getUint8ArraysfromBuffer(bs: {
53
+ offset: number;
54
+ buffer: Uint8Array[];
55
+ size: number;
56
+ curBuf: number;
57
+ curBufOffset: number;
58
+ }, length: number): Uint8Array[] | undefined;
59
+ /**
60
+ * @param{{offset: Number, buffer: Uint8Array[], size: Number, curBuf: Number, curBufOffset: Number}} bs
61
+ * @param {number} length
62
+ */
63
+ export function getUint8ArrayfromBuffer(bs: {
64
+ offset: number;
65
+ buffer: Uint8Array[];
66
+ size: number;
67
+ curBuf: number;
68
+ curBufOffset: number;
69
+ }, length: number): Uint8Array | undefined;
70
+ /**
71
+ * @param{{offset: Number, buffer: Uint8Array[], size: Number, curBuf: Number, curBufOffset: Number}} bs
72
+ */
73
+ export function readUInt8(bs: {
74
+ offset: number;
75
+ buffer: Uint8Array[];
76
+ size: number;
77
+ curBuf: number;
78
+ curBufOffset: number;
79
+ }): number;
80
+ /**
81
+ * @param{{offset: Number, buffer: Uint8Array[], size: Number, curBuf: Number, curBufOffset: Number}} bs
82
+ * @returns {number}
83
+ */
84
+ export function readUInt16BE(bs: {
85
+ offset: number;
86
+ buffer: Uint8Array[];
87
+ size: number;
88
+ curBuf: number;
89
+ curBufOffset: number;
90
+ }): number;
91
+ /**
92
+ * @param{{offset: Number, buffer: Uint8Array[], size: Number, curBuf: Number, curBufOffset: Number}} bs
93
+ * @param {number} length
94
+ * @returns {string}
95
+ */
96
+ export function readString(bs: {
97
+ offset: number;
98
+ buffer: Uint8Array[];
99
+ size: number;
100
+ curBuf: number;
101
+ curBufOffset: number;
102
+ }, length: number): string;
103
+ /**
104
+ * @param{{offset: Number, buffer: Uint8Array[], size: Number, curBuf: Number, curBufOffset: Number}} bs
105
+ * @param{Number} value
106
+ */
107
+ export function writeUInt8(bs: {
108
+ offset: number;
109
+ buffer: Uint8Array[];
110
+ size: number;
111
+ curBuf: number;
112
+ curBufOffset: number;
113
+ }, value: number): void;
114
+ /**
115
+ * @param{{offset: Number, buffer: Uint8Array[], size: Number, curBuf: Number, curBufOffset: Number}} bs
116
+ */
117
+ export function readVarInt(bs: {
118
+ offset: number;
119
+ buffer: Uint8Array[];
120
+ size: number;
121
+ curBuf: number;
122
+ curBufOffset: number;
123
+ }): bigint | undefined;
124
+ /**
125
+ * @param{{offset: Number, buffer: Uint8Array[], size: Number, curBuf: Number, curBufOffset: Number}} bs
126
+ */
127
+ export function readUint32(bs: {
128
+ offset: number;
129
+ buffer: Uint8Array[];
130
+ size: number;
131
+ curBuf: number;
132
+ curBufOffset: number;
133
+ }): number | undefined;
134
+ /**
135
+ * @param{{offset: Number, buffer: Uint8Array[], size: Number, curBuf: Number, curBufOffset: Number}} bs
136
+ * @param{number} value
137
+ */
138
+ export function writeUint16BE(bs: {
139
+ offset: number;
140
+ buffer: Uint8Array[];
141
+ size: number;
142
+ curBuf: number;
143
+ curBufOffset: number;
144
+ }, value: number): void;
145
+ /**
146
+ * @param{{offset: Number, buffer: Uint8Array[], size: Number, curBuf: Number, curBufOffset: Number}} bs
147
+ * @param{number} value
148
+ */
149
+ export function writeUint32BE(bs: {
150
+ offset: number;
151
+ buffer: Uint8Array[];
152
+ size: number;
153
+ curBuf: number;
154
+ curBufOffset: number;
155
+ }, value: number): void;
156
+ /**
157
+ * @param{{offset: Number, buffer: Uint8Array[], size: Number, curBuf: Number, curBufOffset: Number}} bs
158
+ * @param{bigint} value
159
+ */
160
+ export function writeBigInt64BE(bs: {
161
+ offset: number;
162
+ buffer: Uint8Array[];
163
+ size: number;
164
+ curBuf: number;
165
+ curBufOffset: number;
166
+ }, value: bigint): void;
167
+ /**
168
+ * @param{{offset: Number, buffer: Uint8Array[], size: Number, curBuf: Number, curBufOffset: Number}} bs
169
+ * @param{Number|bigint} int
170
+ */
171
+ export function writeVarInt(bs: {
172
+ offset: number;
173
+ buffer: Uint8Array[];
174
+ size: number;
175
+ curBuf: number;
176
+ curBufOffset: number;
177
+ }, int: number | bigint): void;
178
+ //# sourceMappingURL=bufferHelper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bufferHelper.d.ts","sourceRoot":"","sources":["../../../lib/http2/bufferHelper.js"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,kCAJU,SAAO,MAAM,UAUtB;AAED;;GAEG;AACH,kCAFU;IAAC,MAAM,SAAS;IAAC,MAAM,EAAE,UAAU,EAAE,CAAC;IAAC,IAAI,SAAS;IAAC,MAAM,SAAS;IAAC,YAAY,SAAQ;CAAC,QASnG;AAED;;;GAGG;AACH,0CAHU;IAAC,MAAM,SAAS;IAAC,MAAM,EAAE,UAAU,EAAE,CAAC;IAAC,IAAI,SAAS;IAAC,MAAM,SAAS;IAAC,YAAY,SAAQ;CAAC,UAC1F,MAAM,QAiBf;AAED;;;GAGG;AACH,oCAHU;IAAC,MAAM,SAAS;IAAC,MAAM,EAAE,UAAU,EAAE,CAAC;IAAC,IAAI,SAAS;IAAC,MAAM,SAAS;IAAC,YAAY,SAAQ;CAAC,UAC1F,MAAM,QAIf;AAED;;GAEG;AACH,sCAFU;IAAC,MAAM,SAAS;IAAC,MAAM,EAAE,UAAU,EAAE,CAAC;IAAC,IAAI,SAAS;IAAC,MAAM,SAAS;IAAC,YAAY,SAAQ;CAAC,QAWnG;AAED;;;GAGG;AACH;;YAHmC,UAAU,EAAE;;;;WACpC,MAAM,4BAsBhB;AACD;;;GAGG;AACH;;YAHmC,UAAU,EAAE;;;;WACpC,MAAM,0BAgBhB;AAED;;GAEG;AAEH,8BAHU;IAAC,MAAM,SAAS;IAAC,MAAM,EAAE,UAAU,EAAE,CAAC;IAAC,IAAI,SAAS;IAAC,MAAM,SAAS;IAAC,YAAY,SAAQ;CAAC,UAKnG;AAED;;;GAGG;AACH,iCAHU;IAAC,MAAM,SAAS;IAAC,MAAM,EAAE,UAAU,EAAE,CAAC;IAAC,IAAI,SAAS;IAAC,MAAM,SAAS;IAAC,YAAY,SAAQ;CAAC,GACvF,MAAM,CASlB;AAED;;;;GAIG;AACH,+BAJU;IAAC,MAAM,SAAS;IAAC,MAAM,EAAE,UAAU,EAAE,CAAC;IAAC,IAAI,SAAS;IAAC,MAAM,SAAS;IAAC,YAAY,SAAQ;CAAC,UACzF,MAAM,GACJ,MAAM,CAOlB;AAED;;;GAGG;AACH,+BAHU;IAAC,MAAM,SAAS;IAAC,MAAM,EAAE,UAAU,EAAE,CAAC;IAAC,IAAI,SAAS;IAAC,MAAM,SAAS;IAAC,YAAY,SAAQ;CAAC,uBAKnG;AAED;;GAEG;AACH,+BAFU;IAAC,MAAM,SAAS;IAAC,MAAM,EAAE,UAAU,EAAE,CAAC;IAAC,IAAI,SAAS;IAAC,MAAM,SAAS;IAAC,YAAY,SAAQ;CAAC,sBAmBnG;AACD;;GAEG;AACH,+BAFU;IAAC,MAAM,SAAS;IAAC,MAAM,EAAE,UAAU,EAAE,CAAC;IAAC,IAAI,SAAS;IAAC,MAAM,SAAS;IAAC,YAAY,SAAQ;CAAC,sBAanG;AAED;;;GAGG;AACH,kCAHU;IAAC,MAAM,SAAS;IAAC,MAAM,EAAE,UAAU,EAAE,CAAC;IAAC,IAAI,SAAS;IAAC,MAAM,SAAS;IAAC,YAAY,SAAQ;CAAC,SAC1F,MAAM,QAOf;AAED;;;GAGG;AACH,kCAHU;IAAC,MAAM,SAAS;IAAC,MAAM,EAAE,UAAU,EAAE,CAAC;IAAC,IAAI,SAAS;IAAC,MAAM,SAAS;IAAC,YAAY,SAAQ;CAAC,SAC1F,MAAM,QAWf;AAED;;;GAGG;AACH,oCAHU;IAAC,MAAM,SAAS;IAAC,MAAM,EAAE,UAAU,EAAE,CAAC;IAAC,IAAI,SAAS;IAAC,MAAM,SAAS;IAAC,YAAY,SAAQ;CAAC,SAC1F,MAAM,QAqBf;AAED;;;GAGG;AAEH,gCAJU;IAAC,MAAM,SAAS;IAAC,MAAM,EAAE,UAAU,EAAE,CAAC;IAAC,IAAI,SAAS;IAAC,MAAM,SAAS;IAAC,YAAY,SAAQ;CAAC,OAC1F,SAAO,MAAM,QAwBtB"}
@@ -1,13 +1,19 @@
1
1
  export class Http2CapsuleParser extends ParserBaseHttp2 {
2
2
  mode: string;
3
- /** @type {Buffer|undefined} */
4
- saveddata: Buffer | undefined;
3
+ bufferstate: {
4
+ /** @type {number} */
5
+ offset: number;
6
+ /** @type {number} */
7
+ size: number;
8
+ /** @type {Uint8Array[]} */
9
+ buffer: Uint8Array[];
10
+ /** @type {number} */
11
+ curBuf: number;
12
+ /** @type {number} */
13
+ curBufOffset: number;
14
+ };
5
15
  /** @type {Number|undefined} */
6
16
  rtype: number | undefined;
7
- /**
8
- * @param {Buffer} data
9
- */
10
- parseData(data: Buffer): void;
11
17
  remainlength: any;
12
18
  rstreamid: bigint | undefined;
13
19
  rfin: boolean | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"capsuleparser.d.ts","sourceRoot":"","sources":["../../../../lib/http2/node/capsuleparser.js"],"names":[],"mappings":"AAQA;IAwBI,aAAe;IACf,+BAA+B;IAC/B,WADW,MAAM,GAAC,SAAS,CACD;IAC1B,+BAA+B;IAC/B,OADW,SAAO,SAAS,CACL;IAGxB;;OAEG;IACH,gBAFW,MAAM,QAuQhB;IA/CW,kBAA2D;IAGzD,8BAAyB;IACzB,0BAAsD;IA6CpE;;OAEG;IACH,kDAFU;QAAC,IAAI,SAAS;QAAC,WAAW,EAAE,aAAa,CAAC;QAAC,OAAO,EAAE,UAAU,GAAC,SAAS,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAA;KAAC,uBA0BpG;CAaF"}
1
+ {"version":3,"file":"capsuleparser.d.ts","sourceRoot":"","sources":["../../../../lib/http2/node/capsuleparser.js"],"names":[],"mappings":"AAaA;IAwBI,aAAe;IACf;QACE,qBAAqB;gBAAV,MAAM;QAEjB,qBAAqB;cAAV,MAAM;QAEjB,2BAA2B;gBAAhB,UAAU,EAAE;QAEvB,qBAAqB;gBAAV,MAAM;QAEjB,qBAAqB;sBAAV,MAAM;MAElB;IACD,+BAA+B;IAC/B,OADW,SAAO,SAAS,CACL;IAkNZ,kBAA2D;IAGzD,8BAAyB;IACzB,0BAAsD;IA0CpE;;OAEG;IACH,kDAFU;QAAC,IAAI,SAAS;QAAC,WAAW,EAAE,aAAa,CAAC;QAAC,OAAO,EAAE,UAAU,GAAC,SAAS,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAA;KAAC,uBAgCpG;CAaF"}
@@ -1,11 +1,13 @@
1
1
  /**
2
- * @param{{offset: Number, buffer: Buffer, size: Number}} bs
2
+ * @param{{offset: Number, buffer: Uint8Array[], size: Number, curBuf: Number, curBufOffset: Number}} bs
3
3
  * @param{{offset: Number, mask: Uint8Array}} ms
4
4
  */
5
5
  export function readVarIntMasked(bs: {
6
6
  offset: number;
7
- buffer: Buffer;
7
+ buffer: Uint8Array[];
8
8
  size: number;
9
+ curBuf: number;
10
+ curBufOffset: number;
9
11
  }, ms: {
10
12
  offset: number;
11
13
  mask: Uint8Array;
@@ -18,28 +20,34 @@ export class WebSocketParser extends ParserBaseHttp2 {
18
20
  static WS_PING: number;
19
21
  static WS_PONG: number;
20
22
  mode: string;
21
- /** @type {Buffer|undefined} */
22
- saveddata: Buffer | undefined;
23
+ bufferstate: {
24
+ /** @type {number} */
25
+ offset: number;
26
+ /** @type {number} */
27
+ size: number;
28
+ /** @type {Uint8Array[]} */
29
+ buffer: Uint8Array[];
30
+ /** @type {number} */
31
+ curBuf: number;
32
+ /** @type {number} */
33
+ curBufOffset: number;
34
+ };
23
35
  /** @type {Number|undefined} */
24
36
  rtype: number | undefined;
25
37
  bidirectionalLimitsSet: boolean;
26
38
  unidirectionalLimitsSet: boolean;
27
39
  /**
28
- * @param {Buffer} data
40
+ * @type {Uint8Array[]| undefined}
29
41
  */
30
- parseData(data: Buffer): void;
42
+ contframes: Uint8Array[] | undefined;
43
+ remainlength: number;
31
44
  maskcontext: {
32
45
  mask: Uint8Array;
33
46
  offset: number;
34
47
  } | undefined;
35
48
  lastopcode: number | undefined;
36
49
  curtype: number | bigint | undefined;
37
- /**
38
- * @type {Uint8Array[]}
39
- */
40
- contframes: Uint8Array[] | undefined;
41
50
  cstreamid: bigint | undefined;
42
- remainlength: any;
43
51
  rstreamid: bigint | undefined;
44
52
  rfin: boolean | undefined;
45
53
  /**
@@ -61,13 +69,15 @@ export class WebSocketParser extends ParserBaseHttp2 {
61
69
  end?: () => void;
62
70
  }): boolean;
63
71
  /**
64
- * @param {{ offset: number; size?: number; buffer: Buffer; }} bs
72
+ * @param{{offset: Number, buffer: Uint8Array[], size: Number, curBuf: Number, curBufOffset: Number}} bs
65
73
  * @param {{ opcode: number; plength: number; mask: number; }} args
66
74
  */
67
75
  writeHeader(bs: {
68
76
  offset: number;
69
- size?: number;
70
- buffer: Buffer;
77
+ buffer: Uint8Array[];
78
+ size: number;
79
+ curBuf: number;
80
+ curBufOffset: number;
71
81
  }, { opcode, plength, mask }: {
72
82
  opcode: number;
73
83
  plength: number;
@@ -1 +1 @@
1
- {"version":3,"file":"websocketparser.d.ts","sourceRoot":"","sources":["../../../../lib/http2/node/websocketparser.js"],"names":[],"mappings":"AAmCA;;;GAGG;AACH,qCAHU;IAAC,MAAM,SAAS;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,SAAQ;CAAC,MAC9C;IAAC,MAAM,SAAS;IAAC,IAAI,EAAE,UAAU,CAAA;CAAC,sBAmB3C;AA+GD;IACE,2BAAwB;IACxB,uBAAoB;IACpB,yBAAsB;IACtB,wBAAqB;IACrB,uBAAoB;IACpB,uBAAoB;IAwBlB,aAAe;IACf,+BAA+B;IAC/B,WADW,MAAM,GAAC,SAAS,CACD;IAC1B,+BAA+B;IAC/B,OADW,SAAO,SAAS,CACL;IAEtB,gCAAmC;IACnC,iCAAoC;IAGtC;;OAEG;IACH,gBAFW,MAAM,QAufhB;IApbW;;;kBAGC;IAKD,+BAAwB;IAsItB,qCAAmB;IAyEf;;OAEG;IACH,qCAAoB;IA2CpB,8BAAyB;IA2G7B,kBAA2D;IAGzD,8BAAyB;IACzB,0BAA8C;IA0E9D;;OAEG;IACH,qDAGC;IADC,+BAAqB;IAGvB;;OAEG;IACH,kBAFW,UAAU,QAIpB;IAED;;OAEG;IACH,kDAFU;QAAC,IAAI,SAAS;QAAC,WAAW,EAAE,MAAM,SAAO,MAAM,CAAC,CAAC;QAAC,OAAO,EAAE,UAAU,GAAC,SAAS,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAA;KAAC,WAyD3G;IAED;;;OAGG;IACH,gBAHW;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;KAAE,6BAClD;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;KAAE;;;kBA4B5D;IAED;;OAEG;IACH,kCAFW;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,UAAU,GAAC,SAAS,CAAC;KAAE,WAkC5D;CAmBF;0BAt2BY,OAAO,YAAY,EAAE,WAAW"}
1
+ {"version":3,"file":"websocketparser.d.ts","sourceRoot":"","sources":["../../../../lib/http2/node/websocketparser.js"],"names":[],"mappings":"AAiDA;;;GAGG;AACH,qCAHU;IAAC,MAAM,SAAS;IAAC,MAAM,EAAE,UAAU,EAAE,CAAC;IAAC,IAAI,SAAS;IAAC,MAAM,SAAS;IAAC,YAAY,SAAQ;CAAC,MAC1F;IAAC,MAAM,SAAS;IAAC,IAAI,EAAE,UAAU,CAAA;CAAC,sBAmB3C;AAmHD;IACE,2BAAwB;IACxB,uBAAoB;IACpB,yBAAsB;IACtB,wBAAqB;IACrB,uBAAoB;IACpB,uBAAoB;IAwBlB,aAAe;IACf;QACE,qBAAqB;gBAAV,MAAM;QAEjB,qBAAqB;cAAV,MAAM;QAEjB,2BAA2B;gBAAhB,UAAU,EAAE;QAEvB,qBAAqB;gBAAV,MAAM;QAEjB,qBAAqB;sBAAV,MAAM;MAElB;IACD,+BAA+B;IAC/B,OADW,SAAO,SAAS,CACL;IAEtB,gCAAmC;IACnC,iCAAoC;IAEpC;;OAEG;IACH,YAFU,UAAU,EAAE,GAAE,SAAS,CAEN;IAC3B,qBAAqB;IA0FX;;;kBAGC;IAKD,+BAAwB;IAyHtB,qCAAmB;IA2Gf,8BAAyB;IA8G3B,8BAAyB;IACzB,0BAA8C;IAkE9D;;OAEG;IACH,qDAGC;IADC,+BAAqB;IAGvB;;OAEG;IACH,kBAFW,UAAU,QAIpB;IAED;;OAEG;IACH,kDAFU;QAAC,IAAI,SAAS;QAAC,WAAW,EAAE,MAAM,SAAO,MAAM,CAAC,CAAC;QAAC,OAAO,EAAE,UAAU,GAAC,SAAS,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAA;KAAC,WAoD3G;IAED;;;OAGG;IACH,gBAHU;QAAC,MAAM,SAAS;QAAC,MAAM,EAAE,UAAU,EAAE,CAAC;QAAC,IAAI,SAAS;QAAC,MAAM,SAAS;QAAC,YAAY,SAAQ;KAAC,6BACzF;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;KAAE;;;kBAyB5D;IAED;;OAEG;IACH,kCAFW;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,UAAU,GAAC,SAAS,CAAC;KAAE,WAmC5D;CAmBF;0BAr2BY,OAAO,YAAY,EAAE,WAAW"}
@@ -1,8 +1,3 @@
1
- /**
2
- * @param{Number|bigint} int
3
- * @returns {Number}
4
- */
5
- export function lengthVarInt(int: number | bigint): number;
6
1
  export class ParserBase {
7
2
  static PADDING: number;
8
3
  static WT_RESET_STREAM: number;
@@ -38,9 +33,9 @@ export class ParserBase {
38
33
  scheduler: PriorityScheduler;
39
34
  /**
40
35
  * @abstract
41
- * @param {Buffer|Uint8Array} data
36
+ * @param {Uint8Array[]} data
42
37
  */
43
- parseData(data: Buffer | Uint8Array): void;
38
+ parseData(data: Uint8Array[]): void;
44
39
  /**
45
40
  * @abstract
46
41
  * @param{{type: Number, headerVints: Array<Number|bigint>, payload: Uint8Array|undefined, end?: () => void}} bs
@@ -1 +1 @@
1
- {"version":3,"file":"parserbase.d.ts","sourceRoot":"","sources":["../../../lib/http2/parserbase.js"],"names":[],"mappings":"AAOA;;;GAGG;AACH,kCAHU,SAAO,MAAM,UAStB;AAED;IACE,uBAA2B;IAC3B,+BAAmC;IACnC,+BAAmC;IACnC,+BAAmC;IACnC,8BAAkC;IAClC,2BAA+B;IAC/B,kCAAsC;IACtC,mCAAuC;IACvC,oCAAwC;IACxC,+BAAmC;IACnC,sCAA0C;IAC1C,wCAA4C;IAC5C,uCAA2C;IAC3C,gCAAgC;IAChC,gCAAgC;IAChC,wBAAsB;IAEtB;;OAEG;IACH,mNAFW,OAAO,UAAU,EAAE,UAAU,EA0BvC;IAfC,aAA4B;IAC5B,kBAAwB;IACxB,sBAAsB;IACtB,SADW,OAAO,CACE;IAEpB,2CAA4E;IAC5E,0CAA0E;IAC1E,yCAAwE;IACxE,2CAA0E;IAC1E,qCAAgE;IAEhE,kDAAkD;IAClD,WADW,IAAI,MAAM,EAAC,uBAAuB,CAAC,CACpB;IAE1B,6BAAwC;IAG1C;;;OAGG;IAEH,gBAHW,MAAM,GAAC,UAAU,QAK3B;IAED;;;OAGG;IAEH,kDAHU;QAAC,IAAI,SAAS;QAAC,WAAW,EAAE,MAAM,SAAO,MAAM,CAAC,CAAC;QAAC,OAAO,EAAE,UAAU,GAAC,SAAS,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAA;KAAC,QAK3G;IAED;;;OAGG;IACH,8BAFW,OAAO,CAIjB;IAED;;OAEG;IACH,4BAFU;QAAC,IAAI,SAAS;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,QAiBvC;IAED;;;OAGG;IACH,oBAHW,MAAM,YACN;QAAC,SAAS,EAAE,MAAM,CAAC;QAAA,WAAW,EAAE,MAAM,CAAA;KAAC,uCA+CjD;IAED,4BAUC;IAPC,oDAAoC;IAStC,oBASC;IAED;;OAEG;IACH,eAFW,MAAM,GAAC,SAAS,QAa1B;IAED;;;OAGG;IACH,0BAHW,MAAM,UACN,MAAM,QAUhB;IAED;;OAEG;IACH,iCAFW,MAAM,GAAC,SAAS,QAM1B;IAED;;OAEG;IACH,gCAFW,MAAM,GAAC,SAAS,QAM1B;IAED;;OAEG;IACH,mBAFW,MAAM,GAAC,SAAS,QAK1B;IAED;;;OAGG;IACH,8BAHW,MAAM,UACN,MAAM,QAMhB;IAED;;OAEG;IACH,iCAFW,MAAM,GAAC,SAAS,QAW1B;IAED;;OAEG;IACH,kCAFW,MAAM,GAAC,SAAS,QAW1B;IAED;;OAEG;IACH,6CAFW;QAAC,IAAI,EAAG,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,QAQzC;IAED,gBAEC;IAED;;;OAGG;IACH,4BAFW,MAAM,WAIhB;IAED;;;OAGG;IACH,mCAFW,MAAM,QAIhB;IAED;;;OAGG;IACH,uBAFW,MAAM,QAKhB;IAED;;;;OAIG;IACH,wCAHW,MAAM,8BACN;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAC,QAKlD;IAED;;OAEG;IAEH,uBAHW,MAAM,QAKhB;CACF"}
1
+ {"version":3,"file":"parserbase.d.ts","sourceRoot":"","sources":["../../../lib/http2/parserbase.js"],"names":[],"mappings":"AAOA;IACE,uBAA2B;IAC3B,+BAAmC;IACnC,+BAAmC;IACnC,+BAAmC;IACnC,8BAAkC;IAClC,2BAA+B;IAC/B,kCAAsC;IACtC,mCAAuC;IACvC,oCAAwC;IACxC,+BAAmC;IACnC,sCAA0C;IAC1C,wCAA4C;IAC5C,uCAA2C;IAC3C,gCAAgC;IAChC,gCAAgC;IAChC,wBAAsB;IAEtB;;OAEG;IACH,mNAFW,OAAO,UAAU,EAAE,UAAU,EA0BvC;IAfC,aAA4B;IAC5B,kBAAwB;IACxB,sBAAsB;IACtB,SADW,OAAO,CACE;IAEpB,2CAA4E;IAC5E,0CAA0E;IAC1E,yCAAwE;IACxE,2CAA0E;IAC1E,qCAAgE;IAEhE,kDAAkD;IAClD,WADW,IAAI,MAAM,EAAC,uBAAuB,CAAC,CACpB;IAE1B,6BAAwC;IAG1C;;;OAGG;IAEH,gBAHW,UAAU,EAAE,QAKtB;IAED;;;OAGG;IAEH,kDAHU;QAAC,IAAI,SAAS;QAAC,WAAW,EAAE,MAAM,SAAO,MAAM,CAAC,CAAC;QAAC,OAAO,EAAE,UAAU,GAAC,SAAS,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAA;KAAC,QAK3G;IAED;;;OAGG;IACH,8BAFW,OAAO,CAIjB;IAED;;OAEG;IACH,4BAFU;QAAC,IAAI,SAAS;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,QAiBvC;IAED;;;OAGG;IACH,oBAHW,MAAM,YACN;QAAC,SAAS,EAAE,MAAM,CAAC;QAAA,WAAW,EAAE,MAAM,CAAA;KAAC,uCA+CjD;IAED,4BAUC;IAPC,oDAAoC;IAStC,oBASC;IAED;;OAEG;IACH,eAFW,MAAM,GAAC,SAAS,QAa1B;IAED;;;OAGG;IACH,0BAHW,MAAM,UACN,MAAM,QAUhB;IAED;;OAEG;IACH,iCAFW,MAAM,GAAC,SAAS,QAM1B;IAED;;OAEG;IACH,gCAFW,MAAM,GAAC,SAAS,QAM1B;IAED;;OAEG;IACH,mBAFW,MAAM,GAAC,SAAS,QAK1B;IAED;;;OAGG;IACH,8BAHW,MAAM,UACN,MAAM,QAMhB;IAED;;OAEG;IACH,iCAFW,MAAM,GAAC,SAAS,QAW1B;IAED;;OAEG;IACH,kCAFW,MAAM,GAAC,SAAS,QAW1B;IAED;;OAEG;IACH,6CAFW;QAAC,IAAI,EAAG,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,QAezC;IAED,gBAEC;IAED;;;OAGG;IACH,4BAFW,MAAM,WAIhB;IAED;;;OAGG;IACH,mCAFW,MAAM,QAIhB;IAED;;;OAGG;IACH,uBAFW,MAAM,QAKhB;IAED;;;;OAIG;IACH,wCAHW,MAAM,8BACN;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAC,QAKlD;IAED;;OAEG;IAEH,uBAHW,MAAM,QAKhB;CACF"}
@@ -2,31 +2,6 @@
2
2
  /**
3
3
  * @typedef {import('node:http2').Http2Stream} Http2Stream
4
4
  */
5
- /**
6
- * @param{{offset: Number, buffer: Buffer, size: Number}} bs
7
- */
8
- export function readUint32(bs: {
9
- offset: number;
10
- buffer: Buffer;
11
- size: number;
12
- }): number | undefined;
13
- /**
14
- * @param{{offset: Number, buffer: Buffer, size: Number}} bs
15
- */
16
- export function readVarInt(bs: {
17
- offset: number;
18
- buffer: Buffer;
19
- size: number;
20
- }): bigint | undefined;
21
- /**
22
- * @param{{offset: Number, buffer: Buffer, size: Number}} bs
23
- * @param{Number|bigint} int
24
- */
25
- export function writeVarInt(bs: {
26
- offset: number;
27
- buffer: Buffer;
28
- size: number;
29
- }, int: number | bigint): void;
30
5
  export class ParserBaseHttp2 extends ParserBase {
31
6
  /**
32
7
  * @param {import('../types').ParserHttp2Init} stream
@@ -1 +1 @@
1
- {"version":3,"file":"parserbasehttp2.d.ts","sourceRoot":"","sources":["../../../lib/http2/parserbasehttp2.js"],"names":[],"mappings":";AAEA;;GAEG;AAEH;;GAEG;AAEH,+BAHU;IAAC,MAAM,SAAS;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,SAAQ;CAAC,sBAQvD;AAED;;GAEG;AACH,+BAFU;IAAC,MAAM,SAAS;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,SAAQ;CAAC,sBAkBvD;AAED;;;GAGG;AACH,gCAHU;IAAC,MAAM,SAAS;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,SAAQ;CAAC,OAC9C,SAAO,MAAM,QA0BtB;AAED;IACE;;OAEG;IACH,2NAFW,OAAO,UAAU,EAAE,eAAe,EAqE5C;IAhDC,oCAAoB;CAiDvB;0BAzIY,OAAO,YAAY,EAAE,WAAW"}
1
+ {"version":3,"file":"parserbasehttp2.d.ts","sourceRoot":"","sources":["../../../lib/http2/parserbasehttp2.js"],"names":[],"mappings":";AAEA;;GAEG;AAEH;IACE;;OAEG;IACH,2NAFW,OAAO,UAAU,EAAE,eAAe,EA4E5C;IAvDC,oCAAoB;CAwDvB;0BAlFY,OAAO,YAAY,EAAE,WAAW"}
@@ -47,11 +47,11 @@ export class Http2WebTransportStream {
47
47
  sendInitialParameters(): void;
48
48
  /**
49
49
  * @param {Object} obj
50
- * @param {Uint8Array|undefined} obj.data
50
+ * @param {Uint8Array[]|undefined} obj.data
51
51
  * @param {Boolean} obj.fin
52
52
  */
53
53
  recvData({ data, fin }: {
54
- data: Uint8Array | undefined;
54
+ data: Uint8Array[] | undefined;
55
55
  fin: boolean;
56
56
  }): void;
57
57
  processRead(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../../lib/http2/stream.js"],"names":[],"mappings":"AAwBA;IACE;;;;;;;;;;;SAWK;IACL,uMAXW;QAAC,QAAQ,EAAE,MAAM,CAAC;QAC5B,cAAgB,EAAE,OAAO,CAAC;QAC1B,QAAU,EAAE,OAAO,CAAC;QACpB,aAAe,EAAE,UAAU,CAAA;QAC3B,gBAAkB,SAAS;QAC3B,mBAAqB,SAAS;QAC9B,2BAA6B,EAAE,OAAO,CAAA;QACtC,sBAAwB,SAAS;QACjC,qBAAuB,EAAE,cAAc,CAAC;QACxC,eAAiB,EAAE,eAAe,CAAA;KAAC,EAmDnC;IArCC,+CAA+C;IAE/C,OAFW,OAAO,WAAW,EAAE,YAAY,CAErB;IACtB,iBAAwB;IACxB,iCAAiC;IACjC,WADW,MAAM,WAAW,CAAC,CACV;IAEnB,0BAAkC;IAClC,mDAAmD;IACnD;;aADsC,OAAO;QACxB;IAErB,+BAOE;IACF,sCAAkD;IAClD,gEAAsC;IAEtC,eAAkB;IAClB,0BAA6B;IAC7B,sBAAwB;IACxB,qBAAwB;IACxB,kBAAkB;IAElB,yBAA4B;IAC5B,yBAA4B;IAU9B,8BAEC;IAED;;;;OAIG;IACH;QAHqC,IAAI,EAA9B,UAAU,GAAC,SAAS;QACP,GAAG;aA+B1B;IAED,oBAwEC;IAED,qBAGC;IAED,mBAIC;IAED,oBAEC;IAED;;OAEG;IACH,qBAFW,aAAa,GAAC,aAAa,QAWrC;IAED,sBAGC;IAED,sBAGC;IAED,gBAGC;IAED;;OAEG;IACH,gCAYC;IAED,cAEC;IAED;;OAEG;IACH,gCAYC;IAED;;OAEG;IACH,gBAFW,UAAU,QAMpB;IAED,0BAEC;IAED,oBA6FC;IAED,oBAKC;IAED;;;OAGG;IACH,oDAFW;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAC,QAOlD;IAED;;OAEG;IACH,+BAFW,MAAM,QAShB;IAED;;OAEG;IACH,0BAFW,MAAM,QAQhB;IAED;;OAEG;IACH,mBAFW,MAAM,QAIhB;IAED,qBAEC;IAED;;OAEG;IACH,kCAFW;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,QAM1C;IAED,mBAIC;CACF;;;;6CAjcY,OAAO,UAAU,EAAE,8BAA8B;;;;oCACjD,OAAO,UAAU,EAAE,qBAAqB;;;;8BACxC,OAAO,UAAU,EAAE,eAAe;;;;+BAClC,OAAO,UAAU,EAAE,gBAAgB;;;;uCACnC,OAAO,UAAU,EAAE,wBAAwB;;;;0BAE3C,OAAO,UAAU,EAAE,WAAW;;;;8BAC9B,OAAO,sBAAsB,EAAE,eAAe"}
1
+ {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../../lib/http2/stream.js"],"names":[],"mappings":"AAwBA;IACE;;;;;;;;;;;SAWK;IACL,uMAXW;QAAC,QAAQ,EAAE,MAAM,CAAC;QAC5B,cAAgB,EAAE,OAAO,CAAC;QAC1B,QAAU,EAAE,OAAO,CAAC;QACpB,aAAe,EAAE,UAAU,CAAA;QAC3B,gBAAkB,SAAS;QAC3B,mBAAqB,SAAS;QAC9B,2BAA6B,EAAE,OAAO,CAAA;QACtC,sBAAwB,SAAS;QACjC,qBAAuB,EAAE,cAAc,CAAC;QACxC,eAAiB,EAAE,eAAe,CAAA;KAAC,EAmDnC;IArCC,+CAA+C;IAE/C,OAFW,OAAO,WAAW,EAAE,YAAY,CAErB;IACtB,iBAAwB;IACxB,iCAAiC;IACjC,WADW,MAAM,WAAW,CAAC,CACV;IAEnB,0BAAkC;IAClC,mDAAmD;IACnD;;aADsC,OAAO;QACxB;IAErB,+BAOE;IACF,sCAAkD;IAClD,gEAAsC;IAEtC,eAAkB;IAClB,0BAA6B;IAC7B,sBAAwB;IACxB,qBAAwB;IACxB,kBAAkB;IAElB,yBAA4B;IAC5B,yBAA4B;IAU9B,8BAEC;IAED;;;;OAIG;IACH;QAHuC,IAAI,EAAhC,UAAU,EAAE,GAAC,SAAS;QACT,GAAG;aAwC1B;IAED,oBAwEC;IAED,qBAGC;IAED,mBAIC;IAED,oBAEC;IAED;;OAEG;IACH,qBAFW,aAAa,GAAC,aAAa,QAWrC;IAED,sBAGC;IAED,sBAGC;IAED,gBAKC;IAED;;OAEG;IACH,gCAWC;IAED,cAEC;IAED;;OAEG;IACH,gCAYC;IAED;;OAEG;IACH,gBAFW,UAAU,QAMpB;IAED,0BAEC;IAED,oBA6FC;IAED,oBAKC;IAED;;;OAGG;IACH,oDAFW;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAC,QAOlD;IAED;;OAEG;IACH,+BAFW,MAAM,QAShB;IAED;;OAEG;IACH,0BAFW,MAAM,QAQhB;IAED;;OAEG;IACH,mBAFW,MAAM,QAIhB;IAED,qBAEC;IAED;;OAEG;IACH,kCAFW;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,QAM1C;IAED,mBAIC;CACF;;;;6CA3cY,OAAO,UAAU,EAAE,8BAA8B;;;;oCACjD,OAAO,UAAU,EAAE,qBAAqB;;;;8BACxC,OAAO,UAAU,EAAE,eAAe;;;;+BAClC,OAAO,UAAU,EAAE,gBAAgB;;;;uCACnC,OAAO,UAAU,EAAE,wBAAwB;;;;0BAE3C,OAAO,UAAU,EAAE,WAAW;;;;8BAC9B,OAAO,sBAAsB,EAAE,eAAe"}
package/eslint.config.js CHANGED
@@ -19,7 +19,7 @@ export default [
19
19
  ...globals.node
20
20
  },
21
21
  parser: babelParser,
22
- ecmaVersion: 2020,
22
+ ecmaVersion: 2023,
23
23
  parserOptions: {
24
24
  ecmaFeatures: {
25
25
  legacyDecorators: true,
@@ -1,72 +1,17 @@
1
- import { ParserBase, lengthVarInt } from '../parserbase.js'
1
+ import { ParserBase } from '../parserbase.js'
2
+ import {
3
+ lengthVarInt,
4
+ readUint32,
5
+ readVarInt,
6
+ writeVarInt,
7
+ getUint8ArrayfromBuffer,
8
+ getUint8ArraysfromBuffer,
9
+ advanceBufferToOffset,
10
+ detachReadBuffers
11
+ } from '../bufferHelper.js'
2
12
  import { logger } from '../../utils.js'
3
13
 
4
14
  const log = logger(`webtransport:http2:browserparser`)
5
- /**
6
- * @param{{offset: Number, buffer: Uint8Array, size: Number}} bs
7
- */
8
- function readVarInt(bs) {
9
- if (bs.offset + 1 > bs.size) return undefined
10
- let val = BigInt(bs.buffer[bs.offset])
11
- bs.offset++
12
- const prefix = Number(val) >>> 6
13
- const intlength = 1 << prefix
14
-
15
- if (bs.offset + intlength - 1 > bs.size) {
16
- return undefined
17
- }
18
- val = val & 0x3fn
19
- for (let i = 0; i < intlength - 1; i++) {
20
- val = (val << 8n) | BigInt(bs.buffer[bs.offset])
21
- bs.offset++
22
- }
23
- return val
24
- }
25
-
26
- /**
27
- * @param{{offset: Number, buffer: Uint8Array, size: Number}} bs
28
- */
29
- function readUint32(bs) {
30
- if (bs.offset + 4 > bs.size) return undefined
31
- let val = bs.buffer[bs.offset]
32
- bs.offset++
33
- val = (val << 8) | bs.buffer[bs.offset]
34
- bs.offset++
35
- val = (val << 8) | bs.buffer[bs.offset]
36
- bs.offset++
37
- val = (val << 8) | bs.buffer[bs.offset]
38
- bs.offset++
39
- return val
40
- }
41
-
42
- /**
43
- * @param{{offset: Number, buffer: Uint8Array, size: Number}} bs
44
- * @param{Number|bigint} int
45
- */
46
- export function writeVarInt(bs, int) {
47
- let numbytes = 8n
48
- let msb = 0xc0n
49
- const bint = BigInt(int)
50
- if (bint < 64n) {
51
- numbytes = 1n
52
- msb = 0x0n
53
- } else if (bint < 16384n) {
54
- numbytes = 2n
55
- msb = 0x40n
56
- } else if (bint < 1073741824n) {
57
- numbytes = 4n
58
- msb = 0x80n
59
- }
60
- bs.buffer[bs.offset] = Number(
61
- msb | ((bint >> ((numbytes - 1n) * 8n)) & 0xffn)
62
- )
63
- bs.offset++
64
-
65
- for (let i = numbytes - 2n; i >= 0n; i--) {
66
- bs.buffer[bs.offset] = Number((bint >> (i * 8n)) & 0xffn)
67
- bs.offset++
68
- }
69
- }
70
15
 
71
16
  export class BrowserParser extends ParserBase {
72
17
  static WS_CONTINUE = 0x0
@@ -98,8 +43,18 @@ export class BrowserParser extends ParserBase {
98
43
  streamReceiveWindowSizeLimit
99
44
  })
100
45
  this.ws = ws
101
- /** @type {Buffer|undefined} */
102
- this.saveddata = undefined
46
+ this.bufferstate = {
47
+ /** @type {number} */
48
+ offset: 0,
49
+ /** @type {number} */
50
+ size: 0,
51
+ /** @type {Uint8Array[]} */
52
+ buffer: [],
53
+ /** @type {number} */
54
+ curBuf: 0,
55
+ /** @type {number} */
56
+ curBufOffset: 0
57
+ }
103
58
  /** @type {Number|undefined} */
104
59
  this.rtype = undefined
105
60
 
@@ -108,7 +63,7 @@ export class BrowserParser extends ParserBase {
108
63
  this.ws.addEventListener('message', (event) => {
109
64
  if (event.data instanceof ArrayBuffer) {
110
65
  // binary frame
111
- this.parseData(new Uint8Array(event.data, 0, event.data.byteLength))
66
+ this.parseData([new Uint8Array(event.data, 0, event.data.byteLength)])
112
67
  } else {
113
68
  // text frame
114
69
  log('Illegal text frame', event.data)
@@ -117,10 +72,12 @@ export class BrowserParser extends ParserBase {
117
72
  }
118
73
 
119
74
  /**
120
- * @param {Uint8Array} data
75
+ * @param {Uint8Array[]} data
121
76
  */
122
77
  parseData(data) {
123
- const bufferstate = { offset: 0, size: data.byteLength, buffer: data }
78
+ const bufferstate = this.bufferstate
79
+ bufferstate.buffer.push(...data)
80
+ bufferstate.size += data.reduce((sum, chunk) => sum + chunk.byteLength, 0)
124
81
 
125
82
  const offsetend = bufferstate.size
126
83
 
@@ -175,9 +132,8 @@ export class BrowserParser extends ParserBase {
175
132
  const fin = type === ParserBase.WT_STREAM_WFIN
176
133
  if (fin) object.onFin()
177
134
  object.recvData({
178
- data: new Uint8Array(
179
- bufferstate.buffer.buffer,
180
- bufferstate.buffer.byteOffset + bufferstate.offset,
135
+ data: getUint8ArraysfromBuffer(
136
+ bufferstate,
181
137
  offsetend - bufferstate.offset
182
138
  ),
183
139
  fin
@@ -224,13 +180,15 @@ export class BrowserParser extends ParserBase {
224
180
  {
225
181
  const code = readUint32(bufferstate) || 0
226
182
  const decoder = new TextDecoder()
227
- const reason = decoder.decode(
228
- new Uint8Array(
229
- bufferstate.buffer.buffer,
230
- bufferstate.buffer.byteOffset + bufferstate.offset,
231
- offsetend - bufferstate.offset
232
- )
233
- )
183
+ const reason =
184
+ offsetend - bufferstate.offset > 0
185
+ ? decoder.decode(
186
+ getUint8ArrayfromBuffer(
187
+ bufferstate,
188
+ offsetend - bufferstate.offset
189
+ )
190
+ )
191
+ : ''
234
192
  this.onCloseWebTransportSession({ code, reason })
235
193
  }
236
194
  break
@@ -239,19 +197,19 @@ export class BrowserParser extends ParserBase {
239
197
  break
240
198
  case ParserBase.DATAGRAM:
241
199
  this.session.jsobj.onDatagramReceived({
242
- datagram: new Uint8Array(
243
- bufferstate.buffer.buffer,
244
- bufferstate.buffer.byteOffset + bufferstate.offset,
245
- offsetend - bufferstate.offset
246
- )
200
+ datagram:
201
+ getUint8ArrayfromBuffer(
202
+ bufferstate,
203
+ offsetend - bufferstate.offset
204
+ ) || new Uint8Array(0)
247
205
  })
248
206
 
249
207
  break
250
208
  default:
251
209
  // do nothing
252
210
  }
253
-
254
- bufferstate.offset = offsetend
211
+ advanceBufferToOffset(bufferstate, offsetend)
212
+ detachReadBuffers(bufferstate)
255
213
  }
256
214
 
257
215
  /**
@@ -265,7 +223,13 @@ export class BrowserParser extends ParserBase {
265
223
  if (payload) plength += payload.byteLength
266
224
 
267
225
  const cdata = new Uint8Array(plength)
268
- const bufferstate = { offset: 0, size: cdata.length, buffer: cdata }
226
+ const bufferstate = {
227
+ offset: 0,
228
+ size: cdata.length,
229
+ buffer: [cdata],
230
+ curBuf: 0,
231
+ curBufOffset: 0
232
+ }
269
233
  writeVarInt(bufferstate, type)
270
234
  for (const ind in headerVints) writeVarInt(bufferstate, headerVints[ind])
271
235
  const dest = new Uint8Array(cdata.buffer, cdata.byteOffset + hlength)