grpc-libp2p-client 0.0.37 → 0.0.39

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/grpc.js CHANGED
@@ -575,7 +575,7 @@
575
575
  try {
576
576
  result = this.decode(bytes);
577
577
  }
578
- catch (e) {
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 (e) {
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 payloadLength = frame.payload.length * 6;
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, frame.payload);
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 = chunk.subarray ? chunk.subarray() : new Uint8Array(chunk);
1043
- // 累积数据到buffer
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
- while (this.buffer.length >= 9) {
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
- this.buffer = this.buffer.slice(24);
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
- break;
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.slice(0, totalFrameLength);
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
- this.buffer = this.buffer.slice(totalFrameLength);
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
- var PREFACE = new TextEncoder().encode("PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n");
1076
- if (buffer.length < PREFACE.length)
1083
+ if (buffer.length < HTTP2_PREFACE.length)
1077
1084
  return false;
1078
- for (var i = 0; i < PREFACE.length; i++) {
1079
- if (buffer[i] !== PREFACE[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 (_a) { } });
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, frameHeader.streamId);
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 (_a) { } });
1357
+ catch (e) {
1358
+ console.debug('waiter error', e);
1359
+ } });
1349
1360
  }
1350
- catch (e) { }
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 (_g) { }
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, streamId) {
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, _l;
1980
- return __generator(this, function (_m) {
1981
- switch (_m.label) {
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
- _m.label = 1;
1999
+ _l.label = 1;
1989
2000
  case 1:
1990
- _m.trys.push([1, 10, 11, 16]);
2001
+ _l.trys.push([1, 10, 11, 16]);
1991
2002
  _a = true, _b = __asyncValues(this.createTransform()(this.p));
1992
- _m.label = 2;
2003
+ _l.label = 2;
1993
2004
  case 2: return [4 /*yield*/, _b.next()];
1994
2005
  case 3:
1995
- if (!(_c = _m.sent(), _d = _c.done, !_d)) return [3 /*break*/, 9];
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
- _m.label = 4;
2014
+ _l.label = 4;
2004
2015
  case 4:
2005
- _m.trys.push([4, 7, , 8]);
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
- _m.sent();
2013
- _m.label = 6;
2023
+ _l.sent();
2024
+ _l.label = 6;
2014
2025
  case 6: return [3 /*break*/, 8];
2015
2026
  case 7:
2016
- err_1 = _m.sent();
2017
- errMsg = ((_j = err_1.message) === null || _j === void 0 ? void 0 : _j.toLowerCase()) || '';
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
- (_l = (_k = this.log) === null || _k === void 0 ? void 0 : _k.trace) === null || _l === void 0 ? void 0 : _l.call(_k, 'Stream is closing/closed, stopping pipeline');
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 = _m.sent();
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
- _m.trys.push([11, , 14, 15]);
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
- _m.sent();
2040
- _m.label = 13;
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
- var _e;
2058
- return __generator(this, function (_f) {
2059
- switch (_f.label) {
2069
+ return __generator(this, function (_e) {
2070
+ switch (_e.label) {
2060
2071
  case 0:
2061
- _f.trys.push([0, 7, 8, 13]);
2072
+ _e.trys.push([0, 7, 8, 13]);
2062
2073
  _a = true, source_1 = __asyncValues(source);
2063
- _f.label = 1;
2074
+ _e.label = 1;
2064
2075
  case 1: return [4 /*yield*/, __await(source_1.next())];
2065
2076
  case 2:
2066
- if (!(source_1_1 = _f.sent(), _b = source_1_1.done, !_b)) return [3 /*break*/, 6];
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*/, _f.sent()];
2087
+ return [4 /*yield*/, _e.sent()];
2077
2088
  case 4:
2078
2089
  // 将数据交给下游
2079
- _f.sent();
2090
+ _e.sent();
2080
2091
  // 注意:在 async generator 中,yield 返回后到下一次循环之间,表示下游已经“取走并处理了这个 chunk”,
2081
2092
  // 因此这里统计的 bytesDrained 更接近实际被 sink 消费的字节数
2082
2093
  try {
2083
2094
  // 在下游消费后再扣减待消费队列,避免误判“next 没取”
2084
- if (((_e = self.p) === null || _e === void 0 ? void 0 : _e._queueSize) != null) {
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
- _f.label = 5;
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 = _f.sent();
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
- _f.trys.push([8, , 11, 12]);
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
- _f.sent();
2115
- _f.label = 10;
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;
@@ -2125,13 +2136,14 @@
2125
2136
  };
2126
2137
  };
2127
2138
  // 简单的卡顿看门狗:当队列长期高位且 bytesDrained 无进展时发出 stalled 事件
2139
+ // 使用递归 setTimeout 而非 setInterval,避免标签页后台恢复时回调堆积导致 Violation
2128
2140
  StreamWriter.prototype.startWatchdog = function (intervalMs, stallMs) {
2129
2141
  var _this = this;
2130
2142
  if (intervalMs === void 0) { intervalMs = 500; }
2131
2143
  if (stallMs === void 0) { stallMs = 1500; }
2132
2144
  if (this.watchdogTimer)
2133
2145
  return;
2134
- this.watchdogTimer = setInterval(function () {
2146
+ var tick = function () {
2135
2147
  if (_this.abortController.signal.aborted)
2136
2148
  return;
2137
2149
  var baseThreshold = _this.options.bufferSize * 0.7;
@@ -2142,7 +2154,13 @@
2142
2154
  if (!_this.stallStartAt)
2143
2155
  _this.stallStartAt = now;
2144
2156
  if (now - _this.stallStartAt >= stallMs) {
2145
- _this.dispatchEvent(new CustomEvent('stalled', { detail: { queueSize: q, drained: _this.bytesDrained, sinceMs: now - _this.stallStartAt } }));
2157
+ // 异步触发事件,让当前 tick 立即返回,避免同步事件处理器阻塞主线程
2158
+ var detail_1 = { queueSize: q, drained: _this.bytesDrained, sinceMs: now - _this.stallStartAt };
2159
+ setTimeout(function () {
2160
+ if (!_this.abortController.signal.aborted) {
2161
+ _this.dispatchEvent(new CustomEvent('stalled', { detail: detail_1 }));
2162
+ }
2163
+ }, 0);
2146
2164
  // 避免持续触发,推进起点
2147
2165
  _this.stallStartAt = now;
2148
2166
  }
@@ -2157,7 +2175,10 @@
2157
2175
  // 队列回落,重置
2158
2176
  _this.stallStartAt = 0;
2159
2177
  }
2160
- }, intervalMs);
2178
+ // 本次 tick 完成后再安排下一次,不会因主线程繁忙而堆积
2179
+ _this.watchdogTimer = setTimeout(tick, intervalMs);
2180
+ };
2181
+ this.watchdogTimer = setTimeout(tick, intervalMs);
2161
2182
  };
2162
2183
  StreamWriter.prototype.write = function (data) {
2163
2184
  return __awaiter(this, void 0, void 0, function () {
@@ -2208,6 +2229,8 @@
2208
2229
  return [2 /*return*/, data.arrayBuffer()];
2209
2230
  if (typeof data === 'string')
2210
2231
  return [2 /*return*/, new TextEncoder().encode(data).buffer];
2232
+ if (data instanceof Uint8Array)
2233
+ return [2 /*return*/, data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength)];
2211
2234
  return [2 /*return*/, data];
2212
2235
  });
2213
2236
  });
@@ -2411,24 +2434,24 @@
2411
2434
  StreamWriter.prototype.end = function () {
2412
2435
  return __awaiter(this, void 0, void 0, function () {
2413
2436
  var err_4, errMsg;
2414
- var _a, _b, _c;
2415
- return __generator(this, function (_d) {
2416
- switch (_d.label) {
2437
+ var _a, _b;
2438
+ return __generator(this, function (_c) {
2439
+ switch (_c.label) {
2417
2440
  case 0:
2418
2441
  this.p.end();
2419
2442
  if (!(this.stream && typeof this.stream.close === 'function')) return [3 /*break*/, 4];
2420
- _d.label = 1;
2443
+ _c.label = 1;
2421
2444
  case 1:
2422
- _d.trys.push([1, 3, , 4]);
2445
+ _c.trys.push([1, 3, , 4]);
2423
2446
  return [4 /*yield*/, this.stream.close()];
2424
2447
  case 2:
2425
- _d.sent();
2448
+ _c.sent();
2426
2449
  return [3 /*break*/, 4];
2427
2450
  case 3:
2428
- err_4 = _d.sent();
2429
- errMsg = ((_a = err_4.message) === null || _a === void 0 ? void 0 : _a.toLowerCase()) || '';
2451
+ err_4 = _c.sent();
2452
+ errMsg = (err_4 instanceof Error ? err_4.message : '').toLowerCase();
2430
2453
  if (!errMsg.includes('closed') && !errMsg.includes('closing')) {
2431
- (_c = (_b = this.log) === null || _b === void 0 ? void 0 : _b.trace) === null || _c === void 0 ? void 0 : _c.call(_b, 'Stream close error:', err_4);
2454
+ (_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
2455
  }
2433
2456
  return [3 /*break*/, 4];
2434
2457
  case 4:
@@ -2439,7 +2462,7 @@
2439
2462
  });
2440
2463
  };
2441
2464
  StreamWriter.prototype.abort = function (reason) {
2442
- var _a, _b, _c, _d, _e;
2465
+ var _a, _b, _c, _d;
2443
2466
  if (reason === void 0) { reason = 'User aborted'; }
2444
2467
  if (this.abortController.signal.aborted) {
2445
2468
  return; // Already aborted, prevent multiple abort calls
@@ -2450,7 +2473,8 @@
2450
2473
  // 先检查流状态,避免在已关闭的流上调用 abort
2451
2474
  if (this.stream && typeof this.stream.abort === 'function') {
2452
2475
  // 检查流的状态,避免操作已关闭的流
2453
- var streamState = this.stream.status || this.stream.state;
2476
+ var streamState = this.stream.status ||
2477
+ this.stream.state;
2454
2478
  if (streamState !== 'closed' && streamState !== 'closing') {
2455
2479
  this.stream.abort(new Error(reason));
2456
2480
  }
@@ -2459,9 +2483,9 @@
2459
2483
  catch (err) {
2460
2484
  // Stream may already be closed, ignore all stream-related errors
2461
2485
  // 完全忽略流操作错误,避免在错误处理中再次抛出错误
2462
- var errMsg = ((_a = err.message) === null || _a === void 0 ? void 0 : _a.toLowerCase()) || '';
2486
+ var errMsg = (err instanceof Error ? err.message : '').toLowerCase();
2463
2487
  if (!errMsg.includes('closed') && !errMsg.includes('closing') && !errMsg.includes('write')) {
2464
- (_c = (_b = this.log) === null || _b === void 0 ? void 0 : _b.trace) === null || _c === void 0 ? void 0 : _c.call(_b, 'Stream abort error:', err);
2488
+ (_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
2489
  }
2466
2490
  }
2467
2491
  this.cleanup();
@@ -2471,7 +2495,7 @@
2471
2495
  }
2472
2496
  catch (eventErr) {
2473
2497
  // 忽略事件处理器错误
2474
- (_e = (_d = this.log) === null || _d === void 0 ? void 0 : _d.trace) === null || _e === void 0 ? void 0 : _e.call(_d, 'Error in abort event handler:', eventErr);
2498
+ (_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
2499
  }
2476
2500
  };
2477
2501
  StreamWriter.prototype.cleanup = function () {
@@ -2481,17 +2505,17 @@
2481
2505
  }
2482
2506
  // 立即拒绝所有待处理的写入任务,避免它们继续执行
2483
2507
  var pendingTasks = this.writeQueue.splice(0);
2484
- pendingTasks.forEach(function (task) {
2508
+ pendingTasks.forEach(function () {
2485
2509
  // 这些任务的 Promise 会在执行时因为检查到 aborted 而被拒绝
2486
2510
  });
2487
2511
  try {
2488
2512
  this.p.end();
2489
2513
  }
2490
- catch (err) {
2514
+ catch (_a) {
2491
2515
  // Ignore errors when ending pushable
2492
2516
  }
2493
2517
  if (this.watchdogTimer) {
2494
- clearInterval(this.watchdogTimer);
2518
+ clearTimeout(this.watchdogTimer);
2495
2519
  this.watchdogTimer = undefined;
2496
2520
  }
2497
2521
  };
@@ -2652,6 +2676,7 @@
2652
2676
  }
2653
2677
  return [4 /*yield*/, new Promise(function (resolve, reject) {
2654
2678
  var settled = false;
2679
+ // eslint-disable-next-line prefer-const
2655
2680
  var timeoutId;
2656
2681
  var cleanup = function () {
2657
2682
  var idx = state.waiters.indexOf(waiter);
@@ -2755,15 +2780,14 @@
2755
2780
  return __awaiter(this, void 0, void 0, function () {
2756
2781
  var key, pooled, conn, status_1, dialPromise;
2757
2782
  var _this = this;
2758
- var _a, _b, _c;
2759
- return __generator(this, function (_d) {
2783
+ return __generator(this, function (_a) {
2760
2784
  key = this.peerAddr.toString();
2761
2785
  if (!forceNew) {
2762
2786
  pooled = this.connectionPool.get(key);
2763
2787
  if (pooled) {
2764
2788
  conn = pooled.connection;
2765
2789
  if (conn) {
2766
- status_1 = (_c = (_b = (_a = conn === null || conn === void 0 ? void 0 : conn.stat) === null || _a === void 0 ? void 0 : _a.status) === null || _b === void 0 ? void 0 : _b.toLowerCase) === null || _c === void 0 ? void 0 : _c.call(_b);
2790
+ status_1 = conn.status;
2767
2791
  if (!status_1 || status_1 === "open") {
2768
2792
  return [2 /*return*/, conn];
2769
2793
  }
@@ -2779,7 +2803,7 @@
2779
2803
  signal: AbortSignal.timeout(dialTimeout),
2780
2804
  })
2781
2805
  .then(function (conn) { return __awaiter(_this, void 0, void 0, function () {
2782
- var poolEntry, removeFromPool, anyConn;
2806
+ var poolEntry, removeFromPool;
2783
2807
  var _this = this;
2784
2808
  return __generator(this, function (_a) {
2785
2809
  if (!forceNew) {
@@ -2793,17 +2817,9 @@
2793
2817
  }
2794
2818
  };
2795
2819
  try {
2796
- anyConn = conn;
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
- }
2820
+ conn.addEventListener("close", removeFromPool, { once: true });
2805
2821
  }
2806
- catch (_b) { }
2822
+ catch ( /* ignore event listener registration errors */_b) { /* ignore event listener registration errors */ }
2807
2823
  }
2808
2824
  }
2809
2825
  return [2 /*return*/, conn];
@@ -2841,12 +2857,11 @@
2841
2857
  };
2842
2858
  Libp2pGrpcClient.prototype.unaryCall = function (method_1, requestData_1) {
2843
2859
  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, parser_1, preface, settingFrme, headerFrame, dataFrames, frameSendTimeout, _i, dataFrames_1, df, err_3;
2860
+ 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
2861
  var _this = this;
2846
- var _b, _c;
2847
2862
  if (timeout === void 0) { timeout = 30000; }
2848
- return __generator(this, function (_d) {
2849
- switch (_d.label) {
2863
+ return __generator(this, function (_b) {
2864
+ switch (_b.label) {
2850
2865
  case 0:
2851
2866
  stream = null;
2852
2867
  responseData = null;
@@ -2859,26 +2874,26 @@
2859
2874
  connection = null;
2860
2875
  state = null;
2861
2876
  streamSlotAcquired = false;
2862
- _d.label = 1;
2877
+ _b.label = 1;
2863
2878
  case 1:
2864
- _d.trys.push([1, 23, 24, 27]);
2879
+ _b.trys.push([1, 23, 24, 27]);
2865
2880
  return [4 /*yield*/, this.acquireConnection(false)];
2866
2881
  case 2:
2867
2882
  // const stream = await this.node.dialProtocol(this.peerAddr, this.protocol)
2868
- connection = _d.sent();
2883
+ connection = _b.sent();
2869
2884
  connectionKey_1 = this.peerAddr.toString();
2870
2885
  state = this.getConnectionState(connection);
2871
- _d.label = 3;
2886
+ _b.label = 3;
2872
2887
  case 3:
2873
- _d.trys.push([3, 5, , 6]);
2888
+ _b.trys.push([3, 5, , 6]);
2874
2889
  return [4 /*yield*/, this.waitForStreamSlot(state, undefined, timeout)];
2875
2890
  case 4:
2876
- _d.sent();
2891
+ _b.sent();
2877
2892
  state.activeStreams += 1;
2878
2893
  streamSlotAcquired = true;
2879
2894
  return [3 /*break*/, 6];
2880
2895
  case 5:
2881
- err_2 = _d.sent();
2896
+ err_2 = _b.sent();
2882
2897
  console.warn("[unaryCall] waiting for stream slot failed:", err_2);
2883
2898
  throw err_2;
2884
2899
  case 6: return [4 /*yield*/, connection.newStream(this.protocol, {
@@ -2886,25 +2901,25 @@
2886
2901
  negotiateFully: false,
2887
2902
  })];
2888
2903
  case 7:
2889
- stream = _d.sent();
2904
+ stream = _b.sent();
2890
2905
  streamManager = this.getStreamManagerFor(connection);
2891
2906
  return [4 /*yield*/, streamManager.getNextAppLevelStreamId()];
2892
2907
  case 8:
2893
- streamId_1 = _d.sent();
2908
+ streamId_1 = _b.sent();
2894
2909
  writer_1 = new StreamWriter(stream, {
2895
2910
  bufferSize: 16 * 1024 * 1024,
2896
2911
  });
2897
2912
  try {
2898
2913
  writer_1.addEventListener("backpressure", function (e) {
2899
- var d = (e === null || e === void 0 ? void 0 : e.detail) || {};
2914
+ var d = e.detail || {};
2900
2915
  console.warn("[unary stream ".concat(streamId_1, "] backpressure current=").concat(d.currentSize, " avg=").concat(d.averageSize, " threshold=").concat(d.threshold));
2901
2916
  });
2902
- writer_1.addEventListener("drain", function (e) {
2903
- var d = (e === null || e === void 0 ? void 0 : e.detail) || {};
2917
+ writer_1.addEventListener("drain", function () {
2918
+ // drain event - no action needed
2904
2919
  });
2905
2920
  writer_1.addEventListener("stalled", function (e) {
2906
2921
  var _a;
2907
- var d = (e === null || e === void 0 ? void 0 : e.detail) || {};
2922
+ var d = e.detail || {};
2908
2923
  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
2924
  try {
2910
2925
  var payload = new Uint8Array(8);
@@ -2912,13 +2927,12 @@
2912
2927
  var ping = Http2Frame.createFrame(0x6, 0x0, 0, payload);
2913
2928
  writer_1.write(ping);
2914
2929
  }
2915
- catch (_b) { }
2930
+ catch ( /* ignore ping write errors */_b) { /* ignore ping write errors */ }
2916
2931
  });
2917
2932
  }
2918
- catch (_e) { }
2919
- parser_1 = new HTTP2Parser(writer_1);
2920
- parser_1.onGoaway = function (info) {
2921
- var _a;
2933
+ catch ( /* ignore addEventListener errors */_c) { /* ignore addEventListener errors */ }
2934
+ parser = new HTTP2Parser(writer_1);
2935
+ parser.onGoaway = function (info) {
2922
2936
  console.warn("[unaryCall] GOAWAY received from server", info);
2923
2937
  _this.connectionPool.delete(connectionKey_1);
2924
2938
  if (state) {
@@ -2927,13 +2941,13 @@
2927
2941
  exitFlag = true;
2928
2942
  errMsg = "GOAWAY received: code=".concat(info.errorCode);
2929
2943
  try {
2930
- (_a = connection === null || connection === void 0 ? void 0 : connection.close) === null || _a === void 0 ? void 0 : _a.call(connection);
2944
+ connection === null || connection === void 0 ? void 0 : connection.close();
2931
2945
  }
2932
2946
  catch (err) {
2933
2947
  console.warn("Error closing connection after GOAWAY:", err);
2934
2948
  }
2935
2949
  };
2936
- parser_1.onSettingsParsed = function (settings) {
2950
+ parser.onSettingsParsed = function (settings) {
2937
2951
  if (state &&
2938
2952
  settings.maxConcurrentStreams !== undefined &&
2939
2953
  settings.maxConcurrentStreams > 0) {
@@ -2941,10 +2955,10 @@
2941
2955
  _this.notifyStreamSlotAvailable(state);
2942
2956
  }
2943
2957
  };
2944
- parser_1.registerOutboundStream(streamId_1);
2958
+ parser.registerOutboundStream(streamId_1);
2945
2959
  responseDataExpectedLength = -1; // 重置期望长度
2946
2960
  responseBuffer = []; // 重置缓冲区
2947
- parser_1.onData = function (payload, frameHeader) {
2961
+ parser.onData = function (payload, frameHeader) {
2948
2962
  //接收数据
2949
2963
  if (responseDataExpectedLength === -1) {
2950
2964
  //grpc消息头部未读取
@@ -2952,7 +2966,6 @@
2952
2966
  if (payload.length < 5) {
2953
2967
  return;
2954
2968
  }
2955
- payload[0]; // 压缩标志
2956
2969
  var lengthBytes = payload.slice(1, 5); // 消息长度的4字节
2957
2970
  responseDataExpectedLength = new DataView(lengthBytes.buffer, lengthBytes.byteOffset).getUint32(0, false); // big-endian
2958
2971
  if (responseDataExpectedLength < 0) {
@@ -3006,7 +3019,7 @@
3006
3019
  isResponseComplete = true;
3007
3020
  }
3008
3021
  };
3009
- parser_1.onEnd = function () {
3022
+ parser.onEnd = function () {
3010
3023
  //接收结束
3011
3024
  if (!isResponseComplete) {
3012
3025
  isResponseComplete = true; // 设置响应完成标志
@@ -3027,12 +3040,12 @@
3027
3040
  }
3028
3041
  }
3029
3042
  };
3030
- parser_1.onSettings = function () {
3043
+ parser.onSettings = function () {
3031
3044
  //接收settings,反馈ack
3032
3045
  var ackSettingFrame = Http2Frame.createSettingsAckFrame();
3033
3046
  writer_1.write(ackSettingFrame);
3034
3047
  };
3035
- parser_1.onHeaders = function (headers, header) {
3048
+ parser.onHeaders = function (headers) {
3036
3049
  var plainHeaders = hpack.decodeHeaderFields(headers);
3037
3050
  if (plainHeaders.get("grpc-status") === "0") ;
3038
3051
  else if (plainHeaders.get("grpc-status") !== undefined) {
@@ -3041,7 +3054,7 @@
3041
3054
  }
3042
3055
  };
3043
3056
  // 启动后台流处理,捕获任何异步错误
3044
- parser_1.processStream(stream).catch(function (error) {
3057
+ parser.processStream(stream).catch(function (error) {
3045
3058
  console.error('Error in processStream:', error);
3046
3059
  exitFlag = true;
3047
3060
  if (!errMsg) {
@@ -3051,51 +3064,35 @@
3051
3064
  preface = Http2Frame.createPreface();
3052
3065
  return [4 /*yield*/, writer_1.write(preface)];
3053
3066
  case 9:
3054
- _d.sent();
3067
+ _b.sent();
3055
3068
  settingFrme = Http2Frame.createSettingsFrame();
3056
3069
  return [4 /*yield*/, writer_1.write(settingFrme)];
3057
3070
  case 10:
3058
- _d.sent();
3071
+ _b.sent();
3072
+ // 等待对端 SETTINGS 或 ACK,择一即可,避免偶发握手竞态
3059
3073
  return [4 /*yield*/, Promise.race([
3060
- (function () { return __awaiter(_this, void 0, void 0, function () {
3061
- return __generator(this, function (_a) {
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
- }); })(),
3074
+ parser.waitForPeerSettings(1000),
3075
+ parser.waitForSettingsAck(),
3080
3076
  new Promise(function (res) { return setTimeout(res, 300); }),
3081
3077
  ])];
3082
3078
  case 11:
3083
- _d.sent();
3079
+ // 等待对端 SETTINGS 或 ACK,择一即可,避免偶发握手竞态
3080
+ _b.sent();
3084
3081
  headerFrame = Http2Frame.createHeadersFrame(streamId_1, method, true, this.token);
3085
3082
  return [4 /*yield*/, writer_1.write(headerFrame)];
3086
3083
  case 12:
3087
- _d.sent();
3084
+ _b.sent();
3088
3085
  dataFrames = Http2Frame.createDataFrames(streamId_1, requestData, true);
3089
3086
  frameSendTimeout = timeout > 0 ? timeout : DEFAULT_SEND_WINDOW_TIMEOUT;
3090
3087
  _i = 0, dataFrames_1 = dataFrames;
3091
- _d.label = 13;
3088
+ _b.label = 13;
3092
3089
  case 13:
3093
3090
  if (!(_i < dataFrames_1.length)) return [3 /*break*/, 16];
3094
3091
  df = dataFrames_1[_i];
3095
- return [4 /*yield*/, this.sendFrameWithFlowControl(parser_1, streamId_1, df, writer_1, undefined, frameSendTimeout)];
3092
+ return [4 /*yield*/, this.sendFrameWithFlowControl(parser, streamId_1, df, writer_1, undefined, frameSendTimeout)];
3096
3093
  case 14:
3097
- _d.sent();
3098
- _d.label = 15;
3094
+ _b.sent();
3095
+ _b.label = 15;
3099
3096
  case 15:
3100
3097
  _i++;
3101
3098
  return [3 /*break*/, 13];
@@ -3119,31 +3116,31 @@
3119
3116
  })];
3120
3117
  case 17:
3121
3118
  // 等待responseData 不为空,或超时
3122
- _d.sent();
3123
- _d.label = 18;
3119
+ _b.sent();
3120
+ _b.label = 18;
3124
3121
  case 18:
3125
- _d.trys.push([18, 20, , 21]);
3126
- return [4 /*yield*/, ((_c = (_b = writer_1).flush) === null || _c === void 0 ? void 0 : _c.call(_b, timeout))];
3122
+ _b.trys.push([18, 20, , 21]);
3123
+ return [4 /*yield*/, writer_1.flush(timeout)];
3127
3124
  case 19:
3128
- _d.sent();
3125
+ _b.sent();
3129
3126
  return [3 /*break*/, 21];
3130
3127
  case 20:
3131
- _d.sent();
3128
+ _b.sent();
3132
3129
  return [3 /*break*/, 21];
3133
3130
  case 21: return [4 /*yield*/, writer_1.end()];
3134
3131
  case 22:
3135
- _d.sent();
3132
+ _b.sent();
3136
3133
  return [3 /*break*/, 27];
3137
3134
  case 23:
3138
- err_3 = _d.sent();
3135
+ err_3 = _b.sent();
3139
3136
  console.error("unaryCall error:", err_3);
3140
3137
  throw err_3;
3141
3138
  case 24:
3142
3139
  if (!stream) return [3 /*break*/, 26];
3143
3140
  return [4 /*yield*/, stream.close()];
3144
3141
  case 25:
3145
- _d.sent();
3146
- _d.label = 26;
3142
+ _b.sent();
3143
+ _b.label = 26;
3147
3144
  case 26:
3148
3145
  if (streamSlotAcquired && state) {
3149
3146
  state.activeStreams = Math.max(0, state.activeStreams - 1);
@@ -3225,12 +3222,12 @@
3225
3222
  }, timeout);
3226
3223
  });
3227
3224
  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, parser_2, 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;
3225
+ 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
3226
  var _this = this;
3230
3227
  var _g, e_1, _h, _j;
3231
- var _k, _l, _m, _o, _p, _q, _r;
3232
- return __generator(this, function (_s) {
3233
- switch (_s.label) {
3228
+ var _k, _l, _m;
3229
+ return __generator(this, function (_o) {
3230
+ switch (_o.label) {
3234
3231
  case 0:
3235
3232
  messageBuffer = new Uint8Array(0);
3236
3233
  expectedMessageLength = -1;
@@ -3239,44 +3236,44 @@
3239
3236
  connectionKey = null;
3240
3237
  state = null;
3241
3238
  streamSlotAcquired = false;
3242
- _s.label = 1;
3239
+ _o.label = 1;
3243
3240
  case 1:
3244
- _s.trys.push([1, 49, 50, 64]);
3241
+ _o.trys.push([1, 49, 50, 64]);
3245
3242
  // 检查是否已经中止
3246
3243
  if (internalController.signal.aborted) {
3247
3244
  throw new Error("Operation aborted");
3248
3245
  }
3249
3246
  if (!(options === null || options === void 0 ? void 0 : options.freshConnection)) return [3 /*break*/, 5];
3250
- _s.label = 2;
3247
+ _o.label = 2;
3251
3248
  case 2:
3252
- _s.trys.push([2, 4, , 5]);
3249
+ _o.trys.push([2, 4, , 5]);
3253
3250
  this.connectionPool.delete(this.peerAddr.toString());
3254
- return [4 /*yield*/, ((_l = (_k = this.node) === null || _k === void 0 ? void 0 : _k.hangUp) === null || _l === void 0 ? void 0 : _l.call(_k, this.peerAddr))];
3251
+ return [4 /*yield*/, this.node.hangUp(this.peerAddr)];
3255
3252
  case 3:
3256
- _s.sent();
3253
+ _o.sent();
3257
3254
  console.warn("[Call] hangUp existing connection before dialing due to freshConnection=true");
3258
3255
  return [3 /*break*/, 5];
3259
3256
  case 4:
3260
- err_4 = _s.sent();
3257
+ err_4 = _o.sent();
3261
3258
  console.warn("[Call] hangUp failed or not supported, proceeding to dial", err_4);
3262
3259
  return [3 /*break*/, 5];
3263
3260
  case 5: return [4 /*yield*/, this.acquireConnection(Boolean(options === null || options === void 0 ? void 0 : options.freshConnection))];
3264
3261
  case 6:
3265
- connection = _s.sent();
3262
+ connection = _o.sent();
3266
3263
  connectionKey = this.peerAddr.toString();
3267
3264
  state = this.getConnectionState(connection);
3268
3265
  if (!state) return [3 /*break*/, 10];
3269
- _s.label = 7;
3266
+ _o.label = 7;
3270
3267
  case 7:
3271
- _s.trys.push([7, 9, , 10]);
3268
+ _o.trys.push([7, 9, , 10]);
3272
3269
  return [4 /*yield*/, this.waitForStreamSlot(state, internalController.signal, timeout)];
3273
3270
  case 8:
3274
- _s.sent();
3271
+ _o.sent();
3275
3272
  state.activeStreams += 1;
3276
3273
  streamSlotAcquired = true;
3277
3274
  return [3 /*break*/, 10];
3278
3275
  case 9:
3279
- err_5 = _s.sent();
3276
+ err_5 = _o.sent();
3280
3277
  console.warn("[Call] waiting for stream slot failed:", err_5);
3281
3278
  throw err_5;
3282
3279
  case 10: return [4 /*yield*/, connection.newStream(this.protocol, {
@@ -3285,25 +3282,25 @@
3285
3282
  negotiateFully: false,
3286
3283
  })];
3287
3284
  case 11:
3288
- stream = _s.sent();
3285
+ stream = _o.sent();
3289
3286
  streamManager = this.getStreamManagerFor(connection);
3290
3287
  return [4 /*yield*/, streamManager.getNextAppLevelStreamId()];
3291
3288
  case 12:
3292
- streamId_2 = _s.sent();
3289
+ streamId_2 = _o.sent();
3293
3290
  writer_2 = new StreamWriter(stream, {
3294
3291
  bufferSize: 16 * 1024 * 1024,
3295
3292
  });
3296
3293
  try {
3297
3294
  writer_2.addEventListener("backpressure", function (e) {
3298
- var d = (e === null || e === void 0 ? void 0 : e.detail) || {};
3295
+ var d = e.detail || {};
3299
3296
  console.warn("[stream ".concat(streamId_2, "] backpressure current=").concat(d.currentSize, " avg=").concat(d.averageSize, " threshold=").concat(d.threshold));
3300
3297
  });
3301
- writer_2.addEventListener("drain", function (e) {
3302
- var d = (e === null || e === void 0 ? void 0 : e.detail) || {};
3298
+ writer_2.addEventListener("drain", function () {
3299
+ // drain event - no action needed
3303
3300
  });
3304
3301
  writer_2.addEventListener("stalled", function (e) {
3305
3302
  var _a;
3306
- var d = (e === null || e === void 0 ? void 0 : e.detail) || {};
3303
+ var d = e.detail || {};
3307
3304
  console.warn("[stream ".concat(streamId_2, "] stalled queue=").concat(d.queueSize, " drained=").concat(d.drained, " since=").concat(d.sinceMs, "ms \u2014 sending PING"));
3308
3305
  try {
3309
3306
  var payload = new Uint8Array(8);
@@ -3311,15 +3308,14 @@
3311
3308
  var ping = Http2Frame.createFrame(0x6, 0x0, 0, payload);
3312
3309
  writer_2.write(ping);
3313
3310
  }
3314
- catch ( /* empty */_b) { /* empty */ }
3311
+ catch ( /* ignore ping write errors */_b) { /* ignore ping write errors */ }
3315
3312
  });
3316
3313
  }
3317
- catch ( /* empty */_t) { /* empty */ }
3318
- parser_2 = new HTTP2Parser(writer_2, {
3314
+ catch ( /* ignore addEventListener errors */_p) { /* ignore addEventListener errors */ }
3315
+ parser_1 = new HTTP2Parser(writer_2, {
3319
3316
  compatibilityMode: !useFlowControl,
3320
3317
  });
3321
- parser_2.onGoaway = function (info) {
3322
- var _a;
3318
+ parser_1.onGoaway = function (info) {
3323
3319
  console.warn("[Call] GOAWAY received from server", info);
3324
3320
  if (connectionKey) {
3325
3321
  _this.connectionPool.delete(connectionKey);
@@ -3332,13 +3328,13 @@
3332
3328
  }
3333
3329
  internalController.abort();
3334
3330
  try {
3335
- (_a = connection === null || connection === void 0 ? void 0 : connection.close) === null || _a === void 0 ? void 0 : _a.call(connection);
3331
+ connection === null || connection === void 0 ? void 0 : connection.close();
3336
3332
  }
3337
3333
  catch (err) {
3338
3334
  console.warn("Error closing connection after GOAWAY:", err);
3339
3335
  }
3340
3336
  };
3341
- parser_2.onSettingsParsed = function (settings) {
3337
+ parser_1.onSettingsParsed = function (settings) {
3342
3338
  if (state &&
3343
3339
  settings.maxConcurrentStreams !== undefined &&
3344
3340
  settings.maxConcurrentStreams > 0) {
@@ -3347,7 +3343,7 @@
3347
3343
  }
3348
3344
  };
3349
3345
  if (useFlowControl) {
3350
- parser_2.registerOutboundStream(streamId_2);
3346
+ parser_1.registerOutboundStream(streamId_2);
3351
3347
  }
3352
3348
  sendWindowTimeout_1 = timeout > 0 ? timeout : DEFAULT_SEND_WINDOW_TIMEOUT;
3353
3349
  writeFrame_1 = function (frame) { return __awaiter(_this, void 0, void 0, function () {
@@ -3355,7 +3351,7 @@
3355
3351
  switch (_a.label) {
3356
3352
  case 0:
3357
3353
  if (!useFlowControl) return [3 /*break*/, 2];
3358
- return [4 /*yield*/, this.sendFrameWithFlowControl(parser_2, streamId_2, frame, writer_2, internalController.signal, sendWindowTimeout_1)];
3354
+ return [4 /*yield*/, this.sendFrameWithFlowControl(parser_1, streamId_2, frame, writer_2, internalController.signal, sendWindowTimeout_1)];
3359
3355
  case 1:
3360
3356
  _a.sent();
3361
3357
  return [3 /*break*/, 4];
@@ -3393,8 +3389,8 @@
3393
3389
  });
3394
3390
  }); };
3395
3391
  // 在各个回调中检查是否已中止
3396
- parser_2.onData = function (payload, frameHeader) { return __awaiter(_this, void 0, void 0, function () {
3397
- var newBuffer, compressionFlag, lengthBytes, completeMessage;
3392
+ parser_1.onData = function (payload) { return __awaiter(_this, void 0, void 0, function () {
3393
+ var newBuffer, lengthBytes, completeMessage;
3398
3394
  return __generator(this, function (_a) {
3399
3395
  // 检查是否已中止
3400
3396
  if (internalController.signal.aborted) {
@@ -3413,7 +3409,6 @@
3413
3409
  }
3414
3410
  // 如果还没有读取消息长度,且缓冲区有足够数据
3415
3411
  if (expectedMessageLength === -1 && messageBuffer.length >= 5) {
3416
- compressionFlag = messageBuffer[0];
3417
3412
  lengthBytes = messageBuffer.slice(1, 5);
3418
3413
  expectedMessageLength = new DataView(lengthBytes.buffer, lengthBytes.byteOffset).getUint32(0, false); // big-endian
3419
3414
  }
@@ -3444,14 +3439,14 @@
3444
3439
  return [2 /*return*/];
3445
3440
  });
3446
3441
  }); };
3447
- parser_2.onSettings = function () {
3442
+ parser_1.onSettings = function () {
3448
3443
  // 检查是否已中止
3449
3444
  if (internalController.signal.aborted)
3450
3445
  return;
3451
3446
  var ackSettingFrame = Http2Frame.createSettingsAckFrame();
3452
3447
  writer_2.write(ackSettingFrame);
3453
3448
  };
3454
- parser_2.onHeaders = function (headers, header) {
3449
+ parser_1.onHeaders = function (headers) {
3455
3450
  // 检查是否已中止
3456
3451
  if (internalController.signal.aborted)
3457
3452
  return;
@@ -3469,7 +3464,7 @@
3469
3464
  }
3470
3465
  };
3471
3466
  // 启动后台流处理
3472
- parser_2.processStream(stream).catch(function (error) {
3467
+ parser_1.processStream(stream).catch(function (error) {
3473
3468
  console.error('Error in processStream:', error);
3474
3469
  if (onErrorCallback) {
3475
3470
  onErrorCallback(error);
@@ -3482,7 +3477,7 @@
3482
3477
  preface = Http2Frame.createPreface();
3483
3478
  return [4 /*yield*/, writer_2.write(preface)];
3484
3479
  case 13:
3485
- _s.sent();
3480
+ _o.sent();
3486
3481
  // 检查是否已中止
3487
3482
  if (internalController.signal.aborted) {
3488
3483
  throw new Error("Operation aborted");
@@ -3490,36 +3485,18 @@
3490
3485
  settingFrame = Http2Frame.createSettingsFrame();
3491
3486
  return [4 /*yield*/, writer_2.write(settingFrame)];
3492
3487
  case 14:
3493
- _s.sent();
3488
+ _o.sent();
3494
3489
  // 检查是否已中止
3495
3490
  if (internalController.signal.aborted) {
3496
3491
  throw new Error("Operation aborted");
3497
3492
  }
3498
3493
  return [4 /*yield*/, Promise.race([
3499
- (function () { return __awaiter(_this, void 0, void 0, function () {
3500
- return __generator(this, function (_a) {
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
- }); })(),
3494
+ parser_1.waitForPeerSettings(1000),
3495
+ parser_1.waitForSettingsAck(),
3519
3496
  new Promise(function (res) { return setTimeout(res, 300); }),
3520
3497
  ])];
3521
3498
  case 15:
3522
- _s.sent();
3499
+ _o.sent();
3523
3500
  // 检查是否已中止
3524
3501
  if (internalController.signal.aborted) {
3525
3502
  throw new Error("Operation aborted");
@@ -3532,11 +3509,11 @@
3532
3509
  if (!(mode === "unary" || mode === "server-streaming")) return [3 /*break*/, 18];
3533
3510
  return [4 /*yield*/, writer_2.write(headerFrame)];
3534
3511
  case 16:
3535
- _s.sent();
3512
+ _o.sent();
3536
3513
  dfs = Http2Frame.createDataFrames(streamId_2, requestData, true);
3537
3514
  return [4 /*yield*/, writeDataFrames_1(dfs)];
3538
3515
  case 17:
3539
- _s.sent();
3516
+ _o.sent();
3540
3517
  // 检查是否已中止
3541
3518
  if (internalController.signal.aborted) {
3542
3519
  throw new Error("Operation aborted");
@@ -3547,7 +3524,7 @@
3547
3524
  dataSourceCallback)) return [3 /*break*/, 47];
3548
3525
  return [4 /*yield*/, writer_2.write(headerFrame)];
3549
3526
  case 19:
3550
- _s.sent();
3527
+ _o.sent();
3551
3528
  // 检查是否已中止
3552
3529
  if (internalController.signal.aborted) {
3553
3530
  throw new Error("Operation aborted");
@@ -3556,11 +3533,10 @@
3556
3533
  dfs0 = Http2Frame.createDataFrames(streamId_2, requestData, false);
3557
3534
  return [4 /*yield*/, writeDataFrames_1(dfs0)];
3558
3535
  case 20:
3559
- _s.sent();
3560
- _s.label = 21;
3536
+ _o.sent();
3537
+ _o.label = 21;
3561
3538
  case 21:
3562
3539
  batchSize_1 = (options === null || options === void 0 ? void 0 : options.batchSize) || 10;
3563
- (options === null || options === void 0 ? void 0 : options.maxBatchWaitMs) || 50;
3564
3540
  processingQueue_1 = [];
3565
3541
  isProcessing_1 = false;
3566
3542
  processNextBatch_1 = function () { return __awaiter(_this, void 0, void 0, function () {
@@ -3649,17 +3625,17 @@
3649
3625
  }
3650
3626
  });
3651
3627
  };
3652
- _s.label = 22;
3628
+ _o.label = 22;
3653
3629
  case 22:
3654
- _s.trys.push([22, 36, , 37]);
3655
- _s.label = 23;
3630
+ _o.trys.push([22, 36, , 37]);
3631
+ _o.label = 23;
3656
3632
  case 23:
3657
- _s.trys.push([23, 29, 30, 35]);
3633
+ _o.trys.push([23, 29, 30, 35]);
3658
3634
  _a = true, _b = __asyncValues(dataSourceCallback());
3659
- _s.label = 24;
3635
+ _o.label = 24;
3660
3636
  case 24: return [4 /*yield*/, _b.next()];
3661
3637
  case 25:
3662
- if (!(_c = _s.sent(), _g = _c.done, !_g)) return [3 /*break*/, 28];
3638
+ if (!(_c = _o.sent(), _g = _c.done, !_g)) return [3 /*break*/, 28];
3663
3639
  _j = _c.value;
3664
3640
  _a = false;
3665
3641
  chunkOrChunks = _j;
@@ -3677,23 +3653,23 @@
3677
3653
  return [4 /*yield*/, Promise.all(addPromises)];
3678
3654
  case 26:
3679
3655
  // 等待当前批次的chunks被添加到队列(不等待处理完成)
3680
- _s.sent();
3681
- _s.label = 27;
3656
+ _o.sent();
3657
+ _o.label = 27;
3682
3658
  case 27:
3683
3659
  _a = true;
3684
3660
  return [3 /*break*/, 24];
3685
3661
  case 28: return [3 /*break*/, 35];
3686
3662
  case 29:
3687
- e_1_1 = _s.sent();
3663
+ e_1_1 = _o.sent();
3688
3664
  e_1 = { error: e_1_1 };
3689
3665
  return [3 /*break*/, 35];
3690
3666
  case 30:
3691
- _s.trys.push([30, , 33, 34]);
3667
+ _o.trys.push([30, , 33, 34]);
3692
3668
  if (!(!_a && !_g && (_h = _b.return))) return [3 /*break*/, 32];
3693
3669
  return [4 /*yield*/, _h.call(_b)];
3694
3670
  case 31:
3695
- _s.sent();
3696
- _s.label = 32;
3671
+ _o.sent();
3672
+ _o.label = 32;
3697
3673
  case 32: return [3 /*break*/, 34];
3698
3674
  case 33:
3699
3675
  if (e_1) throw e_1.error;
@@ -3701,7 +3677,7 @@
3701
3677
  case 34: return [7 /*endfinally*/];
3702
3678
  case 35: return [3 /*break*/, 37];
3703
3679
  case 36:
3704
- error_2 = _s.sent();
3680
+ error_2 = _o.sent();
3705
3681
  remainingQueue = processingQueue_1.splice(0);
3706
3682
  remainingQueue.forEach(function (item) {
3707
3683
  try {
@@ -3715,7 +3691,7 @@
3715
3691
  case 37:
3716
3692
  queueWaitStart = Date.now();
3717
3693
  maxQueueWaitMs = timeout;
3718
- _s.label = 38;
3694
+ _o.label = 38;
3719
3695
  case 38:
3720
3696
  if (!(processingQueue_1.length > 0 || isProcessing_1)) return [3 /*break*/, 40];
3721
3697
  if (internalController.signal.aborted) {
@@ -3736,7 +3712,7 @@
3736
3712
  }
3737
3713
  return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 10); })];
3738
3714
  case 39:
3739
- _s.sent();
3715
+ _o.sent();
3740
3716
  return [3 /*break*/, 38];
3741
3717
  case 40:
3742
3718
  // 检查是否已中止
@@ -3746,35 +3722,35 @@
3746
3722
  finalFrame = Http2Frame.createDataFrame(streamId_2, new Uint8Array(), true);
3747
3723
  return [4 /*yield*/, writeFrame_1(finalFrame)];
3748
3724
  case 41:
3749
- _s.sent();
3750
- _s.label = 42;
3725
+ _o.sent();
3726
+ _o.label = 42;
3751
3727
  case 42:
3752
- _s.trys.push([42, 44, , 45]);
3753
- return [4 /*yield*/, ((_o = (_m = writer_2).flush) === null || _o === void 0 ? void 0 : _o.call(_m, timeout))];
3728
+ _o.trys.push([42, 44, , 45]);
3729
+ return [4 /*yield*/, writer_2.flush(timeout)];
3754
3730
  case 43:
3755
- _s.sent();
3731
+ _o.sent();
3756
3732
  return [3 /*break*/, 45];
3757
3733
  case 44:
3758
- _s.sent();
3734
+ _o.sent();
3759
3735
  return [3 /*break*/, 45];
3760
3736
  case 45: return [4 /*yield*/, writer_2.end()];
3761
3737
  case 46:
3762
- _s.sent();
3763
- _s.label = 47;
3738
+ _o.sent();
3739
+ _o.label = 47;
3764
3740
  case 47:
3765
3741
  // 检查是否已中止
3766
3742
  if (internalController.signal.aborted) {
3767
3743
  throw new Error("Operation aborted");
3768
3744
  }
3769
- return [4 /*yield*/, parser_2.waitForEndOfStream(0)];
3745
+ return [4 /*yield*/, parser_1.waitForEndOfStream(0)];
3770
3746
  case 48:
3771
- _s.sent();
3747
+ _o.sent();
3772
3748
  if (onEndCallback) {
3773
3749
  onEndCallback();
3774
3750
  }
3775
3751
  return [3 /*break*/, 64];
3776
3752
  case 49:
3777
- err_6 = _s.sent();
3753
+ err_6 = _o.sent();
3778
3754
  // 如果是由于取消导致的错误,使用特定的错误消息
3779
3755
  if (internalController.signal.aborted &&
3780
3756
  err_6 instanceof Error &&
@@ -3798,44 +3774,44 @@
3798
3774
  case 50:
3799
3775
  clearTimeout(timeoutHandle);
3800
3776
  if (!stream) return [3 /*break*/, 54];
3801
- _s.label = 51;
3777
+ _o.label = 51;
3802
3778
  case 51:
3803
- _s.trys.push([51, 53, , 54]);
3779
+ _o.trys.push([51, 53, , 54]);
3804
3780
  return [4 /*yield*/, stream.close()];
3805
3781
  case 52:
3806
- _s.sent();
3782
+ _o.sent();
3807
3783
  return [3 /*break*/, 54];
3808
3784
  case 53:
3809
- err_7 = _s.sent();
3785
+ err_7 = _o.sent();
3810
3786
  console.error("Error closing stream:", err_7);
3811
3787
  return [3 /*break*/, 54];
3812
3788
  case 54:
3813
3789
  if (!(options === null || options === void 0 ? void 0 : options.freshConnection)) return [3 /*break*/, 63];
3814
- _s.label = 55;
3790
+ _o.label = 55;
3815
3791
  case 55:
3816
- _s.trys.push([55, 62, , 63]);
3817
- conns = ((_q = (_p = this.node) === null || _p === void 0 ? void 0 : _p.getConnections) === null || _q === void 0 ? void 0 : _q.call(_p, this.peerAddr)) || [];
3792
+ _o.trys.push([55, 62, , 63]);
3793
+ conns = ((_l = (_k = this.node).getConnections) === null || _l === void 0 ? void 0 : _l.call(_k, this.peerAddr)) || [];
3818
3794
  _i = 0, conns_1 = conns;
3819
- _s.label = 56;
3795
+ _o.label = 56;
3820
3796
  case 56:
3821
3797
  if (!(_i < conns_1.length)) return [3 /*break*/, 61];
3822
3798
  c = conns_1[_i];
3823
- _s.label = 57;
3799
+ _o.label = 57;
3824
3800
  case 57:
3825
- _s.trys.push([57, 59, , 60]);
3826
- return [4 /*yield*/, ((_r = c.close) === null || _r === void 0 ? void 0 : _r.call(c))];
3801
+ _o.trys.push([57, 59, , 60]);
3802
+ return [4 /*yield*/, ((_m = c.close) === null || _m === void 0 ? void 0 : _m.call(c))];
3827
3803
  case 58:
3828
- _s.sent();
3804
+ _o.sent();
3829
3805
  return [3 /*break*/, 60];
3830
3806
  case 59:
3831
- _s.sent();
3807
+ _o.sent();
3832
3808
  return [3 /*break*/, 60];
3833
3809
  case 60:
3834
3810
  _i++;
3835
3811
  return [3 /*break*/, 56];
3836
3812
  case 61: return [3 /*break*/, 63];
3837
3813
  case 62:
3838
- _s.sent();
3814
+ _o.sent();
3839
3815
  return [3 /*break*/, 63];
3840
3816
  case 63:
3841
3817
  if (streamSlotAcquired && state) {