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