opcjs-base 0.1.38-alpha → 0.1.40-alpha

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/index.d.cts CHANGED
@@ -8281,9 +8281,14 @@ declare class SecureChannelMessageDecoder extends TransformStream<Uint8Array, Ms
8281
8281
  private context;
8282
8282
  private logger;
8283
8283
  /**
8284
- * Validates that `sequenceNumber` is strictly increasing from the last
8285
- * seen remote sequence. Allows exactly one UInt32 wrap-around per token.
8286
- * Returns false and logs an error if the number is a duplicate or out of order.
8284
+ * Validates that `sequenceNumber` is monotonically increasing from the
8285
+ * highest seen remote sequence. Allows UInt32 wrap-around per token.
8286
+ *
8287
+ * Over TLS/WSS the transport already provides integrity and replay
8288
+ * protection, so small out-of-order deliveries (caused by multi-threaded
8289
+ * server writes) are tolerated with a warning rather than tearing down the
8290
+ * channel. Only truly anomalous conditions (e.g. a very large backward
8291
+ * jump that could indicate corruption) are treated as errors.
8287
8292
  */
8288
8293
  private validateSequenceNumber;
8289
8294
  private transform;
package/dist/index.d.ts CHANGED
@@ -8281,9 +8281,14 @@ declare class SecureChannelMessageDecoder extends TransformStream<Uint8Array, Ms
8281
8281
  private context;
8282
8282
  private logger;
8283
8283
  /**
8284
- * Validates that `sequenceNumber` is strictly increasing from the last
8285
- * seen remote sequence. Allows exactly one UInt32 wrap-around per token.
8286
- * Returns false and logs an error if the number is a duplicate or out of order.
8284
+ * Validates that `sequenceNumber` is monotonically increasing from the
8285
+ * highest seen remote sequence. Allows UInt32 wrap-around per token.
8286
+ *
8287
+ * Over TLS/WSS the transport already provides integrity and replay
8288
+ * protection, so small out-of-order deliveries (caused by multi-threaded
8289
+ * server writes) are tolerated with a warning rather than tearing down the
8290
+ * channel. Only truly anomalous conditions (e.g. a very large backward
8291
+ * jump that could indicate corruption) are treated as errors.
8287
8292
  */
8288
8293
  private validateSequenceNumber;
8289
8294
  private transform;
package/dist/index.js CHANGED
@@ -17868,26 +17868,39 @@ var SecureChannelMessageDecoder = class extends TransformStream {
17868
17868
  }
17869
17869
  logger = getLogger("secureChannel.SecureChannelMessageDecoder");
17870
17870
  /**
17871
- * Validates that `sequenceNumber` is strictly increasing from the last
17872
- * seen remote sequence. Allows exactly one UInt32 wrap-around per token.
17873
- * Returns false and logs an error if the number is a duplicate or out of order.
17871
+ * Validates that `sequenceNumber` is monotonically increasing from the
17872
+ * highest seen remote sequence. Allows UInt32 wrap-around per token.
17873
+ *
17874
+ * Over TLS/WSS the transport already provides integrity and replay
17875
+ * protection, so small out-of-order deliveries (caused by multi-threaded
17876
+ * server writes) are tolerated with a warning rather than tearing down the
17877
+ * channel. Only truly anomalous conditions (e.g. a very large backward
17878
+ * jump that could indicate corruption) are treated as errors.
17874
17879
  */
17875
- validateSequenceNumber(sequenceNumber, msgType, controller) {
17880
+ validateSequenceNumber(sequenceNumber, msgType) {
17876
17881
  const last = this.context.lastRemoteSequenceNumber;
17877
17882
  if (last === void 0) {
17878
17883
  this.context.lastRemoteSequenceNumber = sequenceNumber;
17879
17884
  this.logger.debug(`[${msgType}] Sequence number initialized to ${sequenceNumber}`);
17880
17885
  return true;
17881
17886
  }
17882
- const isIncrement = sequenceNumber === last + 1;
17883
17887
  const isWrap = last >= SEQ_WRAP_THRESHOLD2 && sequenceNumber < SEQ_WRAP_MAX;
17884
- if (!isIncrement && !isWrap) {
17885
- this.logger.error(`[${msgType}] Invalid remote sequence number: expected ${last + 1}, got ${sequenceNumber}`);
17886
- controller.error(new Error(`Invalid remote sequence number: expected ${last + 1}, got ${sequenceNumber}`));
17887
- return false;
17888
+ if (isWrap) {
17889
+ this.context.lastRemoteSequenceNumber = sequenceNumber;
17890
+ this.logger.debug(`[${msgType}] Sequence number wrapped: ${last} \u2192 ${sequenceNumber}`);
17891
+ return true;
17892
+ }
17893
+ if (sequenceNumber === last + 1) {
17894
+ this.context.lastRemoteSequenceNumber = sequenceNumber;
17895
+ this.logger.debug(`[${msgType}] Sequence number advanced: ${last} \u2192 ${sequenceNumber}`);
17896
+ return true;
17897
+ }
17898
+ if (sequenceNumber > last + 1) {
17899
+ this.logger.warn(`[${msgType}] Remote sequence number gap: expected ${last + 1}, got ${sequenceNumber} (skipped ${sequenceNumber - last - 1})`);
17900
+ this.context.lastRemoteSequenceNumber = sequenceNumber;
17901
+ return true;
17888
17902
  }
17889
- this.logger.debug(`[${msgType}] Sequence number advanced: ${last} \u2192 ${sequenceNumber}`);
17890
- this.context.lastRemoteSequenceNumber = sequenceNumber;
17903
+ this.logger.warn(`[${msgType}] Out-of-order remote sequence number: highest seen ${last}, got ${sequenceNumber}`);
17891
17904
  return true;
17892
17905
  }
17893
17906
  transform(data, controller) {
@@ -17904,7 +17917,7 @@ var SecureChannelMessageDecoder = class extends TransformStream {
17904
17917
  secHeader,
17905
17918
  this.context.securityAlgorithm
17906
17919
  );
17907
- if (!this.validateSequenceNumber(msgAsym.sequenceHeader.sequenceNumber, "OPN", controller)) return;
17920
+ if (!this.validateSequenceNumber(msgAsym.sequenceHeader.sequenceNumber, "OPN")) return;
17908
17921
  controller.enqueue(msgAsym);
17909
17922
  break;
17910
17923
  }
@@ -17912,7 +17925,7 @@ var SecureChannelMessageDecoder = class extends TransformStream {
17912
17925
  this.logger.warn("SecureChannel received Abort message");
17913
17926
  const secHeader = MsgSecurityHeaderSymmetric.decode(buffer);
17914
17927
  const msgSym = MsgSymmetric.decode(buffer, header, secHeader, this.context.securityAlgorithm);
17915
- if (!this.validateSequenceNumber(msgSym.sequenceHeader.sequenceNumber, "MSG-A", controller)) return;
17928
+ if (!this.validateSequenceNumber(msgSym.sequenceHeader.sequenceNumber, "MSG-A")) return;
17916
17929
  controller.enqueue(msgSym);
17917
17930
  break;
17918
17931
  }
@@ -17920,7 +17933,7 @@ var SecureChannelMessageDecoder = class extends TransformStream {
17920
17933
  this.logger.debug("SecureChannel received Chunk message.");
17921
17934
  const secHeader = MsgSecurityHeaderSymmetric.decode(buffer);
17922
17935
  const msgSym = MsgSymmetric.decode(buffer, header, secHeader, this.context.securityAlgorithm);
17923
- if (!this.validateSequenceNumber(msgSym.sequenceHeader.sequenceNumber, "MSG-C", controller)) return;
17936
+ if (!this.validateSequenceNumber(msgSym.sequenceHeader.sequenceNumber, "MSG-C")) return;
17924
17937
  controller.enqueue(msgSym);
17925
17938
  break;
17926
17939
  }
@@ -17928,7 +17941,7 @@ var SecureChannelMessageDecoder = class extends TransformStream {
17928
17941
  this.logger.debug("SecureChannel received Final message");
17929
17942
  const secHeader = MsgSecurityHeaderSymmetric.decode(buffer);
17930
17943
  const msgSym = MsgSymmetric.decode(buffer, header, secHeader, this.context.securityAlgorithm);
17931
- if (!this.validateSequenceNumber(msgSym.sequenceHeader.sequenceNumber, "MSG-F", controller)) return;
17944
+ if (!this.validateSequenceNumber(msgSym.sequenceHeader.sequenceNumber, "MSG-F")) return;
17932
17945
  controller.enqueue(msgSym);
17933
17946
  break;
17934
17947
  }
@@ -17936,7 +17949,7 @@ var SecureChannelMessageDecoder = class extends TransformStream {
17936
17949
  this.logger.warn("SecureChannel received CloseFinal message.");
17937
17950
  const secHeader = MsgSecurityHeaderSymmetric.decode(buffer);
17938
17951
  const msgSym = MsgSymmetric.decode(buffer, header, secHeader, this.context.securityAlgorithm);
17939
- this.validateSequenceNumber(msgSym.sequenceHeader.sequenceNumber, "CLO-F", controller);
17952
+ this.validateSequenceNumber(msgSym.sequenceHeader.sequenceNumber, "CLO-F");
17940
17953
  break;
17941
17954
  }
17942
17955
  default: