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.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
|
|
8284
|
+
* Validates that `sequenceNumber` is monotonically increasing from the last
|
|
8285
8285
|
* seen remote sequence. Allows exactly one UInt32 wrap-around per token.
|
|
8286
|
-
*
|
|
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
|
|
8284
|
+
* Validates that `sequenceNumber` is monotonically increasing from the last
|
|
8285
8285
|
* seen remote sequence. Allows exactly one UInt32 wrap-around per token.
|
|
8286
|
-
*
|
|
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
|
|
17871
|
+
* Validates that `sequenceNumber` is monotonically increasing from the last
|
|
17872
17872
|
* seen remote sequence. Allows exactly one UInt32 wrap-around per token.
|
|
17873
|
-
*
|
|
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
|
-
|
|
17884
|
-
|
|
17885
|
-
|
|
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.
|
|
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:
|