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 CHANGED
@@ -86,9 +86,7 @@ var NodeId = class _NodeId {
86
86
  break;
87
87
  case 3 /* ByteString */:
88
88
  prefix = "b";
89
- if (typeof Buffer !== "undefined") {
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
- if (typeof Buffer !== "undefined") {
153
- return new _NodeId(namespace, new Uint8Array(Buffer.from(value, "base64")));
154
- } else {
155
- const binary = atob(value);
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
- if (Error.captureStackTrace) {
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
- return Buffer.from(text, "base64");
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
- return typeof process !== "undefined" && typeof process.versions !== "undefined" && typeof process.versions?.node !== "undefined";
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
- return isNodeLike() && !!process.stdout?.isTTY;
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 last
17874
- * seen remote sequence. Allows exactly one UInt32 wrap-around per token.
17871
+ * Validates that `sequenceNumber` is monotonically increasing from the
17872
+ * highest seen remote sequence. Allows UInt32 wrap-around per token.
17875
17873
  *
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.
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, controller) {
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
- 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}`));
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 !== last + 1 && !isWrap) {
17896
- this.logger.warn(`[${msgType}] Remote sequence number gap: expected ${last + 1}, got ${sequenceNumber} (skipped ${sequenceNumber - last - 1})`);
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.context.lastRemoteSequenceNumber = sequenceNumber;
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", controller)) return;
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", controller)) return;
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", controller)) return;
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", controller)) return;
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", controller);
17952
+ this.validateSequenceNumber(msgSym.sequenceHeader.sequenceNumber, "CLO-F");
17950
17953
  break;
17951
17954
  }
17952
17955
  default: