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