grpc-libp2p-client 0.0.37 → 0.0.38
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/dc-http2/frame.cjs.js +6 -5
- package/dist/dc-http2/frame.cjs.js.map +1 -1
- package/dist/dc-http2/frame.d.ts +1 -1
- package/dist/dc-http2/frame.esm.js +6 -5
- package/dist/dc-http2/frame.esm.js.map +1 -1
- package/dist/dc-http2/hpack.cjs.js +3 -3
- package/dist/dc-http2/hpack.cjs.js.map +1 -1
- package/dist/dc-http2/hpack.esm.js +3 -3
- package/dist/dc-http2/hpack.esm.js.map +1 -1
- package/dist/dc-http2/parser.cjs.js +39 -28
- package/dist/dc-http2/parser.cjs.js.map +1 -1
- package/dist/dc-http2/parser.d.ts +7 -7
- package/dist/dc-http2/parser.esm.js +39 -28
- package/dist/dc-http2/parser.esm.js.map +1 -1
- package/dist/dc-http2/stream.cjs.js +12 -8
- package/dist/dc-http2/stream.cjs.js.map +1 -1
- package/dist/dc-http2/stream.d.ts +1 -1
- package/dist/dc-http2/stream.esm.js +12 -8
- package/dist/dc-http2/stream.esm.js.map +1 -1
- package/dist/grpc.js +231 -265
- package/dist/grpc.js.map +1 -1
- package/dist/grpc.min.js +1 -1
- package/dist/grpc.min.js.map +1 -1
- package/dist/index.cjs.js +89 -99
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +89 -99
- package/dist/index.esm.js.map +1 -1
- package/dist/stats.html +1 -1
- package/package.json +4 -4
- package/src/dc-http2/encoder.ts +3 -2
- package/src/dc-http2/hpack.ts +3 -3
- package/src/dc-http2/parser.ts +43 -38
- package/src/dc-http2/stream.ts +22 -19
- package/src/dc-http2/types.ts +1 -1
- package/src/index.ts +57 -85
package/dist/grpc.js
CHANGED
|
@@ -575,7 +575,7 @@
|
|
|
575
575
|
try {
|
|
576
576
|
result = this.decode(bytes);
|
|
577
577
|
}
|
|
578
|
-
catch (
|
|
578
|
+
catch (_b) {
|
|
579
579
|
result = '';
|
|
580
580
|
}
|
|
581
581
|
}
|
|
@@ -583,7 +583,7 @@
|
|
|
583
583
|
try {
|
|
584
584
|
result = new TextDecoder().decode(bytes);
|
|
585
585
|
}
|
|
586
|
-
catch (
|
|
586
|
+
catch (_c) {
|
|
587
587
|
result = '';
|
|
588
588
|
}
|
|
589
589
|
}
|
|
@@ -632,7 +632,8 @@
|
|
|
632
632
|
// 编码SETTINGS帧
|
|
633
633
|
FrameEncoder.encodeSettingsFrame = function (frame) {
|
|
634
634
|
// 计算payload总长度:每个设置项占6字节
|
|
635
|
-
var
|
|
635
|
+
var settingsPayload = frame.payload;
|
|
636
|
+
var payloadLength = settingsPayload.length * 6;
|
|
636
637
|
// 分配缓冲区:9字节头部 + payload长度
|
|
637
638
|
var buffer = new Uint8Array(9 + payloadLength);
|
|
638
639
|
// 编码帧头部(前9个字节)
|
|
@@ -643,7 +644,7 @@
|
|
|
643
644
|
streamId: frame.streamId
|
|
644
645
|
});
|
|
645
646
|
// 编码payload
|
|
646
|
-
_encodeSettingsPayload(buffer,
|
|
647
|
+
_encodeSettingsPayload(buffer, settingsPayload);
|
|
647
648
|
return buffer;
|
|
648
649
|
};
|
|
649
650
|
// 编码SETTINGS ACK帧
|
|
@@ -716,13 +717,13 @@
|
|
|
716
717
|
_a[SETTINGS_PARAMETERS.MAX_FRAME_SIZE] = 16 << 10,
|
|
717
718
|
_a[SETTINGS_PARAMETERS.MAX_HEADER_LIST_SIZE] = 8192,
|
|
718
719
|
_a);
|
|
719
|
-
var HTTP2_PREFACE = 'PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n';
|
|
720
|
+
var HTTP2_PREFACE$1 = 'PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n';
|
|
720
721
|
var Http2Frame = /** @class */ (function () {
|
|
721
722
|
function Http2Frame() {
|
|
722
723
|
}
|
|
723
724
|
// 创建并编码PREFACE帧
|
|
724
725
|
Http2Frame.createPreface = function () {
|
|
725
|
-
return new TextEncoder().encode(HTTP2_PREFACE);
|
|
726
|
+
return new TextEncoder().encode(HTTP2_PREFACE$1);
|
|
726
727
|
};
|
|
727
728
|
Http2Frame.createPongFrame = function (payload) {
|
|
728
729
|
return Http2Frame.createFrame(0x6, 0x1, 0, payload);
|
|
@@ -949,6 +950,7 @@
|
|
|
949
950
|
return payload;
|
|
950
951
|
}
|
|
951
952
|
|
|
953
|
+
var HTTP2_PREFACE = new TextEncoder().encode("PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n");
|
|
952
954
|
var HTTP2Parser = /** @class */ (function () {
|
|
953
955
|
function HTTP2Parser(writer, options) {
|
|
954
956
|
var _a;
|
|
@@ -1039,44 +1041,49 @@
|
|
|
1039
1041
|
// 处理单个数据块
|
|
1040
1042
|
HTTP2Parser.prototype._processChunk = function (chunk) {
|
|
1041
1043
|
// chunk 是 Uint8ArrayList 或 Uint8Array
|
|
1042
|
-
var newData =
|
|
1043
|
-
|
|
1044
|
+
var newData = 'subarray' in chunk && typeof chunk.subarray === 'function'
|
|
1045
|
+
? chunk.subarray()
|
|
1046
|
+
: chunk;
|
|
1047
|
+
// 原作者之前的 O(N) 内存拷贝优化被保留,去掉了存在 onEnd 竞态的 setTimeout
|
|
1044
1048
|
var newBuffer = new Uint8Array(this.buffer.length + newData.length);
|
|
1045
1049
|
newBuffer.set(this.buffer);
|
|
1046
1050
|
newBuffer.set(newData, this.buffer.length);
|
|
1047
1051
|
this.buffer = newBuffer;
|
|
1048
1052
|
// 持续处理所有完整的帧
|
|
1049
|
-
|
|
1053
|
+
var readOffset = 0;
|
|
1054
|
+
while (this.buffer.length - readOffset >= 9) {
|
|
1050
1055
|
// 判断是否有HTTP/2前导
|
|
1051
|
-
if (this.buffer.length >= 24 && this.isHttp2Preface(this.buffer)) {
|
|
1052
|
-
|
|
1056
|
+
if (this.buffer.length - readOffset >= 24 && this.isHttp2Preface(this.buffer.subarray(readOffset))) {
|
|
1057
|
+
readOffset += 24;
|
|
1053
1058
|
// 发送SETTINGS帧
|
|
1054
1059
|
var settingFrame = Http2Frame.createSettingsFrame();
|
|
1055
1060
|
this.writer.write(settingFrame);
|
|
1056
|
-
|
|
1061
|
+
continue;
|
|
1057
1062
|
}
|
|
1058
|
-
var frameHeader = this._parseFrameHeader(this.buffer);
|
|
1063
|
+
var frameHeader = this._parseFrameHeader(this.buffer.subarray(readOffset));
|
|
1059
1064
|
var totalFrameLength = 9 + frameHeader.length;
|
|
1060
1065
|
// 检查是否有完整的帧
|
|
1061
|
-
if (this.buffer.length < totalFrameLength) {
|
|
1066
|
+
if (this.buffer.length - readOffset < totalFrameLength) {
|
|
1062
1067
|
break;
|
|
1063
1068
|
}
|
|
1064
1069
|
// 获取完整帧数据
|
|
1065
|
-
var frameData = this.buffer.
|
|
1070
|
+
var frameData = this.buffer.subarray(readOffset, readOffset + totalFrameLength);
|
|
1066
1071
|
// 处理不同类型的帧
|
|
1067
1072
|
this._handleFrame(frameHeader, frameData).catch(function (err) {
|
|
1068
1073
|
console.error("Error handling frame:", err);
|
|
1069
1074
|
});
|
|
1070
|
-
//
|
|
1071
|
-
|
|
1075
|
+
// 移动偏移量
|
|
1076
|
+
readOffset += totalFrameLength;
|
|
1077
|
+
}
|
|
1078
|
+
if (readOffset > 0) {
|
|
1079
|
+
this.buffer = this.buffer.slice(readOffset);
|
|
1072
1080
|
}
|
|
1073
1081
|
};
|
|
1074
1082
|
HTTP2Parser.prototype.isHttp2Preface = function (buffer) {
|
|
1075
|
-
|
|
1076
|
-
if (buffer.length < PREFACE.length)
|
|
1083
|
+
if (buffer.length < HTTP2_PREFACE.length)
|
|
1077
1084
|
return false;
|
|
1078
|
-
for (var i = 0; i <
|
|
1079
|
-
if (buffer[i] !==
|
|
1085
|
+
for (var i = 0; i < HTTP2_PREFACE.length; i++) {
|
|
1086
|
+
if (buffer[i] !== HTTP2_PREFACE[i])
|
|
1080
1087
|
return false;
|
|
1081
1088
|
}
|
|
1082
1089
|
return true;
|
|
@@ -1282,7 +1289,9 @@
|
|
|
1282
1289
|
waiters.forEach(function (fn) { try {
|
|
1283
1290
|
fn();
|
|
1284
1291
|
}
|
|
1285
|
-
catch (
|
|
1292
|
+
catch (e) {
|
|
1293
|
+
console.debug('waiter error', e);
|
|
1294
|
+
} });
|
|
1286
1295
|
}
|
|
1287
1296
|
break;
|
|
1288
1297
|
case FRAME_TYPES.DATA:
|
|
@@ -1330,7 +1339,7 @@
|
|
|
1330
1339
|
break;
|
|
1331
1340
|
case FRAME_TYPES.WINDOW_UPDATE:
|
|
1332
1341
|
// 处理窗口更新帧
|
|
1333
|
-
this.handleWindowUpdateFrame(frameHeader, frameData
|
|
1342
|
+
this.handleWindowUpdateFrame(frameHeader, frameData);
|
|
1334
1343
|
// 更新发送窗口(对端接收窗口)
|
|
1335
1344
|
try {
|
|
1336
1345
|
inc = this.parseWindowUpdateFrame(frameData, frameHeader).windowSizeIncrement;
|
|
@@ -1345,9 +1354,11 @@
|
|
|
1345
1354
|
waiters.forEach(function (fn) { try {
|
|
1346
1355
|
fn();
|
|
1347
1356
|
}
|
|
1348
|
-
catch (
|
|
1357
|
+
catch (e) {
|
|
1358
|
+
console.debug('waiter error', e);
|
|
1359
|
+
} });
|
|
1349
1360
|
}
|
|
1350
|
-
catch (
|
|
1361
|
+
catch ( /* ignore WINDOW_UPDATE parse errors */_g) { /* ignore WINDOW_UPDATE parse errors */ }
|
|
1351
1362
|
break;
|
|
1352
1363
|
case FRAME_TYPES.PING:
|
|
1353
1364
|
// 处理PING帧
|
|
@@ -1369,7 +1380,7 @@
|
|
|
1369
1380
|
info = {};
|
|
1370
1381
|
}
|
|
1371
1382
|
}
|
|
1372
|
-
catch (
|
|
1383
|
+
catch ( /* ignore GOAWAY parse errors */_h) { /* ignore GOAWAY parse errors */ }
|
|
1373
1384
|
try {
|
|
1374
1385
|
(_d = this.onGoaway) === null || _d === void 0 ? void 0 : _d.call(this, info !== null && info !== void 0 ? info : {});
|
|
1375
1386
|
}
|
|
@@ -1506,7 +1517,7 @@
|
|
|
1506
1517
|
};
|
|
1507
1518
|
};
|
|
1508
1519
|
// 处理 WINDOW_UPDATE 帧
|
|
1509
|
-
HTTP2Parser.prototype.handleWindowUpdateFrame = function (frameHeader, payload
|
|
1520
|
+
HTTP2Parser.prototype.handleWindowUpdateFrame = function (frameHeader, payload) {
|
|
1510
1521
|
try {
|
|
1511
1522
|
var windowUpdate = this.parseWindowUpdateFrame(payload, frameHeader);
|
|
1512
1523
|
this.connectionWindowSize += windowUpdate.windowSizeIncrement;
|
|
@@ -1976,23 +1987,23 @@
|
|
|
1976
1987
|
return __awaiter(this, void 0, void 0, function () {
|
|
1977
1988
|
var _a, _b, _c, chunk, canContinue, err_1, errMsg, e_1_1;
|
|
1978
1989
|
var _d, e_1, _e, _f;
|
|
1979
|
-
var _g, _h, _j, _k
|
|
1980
|
-
return __generator(this, function (
|
|
1981
|
-
switch (
|
|
1990
|
+
var _g, _h, _j, _k;
|
|
1991
|
+
return __generator(this, function (_l) {
|
|
1992
|
+
switch (_l.label) {
|
|
1982
1993
|
case 0:
|
|
1983
1994
|
// 检查 stream 是否有效
|
|
1984
1995
|
if (!this.stream) {
|
|
1985
1996
|
(_h = (_g = this.log) === null || _g === void 0 ? void 0 : _g.trace) === null || _h === void 0 ? void 0 : _h.call(_g, 'Stream is null/undefined, cannot start pipeline');
|
|
1986
1997
|
return [2 /*return*/];
|
|
1987
1998
|
}
|
|
1988
|
-
|
|
1999
|
+
_l.label = 1;
|
|
1989
2000
|
case 1:
|
|
1990
|
-
|
|
2001
|
+
_l.trys.push([1, 10, 11, 16]);
|
|
1991
2002
|
_a = true, _b = __asyncValues(this.createTransform()(this.p));
|
|
1992
|
-
|
|
2003
|
+
_l.label = 2;
|
|
1993
2004
|
case 2: return [4 /*yield*/, _b.next()];
|
|
1994
2005
|
case 3:
|
|
1995
|
-
if (!(_c =
|
|
2006
|
+
if (!(_c = _l.sent(), _d = _c.done, !_d)) return [3 /*break*/, 9];
|
|
1996
2007
|
_f = _c.value;
|
|
1997
2008
|
_a = false;
|
|
1998
2009
|
chunk = _f;
|
|
@@ -2000,26 +2011,26 @@
|
|
|
2000
2011
|
if (this.abortController.signal.aborted) {
|
|
2001
2012
|
return [3 /*break*/, 9];
|
|
2002
2013
|
}
|
|
2003
|
-
|
|
2014
|
+
_l.label = 4;
|
|
2004
2015
|
case 4:
|
|
2005
|
-
|
|
2016
|
+
_l.trys.push([4, 7, , 8]);
|
|
2006
2017
|
canContinue = this.stream.send(chunk);
|
|
2007
2018
|
if (!!canContinue) return [3 /*break*/, 6];
|
|
2008
2019
|
// 等待 drain 事件
|
|
2009
2020
|
return [4 /*yield*/, this.stream.onDrain()];
|
|
2010
2021
|
case 5:
|
|
2011
2022
|
// 等待 drain 事件
|
|
2012
|
-
|
|
2013
|
-
|
|
2023
|
+
_l.sent();
|
|
2024
|
+
_l.label = 6;
|
|
2014
2025
|
case 6: return [3 /*break*/, 8];
|
|
2015
2026
|
case 7:
|
|
2016
|
-
err_1 =
|
|
2017
|
-
errMsg = (
|
|
2018
|
-
if (err_1.name === 'StreamStateError' ||
|
|
2027
|
+
err_1 = _l.sent();
|
|
2028
|
+
errMsg = (err_1 instanceof Error ? err_1.message : '').toLowerCase();
|
|
2029
|
+
if ((err_1 instanceof Error && err_1.name === 'StreamStateError') ||
|
|
2019
2030
|
errMsg.includes('closing') ||
|
|
2020
2031
|
errMsg.includes('closed') ||
|
|
2021
2032
|
errMsg.includes('write to a stream that is closed')) {
|
|
2022
|
-
(
|
|
2033
|
+
(_k = (_j = this.log) === null || _j === void 0 ? void 0 : _j.trace) === null || _k === void 0 ? void 0 : _k.call(_j, 'Stream is closing/closed, stopping pipeline');
|
|
2023
2034
|
return [3 /*break*/, 9];
|
|
2024
2035
|
}
|
|
2025
2036
|
throw err_1;
|
|
@@ -2028,16 +2039,16 @@
|
|
|
2028
2039
|
return [3 /*break*/, 2];
|
|
2029
2040
|
case 9: return [3 /*break*/, 16];
|
|
2030
2041
|
case 10:
|
|
2031
|
-
e_1_1 =
|
|
2042
|
+
e_1_1 = _l.sent();
|
|
2032
2043
|
e_1 = { error: e_1_1 };
|
|
2033
2044
|
return [3 /*break*/, 16];
|
|
2034
2045
|
case 11:
|
|
2035
|
-
|
|
2046
|
+
_l.trys.push([11, , 14, 15]);
|
|
2036
2047
|
if (!(!_a && !_d && (_e = _b.return))) return [3 /*break*/, 13];
|
|
2037
2048
|
return [4 /*yield*/, _e.call(_b)];
|
|
2038
2049
|
case 12:
|
|
2039
|
-
|
|
2040
|
-
|
|
2050
|
+
_l.sent();
|
|
2051
|
+
_l.label = 13;
|
|
2041
2052
|
case 13: return [3 /*break*/, 15];
|
|
2042
2053
|
case 14:
|
|
2043
2054
|
if (e_1) throw e_1.error;
|
|
@@ -2049,21 +2060,21 @@
|
|
|
2049
2060
|
});
|
|
2050
2061
|
};
|
|
2051
2062
|
StreamWriter.prototype.createTransform = function () {
|
|
2063
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
2052
2064
|
var self = this;
|
|
2053
2065
|
return function (source) {
|
|
2054
2066
|
return __asyncGenerator(this, arguments, function () {
|
|
2055
2067
|
var _a, source_1, source_1_1, chunk, now, e_2_1;
|
|
2056
2068
|
var _b, e_2, _c, _d;
|
|
2057
|
-
|
|
2058
|
-
|
|
2059
|
-
switch (_f.label) {
|
|
2069
|
+
return __generator(this, function (_e) {
|
|
2070
|
+
switch (_e.label) {
|
|
2060
2071
|
case 0:
|
|
2061
|
-
|
|
2072
|
+
_e.trys.push([0, 7, 8, 13]);
|
|
2062
2073
|
_a = true, source_1 = __asyncValues(source);
|
|
2063
|
-
|
|
2074
|
+
_e.label = 1;
|
|
2064
2075
|
case 1: return [4 /*yield*/, __await(source_1.next())];
|
|
2065
2076
|
case 2:
|
|
2066
|
-
if (!(source_1_1 =
|
|
2077
|
+
if (!(source_1_1 = _e.sent(), _b = source_1_1.done, !_b)) return [3 /*break*/, 6];
|
|
2067
2078
|
_d = source_1_1.value;
|
|
2068
2079
|
_a = false;
|
|
2069
2080
|
chunk = _d;
|
|
@@ -2073,15 +2084,15 @@
|
|
|
2073
2084
|
)];
|
|
2074
2085
|
case 3:
|
|
2075
2086
|
// 将数据交给下游
|
|
2076
|
-
return [4 /*yield*/,
|
|
2087
|
+
return [4 /*yield*/, _e.sent()];
|
|
2077
2088
|
case 4:
|
|
2078
2089
|
// 将数据交给下游
|
|
2079
|
-
|
|
2090
|
+
_e.sent();
|
|
2080
2091
|
// 注意:在 async generator 中,yield 返回后到下一次循环之间,表示下游已经“取走并处理了这个 chunk”,
|
|
2081
2092
|
// 因此这里统计的 bytesDrained 更接近实际被 sink 消费的字节数
|
|
2082
2093
|
try {
|
|
2083
2094
|
// 在下游消费后再扣减待消费队列,避免误判“next 没取”
|
|
2084
|
-
if (
|
|
2095
|
+
if (self.p._queueSize != null) {
|
|
2085
2096
|
self.p._queueSize = Math.max(0, self.p._queueSize - chunk.byteLength);
|
|
2086
2097
|
}
|
|
2087
2098
|
self.bytesDrained += chunk.byteLength;
|
|
@@ -2097,22 +2108,22 @@
|
|
|
2097
2108
|
//打印错误
|
|
2098
2109
|
console.error('Error updating bytesDrained in StreamWriter transform', err);
|
|
2099
2110
|
}
|
|
2100
|
-
|
|
2111
|
+
_e.label = 5;
|
|
2101
2112
|
case 5:
|
|
2102
2113
|
_a = true;
|
|
2103
2114
|
return [3 /*break*/, 1];
|
|
2104
2115
|
case 6: return [3 /*break*/, 13];
|
|
2105
2116
|
case 7:
|
|
2106
|
-
e_2_1 =
|
|
2117
|
+
e_2_1 = _e.sent();
|
|
2107
2118
|
e_2 = { error: e_2_1 };
|
|
2108
2119
|
return [3 /*break*/, 13];
|
|
2109
2120
|
case 8:
|
|
2110
|
-
|
|
2121
|
+
_e.trys.push([8, , 11, 12]);
|
|
2111
2122
|
if (!(!_a && !_b && (_c = source_1.return))) return [3 /*break*/, 10];
|
|
2112
2123
|
return [4 /*yield*/, __await(_c.call(source_1))];
|
|
2113
2124
|
case 9:
|
|
2114
|
-
|
|
2115
|
-
|
|
2125
|
+
_e.sent();
|
|
2126
|
+
_e.label = 10;
|
|
2116
2127
|
case 10: return [3 /*break*/, 12];
|
|
2117
2128
|
case 11:
|
|
2118
2129
|
if (e_2) throw e_2.error;
|
|
@@ -2208,6 +2219,8 @@
|
|
|
2208
2219
|
return [2 /*return*/, data.arrayBuffer()];
|
|
2209
2220
|
if (typeof data === 'string')
|
|
2210
2221
|
return [2 /*return*/, new TextEncoder().encode(data).buffer];
|
|
2222
|
+
if (data instanceof Uint8Array)
|
|
2223
|
+
return [2 /*return*/, data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength)];
|
|
2211
2224
|
return [2 /*return*/, data];
|
|
2212
2225
|
});
|
|
2213
2226
|
});
|
|
@@ -2411,24 +2424,24 @@
|
|
|
2411
2424
|
StreamWriter.prototype.end = function () {
|
|
2412
2425
|
return __awaiter(this, void 0, void 0, function () {
|
|
2413
2426
|
var err_4, errMsg;
|
|
2414
|
-
var _a, _b
|
|
2415
|
-
return __generator(this, function (
|
|
2416
|
-
switch (
|
|
2427
|
+
var _a, _b;
|
|
2428
|
+
return __generator(this, function (_c) {
|
|
2429
|
+
switch (_c.label) {
|
|
2417
2430
|
case 0:
|
|
2418
2431
|
this.p.end();
|
|
2419
2432
|
if (!(this.stream && typeof this.stream.close === 'function')) return [3 /*break*/, 4];
|
|
2420
|
-
|
|
2433
|
+
_c.label = 1;
|
|
2421
2434
|
case 1:
|
|
2422
|
-
|
|
2435
|
+
_c.trys.push([1, 3, , 4]);
|
|
2423
2436
|
return [4 /*yield*/, this.stream.close()];
|
|
2424
2437
|
case 2:
|
|
2425
|
-
|
|
2438
|
+
_c.sent();
|
|
2426
2439
|
return [3 /*break*/, 4];
|
|
2427
2440
|
case 3:
|
|
2428
|
-
err_4 =
|
|
2429
|
-
errMsg = (
|
|
2441
|
+
err_4 = _c.sent();
|
|
2442
|
+
errMsg = (err_4 instanceof Error ? err_4.message : '').toLowerCase();
|
|
2430
2443
|
if (!errMsg.includes('closed') && !errMsg.includes('closing')) {
|
|
2431
|
-
(
|
|
2444
|
+
(_b = (_a = this.log) === null || _a === void 0 ? void 0 : _a.trace) === null || _b === void 0 ? void 0 : _b.call(_a, 'Stream close error:', err_4);
|
|
2432
2445
|
}
|
|
2433
2446
|
return [3 /*break*/, 4];
|
|
2434
2447
|
case 4:
|
|
@@ -2439,7 +2452,7 @@
|
|
|
2439
2452
|
});
|
|
2440
2453
|
};
|
|
2441
2454
|
StreamWriter.prototype.abort = function (reason) {
|
|
2442
|
-
var _a, _b, _c, _d
|
|
2455
|
+
var _a, _b, _c, _d;
|
|
2443
2456
|
if (reason === void 0) { reason = 'User aborted'; }
|
|
2444
2457
|
if (this.abortController.signal.aborted) {
|
|
2445
2458
|
return; // Already aborted, prevent multiple abort calls
|
|
@@ -2450,7 +2463,8 @@
|
|
|
2450
2463
|
// 先检查流状态,避免在已关闭的流上调用 abort
|
|
2451
2464
|
if (this.stream && typeof this.stream.abort === 'function') {
|
|
2452
2465
|
// 检查流的状态,避免操作已关闭的流
|
|
2453
|
-
var streamState = this.stream.status ||
|
|
2466
|
+
var streamState = this.stream.status ||
|
|
2467
|
+
this.stream.state;
|
|
2454
2468
|
if (streamState !== 'closed' && streamState !== 'closing') {
|
|
2455
2469
|
this.stream.abort(new Error(reason));
|
|
2456
2470
|
}
|
|
@@ -2459,9 +2473,9 @@
|
|
|
2459
2473
|
catch (err) {
|
|
2460
2474
|
// Stream may already be closed, ignore all stream-related errors
|
|
2461
2475
|
// 完全忽略流操作错误,避免在错误处理中再次抛出错误
|
|
2462
|
-
var errMsg = (
|
|
2476
|
+
var errMsg = (err instanceof Error ? err.message : '').toLowerCase();
|
|
2463
2477
|
if (!errMsg.includes('closed') && !errMsg.includes('closing') && !errMsg.includes('write')) {
|
|
2464
|
-
(
|
|
2478
|
+
(_b = (_a = this.log) === null || _a === void 0 ? void 0 : _a.trace) === null || _b === void 0 ? void 0 : _b.call(_a, 'Stream abort error:', err);
|
|
2465
2479
|
}
|
|
2466
2480
|
}
|
|
2467
2481
|
this.cleanup();
|
|
@@ -2471,7 +2485,7 @@
|
|
|
2471
2485
|
}
|
|
2472
2486
|
catch (eventErr) {
|
|
2473
2487
|
// 忽略事件处理器错误
|
|
2474
|
-
(
|
|
2488
|
+
(_d = (_c = this.log) === null || _c === void 0 ? void 0 : _c.trace) === null || _d === void 0 ? void 0 : _d.call(_c, 'Error in abort event handler:', eventErr);
|
|
2475
2489
|
}
|
|
2476
2490
|
};
|
|
2477
2491
|
StreamWriter.prototype.cleanup = function () {
|
|
@@ -2481,13 +2495,13 @@
|
|
|
2481
2495
|
}
|
|
2482
2496
|
// 立即拒绝所有待处理的写入任务,避免它们继续执行
|
|
2483
2497
|
var pendingTasks = this.writeQueue.splice(0);
|
|
2484
|
-
pendingTasks.forEach(function (
|
|
2498
|
+
pendingTasks.forEach(function () {
|
|
2485
2499
|
// 这些任务的 Promise 会在执行时因为检查到 aborted 而被拒绝
|
|
2486
2500
|
});
|
|
2487
2501
|
try {
|
|
2488
2502
|
this.p.end();
|
|
2489
2503
|
}
|
|
2490
|
-
catch (
|
|
2504
|
+
catch (_a) {
|
|
2491
2505
|
// Ignore errors when ending pushable
|
|
2492
2506
|
}
|
|
2493
2507
|
if (this.watchdogTimer) {
|
|
@@ -2652,6 +2666,7 @@
|
|
|
2652
2666
|
}
|
|
2653
2667
|
return [4 /*yield*/, new Promise(function (resolve, reject) {
|
|
2654
2668
|
var settled = false;
|
|
2669
|
+
// eslint-disable-next-line prefer-const
|
|
2655
2670
|
var timeoutId;
|
|
2656
2671
|
var cleanup = function () {
|
|
2657
2672
|
var idx = state.waiters.indexOf(waiter);
|
|
@@ -2755,15 +2770,14 @@
|
|
|
2755
2770
|
return __awaiter(this, void 0, void 0, function () {
|
|
2756
2771
|
var key, pooled, conn, status_1, dialPromise;
|
|
2757
2772
|
var _this = this;
|
|
2758
|
-
|
|
2759
|
-
return __generator(this, function (_d) {
|
|
2773
|
+
return __generator(this, function (_a) {
|
|
2760
2774
|
key = this.peerAddr.toString();
|
|
2761
2775
|
if (!forceNew) {
|
|
2762
2776
|
pooled = this.connectionPool.get(key);
|
|
2763
2777
|
if (pooled) {
|
|
2764
2778
|
conn = pooled.connection;
|
|
2765
2779
|
if (conn) {
|
|
2766
|
-
status_1 =
|
|
2780
|
+
status_1 = conn.status;
|
|
2767
2781
|
if (!status_1 || status_1 === "open") {
|
|
2768
2782
|
return [2 /*return*/, conn];
|
|
2769
2783
|
}
|
|
@@ -2779,7 +2793,7 @@
|
|
|
2779
2793
|
signal: AbortSignal.timeout(dialTimeout),
|
|
2780
2794
|
})
|
|
2781
2795
|
.then(function (conn) { return __awaiter(_this, void 0, void 0, function () {
|
|
2782
|
-
var poolEntry, removeFromPool
|
|
2796
|
+
var poolEntry, removeFromPool;
|
|
2783
2797
|
var _this = this;
|
|
2784
2798
|
return __generator(this, function (_a) {
|
|
2785
2799
|
if (!forceNew) {
|
|
@@ -2793,17 +2807,9 @@
|
|
|
2793
2807
|
}
|
|
2794
2808
|
};
|
|
2795
2809
|
try {
|
|
2796
|
-
|
|
2797
|
-
if (typeof anyConn.addEventListener === "function") {
|
|
2798
|
-
anyConn.addEventListener("close", removeFromPool, {
|
|
2799
|
-
once: true,
|
|
2800
|
-
});
|
|
2801
|
-
}
|
|
2802
|
-
else if (typeof anyConn.once === "function") {
|
|
2803
|
-
anyConn.once("close", removeFromPool);
|
|
2804
|
-
}
|
|
2810
|
+
conn.addEventListener("close", removeFromPool, { once: true });
|
|
2805
2811
|
}
|
|
2806
|
-
catch (_b) { }
|
|
2812
|
+
catch ( /* ignore event listener registration errors */_b) { /* ignore event listener registration errors */ }
|
|
2807
2813
|
}
|
|
2808
2814
|
}
|
|
2809
2815
|
return [2 /*return*/, conn];
|
|
@@ -2841,12 +2847,11 @@
|
|
|
2841
2847
|
};
|
|
2842
2848
|
Libp2pGrpcClient.prototype.unaryCall = function (method_1, requestData_1) {
|
|
2843
2849
|
return __awaiter(this, arguments, void 0, function (method, requestData, timeout) {
|
|
2844
|
-
var stream, responseData, responseBuffer, responseDataExpectedLength, hpack, exitFlag, errMsg, isResponseComplete, connection, state, streamSlotAcquired, connectionKey_1, err_2, streamManager, streamId_1, writer_1,
|
|
2850
|
+
var stream, responseData, responseBuffer, responseDataExpectedLength, hpack, exitFlag, errMsg, isResponseComplete, connection, state, streamSlotAcquired, connectionKey_1, err_2, streamManager, streamId_1, writer_1, parser, preface, settingFrme, headerFrame, dataFrames, frameSendTimeout, _i, dataFrames_1, df, err_3;
|
|
2845
2851
|
var _this = this;
|
|
2846
|
-
var _b, _c;
|
|
2847
2852
|
if (timeout === void 0) { timeout = 30000; }
|
|
2848
|
-
return __generator(this, function (
|
|
2849
|
-
switch (
|
|
2853
|
+
return __generator(this, function (_b) {
|
|
2854
|
+
switch (_b.label) {
|
|
2850
2855
|
case 0:
|
|
2851
2856
|
stream = null;
|
|
2852
2857
|
responseData = null;
|
|
@@ -2859,26 +2864,26 @@
|
|
|
2859
2864
|
connection = null;
|
|
2860
2865
|
state = null;
|
|
2861
2866
|
streamSlotAcquired = false;
|
|
2862
|
-
|
|
2867
|
+
_b.label = 1;
|
|
2863
2868
|
case 1:
|
|
2864
|
-
|
|
2869
|
+
_b.trys.push([1, 23, 24, 27]);
|
|
2865
2870
|
return [4 /*yield*/, this.acquireConnection(false)];
|
|
2866
2871
|
case 2:
|
|
2867
2872
|
// const stream = await this.node.dialProtocol(this.peerAddr, this.protocol)
|
|
2868
|
-
connection =
|
|
2873
|
+
connection = _b.sent();
|
|
2869
2874
|
connectionKey_1 = this.peerAddr.toString();
|
|
2870
2875
|
state = this.getConnectionState(connection);
|
|
2871
|
-
|
|
2876
|
+
_b.label = 3;
|
|
2872
2877
|
case 3:
|
|
2873
|
-
|
|
2878
|
+
_b.trys.push([3, 5, , 6]);
|
|
2874
2879
|
return [4 /*yield*/, this.waitForStreamSlot(state, undefined, timeout)];
|
|
2875
2880
|
case 4:
|
|
2876
|
-
|
|
2881
|
+
_b.sent();
|
|
2877
2882
|
state.activeStreams += 1;
|
|
2878
2883
|
streamSlotAcquired = true;
|
|
2879
2884
|
return [3 /*break*/, 6];
|
|
2880
2885
|
case 5:
|
|
2881
|
-
err_2 =
|
|
2886
|
+
err_2 = _b.sent();
|
|
2882
2887
|
console.warn("[unaryCall] waiting for stream slot failed:", err_2);
|
|
2883
2888
|
throw err_2;
|
|
2884
2889
|
case 6: return [4 /*yield*/, connection.newStream(this.protocol, {
|
|
@@ -2886,25 +2891,25 @@
|
|
|
2886
2891
|
negotiateFully: false,
|
|
2887
2892
|
})];
|
|
2888
2893
|
case 7:
|
|
2889
|
-
stream =
|
|
2894
|
+
stream = _b.sent();
|
|
2890
2895
|
streamManager = this.getStreamManagerFor(connection);
|
|
2891
2896
|
return [4 /*yield*/, streamManager.getNextAppLevelStreamId()];
|
|
2892
2897
|
case 8:
|
|
2893
|
-
streamId_1 =
|
|
2898
|
+
streamId_1 = _b.sent();
|
|
2894
2899
|
writer_1 = new StreamWriter(stream, {
|
|
2895
2900
|
bufferSize: 16 * 1024 * 1024,
|
|
2896
2901
|
});
|
|
2897
2902
|
try {
|
|
2898
2903
|
writer_1.addEventListener("backpressure", function (e) {
|
|
2899
|
-
var d =
|
|
2904
|
+
var d = e.detail || {};
|
|
2900
2905
|
console.warn("[unary stream ".concat(streamId_1, "] backpressure current=").concat(d.currentSize, " avg=").concat(d.averageSize, " threshold=").concat(d.threshold));
|
|
2901
2906
|
});
|
|
2902
|
-
writer_1.addEventListener("drain", function (
|
|
2903
|
-
|
|
2907
|
+
writer_1.addEventListener("drain", function () {
|
|
2908
|
+
// drain event - no action needed
|
|
2904
2909
|
});
|
|
2905
2910
|
writer_1.addEventListener("stalled", function (e) {
|
|
2906
2911
|
var _a;
|
|
2907
|
-
var d =
|
|
2912
|
+
var d = e.detail || {};
|
|
2908
2913
|
console.warn("[unary stream ".concat(streamId_1, "] stalled queue=").concat(d.queueSize, " drained=").concat(d.drained, " since=").concat(d.sinceMs, "ms \u2014 sending PING"));
|
|
2909
2914
|
try {
|
|
2910
2915
|
var payload = new Uint8Array(8);
|
|
@@ -2912,13 +2917,12 @@
|
|
|
2912
2917
|
var ping = Http2Frame.createFrame(0x6, 0x0, 0, payload);
|
|
2913
2918
|
writer_1.write(ping);
|
|
2914
2919
|
}
|
|
2915
|
-
catch (_b) { }
|
|
2920
|
+
catch ( /* ignore ping write errors */_b) { /* ignore ping write errors */ }
|
|
2916
2921
|
});
|
|
2917
2922
|
}
|
|
2918
|
-
catch (
|
|
2919
|
-
|
|
2920
|
-
|
|
2921
|
-
var _a;
|
|
2923
|
+
catch ( /* ignore addEventListener errors */_c) { /* ignore addEventListener errors */ }
|
|
2924
|
+
parser = new HTTP2Parser(writer_1);
|
|
2925
|
+
parser.onGoaway = function (info) {
|
|
2922
2926
|
console.warn("[unaryCall] GOAWAY received from server", info);
|
|
2923
2927
|
_this.connectionPool.delete(connectionKey_1);
|
|
2924
2928
|
if (state) {
|
|
@@ -2927,13 +2931,13 @@
|
|
|
2927
2931
|
exitFlag = true;
|
|
2928
2932
|
errMsg = "GOAWAY received: code=".concat(info.errorCode);
|
|
2929
2933
|
try {
|
|
2930
|
-
|
|
2934
|
+
connection === null || connection === void 0 ? void 0 : connection.close();
|
|
2931
2935
|
}
|
|
2932
2936
|
catch (err) {
|
|
2933
2937
|
console.warn("Error closing connection after GOAWAY:", err);
|
|
2934
2938
|
}
|
|
2935
2939
|
};
|
|
2936
|
-
|
|
2940
|
+
parser.onSettingsParsed = function (settings) {
|
|
2937
2941
|
if (state &&
|
|
2938
2942
|
settings.maxConcurrentStreams !== undefined &&
|
|
2939
2943
|
settings.maxConcurrentStreams > 0) {
|
|
@@ -2941,10 +2945,10 @@
|
|
|
2941
2945
|
_this.notifyStreamSlotAvailable(state);
|
|
2942
2946
|
}
|
|
2943
2947
|
};
|
|
2944
|
-
|
|
2948
|
+
parser.registerOutboundStream(streamId_1);
|
|
2945
2949
|
responseDataExpectedLength = -1; // 重置期望长度
|
|
2946
2950
|
responseBuffer = []; // 重置缓冲区
|
|
2947
|
-
|
|
2951
|
+
parser.onData = function (payload, frameHeader) {
|
|
2948
2952
|
//接收数据
|
|
2949
2953
|
if (responseDataExpectedLength === -1) {
|
|
2950
2954
|
//grpc消息头部未读取
|
|
@@ -2952,7 +2956,6 @@
|
|
|
2952
2956
|
if (payload.length < 5) {
|
|
2953
2957
|
return;
|
|
2954
2958
|
}
|
|
2955
|
-
payload[0]; // 压缩标志
|
|
2956
2959
|
var lengthBytes = payload.slice(1, 5); // 消息长度的4字节
|
|
2957
2960
|
responseDataExpectedLength = new DataView(lengthBytes.buffer, lengthBytes.byteOffset).getUint32(0, false); // big-endian
|
|
2958
2961
|
if (responseDataExpectedLength < 0) {
|
|
@@ -3006,7 +3009,7 @@
|
|
|
3006
3009
|
isResponseComplete = true;
|
|
3007
3010
|
}
|
|
3008
3011
|
};
|
|
3009
|
-
|
|
3012
|
+
parser.onEnd = function () {
|
|
3010
3013
|
//接收结束
|
|
3011
3014
|
if (!isResponseComplete) {
|
|
3012
3015
|
isResponseComplete = true; // 设置响应完成标志
|
|
@@ -3027,12 +3030,12 @@
|
|
|
3027
3030
|
}
|
|
3028
3031
|
}
|
|
3029
3032
|
};
|
|
3030
|
-
|
|
3033
|
+
parser.onSettings = function () {
|
|
3031
3034
|
//接收settings,反馈ack
|
|
3032
3035
|
var ackSettingFrame = Http2Frame.createSettingsAckFrame();
|
|
3033
3036
|
writer_1.write(ackSettingFrame);
|
|
3034
3037
|
};
|
|
3035
|
-
|
|
3038
|
+
parser.onHeaders = function (headers) {
|
|
3036
3039
|
var plainHeaders = hpack.decodeHeaderFields(headers);
|
|
3037
3040
|
if (plainHeaders.get("grpc-status") === "0") ;
|
|
3038
3041
|
else if (plainHeaders.get("grpc-status") !== undefined) {
|
|
@@ -3041,7 +3044,7 @@
|
|
|
3041
3044
|
}
|
|
3042
3045
|
};
|
|
3043
3046
|
// 启动后台流处理,捕获任何异步错误
|
|
3044
|
-
|
|
3047
|
+
parser.processStream(stream).catch(function (error) {
|
|
3045
3048
|
console.error('Error in processStream:', error);
|
|
3046
3049
|
exitFlag = true;
|
|
3047
3050
|
if (!errMsg) {
|
|
@@ -3051,51 +3054,35 @@
|
|
|
3051
3054
|
preface = Http2Frame.createPreface();
|
|
3052
3055
|
return [4 /*yield*/, writer_1.write(preface)];
|
|
3053
3056
|
case 9:
|
|
3054
|
-
|
|
3057
|
+
_b.sent();
|
|
3055
3058
|
settingFrme = Http2Frame.createSettingsFrame();
|
|
3056
3059
|
return [4 /*yield*/, writer_1.write(settingFrme)];
|
|
3057
3060
|
case 10:
|
|
3058
|
-
|
|
3061
|
+
_b.sent();
|
|
3062
|
+
// 等待对端 SETTINGS 或 ACK,择一即可,避免偶发握手竞态
|
|
3059
3063
|
return [4 /*yield*/, Promise.race([
|
|
3060
|
-
(
|
|
3061
|
-
|
|
3062
|
-
switch (_a.label) {
|
|
3063
|
-
case 0: return [4 /*yield*/, parser_1.waitForPeerSettings(1000)];
|
|
3064
|
-
case 1:
|
|
3065
|
-
_a.sent();
|
|
3066
|
-
return [2 /*return*/];
|
|
3067
|
-
}
|
|
3068
|
-
});
|
|
3069
|
-
}); })(),
|
|
3070
|
-
(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
3071
|
-
return __generator(this, function (_a) {
|
|
3072
|
-
switch (_a.label) {
|
|
3073
|
-
case 0: return [4 /*yield*/, parser_1.waitForSettingsAck()];
|
|
3074
|
-
case 1:
|
|
3075
|
-
_a.sent();
|
|
3076
|
-
return [2 /*return*/];
|
|
3077
|
-
}
|
|
3078
|
-
});
|
|
3079
|
-
}); })(),
|
|
3064
|
+
parser.waitForPeerSettings(1000),
|
|
3065
|
+
parser.waitForSettingsAck(),
|
|
3080
3066
|
new Promise(function (res) { return setTimeout(res, 300); }),
|
|
3081
3067
|
])];
|
|
3082
3068
|
case 11:
|
|
3083
|
-
|
|
3069
|
+
// 等待对端 SETTINGS 或 ACK,择一即可,避免偶发握手竞态
|
|
3070
|
+
_b.sent();
|
|
3084
3071
|
headerFrame = Http2Frame.createHeadersFrame(streamId_1, method, true, this.token);
|
|
3085
3072
|
return [4 /*yield*/, writer_1.write(headerFrame)];
|
|
3086
3073
|
case 12:
|
|
3087
|
-
|
|
3074
|
+
_b.sent();
|
|
3088
3075
|
dataFrames = Http2Frame.createDataFrames(streamId_1, requestData, true);
|
|
3089
3076
|
frameSendTimeout = timeout > 0 ? timeout : DEFAULT_SEND_WINDOW_TIMEOUT;
|
|
3090
3077
|
_i = 0, dataFrames_1 = dataFrames;
|
|
3091
|
-
|
|
3078
|
+
_b.label = 13;
|
|
3092
3079
|
case 13:
|
|
3093
3080
|
if (!(_i < dataFrames_1.length)) return [3 /*break*/, 16];
|
|
3094
3081
|
df = dataFrames_1[_i];
|
|
3095
|
-
return [4 /*yield*/, this.sendFrameWithFlowControl(
|
|
3082
|
+
return [4 /*yield*/, this.sendFrameWithFlowControl(parser, streamId_1, df, writer_1, undefined, frameSendTimeout)];
|
|
3096
3083
|
case 14:
|
|
3097
|
-
|
|
3098
|
-
|
|
3084
|
+
_b.sent();
|
|
3085
|
+
_b.label = 15;
|
|
3099
3086
|
case 15:
|
|
3100
3087
|
_i++;
|
|
3101
3088
|
return [3 /*break*/, 13];
|
|
@@ -3119,31 +3106,31 @@
|
|
|
3119
3106
|
})];
|
|
3120
3107
|
case 17:
|
|
3121
3108
|
// 等待responseData 不为空,或超时
|
|
3122
|
-
|
|
3123
|
-
|
|
3109
|
+
_b.sent();
|
|
3110
|
+
_b.label = 18;
|
|
3124
3111
|
case 18:
|
|
3125
|
-
|
|
3126
|
-
return [4 /*yield*/,
|
|
3112
|
+
_b.trys.push([18, 20, , 21]);
|
|
3113
|
+
return [4 /*yield*/, writer_1.flush(timeout)];
|
|
3127
3114
|
case 19:
|
|
3128
|
-
|
|
3115
|
+
_b.sent();
|
|
3129
3116
|
return [3 /*break*/, 21];
|
|
3130
3117
|
case 20:
|
|
3131
|
-
|
|
3118
|
+
_b.sent();
|
|
3132
3119
|
return [3 /*break*/, 21];
|
|
3133
3120
|
case 21: return [4 /*yield*/, writer_1.end()];
|
|
3134
3121
|
case 22:
|
|
3135
|
-
|
|
3122
|
+
_b.sent();
|
|
3136
3123
|
return [3 /*break*/, 27];
|
|
3137
3124
|
case 23:
|
|
3138
|
-
err_3 =
|
|
3125
|
+
err_3 = _b.sent();
|
|
3139
3126
|
console.error("unaryCall error:", err_3);
|
|
3140
3127
|
throw err_3;
|
|
3141
3128
|
case 24:
|
|
3142
3129
|
if (!stream) return [3 /*break*/, 26];
|
|
3143
3130
|
return [4 /*yield*/, stream.close()];
|
|
3144
3131
|
case 25:
|
|
3145
|
-
|
|
3146
|
-
|
|
3132
|
+
_b.sent();
|
|
3133
|
+
_b.label = 26;
|
|
3147
3134
|
case 26:
|
|
3148
3135
|
if (streamSlotAcquired && state) {
|
|
3149
3136
|
state.activeStreams = Math.max(0, state.activeStreams - 1);
|
|
@@ -3225,12 +3212,12 @@
|
|
|
3225
3212
|
}, timeout);
|
|
3226
3213
|
});
|
|
3227
3214
|
operationPromise = (function () { return __awaiter(_this, void 0, void 0, function () {
|
|
3228
|
-
var messageBuffer, expectedMessageLength, hpack, connection, connectionKey, state, streamSlotAcquired, err_4, err_5, streamManager, streamId_2, writer_2,
|
|
3215
|
+
var messageBuffer, expectedMessageLength, hpack, connection, connectionKey, state, streamSlotAcquired, err_4, err_5, streamManager, streamId_2, writer_2, parser_1, sendWindowTimeout_1, writeFrame_1, writeDataFrames_1, preface, settingFrame, headerFrame, dfs, dfs0, batchSize_1, processingQueue_1, isProcessing_1, processNextBatch_1, addToQueue_1, _a, _b, _c, chunkOrChunks, chunksToProcess, addPromises, e_1_1, error_2, remainingQueue, queueWaitStart, maxQueueWaitMs, remainingQueue, finalFrame, err_6, err_7, conns, _i, conns_1, c;
|
|
3229
3216
|
var _this = this;
|
|
3230
3217
|
var _g, e_1, _h, _j;
|
|
3231
|
-
var _k, _l, _m
|
|
3232
|
-
return __generator(this, function (
|
|
3233
|
-
switch (
|
|
3218
|
+
var _k, _l, _m;
|
|
3219
|
+
return __generator(this, function (_o) {
|
|
3220
|
+
switch (_o.label) {
|
|
3234
3221
|
case 0:
|
|
3235
3222
|
messageBuffer = new Uint8Array(0);
|
|
3236
3223
|
expectedMessageLength = -1;
|
|
@@ -3239,44 +3226,44 @@
|
|
|
3239
3226
|
connectionKey = null;
|
|
3240
3227
|
state = null;
|
|
3241
3228
|
streamSlotAcquired = false;
|
|
3242
|
-
|
|
3229
|
+
_o.label = 1;
|
|
3243
3230
|
case 1:
|
|
3244
|
-
|
|
3231
|
+
_o.trys.push([1, 49, 50, 64]);
|
|
3245
3232
|
// 检查是否已经中止
|
|
3246
3233
|
if (internalController.signal.aborted) {
|
|
3247
3234
|
throw new Error("Operation aborted");
|
|
3248
3235
|
}
|
|
3249
3236
|
if (!(options === null || options === void 0 ? void 0 : options.freshConnection)) return [3 /*break*/, 5];
|
|
3250
|
-
|
|
3237
|
+
_o.label = 2;
|
|
3251
3238
|
case 2:
|
|
3252
|
-
|
|
3239
|
+
_o.trys.push([2, 4, , 5]);
|
|
3253
3240
|
this.connectionPool.delete(this.peerAddr.toString());
|
|
3254
|
-
return [4 /*yield*/,
|
|
3241
|
+
return [4 /*yield*/, this.node.hangUp(this.peerAddr)];
|
|
3255
3242
|
case 3:
|
|
3256
|
-
|
|
3243
|
+
_o.sent();
|
|
3257
3244
|
console.warn("[Call] hangUp existing connection before dialing due to freshConnection=true");
|
|
3258
3245
|
return [3 /*break*/, 5];
|
|
3259
3246
|
case 4:
|
|
3260
|
-
err_4 =
|
|
3247
|
+
err_4 = _o.sent();
|
|
3261
3248
|
console.warn("[Call] hangUp failed or not supported, proceeding to dial", err_4);
|
|
3262
3249
|
return [3 /*break*/, 5];
|
|
3263
3250
|
case 5: return [4 /*yield*/, this.acquireConnection(Boolean(options === null || options === void 0 ? void 0 : options.freshConnection))];
|
|
3264
3251
|
case 6:
|
|
3265
|
-
connection =
|
|
3252
|
+
connection = _o.sent();
|
|
3266
3253
|
connectionKey = this.peerAddr.toString();
|
|
3267
3254
|
state = this.getConnectionState(connection);
|
|
3268
3255
|
if (!state) return [3 /*break*/, 10];
|
|
3269
|
-
|
|
3256
|
+
_o.label = 7;
|
|
3270
3257
|
case 7:
|
|
3271
|
-
|
|
3258
|
+
_o.trys.push([7, 9, , 10]);
|
|
3272
3259
|
return [4 /*yield*/, this.waitForStreamSlot(state, internalController.signal, timeout)];
|
|
3273
3260
|
case 8:
|
|
3274
|
-
|
|
3261
|
+
_o.sent();
|
|
3275
3262
|
state.activeStreams += 1;
|
|
3276
3263
|
streamSlotAcquired = true;
|
|
3277
3264
|
return [3 /*break*/, 10];
|
|
3278
3265
|
case 9:
|
|
3279
|
-
err_5 =
|
|
3266
|
+
err_5 = _o.sent();
|
|
3280
3267
|
console.warn("[Call] waiting for stream slot failed:", err_5);
|
|
3281
3268
|
throw err_5;
|
|
3282
3269
|
case 10: return [4 /*yield*/, connection.newStream(this.protocol, {
|
|
@@ -3285,25 +3272,25 @@
|
|
|
3285
3272
|
negotiateFully: false,
|
|
3286
3273
|
})];
|
|
3287
3274
|
case 11:
|
|
3288
|
-
stream =
|
|
3275
|
+
stream = _o.sent();
|
|
3289
3276
|
streamManager = this.getStreamManagerFor(connection);
|
|
3290
3277
|
return [4 /*yield*/, streamManager.getNextAppLevelStreamId()];
|
|
3291
3278
|
case 12:
|
|
3292
|
-
streamId_2 =
|
|
3279
|
+
streamId_2 = _o.sent();
|
|
3293
3280
|
writer_2 = new StreamWriter(stream, {
|
|
3294
3281
|
bufferSize: 16 * 1024 * 1024,
|
|
3295
3282
|
});
|
|
3296
3283
|
try {
|
|
3297
3284
|
writer_2.addEventListener("backpressure", function (e) {
|
|
3298
|
-
var d =
|
|
3285
|
+
var d = e.detail || {};
|
|
3299
3286
|
console.warn("[stream ".concat(streamId_2, "] backpressure current=").concat(d.currentSize, " avg=").concat(d.averageSize, " threshold=").concat(d.threshold));
|
|
3300
3287
|
});
|
|
3301
|
-
writer_2.addEventListener("drain", function (
|
|
3302
|
-
|
|
3288
|
+
writer_2.addEventListener("drain", function () {
|
|
3289
|
+
// drain event - no action needed
|
|
3303
3290
|
});
|
|
3304
3291
|
writer_2.addEventListener("stalled", function (e) {
|
|
3305
3292
|
var _a;
|
|
3306
|
-
var d =
|
|
3293
|
+
var d = e.detail || {};
|
|
3307
3294
|
console.warn("[stream ".concat(streamId_2, "] stalled queue=").concat(d.queueSize, " drained=").concat(d.drained, " since=").concat(d.sinceMs, "ms \u2014 sending PING"));
|
|
3308
3295
|
try {
|
|
3309
3296
|
var payload = new Uint8Array(8);
|
|
@@ -3311,15 +3298,14 @@
|
|
|
3311
3298
|
var ping = Http2Frame.createFrame(0x6, 0x0, 0, payload);
|
|
3312
3299
|
writer_2.write(ping);
|
|
3313
3300
|
}
|
|
3314
|
-
catch ( /*
|
|
3301
|
+
catch ( /* ignore ping write errors */_b) { /* ignore ping write errors */ }
|
|
3315
3302
|
});
|
|
3316
3303
|
}
|
|
3317
|
-
catch ( /*
|
|
3318
|
-
|
|
3304
|
+
catch ( /* ignore addEventListener errors */_p) { /* ignore addEventListener errors */ }
|
|
3305
|
+
parser_1 = new HTTP2Parser(writer_2, {
|
|
3319
3306
|
compatibilityMode: !useFlowControl,
|
|
3320
3307
|
});
|
|
3321
|
-
|
|
3322
|
-
var _a;
|
|
3308
|
+
parser_1.onGoaway = function (info) {
|
|
3323
3309
|
console.warn("[Call] GOAWAY received from server", info);
|
|
3324
3310
|
if (connectionKey) {
|
|
3325
3311
|
_this.connectionPool.delete(connectionKey);
|
|
@@ -3332,13 +3318,13 @@
|
|
|
3332
3318
|
}
|
|
3333
3319
|
internalController.abort();
|
|
3334
3320
|
try {
|
|
3335
|
-
|
|
3321
|
+
connection === null || connection === void 0 ? void 0 : connection.close();
|
|
3336
3322
|
}
|
|
3337
3323
|
catch (err) {
|
|
3338
3324
|
console.warn("Error closing connection after GOAWAY:", err);
|
|
3339
3325
|
}
|
|
3340
3326
|
};
|
|
3341
|
-
|
|
3327
|
+
parser_1.onSettingsParsed = function (settings) {
|
|
3342
3328
|
if (state &&
|
|
3343
3329
|
settings.maxConcurrentStreams !== undefined &&
|
|
3344
3330
|
settings.maxConcurrentStreams > 0) {
|
|
@@ -3347,7 +3333,7 @@
|
|
|
3347
3333
|
}
|
|
3348
3334
|
};
|
|
3349
3335
|
if (useFlowControl) {
|
|
3350
|
-
|
|
3336
|
+
parser_1.registerOutboundStream(streamId_2);
|
|
3351
3337
|
}
|
|
3352
3338
|
sendWindowTimeout_1 = timeout > 0 ? timeout : DEFAULT_SEND_WINDOW_TIMEOUT;
|
|
3353
3339
|
writeFrame_1 = function (frame) { return __awaiter(_this, void 0, void 0, function () {
|
|
@@ -3355,7 +3341,7 @@
|
|
|
3355
3341
|
switch (_a.label) {
|
|
3356
3342
|
case 0:
|
|
3357
3343
|
if (!useFlowControl) return [3 /*break*/, 2];
|
|
3358
|
-
return [4 /*yield*/, this.sendFrameWithFlowControl(
|
|
3344
|
+
return [4 /*yield*/, this.sendFrameWithFlowControl(parser_1, streamId_2, frame, writer_2, internalController.signal, sendWindowTimeout_1)];
|
|
3359
3345
|
case 1:
|
|
3360
3346
|
_a.sent();
|
|
3361
3347
|
return [3 /*break*/, 4];
|
|
@@ -3393,8 +3379,8 @@
|
|
|
3393
3379
|
});
|
|
3394
3380
|
}); };
|
|
3395
3381
|
// 在各个回调中检查是否已中止
|
|
3396
|
-
|
|
3397
|
-
var newBuffer,
|
|
3382
|
+
parser_1.onData = function (payload) { return __awaiter(_this, void 0, void 0, function () {
|
|
3383
|
+
var newBuffer, lengthBytes, completeMessage;
|
|
3398
3384
|
return __generator(this, function (_a) {
|
|
3399
3385
|
// 检查是否已中止
|
|
3400
3386
|
if (internalController.signal.aborted) {
|
|
@@ -3413,7 +3399,6 @@
|
|
|
3413
3399
|
}
|
|
3414
3400
|
// 如果还没有读取消息长度,且缓冲区有足够数据
|
|
3415
3401
|
if (expectedMessageLength === -1 && messageBuffer.length >= 5) {
|
|
3416
|
-
compressionFlag = messageBuffer[0];
|
|
3417
3402
|
lengthBytes = messageBuffer.slice(1, 5);
|
|
3418
3403
|
expectedMessageLength = new DataView(lengthBytes.buffer, lengthBytes.byteOffset).getUint32(0, false); // big-endian
|
|
3419
3404
|
}
|
|
@@ -3444,14 +3429,14 @@
|
|
|
3444
3429
|
return [2 /*return*/];
|
|
3445
3430
|
});
|
|
3446
3431
|
}); };
|
|
3447
|
-
|
|
3432
|
+
parser_1.onSettings = function () {
|
|
3448
3433
|
// 检查是否已中止
|
|
3449
3434
|
if (internalController.signal.aborted)
|
|
3450
3435
|
return;
|
|
3451
3436
|
var ackSettingFrame = Http2Frame.createSettingsAckFrame();
|
|
3452
3437
|
writer_2.write(ackSettingFrame);
|
|
3453
3438
|
};
|
|
3454
|
-
|
|
3439
|
+
parser_1.onHeaders = function (headers) {
|
|
3455
3440
|
// 检查是否已中止
|
|
3456
3441
|
if (internalController.signal.aborted)
|
|
3457
3442
|
return;
|
|
@@ -3469,7 +3454,7 @@
|
|
|
3469
3454
|
}
|
|
3470
3455
|
};
|
|
3471
3456
|
// 启动后台流处理
|
|
3472
|
-
|
|
3457
|
+
parser_1.processStream(stream).catch(function (error) {
|
|
3473
3458
|
console.error('Error in processStream:', error);
|
|
3474
3459
|
if (onErrorCallback) {
|
|
3475
3460
|
onErrorCallback(error);
|
|
@@ -3482,7 +3467,7 @@
|
|
|
3482
3467
|
preface = Http2Frame.createPreface();
|
|
3483
3468
|
return [4 /*yield*/, writer_2.write(preface)];
|
|
3484
3469
|
case 13:
|
|
3485
|
-
|
|
3470
|
+
_o.sent();
|
|
3486
3471
|
// 检查是否已中止
|
|
3487
3472
|
if (internalController.signal.aborted) {
|
|
3488
3473
|
throw new Error("Operation aborted");
|
|
@@ -3490,36 +3475,18 @@
|
|
|
3490
3475
|
settingFrame = Http2Frame.createSettingsFrame();
|
|
3491
3476
|
return [4 /*yield*/, writer_2.write(settingFrame)];
|
|
3492
3477
|
case 14:
|
|
3493
|
-
|
|
3478
|
+
_o.sent();
|
|
3494
3479
|
// 检查是否已中止
|
|
3495
3480
|
if (internalController.signal.aborted) {
|
|
3496
3481
|
throw new Error("Operation aborted");
|
|
3497
3482
|
}
|
|
3498
3483
|
return [4 /*yield*/, Promise.race([
|
|
3499
|
-
(
|
|
3500
|
-
|
|
3501
|
-
switch (_a.label) {
|
|
3502
|
-
case 0: return [4 /*yield*/, parser_2.waitForPeerSettings(1000)];
|
|
3503
|
-
case 1:
|
|
3504
|
-
_a.sent();
|
|
3505
|
-
return [2 /*return*/];
|
|
3506
|
-
}
|
|
3507
|
-
});
|
|
3508
|
-
}); })(),
|
|
3509
|
-
(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
3510
|
-
return __generator(this, function (_a) {
|
|
3511
|
-
switch (_a.label) {
|
|
3512
|
-
case 0: return [4 /*yield*/, parser_2.waitForSettingsAck()];
|
|
3513
|
-
case 1:
|
|
3514
|
-
_a.sent();
|
|
3515
|
-
return [2 /*return*/];
|
|
3516
|
-
}
|
|
3517
|
-
});
|
|
3518
|
-
}); })(),
|
|
3484
|
+
parser_1.waitForPeerSettings(1000),
|
|
3485
|
+
parser_1.waitForSettingsAck(),
|
|
3519
3486
|
new Promise(function (res) { return setTimeout(res, 300); }),
|
|
3520
3487
|
])];
|
|
3521
3488
|
case 15:
|
|
3522
|
-
|
|
3489
|
+
_o.sent();
|
|
3523
3490
|
// 检查是否已中止
|
|
3524
3491
|
if (internalController.signal.aborted) {
|
|
3525
3492
|
throw new Error("Operation aborted");
|
|
@@ -3532,11 +3499,11 @@
|
|
|
3532
3499
|
if (!(mode === "unary" || mode === "server-streaming")) return [3 /*break*/, 18];
|
|
3533
3500
|
return [4 /*yield*/, writer_2.write(headerFrame)];
|
|
3534
3501
|
case 16:
|
|
3535
|
-
|
|
3502
|
+
_o.sent();
|
|
3536
3503
|
dfs = Http2Frame.createDataFrames(streamId_2, requestData, true);
|
|
3537
3504
|
return [4 /*yield*/, writeDataFrames_1(dfs)];
|
|
3538
3505
|
case 17:
|
|
3539
|
-
|
|
3506
|
+
_o.sent();
|
|
3540
3507
|
// 检查是否已中止
|
|
3541
3508
|
if (internalController.signal.aborted) {
|
|
3542
3509
|
throw new Error("Operation aborted");
|
|
@@ -3547,7 +3514,7 @@
|
|
|
3547
3514
|
dataSourceCallback)) return [3 /*break*/, 47];
|
|
3548
3515
|
return [4 /*yield*/, writer_2.write(headerFrame)];
|
|
3549
3516
|
case 19:
|
|
3550
|
-
|
|
3517
|
+
_o.sent();
|
|
3551
3518
|
// 检查是否已中止
|
|
3552
3519
|
if (internalController.signal.aborted) {
|
|
3553
3520
|
throw new Error("Operation aborted");
|
|
@@ -3556,11 +3523,10 @@
|
|
|
3556
3523
|
dfs0 = Http2Frame.createDataFrames(streamId_2, requestData, false);
|
|
3557
3524
|
return [4 /*yield*/, writeDataFrames_1(dfs0)];
|
|
3558
3525
|
case 20:
|
|
3559
|
-
|
|
3560
|
-
|
|
3526
|
+
_o.sent();
|
|
3527
|
+
_o.label = 21;
|
|
3561
3528
|
case 21:
|
|
3562
3529
|
batchSize_1 = (options === null || options === void 0 ? void 0 : options.batchSize) || 10;
|
|
3563
|
-
(options === null || options === void 0 ? void 0 : options.maxBatchWaitMs) || 50;
|
|
3564
3530
|
processingQueue_1 = [];
|
|
3565
3531
|
isProcessing_1 = false;
|
|
3566
3532
|
processNextBatch_1 = function () { return __awaiter(_this, void 0, void 0, function () {
|
|
@@ -3649,17 +3615,17 @@
|
|
|
3649
3615
|
}
|
|
3650
3616
|
});
|
|
3651
3617
|
};
|
|
3652
|
-
|
|
3618
|
+
_o.label = 22;
|
|
3653
3619
|
case 22:
|
|
3654
|
-
|
|
3655
|
-
|
|
3620
|
+
_o.trys.push([22, 36, , 37]);
|
|
3621
|
+
_o.label = 23;
|
|
3656
3622
|
case 23:
|
|
3657
|
-
|
|
3623
|
+
_o.trys.push([23, 29, 30, 35]);
|
|
3658
3624
|
_a = true, _b = __asyncValues(dataSourceCallback());
|
|
3659
|
-
|
|
3625
|
+
_o.label = 24;
|
|
3660
3626
|
case 24: return [4 /*yield*/, _b.next()];
|
|
3661
3627
|
case 25:
|
|
3662
|
-
if (!(_c =
|
|
3628
|
+
if (!(_c = _o.sent(), _g = _c.done, !_g)) return [3 /*break*/, 28];
|
|
3663
3629
|
_j = _c.value;
|
|
3664
3630
|
_a = false;
|
|
3665
3631
|
chunkOrChunks = _j;
|
|
@@ -3677,23 +3643,23 @@
|
|
|
3677
3643
|
return [4 /*yield*/, Promise.all(addPromises)];
|
|
3678
3644
|
case 26:
|
|
3679
3645
|
// 等待当前批次的chunks被添加到队列(不等待处理完成)
|
|
3680
|
-
|
|
3681
|
-
|
|
3646
|
+
_o.sent();
|
|
3647
|
+
_o.label = 27;
|
|
3682
3648
|
case 27:
|
|
3683
3649
|
_a = true;
|
|
3684
3650
|
return [3 /*break*/, 24];
|
|
3685
3651
|
case 28: return [3 /*break*/, 35];
|
|
3686
3652
|
case 29:
|
|
3687
|
-
e_1_1 =
|
|
3653
|
+
e_1_1 = _o.sent();
|
|
3688
3654
|
e_1 = { error: e_1_1 };
|
|
3689
3655
|
return [3 /*break*/, 35];
|
|
3690
3656
|
case 30:
|
|
3691
|
-
|
|
3657
|
+
_o.trys.push([30, , 33, 34]);
|
|
3692
3658
|
if (!(!_a && !_g && (_h = _b.return))) return [3 /*break*/, 32];
|
|
3693
3659
|
return [4 /*yield*/, _h.call(_b)];
|
|
3694
3660
|
case 31:
|
|
3695
|
-
|
|
3696
|
-
|
|
3661
|
+
_o.sent();
|
|
3662
|
+
_o.label = 32;
|
|
3697
3663
|
case 32: return [3 /*break*/, 34];
|
|
3698
3664
|
case 33:
|
|
3699
3665
|
if (e_1) throw e_1.error;
|
|
@@ -3701,7 +3667,7 @@
|
|
|
3701
3667
|
case 34: return [7 /*endfinally*/];
|
|
3702
3668
|
case 35: return [3 /*break*/, 37];
|
|
3703
3669
|
case 36:
|
|
3704
|
-
error_2 =
|
|
3670
|
+
error_2 = _o.sent();
|
|
3705
3671
|
remainingQueue = processingQueue_1.splice(0);
|
|
3706
3672
|
remainingQueue.forEach(function (item) {
|
|
3707
3673
|
try {
|
|
@@ -3715,7 +3681,7 @@
|
|
|
3715
3681
|
case 37:
|
|
3716
3682
|
queueWaitStart = Date.now();
|
|
3717
3683
|
maxQueueWaitMs = timeout;
|
|
3718
|
-
|
|
3684
|
+
_o.label = 38;
|
|
3719
3685
|
case 38:
|
|
3720
3686
|
if (!(processingQueue_1.length > 0 || isProcessing_1)) return [3 /*break*/, 40];
|
|
3721
3687
|
if (internalController.signal.aborted) {
|
|
@@ -3736,7 +3702,7 @@
|
|
|
3736
3702
|
}
|
|
3737
3703
|
return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 10); })];
|
|
3738
3704
|
case 39:
|
|
3739
|
-
|
|
3705
|
+
_o.sent();
|
|
3740
3706
|
return [3 /*break*/, 38];
|
|
3741
3707
|
case 40:
|
|
3742
3708
|
// 检查是否已中止
|
|
@@ -3746,35 +3712,35 @@
|
|
|
3746
3712
|
finalFrame = Http2Frame.createDataFrame(streamId_2, new Uint8Array(), true);
|
|
3747
3713
|
return [4 /*yield*/, writeFrame_1(finalFrame)];
|
|
3748
3714
|
case 41:
|
|
3749
|
-
|
|
3750
|
-
|
|
3715
|
+
_o.sent();
|
|
3716
|
+
_o.label = 42;
|
|
3751
3717
|
case 42:
|
|
3752
|
-
|
|
3753
|
-
return [4 /*yield*/,
|
|
3718
|
+
_o.trys.push([42, 44, , 45]);
|
|
3719
|
+
return [4 /*yield*/, writer_2.flush(timeout)];
|
|
3754
3720
|
case 43:
|
|
3755
|
-
|
|
3721
|
+
_o.sent();
|
|
3756
3722
|
return [3 /*break*/, 45];
|
|
3757
3723
|
case 44:
|
|
3758
|
-
|
|
3724
|
+
_o.sent();
|
|
3759
3725
|
return [3 /*break*/, 45];
|
|
3760
3726
|
case 45: return [4 /*yield*/, writer_2.end()];
|
|
3761
3727
|
case 46:
|
|
3762
|
-
|
|
3763
|
-
|
|
3728
|
+
_o.sent();
|
|
3729
|
+
_o.label = 47;
|
|
3764
3730
|
case 47:
|
|
3765
3731
|
// 检查是否已中止
|
|
3766
3732
|
if (internalController.signal.aborted) {
|
|
3767
3733
|
throw new Error("Operation aborted");
|
|
3768
3734
|
}
|
|
3769
|
-
return [4 /*yield*/,
|
|
3735
|
+
return [4 /*yield*/, parser_1.waitForEndOfStream(0)];
|
|
3770
3736
|
case 48:
|
|
3771
|
-
|
|
3737
|
+
_o.sent();
|
|
3772
3738
|
if (onEndCallback) {
|
|
3773
3739
|
onEndCallback();
|
|
3774
3740
|
}
|
|
3775
3741
|
return [3 /*break*/, 64];
|
|
3776
3742
|
case 49:
|
|
3777
|
-
err_6 =
|
|
3743
|
+
err_6 = _o.sent();
|
|
3778
3744
|
// 如果是由于取消导致的错误,使用特定的错误消息
|
|
3779
3745
|
if (internalController.signal.aborted &&
|
|
3780
3746
|
err_6 instanceof Error &&
|
|
@@ -3798,44 +3764,44 @@
|
|
|
3798
3764
|
case 50:
|
|
3799
3765
|
clearTimeout(timeoutHandle);
|
|
3800
3766
|
if (!stream) return [3 /*break*/, 54];
|
|
3801
|
-
|
|
3767
|
+
_o.label = 51;
|
|
3802
3768
|
case 51:
|
|
3803
|
-
|
|
3769
|
+
_o.trys.push([51, 53, , 54]);
|
|
3804
3770
|
return [4 /*yield*/, stream.close()];
|
|
3805
3771
|
case 52:
|
|
3806
|
-
|
|
3772
|
+
_o.sent();
|
|
3807
3773
|
return [3 /*break*/, 54];
|
|
3808
3774
|
case 53:
|
|
3809
|
-
err_7 =
|
|
3775
|
+
err_7 = _o.sent();
|
|
3810
3776
|
console.error("Error closing stream:", err_7);
|
|
3811
3777
|
return [3 /*break*/, 54];
|
|
3812
3778
|
case 54:
|
|
3813
3779
|
if (!(options === null || options === void 0 ? void 0 : options.freshConnection)) return [3 /*break*/, 63];
|
|
3814
|
-
|
|
3780
|
+
_o.label = 55;
|
|
3815
3781
|
case 55:
|
|
3816
|
-
|
|
3817
|
-
conns = ((
|
|
3782
|
+
_o.trys.push([55, 62, , 63]);
|
|
3783
|
+
conns = ((_l = (_k = this.node).getConnections) === null || _l === void 0 ? void 0 : _l.call(_k, this.peerAddr)) || [];
|
|
3818
3784
|
_i = 0, conns_1 = conns;
|
|
3819
|
-
|
|
3785
|
+
_o.label = 56;
|
|
3820
3786
|
case 56:
|
|
3821
3787
|
if (!(_i < conns_1.length)) return [3 /*break*/, 61];
|
|
3822
3788
|
c = conns_1[_i];
|
|
3823
|
-
|
|
3789
|
+
_o.label = 57;
|
|
3824
3790
|
case 57:
|
|
3825
|
-
|
|
3826
|
-
return [4 /*yield*/, ((
|
|
3791
|
+
_o.trys.push([57, 59, , 60]);
|
|
3792
|
+
return [4 /*yield*/, ((_m = c.close) === null || _m === void 0 ? void 0 : _m.call(c))];
|
|
3827
3793
|
case 58:
|
|
3828
|
-
|
|
3794
|
+
_o.sent();
|
|
3829
3795
|
return [3 /*break*/, 60];
|
|
3830
3796
|
case 59:
|
|
3831
|
-
|
|
3797
|
+
_o.sent();
|
|
3832
3798
|
return [3 /*break*/, 60];
|
|
3833
3799
|
case 60:
|
|
3834
3800
|
_i++;
|
|
3835
3801
|
return [3 /*break*/, 56];
|
|
3836
3802
|
case 61: return [3 /*break*/, 63];
|
|
3837
3803
|
case 62:
|
|
3838
|
-
|
|
3804
|
+
_o.sent();
|
|
3839
3805
|
return [3 /*break*/, 63];
|
|
3840
3806
|
case 63:
|
|
3841
3807
|
if (streamSlotAcquired && state) {
|