opcjs-base 0.1.37-alpha → 0.1.39-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,13 @@ 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
8284
+ * Validates that `sequenceNumber` is monotonically increasing from the last
8285
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.
8286
+ *
8287
+ * Forward gaps are tolerated with a warning because some server implementations
8288
+ * may consume sequence numbers internally (e.g. cancelled responses) without
8289
+ * sending them on the wire. Backward jumps and duplicates are rejected as
8290
+ * errors since they indicate replay or reordering.
8287
8291
  */
8288
8292
  private validateSequenceNumber;
8289
8293
  private transform;
package/dist/index.d.ts CHANGED
@@ -8281,9 +8281,13 @@ 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
8284
+ * Validates that `sequenceNumber` is monotonically increasing from the last
8285
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.
8286
+ *
8287
+ * Forward gaps are tolerated with a warning because some server implementations
8288
+ * may consume sequence numbers internally (e.g. cancelled responses) without
8289
+ * sending them on the wire. Backward jumps and duplicates are rejected as
8290
+ * errors since they indicate replay or reordering.
8287
8291
  */
8288
8292
  private validateSequenceNumber;
8289
8293
  private transform;
package/dist/index.js CHANGED
@@ -17868,23 +17868,33 @@ 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
17871
+ * Validates that `sequenceNumber` is monotonically increasing from the last
17872
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.
17873
+ *
17874
+ * Forward gaps are tolerated with a warning because some server implementations
17875
+ * may consume sequence numbers internally (e.g. cancelled responses) without
17876
+ * sending them on the wire. Backward jumps and duplicates are rejected as
17877
+ * errors since they indicate replay or reordering.
17874
17878
  */
17875
- validateSequenceNumber(sequenceNumber, controller) {
17879
+ validateSequenceNumber(sequenceNumber, msgType, controller) {
17876
17880
  const last = this.context.lastRemoteSequenceNumber;
17877
17881
  if (last === void 0) {
17878
17882
  this.context.lastRemoteSequenceNumber = sequenceNumber;
17883
+ this.logger.debug(`[${msgType}] Sequence number initialized to ${sequenceNumber}`);
17879
17884
  return true;
17880
17885
  }
17881
- const isIncrement = sequenceNumber === last + 1;
17882
17886
  const isWrap = last >= SEQ_WRAP_THRESHOLD2 && sequenceNumber < SEQ_WRAP_MAX;
17883
- if (!isIncrement && !isWrap) {
17884
- this.logger.error(`Invalid remote sequence number: expected ${last + 1}, got ${sequenceNumber}`);
17885
- controller.error(new Error(`Invalid remote sequence number: expected ${last + 1}, got ${sequenceNumber}`));
17887
+ const isForward = sequenceNumber > last;
17888
+ if (!isForward && !isWrap) {
17889
+ this.logger.error(`[${msgType}] Invalid remote sequence number: expected > ${last}, got ${sequenceNumber}`);
17890
+ controller.error(new Error(`Invalid remote sequence number: expected > ${last}, got ${sequenceNumber}`));
17886
17891
  return false;
17887
17892
  }
17893
+ if (sequenceNumber !== last + 1 && !isWrap) {
17894
+ this.logger.warn(`[${msgType}] Remote sequence number gap: expected ${last + 1}, got ${sequenceNumber} (skipped ${sequenceNumber - last - 1})`);
17895
+ } else {
17896
+ this.logger.debug(`[${msgType}] Sequence number advanced: ${last} \u2192 ${sequenceNumber}`);
17897
+ }
17888
17898
  this.context.lastRemoteSequenceNumber = sequenceNumber;
17889
17899
  return true;
17890
17900
  }
@@ -17902,8 +17912,7 @@ var SecureChannelMessageDecoder = class extends TransformStream {
17902
17912
  secHeader,
17903
17913
  this.context.securityAlgorithm
17904
17914
  );
17905
- this.context.lastRemoteSequenceNumber = void 0;
17906
- if (!this.validateSequenceNumber(msgAsym.sequenceHeader.sequenceNumber, controller)) return;
17915
+ if (!this.validateSequenceNumber(msgAsym.sequenceHeader.sequenceNumber, "OPN", controller)) return;
17907
17916
  controller.enqueue(msgAsym);
17908
17917
  break;
17909
17918
  }
@@ -17911,7 +17920,7 @@ var SecureChannelMessageDecoder = class extends TransformStream {
17911
17920
  this.logger.warn("SecureChannel received Abort message");
17912
17921
  const secHeader = MsgSecurityHeaderSymmetric.decode(buffer);
17913
17922
  const msgSym = MsgSymmetric.decode(buffer, header, secHeader, this.context.securityAlgorithm);
17914
- if (!this.validateSequenceNumber(msgSym.sequenceHeader.sequenceNumber, controller)) return;
17923
+ if (!this.validateSequenceNumber(msgSym.sequenceHeader.sequenceNumber, "MSG-A", controller)) return;
17915
17924
  controller.enqueue(msgSym);
17916
17925
  break;
17917
17926
  }
@@ -17919,7 +17928,7 @@ var SecureChannelMessageDecoder = class extends TransformStream {
17919
17928
  this.logger.debug("SecureChannel received Chunk message.");
17920
17929
  const secHeader = MsgSecurityHeaderSymmetric.decode(buffer);
17921
17930
  const msgSym = MsgSymmetric.decode(buffer, header, secHeader, this.context.securityAlgorithm);
17922
- if (!this.validateSequenceNumber(msgSym.sequenceHeader.sequenceNumber, controller)) return;
17931
+ if (!this.validateSequenceNumber(msgSym.sequenceHeader.sequenceNumber, "MSG-C", controller)) return;
17923
17932
  controller.enqueue(msgSym);
17924
17933
  break;
17925
17934
  }
@@ -17927,7 +17936,7 @@ var SecureChannelMessageDecoder = class extends TransformStream {
17927
17936
  this.logger.debug("SecureChannel received Final message");
17928
17937
  const secHeader = MsgSecurityHeaderSymmetric.decode(buffer);
17929
17938
  const msgSym = MsgSymmetric.decode(buffer, header, secHeader, this.context.securityAlgorithm);
17930
- if (!this.validateSequenceNumber(msgSym.sequenceHeader.sequenceNumber, controller)) return;
17939
+ if (!this.validateSequenceNumber(msgSym.sequenceHeader.sequenceNumber, "MSG-F", controller)) return;
17931
17940
  controller.enqueue(msgSym);
17932
17941
  break;
17933
17942
  }
@@ -17935,7 +17944,7 @@ var SecureChannelMessageDecoder = class extends TransformStream {
17935
17944
  this.logger.warn("SecureChannel received CloseFinal message.");
17936
17945
  const secHeader = MsgSecurityHeaderSymmetric.decode(buffer);
17937
17946
  const msgSym = MsgSymmetric.decode(buffer, header, secHeader, this.context.securityAlgorithm);
17938
- this.validateSequenceNumber(msgSym.sequenceHeader.sequenceNumber, controller);
17947
+ this.validateSequenceNumber(msgSym.sequenceHeader.sequenceNumber, "CLO-F", controller);
17939
17948
  break;
17940
17949
  }
17941
17950
  default: