opcjs-base 0.1.39-alpha → 0.1.41-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 +43 -40
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +8 -7
- package/dist/index.d.ts +8 -7
- package/dist/index.js +43 -40
- package/dist/index.js.map +1 -1
- package/package.json +5 -4
package/dist/index.cjs
CHANGED
|
@@ -86,9 +86,7 @@ var NodeId = class _NodeId {
|
|
|
86
86
|
break;
|
|
87
87
|
case 3 /* ByteString */:
|
|
88
88
|
prefix = "b";
|
|
89
|
-
|
|
90
|
-
value = Buffer.from(this.identifier).toString("base64");
|
|
91
|
-
} else {
|
|
89
|
+
{
|
|
92
90
|
const bytes = this.identifier;
|
|
93
91
|
let binary = "";
|
|
94
92
|
for (let i = 0; i < bytes.length; i++) {
|
|
@@ -148,17 +146,14 @@ var NodeId = class _NodeId {
|
|
|
148
146
|
case "g":
|
|
149
147
|
return new _NodeId(namespace, value);
|
|
150
148
|
// GUID as string
|
|
151
|
-
case "b":
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
const bytes = new Uint8Array(binary.length);
|
|
157
|
-
for (let i = 0; i < binary.length; i++) {
|
|
158
|
-
bytes[i] = binary.charCodeAt(i);
|
|
159
|
-
}
|
|
160
|
-
return new _NodeId(namespace, bytes);
|
|
149
|
+
case "b": {
|
|
150
|
+
const binary = atob(value);
|
|
151
|
+
const bytes = new Uint8Array(binary.length);
|
|
152
|
+
for (let i = 0; i < binary.length; i++) {
|
|
153
|
+
bytes[i] = binary.charCodeAt(i);
|
|
161
154
|
}
|
|
155
|
+
return new _NodeId(namespace, bytes);
|
|
156
|
+
}
|
|
162
157
|
default:
|
|
163
158
|
throw new Error(`Unknown NodeId type: ${type}`);
|
|
164
159
|
}
|
|
@@ -318,9 +313,7 @@ var CodecError = class _CodecError extends Error {
|
|
|
318
313
|
this.suggestedAction = options?.suggestedAction;
|
|
319
314
|
this.typeName = options?.typeName;
|
|
320
315
|
this.cause = options?.cause;
|
|
321
|
-
|
|
322
|
-
Error.captureStackTrace(this, _CodecError);
|
|
323
|
-
}
|
|
316
|
+
Error.captureStackTrace?.(this, _CodecError);
|
|
324
317
|
}
|
|
325
318
|
/**
|
|
326
319
|
* Returns a detailed error message including all context.
|
|
@@ -903,7 +896,10 @@ var XmlReader = class {
|
|
|
903
896
|
const text = this.getTextContent();
|
|
904
897
|
if (text === "") return null;
|
|
905
898
|
try {
|
|
906
|
-
|
|
899
|
+
const binary = atob(text);
|
|
900
|
+
const bytes = new Uint8Array(binary.length);
|
|
901
|
+
for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);
|
|
902
|
+
return bytes;
|
|
907
903
|
} catch {
|
|
908
904
|
throw new CodecError(`Invalid Base64 ByteString: ${text}`);
|
|
909
905
|
}
|
|
@@ -16603,10 +16599,12 @@ var UserTokenTypeEnum = /* @__PURE__ */ ((UserTokenTypeEnum2) => {
|
|
|
16603
16599
|
|
|
16604
16600
|
// src/utils/logger/consoleSink.ts
|
|
16605
16601
|
function isNodeLike() {
|
|
16606
|
-
|
|
16602
|
+
const g = globalThis;
|
|
16603
|
+
return typeof g.process !== "undefined" && typeof g.process?.versions !== "undefined" && typeof g.process?.versions?.node !== "undefined";
|
|
16607
16604
|
}
|
|
16608
16605
|
function supportsAnsiColors() {
|
|
16609
|
-
|
|
16606
|
+
const g = globalThis;
|
|
16607
|
+
return isNodeLike() && !!g.process?.stdout?.isTTY;
|
|
16610
16608
|
}
|
|
16611
16609
|
function pad2(n) {
|
|
16612
16610
|
return n < 10 ? `0${n}` : `${n}`;
|
|
@@ -17870,15 +17868,16 @@ var SecureChannelMessageDecoder = class extends TransformStream {
|
|
|
17870
17868
|
}
|
|
17871
17869
|
logger = getLogger("secureChannel.SecureChannelMessageDecoder");
|
|
17872
17870
|
/**
|
|
17873
|
-
* Validates that `sequenceNumber` is monotonically increasing from the
|
|
17874
|
-
* seen remote sequence. Allows
|
|
17871
|
+
* Validates that `sequenceNumber` is monotonically increasing from the
|
|
17872
|
+
* highest seen remote sequence. Allows UInt32 wrap-around per token.
|
|
17875
17873
|
*
|
|
17876
|
-
*
|
|
17877
|
-
*
|
|
17878
|
-
*
|
|
17879
|
-
*
|
|
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.
|
|
17880
17879
|
*/
|
|
17881
|
-
validateSequenceNumber(sequenceNumber, msgType
|
|
17880
|
+
validateSequenceNumber(sequenceNumber, msgType) {
|
|
17882
17881
|
const last = this.context.lastRemoteSequenceNumber;
|
|
17883
17882
|
if (last === void 0) {
|
|
17884
17883
|
this.context.lastRemoteSequenceNumber = sequenceNumber;
|
|
@@ -17886,18 +17885,22 @@ var SecureChannelMessageDecoder = class extends TransformStream {
|
|
|
17886
17885
|
return true;
|
|
17887
17886
|
}
|
|
17888
17887
|
const isWrap = last >= SEQ_WRAP_THRESHOLD2 && sequenceNumber < SEQ_WRAP_MAX;
|
|
17889
|
-
|
|
17890
|
-
|
|
17891
|
-
this.logger.
|
|
17892
|
-
|
|
17893
|
-
return false;
|
|
17888
|
+
if (isWrap) {
|
|
17889
|
+
this.context.lastRemoteSequenceNumber = sequenceNumber;
|
|
17890
|
+
this.logger.debug(`[${msgType}] Sequence number wrapped: ${last} \u2192 ${sequenceNumber}`);
|
|
17891
|
+
return true;
|
|
17894
17892
|
}
|
|
17895
|
-
if (sequenceNumber
|
|
17896
|
-
this.
|
|
17897
|
-
} else {
|
|
17893
|
+
if (sequenceNumber === last + 1) {
|
|
17894
|
+
this.context.lastRemoteSequenceNumber = sequenceNumber;
|
|
17898
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;
|
|
17899
17902
|
}
|
|
17900
|
-
this.
|
|
17903
|
+
this.logger.warn(`[${msgType}] Out-of-order remote sequence number: highest seen ${last}, got ${sequenceNumber}`);
|
|
17901
17904
|
return true;
|
|
17902
17905
|
}
|
|
17903
17906
|
transform(data, controller) {
|
|
@@ -17914,7 +17917,7 @@ var SecureChannelMessageDecoder = class extends TransformStream {
|
|
|
17914
17917
|
secHeader,
|
|
17915
17918
|
this.context.securityAlgorithm
|
|
17916
17919
|
);
|
|
17917
|
-
if (!this.validateSequenceNumber(msgAsym.sequenceHeader.sequenceNumber, "OPN"
|
|
17920
|
+
if (!this.validateSequenceNumber(msgAsym.sequenceHeader.sequenceNumber, "OPN")) return;
|
|
17918
17921
|
controller.enqueue(msgAsym);
|
|
17919
17922
|
break;
|
|
17920
17923
|
}
|
|
@@ -17922,7 +17925,7 @@ var SecureChannelMessageDecoder = class extends TransformStream {
|
|
|
17922
17925
|
this.logger.warn("SecureChannel received Abort message");
|
|
17923
17926
|
const secHeader = MsgSecurityHeaderSymmetric.decode(buffer);
|
|
17924
17927
|
const msgSym = MsgSymmetric.decode(buffer, header, secHeader, this.context.securityAlgorithm);
|
|
17925
|
-
if (!this.validateSequenceNumber(msgSym.sequenceHeader.sequenceNumber, "MSG-A"
|
|
17928
|
+
if (!this.validateSequenceNumber(msgSym.sequenceHeader.sequenceNumber, "MSG-A")) return;
|
|
17926
17929
|
controller.enqueue(msgSym);
|
|
17927
17930
|
break;
|
|
17928
17931
|
}
|
|
@@ -17930,7 +17933,7 @@ var SecureChannelMessageDecoder = class extends TransformStream {
|
|
|
17930
17933
|
this.logger.debug("SecureChannel received Chunk message.");
|
|
17931
17934
|
const secHeader = MsgSecurityHeaderSymmetric.decode(buffer);
|
|
17932
17935
|
const msgSym = MsgSymmetric.decode(buffer, header, secHeader, this.context.securityAlgorithm);
|
|
17933
|
-
if (!this.validateSequenceNumber(msgSym.sequenceHeader.sequenceNumber, "MSG-C"
|
|
17936
|
+
if (!this.validateSequenceNumber(msgSym.sequenceHeader.sequenceNumber, "MSG-C")) return;
|
|
17934
17937
|
controller.enqueue(msgSym);
|
|
17935
17938
|
break;
|
|
17936
17939
|
}
|
|
@@ -17938,7 +17941,7 @@ var SecureChannelMessageDecoder = class extends TransformStream {
|
|
|
17938
17941
|
this.logger.debug("SecureChannel received Final message");
|
|
17939
17942
|
const secHeader = MsgSecurityHeaderSymmetric.decode(buffer);
|
|
17940
17943
|
const msgSym = MsgSymmetric.decode(buffer, header, secHeader, this.context.securityAlgorithm);
|
|
17941
|
-
if (!this.validateSequenceNumber(msgSym.sequenceHeader.sequenceNumber, "MSG-F"
|
|
17944
|
+
if (!this.validateSequenceNumber(msgSym.sequenceHeader.sequenceNumber, "MSG-F")) return;
|
|
17942
17945
|
controller.enqueue(msgSym);
|
|
17943
17946
|
break;
|
|
17944
17947
|
}
|
|
@@ -17946,7 +17949,7 @@ var SecureChannelMessageDecoder = class extends TransformStream {
|
|
|
17946
17949
|
this.logger.warn("SecureChannel received CloseFinal message.");
|
|
17947
17950
|
const secHeader = MsgSecurityHeaderSymmetric.decode(buffer);
|
|
17948
17951
|
const msgSym = MsgSymmetric.decode(buffer, header, secHeader, this.context.securityAlgorithm);
|
|
17949
|
-
this.validateSequenceNumber(msgSym.sequenceHeader.sequenceNumber, "CLO-F"
|
|
17952
|
+
this.validateSequenceNumber(msgSym.sequenceHeader.sequenceNumber, "CLO-F");
|
|
17950
17953
|
break;
|
|
17951
17954
|
}
|
|
17952
17955
|
default:
|