opcjs-base 0.1.29-alpha → 0.1.32-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.js CHANGED
@@ -2930,12 +2930,22 @@ var SecureChannelTypeEncoder = class extends TransformStream {
2930
2930
  }
2931
2931
  };
2932
2932
 
2933
+ // src/secureChannel/messages/msgType.ts
2934
+ var MsgTypeOpenFinal = "O".charCodeAt(0) | "P".charCodeAt(0) << 8 | "N".charCodeAt(0) << 16 | "F".charCodeAt(0) << 24;
2935
+ var MsgTypeOpenChunk = "O".charCodeAt(0) | "P".charCodeAt(0) << 8 | "N".charCodeAt(0) << 16 | "C".charCodeAt(0) << 24;
2936
+ var MsgTypeAbort = "M".charCodeAt(0) | "S".charCodeAt(0) << 8 | "G".charCodeAt(0) << 16 | "A".charCodeAt(0) << 24;
2937
+ var MsgTypeChunk = "M".charCodeAt(0) | "S".charCodeAt(0) << 8 | "G".charCodeAt(0) << 16 | "C".charCodeAt(0) << 24;
2938
+ var MsgTypeFinal = "M".charCodeAt(0) | "S".charCodeAt(0) << 8 | "G".charCodeAt(0) << 16 | "F".charCodeAt(0) << 24;
2939
+ var MsgTypeCloseFinal = "C".charCodeAt(0) | "L".charCodeAt(0) << 8 | "O".charCodeAt(0) << 16 | "F".charCodeAt(0) << 24;
2940
+
2933
2941
  // src/secureChannel/secureChannelTypeDecoder.ts
2934
2942
  var SecureChannelTypeDecoder = class extends TransformStream {
2935
2943
  constructor(decoder) {
2936
2944
  super({
2937
2945
  transform(msg, controller) {
2938
- msg.body = decoder.decode(msg.body, "binary");
2946
+ if (msg.header.msgType !== MsgTypeAbort) {
2947
+ msg.body = decoder.decode(msg.body, "binary");
2948
+ }
2939
2949
  controller.enqueue(msg);
2940
2950
  }
2941
2951
  });
@@ -17397,13 +17407,6 @@ var MsgSymmetric = class _MsgSymmetric extends MsgBase2 {
17397
17407
  }
17398
17408
  };
17399
17409
 
17400
- // src/secureChannel/messages/msgType.ts
17401
- var MsgTypeOpenFinal = "O".charCodeAt(0) | "P".charCodeAt(0) << 8 | "N".charCodeAt(0) << 16 | "F".charCodeAt(0) << 24;
17402
- var MsgTypeAbort = "M".charCodeAt(0) | "S".charCodeAt(0) << 8 | "G".charCodeAt(0) << 16 | "A".charCodeAt(0) << 24;
17403
- var MsgTypeChunk = "M".charCodeAt(0) | "S".charCodeAt(0) << 8 | "G".charCodeAt(0) << 16 | "C".charCodeAt(0) << 24;
17404
- var MsgTypeFinal = "M".charCodeAt(0) | "S".charCodeAt(0) << 8 | "G".charCodeAt(0) << 16 | "F".charCodeAt(0) << 24;
17405
- var MsgTypeCloseFinal = "C".charCodeAt(0) | "L".charCodeAt(0) << 8 | "O".charCodeAt(0) << 16 | "F".charCodeAt(0) << 24;
17406
-
17407
17410
  // src/secureChannel/pendingRequests.ts
17408
17411
  var PendingRequests = class {
17409
17412
  map = /* @__PURE__ */ new Map();
@@ -17455,6 +17458,7 @@ var Certificate = class {
17455
17458
  };
17456
17459
 
17457
17460
  // src/secureChannel/secureChannelFacade.ts
17461
+ var TOKEN_RENEW_FRACTION = 0.75;
17458
17462
  var SecureChannelFacade = class {
17459
17463
  // ─── Constructor ────────────────────────────────────────────────────────────────
17460
17464
  constructor(context, readerTransform, writerTransform) {
@@ -17469,11 +17473,17 @@ var SecureChannelFacade = class {
17469
17473
  logger = getLogger("secureChannel.SecureChannelFacade");
17470
17474
  writer;
17471
17475
  reader;
17476
+ /** Timer handle for the scheduled token renewal; undefined when no renewal is pending. */
17477
+ renewalTimer;
17472
17478
  /**
17473
- * Sends the OpenSecureChannel request and resolves once the server replies.
17474
- * Updates `context.channelId` and `context.tokenId` on success.
17479
+ * Builds and sends an OpenSecureChannel request.
17480
+ * Called for both the initial Issue and subsequent Renew requests.
17481
+ *
17482
+ * On success the context `channelId` and `tokenId` are updated and a new
17483
+ * renewal is scheduled at 75 % of the server-revised token lifetime, per
17484
+ * OPC UA Part 4 Section 5.4.1 / Part 6 Section 6.7.3.
17475
17485
  */
17476
- async openSecureChannel() {
17486
+ async sendOpenSecureChannel(requestType) {
17477
17487
  const requestHeader = new RequestHeader();
17478
17488
  requestHeader.authenticationToken = NodeId.newTwoByte(0);
17479
17489
  requestHeader.timestamp = /* @__PURE__ */ new Date();
@@ -17485,31 +17495,72 @@ var SecureChannelFacade = class {
17485
17495
  const request = new OpenSecureChannelRequest();
17486
17496
  request.requestHeader = requestHeader;
17487
17497
  request.clientProtocolVersion = 0;
17488
- request.requestType = 0 /* Issue */;
17498
+ request.requestType = requestType;
17489
17499
  request.securityMode = this.context.securityPolicy.getSecurityMode();
17490
17500
  request.clientNonce = null;
17491
17501
  request.requestedLifetime = 36e5;
17492
17502
  const { sequenceNumber, requestId } = this.context.nextIds();
17493
- this.context.securityAlgorithm = this.context.securityPolicy.getAlgorithmAsymmetric(new Uint8Array(), new Uint8Array());
17503
+ this.context.securityAlgorithm = this.context.securityPolicy.getAlgorithmAsymmetric(
17504
+ new Uint8Array(),
17505
+ new Uint8Array()
17506
+ );
17494
17507
  const msg = new MsgAsymmetric(
17495
- new MsgHeader2(MsgTypeOpenFinal, 0, 0),
17508
+ new MsgHeader2(MsgTypeOpenFinal, 0, this.context.channelId),
17496
17509
  new MsgSecurityHeaderAsymmetric(
17497
17510
  "http://opcfoundation.org/UA/SecurityPolicy#None"
17498
17511
  ),
17499
17512
  new MsgSequenceHeader(sequenceNumber, requestId),
17500
17513
  request
17501
17514
  );
17502
- this.logger.debug("Sending OpenSecureChannelRequest...");
17503
- return this.pushMessage(msg).then((response) => {
17504
- const openResponse = response;
17505
- this.logger.debug("OpenSecureChannelResponse received");
17506
- this.context.channelId = openResponse.securityToken?.channelId;
17507
- this.context.tokenId = openResponse.securityToken?.tokenId;
17508
- this.context.securityAlgorithm = this.context.securityPolicy.getAlgorithmSymmetric(
17509
- new Certificate(),
17510
- new Certificate()
17511
- );
17512
- });
17515
+ const response = await this.pushMessage(msg);
17516
+ this.context.channelId = response.securityToken?.channelId;
17517
+ this.context.tokenId = response.securityToken?.tokenId;
17518
+ this.context.securityAlgorithm = this.context.securityPolicy.getAlgorithmSymmetric(
17519
+ new Certificate(),
17520
+ new Certificate()
17521
+ );
17522
+ const revisedLifetimeMs = response.securityToken?.revisedLifetime;
17523
+ this.scheduleRenewal(revisedLifetimeMs);
17524
+ }
17525
+ /**
17526
+ * Schedules a proactive token renewal at {@link TOKEN_RENEW_FRACTION} of
17527
+ * `lifetimeMs`. Any previously scheduled renewal is cancelled first.
17528
+ */
17529
+ scheduleRenewal(lifetimeMs) {
17530
+ if (this.renewalTimer !== void 0) {
17531
+ clearTimeout(this.renewalTimer);
17532
+ }
17533
+ const delayMs = Math.floor(lifetimeMs * TOKEN_RENEW_FRACTION);
17534
+ this.logger.debug(
17535
+ `Scheduling SecurityToken renewal in ${delayMs} ms (75 % of ${lifetimeMs} ms lifetime).`
17536
+ );
17537
+ this.renewalTimer = setTimeout(() => {
17538
+ this.renewalTimer = void 0;
17539
+ this.logger.info("Renewing SecurityToken...");
17540
+ this.sendOpenSecureChannel(1 /* Renew */).catch((err) => {
17541
+ this.logger.error("SecurityToken renewal failed:", err);
17542
+ });
17543
+ }, delayMs);
17544
+ }
17545
+ /**
17546
+ * Sends the initial OpenSecureChannel request and resolves once the server
17547
+ * replies. Updates `context.channelId` and `context.tokenId` on success
17548
+ * and schedules automatic renewal at 75 % of the token lifetime.
17549
+ */
17550
+ openSecureChannel() {
17551
+ this.logger.debug("Sending OpenSecureChannelRequest (Issue)...");
17552
+ return this.sendOpenSecureChannel(0 /* Issue */);
17553
+ }
17554
+ /**
17555
+ * Cancels any pending token renewal timer and releases the stream writer.
17556
+ * Call this when the secure channel is no longer needed.
17557
+ */
17558
+ close() {
17559
+ if (this.renewalTimer !== void 0) {
17560
+ clearTimeout(this.renewalTimer);
17561
+ this.renewalTimer = void 0;
17562
+ }
17563
+ this.writer.releaseLock();
17513
17564
  }
17514
17565
  // ─── ISecureChannel implementation ─────────────────────────────────────────────
17515
17566
  getSecurityPolicy() {
@@ -17546,14 +17597,20 @@ var SecureChannelFacade = class {
17546
17597
  if (!value) {
17547
17598
  this.logger.error("Received empty frame");
17548
17599
  }
17549
- const response = value.body;
17550
- if (response instanceof ServiceFault) {
17551
- this.pending.failAll(
17552
- // todo: create a human readable error message based on the ServiceFault content
17553
- new Error(`ServiceFault: ${JSON.stringify(response)}`)
17554
- );
17600
+ const requestId = value.sequenceHeader.requestId;
17601
+ if (value.header.msgType === MsgTypeAbort) {
17602
+ const reader = new BinaryReader(value.body);
17603
+ const statusCode = reader.readUInt32();
17604
+ const reason = reader.readString();
17605
+ this.context.chunkBuffers.delete(requestId);
17606
+ this.pending.fail(requestId, new Error(`Abort 0x${statusCode.toString(16).toUpperCase()}: ${reason}`));
17555
17607
  } else {
17556
- this.pending.settle(value.sequenceHeader.requestId, response);
17608
+ const response = value.body;
17609
+ if (response instanceof ServiceFault) {
17610
+ this.pending.fail(requestId, new Error(`ServiceFault: ${JSON.stringify(response)}`));
17611
+ } else {
17612
+ this.pending.settle(requestId, response);
17613
+ }
17557
17614
  }
17558
17615
  }
17559
17616
  } catch (e) {
@@ -17684,33 +17741,67 @@ var SecurityPolicyNone = class {
17684
17741
  };
17685
17742
 
17686
17743
  // src/secureChannel/secureChannelContext.ts
17687
- var INT32_MAX = 2147483647;
17744
+ var SEQ_WRAP_THRESHOLD = 4294967295 - 1024;
17745
+ var SEQ_WRAP_START = 1;
17688
17746
  var SecureChannelContext = class {
17689
17747
  constructor(endpointUrl) {
17690
17748
  this.endpointUrl = endpointUrl;
17691
17749
  }
17692
- sequenceNumber = 0;
17693
- requestNumber = 1;
17750
+ /**
17751
+ * Next outgoing sequence number. Starts at 1 for non-ECC legacy profiles
17752
+ * per OPC UA Part 6, Section 6.7.2.4. The value 0 is used only as the
17753
+ * LastSequenceNumber sentinel in the OPN request ("no prior sequence").
17754
+ */
17755
+ sequenceNumber = 1;
17756
+ /** Next outgoing request ID. The value 0 is reserved and must be skipped. */
17757
+ requestId = 1;
17694
17758
  channelId = 0;
17695
17759
  tokenId = 0;
17696
- maxSendBufferSize = INT32_MAX;
17697
- maxRecvBufferSize = INT32_MAX;
17698
- chunkBuffers = [];
17760
+ maxSendBufferSize = 2147483647;
17761
+ maxRecvBufferSize = 2147483647;
17762
+ /** Pending chunk bodies keyed by requestId, for reassembling multi-chunk messages. */
17763
+ chunkBuffers = /* @__PURE__ */ new Map();
17699
17764
  securityAlgorithm;
17765
+ /** Last remote sequence number seen; undefined before the first received message. */
17766
+ lastRemoteSequenceNumber = void 0;
17700
17767
  securityPolicy = new SecurityPolicyNone();
17701
17768
  /**
17702
- * Atomically increments and returns the next sequence number and request id.
17703
- * Call once per outgoing message so both counters stay in sync.
17769
+ * Returns the current outgoing sequence number then advances it with
17770
+ * UInt32 wrap-around per OPC UA Part 6, Section 6.7.2.4. Only advances
17771
+ * the sequence counter — use when creating additional chunks for the same
17772
+ * message (each chunk needs its own sequence number but the same requestId).
17773
+ */
17774
+ nextSequenceNumber() {
17775
+ const seq = this.sequenceNumber;
17776
+ if (this.sequenceNumber >= SEQ_WRAP_THRESHOLD) {
17777
+ this.sequenceNumber = SEQ_WRAP_START;
17778
+ } else {
17779
+ this.sequenceNumber++;
17780
+ }
17781
+ return seq;
17782
+ }
17783
+ /**
17784
+ * Returns the next outgoing sequence number and request ID, then advances
17785
+ * both counters. Call once per outgoing message; use {@link nextSequenceNumber}
17786
+ * for additional chunks of the same message.
17787
+ *
17788
+ * Handles UInt32 wrap-around per OPC UA Part 6, Section 6.7.2.4:
17789
+ * sequence numbers reset to 1 after reaching 0xFFFFFFFF-1024; request IDs
17790
+ * skip the reserved value 0 on wrap.
17704
17791
  */
17705
17792
  nextIds() {
17706
- return {
17707
- sequenceNumber: this.sequenceNumber++,
17708
- requestId: this.requestNumber++
17709
- };
17793
+ const result = { sequenceNumber: this.nextSequenceNumber(), requestId: this.requestId };
17794
+ this.requestId++;
17795
+ if (this.requestId === 0) {
17796
+ this.requestId = 1;
17797
+ }
17798
+ return result;
17710
17799
  }
17711
17800
  };
17712
17801
 
17713
17802
  // src/secureChannel/secureChannelMessageDecoder.ts
17803
+ var SEQ_WRAP_THRESHOLD2 = 4294967295 - 1024;
17804
+ var SEQ_WRAP_MAX = 1024;
17714
17805
  var SecureChannelMessageDecoder = class extends TransformStream {
17715
17806
  constructor(context) {
17716
17807
  super({
@@ -17719,12 +17810,34 @@ var SecureChannelMessageDecoder = class extends TransformStream {
17719
17810
  this.context = context;
17720
17811
  }
17721
17812
  logger = getLogger("secureChannel.SecureChannelMessageDecoder");
17813
+ /**
17814
+ * Validates that `sequenceNumber` is strictly increasing from the last
17815
+ * seen remote sequence. Allows exactly one UInt32 wrap-around per token.
17816
+ * Returns false and logs an error if the number is a duplicate or out of order.
17817
+ */
17818
+ validateSequenceNumber(sequenceNumber, controller) {
17819
+ const last = this.context.lastRemoteSequenceNumber;
17820
+ if (last === void 0) {
17821
+ this.context.lastRemoteSequenceNumber = sequenceNumber;
17822
+ return true;
17823
+ }
17824
+ const isIncrement = sequenceNumber === last + 1;
17825
+ const isWrap = last >= SEQ_WRAP_THRESHOLD2 && sequenceNumber < SEQ_WRAP_MAX;
17826
+ if (!isIncrement && !isWrap) {
17827
+ this.logger.error(`Invalid remote sequence number: expected ${last + 1}, got ${sequenceNumber}`);
17828
+ controller.error(new Error(`Invalid remote sequence number: expected ${last + 1}, got ${sequenceNumber}`));
17829
+ return false;
17830
+ }
17831
+ this.context.lastRemoteSequenceNumber = sequenceNumber;
17832
+ return true;
17833
+ }
17722
17834
  transform(data, controller) {
17723
17835
  const buffer = new BinaryReader(data);
17724
17836
  const header = MsgHeader2.decode(buffer);
17725
17837
  switch (header.msgType) {
17726
- case MsgTypeOpenFinal: {
17727
- this.logger.debug("SecureChannel received OpenFinal message");
17838
+ case MsgTypeOpenFinal:
17839
+ case MsgTypeOpenChunk: {
17840
+ this.logger.debug("SecureChannel received OpenFinal/OpenChunk message");
17728
17841
  const secHeader = MsgSecurityHeaderAsymmetric.decode(buffer);
17729
17842
  const msgAsym = MsgAsymmetric.decode(
17730
17843
  buffer,
@@ -17732,16 +17845,22 @@ var SecureChannelMessageDecoder = class extends TransformStream {
17732
17845
  secHeader,
17733
17846
  this.context.securityAlgorithm
17734
17847
  );
17848
+ if (!this.validateSequenceNumber(msgAsym.sequenceHeader.sequenceNumber, controller)) return;
17735
17849
  controller.enqueue(msgAsym);
17736
17850
  break;
17737
17851
  }
17738
- case MsgTypeAbort:
17739
- this.logger.warn("Unimplemented Abort message");
17852
+ case MsgTypeAbort: {
17853
+ this.logger.warn("SecureChannel received Abort message");
17854
+ const secHeader = MsgSecurityHeaderSymmetric.decode(buffer);
17855
+ const msgSym = MsgSymmetric.decode(buffer, header, secHeader, this.context.securityAlgorithm);
17856
+ controller.enqueue(msgSym);
17740
17857
  break;
17858
+ }
17741
17859
  case MsgTypeChunk: {
17742
17860
  this.logger.debug("SecureChannel received Chunk message.");
17743
17861
  const secHeader = MsgSecurityHeaderSymmetric.decode(buffer);
17744
17862
  const msgSym = MsgSymmetric.decode(buffer, header, secHeader, this.context.securityAlgorithm);
17863
+ if (!this.validateSequenceNumber(msgSym.sequenceHeader.sequenceNumber, controller)) return;
17745
17864
  controller.enqueue(msgSym);
17746
17865
  break;
17747
17866
  }
@@ -17749,11 +17868,12 @@ var SecureChannelMessageDecoder = class extends TransformStream {
17749
17868
  this.logger.debug("SecureChannel received Final message");
17750
17869
  const secHeader = MsgSecurityHeaderSymmetric.decode(buffer);
17751
17870
  const msgSym = MsgSymmetric.decode(buffer, header, secHeader, this.context.securityAlgorithm);
17871
+ if (!this.validateSequenceNumber(msgSym.sequenceHeader.sequenceNumber, controller)) return;
17752
17872
  controller.enqueue(msgSym);
17753
17873
  break;
17754
17874
  }
17755
17875
  case MsgTypeCloseFinal:
17756
- this.logger.warn("Unimplemented CloseFinal message. ");
17876
+ this.logger.warn("Unimplemented CloseFinal message.");
17757
17877
  break;
17758
17878
  default:
17759
17879
  this.logger.warn("SecureChannel received unknown message type:", header.msgType);
@@ -17763,7 +17883,7 @@ var SecureChannelMessageDecoder = class extends TransformStream {
17763
17883
  };
17764
17884
 
17765
17885
  // src/secureChannel/secureChannelMessageEncoder.ts
17766
- var SecureChannelMesssageEncoder = class extends TransformStream {
17886
+ var SecureChannelMessageEncoder = class extends TransformStream {
17767
17887
  constructor(context) {
17768
17888
  super({
17769
17889
  transform(msg, controller) {
@@ -17778,24 +17898,33 @@ var SecureChannelMesssageEncoder = class extends TransformStream {
17778
17898
  // src/secureChannel/secureChannelChunkReader.ts
17779
17899
  var SecureChannelChunkReader = class extends TransformStream {
17780
17900
  logger = getLogger("secureChannel.SecureChannelChunkReader");
17781
- prependChunk(chunk, body) {
17782
- const result = new Uint8Array(chunk.byteLength + body.byteLength);
17783
- result.set(chunk, 0);
17784
- result.set(body, chunk.byteLength);
17785
- return result;
17786
- }
17787
17901
  transform(msg, context, controller) {
17902
+ const requestId = msg.sequenceHeader.requestId;
17788
17903
  switch (msg.header.msgType) {
17789
- case MsgTypeChunk: {
17904
+ case MsgTypeChunk:
17905
+ case MsgTypeOpenChunk: {
17790
17906
  this.logger.debug("Received Chunk message");
17791
- context.chunkBuffers.push(msg.body);
17907
+ const chunks = context.chunkBuffers.get(requestId) ?? [];
17908
+ chunks.push(msg.body);
17909
+ context.chunkBuffers.set(requestId, chunks);
17792
17910
  break;
17793
17911
  }
17794
- case MsgTypeFinal: {
17912
+ case MsgTypeFinal:
17913
+ case MsgTypeOpenFinal: {
17795
17914
  this.logger.debug("Received Final message");
17796
- while (context.chunkBuffers.length > 0) {
17797
- const chunk = context.chunkBuffers.pop();
17798
- msg.body = this.prependChunk(chunk, msg.body);
17915
+ const chunks = context.chunkBuffers.get(requestId);
17916
+ if (chunks && chunks.length > 0) {
17917
+ const finalBody = msg.body;
17918
+ const totalLength = chunks.reduce((sum, c) => sum + c.byteLength, 0) + finalBody.byteLength;
17919
+ const assembled = new Uint8Array(totalLength);
17920
+ let offset = 0;
17921
+ for (const chunk of chunks) {
17922
+ assembled.set(chunk, offset);
17923
+ offset += chunk.byteLength;
17924
+ }
17925
+ assembled.set(finalBody, offset);
17926
+ msg.body = assembled;
17927
+ context.chunkBuffers.delete(requestId);
17799
17928
  }
17800
17929
  controller.enqueue(msg);
17801
17930
  break;
@@ -17829,33 +17958,43 @@ var SecureChannelChunkWriter = class extends TransformStream {
17829
17958
  this.logger.debug("Received Final message");
17830
17959
  const securityAlgorithm = this.context.securityAlgorithm;
17831
17960
  const maxCipherTextSize = this.context.maxSendBufferSize - MsgHeader2.Size - MsgSecurityHeaderSymmetric.Size;
17832
- const maxPlainTextSize = maxCipherTextSize / securityAlgorithm.GetEncryptedSize(maxCipherTextSize);
17833
- const maxPayloadSize = maxPlainTextSize - securityAlgorithm.GetSignatureLength() - 1 - MsgSecurityHeaderSymmetric.Size + (securityAlgorithm.IsAuthenticated() ? 1 : 0);
17961
+ const maxPayloadSize = securityAlgorithm.GetMaxPayload(maxCipherTextSize) - MsgSequenceHeader.Size;
17834
17962
  const data = msgSymmetric.body;
17835
- const chunkCount = data.byteLength / maxPayloadSize;
17836
- if (chunkCount > 1) {
17837
- this.logger.debug(`Message body exceeds max chunk size, splitting into ${chunkCount} chunks.`);
17838
- for (let i = 0; i < chunkCount; i++) {
17963
+ const numChunks = Math.ceil(data.byteLength / maxPayloadSize);
17964
+ if (numChunks > 1) {
17965
+ this.logger.debug(`Message body exceeds max chunk size, splitting into ${numChunks} chunks.`);
17966
+ for (let i = 0; i < numChunks - 1; i++) {
17839
17967
  const chunkMsg = new MsgSymmetric(
17840
- new MsgHeader2(MsgTypeChunk, -1, msgSymmetric.header.secureChannelId),
17968
+ // messageSize=0 is a placeholder: MsgBase.Encrypt() overwrites it at byte offset 4
17969
+ // with the actual encrypted size before writing to the wire.
17970
+ new MsgHeader2(MsgTypeChunk, 0, msgSymmetric.header.secureChannelId),
17841
17971
  msgSymmetric.securityHeader,
17842
- msgSymmetric.sequenceHeader,
17972
+ new MsgSequenceHeader(
17973
+ this.context.nextSequenceNumber(),
17974
+ msgSymmetric.sequenceHeader.requestId
17975
+ ),
17843
17976
  data.subarray(i * maxPayloadSize, (i + 1) * maxPayloadSize)
17844
17977
  );
17845
- this.logger.trace(`Enqueuing chunk ${i + 1}/${chunkCount} with size ${chunkMsg.body.byteLength} bytes.`);
17978
+ this.logger.trace(
17979
+ `Enqueuing chunk ${i + 1}/${numChunks} with size ${chunkMsg.body.byteLength} bytes.`
17980
+ );
17846
17981
  controller.enqueue(chunkMsg);
17847
17982
  }
17848
- msg.body = data.subarray(chunkCount * maxPayloadSize);
17983
+ msg.sequenceHeader = new MsgSequenceHeader(
17984
+ this.context.nextSequenceNumber(),
17985
+ msgSymmetric.sequenceHeader.requestId
17986
+ );
17987
+ msg.body = data.subarray((numChunks - 1) * maxPayloadSize);
17849
17988
  }
17850
17989
  break;
17851
17990
  }
17852
17991
  }
17853
17992
  }
17854
- this.logger.trace(`Enqueuing message default message with body size ${msg.body.byteLength} bytes.`);
17993
+ this.logger.trace(`Enqueuing final message with body size ${msg.body.byteLength} bytes.`);
17855
17994
  controller.enqueue(msg);
17856
17995
  }
17857
17996
  };
17858
17997
 
17859
- export { ActionMethodDataType, ActionStateEnum, ActionTargetDataType, ActivateSessionRequest, ActivateSessionResponse, AddNodesItem, AddNodesRequest, AddNodesResponse, AddNodesResult, AddReferencesItem, AddReferencesRequest, AddReferencesResponse, AdditionalParametersType, AggregateConfiguration, AggregateFilter, AggregateFilterResult, AliasNameDataType, Annotation, AnnotationDataType, AnonymousIdentityToken, ApplicationConfigurationDataType, ApplicationDescription, ApplicationIdentityDataType, ApplicationTypeEnum, Argument, AttributeOperand, AuthorizationServiceConfigurationDataType, AxisInformation, AxisScaleEnumerationEnum, BaseConfigurationDataType, BaseConfigurationRecordDataType, SecureChannelTypeDecoder as BinaryDecoderTransform, SecureChannelTypeEncoder as BinaryEncoderTransform, BinaryReader, BinaryWriter, BitFieldDefinition, BrokerConnectionTransportDataType, BrokerDataSetReaderTransportDataType, BrokerDataSetWriterTransportDataType, BrokerTransportQualityOfServiceEnum, BrokerWriterGroupTransportDataType, BrowseDescription, BrowseDirectionEnum, BrowseNextRequest, BrowseNextResponse, BrowsePath, BrowsePathResult, BrowsePathTarget, BrowseRequest, BrowseResponse, BrowseResult, BrowseResultMaskEnum, BuildInfo, CallMethodRequest, CallMethodResult, CallRequest, CallResponse, CancelRequest, CancelResponse, CartesianCoordinates, CertificateGroupDataType, ChannelSecurityToken, ChassisIdSubtypeEnum, CloseSecureChannelRequest, CloseSecureChannelResponse, CloseSessionRequest, CloseSessionResponse, ComplexNumberType, Configuration, ConfigurationUpdateTargetType, ConfigurationUpdateTypeEnum, ConfigurationVersionDataType, ConnectionTransportDataType, ConsoleSink, ContentFilter, ContentFilterElement, ContentFilterElementResult, ContentFilterResult, ConversionLimitEnumEnum, CreateMonitoredItemsRequest, CreateMonitoredItemsResponse, CreateSessionRequest, CreateSessionResponse, CreateSubscriptionRequest, CreateSubscriptionResponse, CurrencyUnitType, DataChangeFilter, DataChangeNotification, DataChangeTriggerEnum, DataSetMetaDataType, DataSetOrderingTypeEnum, DataSetReaderDataType, DataSetReaderMessageDataType, DataSetReaderTransportDataType, DataSetWriterDataType, DataSetWriterMessageDataType, DataSetWriterTransportDataType, DataTypeAttributes, DataTypeDefinition, DataTypeDescription, DataTypeNode, DataTypeSchemaHeader, DataValue, DatagramConnectionTransport2DataType, DatagramConnectionTransportDataType, DatagramDataSetReaderTransportDataType, DatagramWriterGroupTransport2DataType, DatagramWriterGroupTransportDataType, DeadbandTypeEnum, DecimalDataType, Decoder, DeleteAtTimeDetails, DeleteEventDetails, DeleteMonitoredItemsRequest, DeleteMonitoredItemsResponse, DeleteNodesItem, DeleteNodesRequest, DeleteNodesResponse, DeleteRawModifiedDetails, DeleteReferencesItem, DeleteReferencesRequest, DeleteReferencesResponse, DeleteSubscriptionsRequest, DeleteSubscriptionsResponse, DiagnosticInfo, DiagnosticsLevelEnum, DiscoveryConfiguration, DoubleComplexNumberType, DtlsPubSubConnectionDataType, DuplexEnum, EUInformation, ElementOperand, Encoder, EndpointConfiguration, EndpointDataType, EndpointDescription, EndpointType, EndpointUrlListDataType, EnumDefinition, EnumDescription, EnumField, EnumValueType, EphemeralKeyType, EventFieldList, EventFilter, EventFilterResult, EventNotificationList, ExceptionDeviationFormatEnum, ExpandedNodeId, ExtensionObject, FieldMetaData, FieldTargetDataType, FilterOperand, FilterOperatorEnum, FindServersOnNetworkRequest, FindServersOnNetworkResponse, FindServersRequest, FindServersResponse, Frame, GenericAttributeValue, GenericAttributes, GetEndpointsRequest, GetEndpointsResponse, HistoryData, HistoryEvent, HistoryEventFieldList, HistoryModifiedData, HistoryModifiedEvent, HistoryReadDetails, HistoryReadRequest, HistoryReadResponse, HistoryReadResult, HistoryReadValueId, HistoryUpdateDetails, HistoryUpdateRequest, HistoryUpdateResponse, HistoryUpdateResult, HistoryUpdateTypeEnum, IdTypeEnum, IdentityCriteriaTypeEnum, IdentityMappingRuleType, InstanceNode, InterfaceAdminStatusEnum, InterfaceOperStatusEnum, IssuedIdentityToken, JsonActionMetaDataMessage, JsonActionNetworkMessage, JsonActionRequestMessage, JsonActionResponderMessage, JsonActionResponseMessage, JsonApplicationDescriptionMessage, JsonDataSetMessage, JsonDataSetMetaDataMessage, JsonDataSetReaderMessageDataType, JsonDataSetWriterMessageDataType, JsonNetworkMessage, JsonPubSubConnectionMessage, JsonServerEndpointsMessage, JsonStatusMessage, JsonWriterGroupMessageDataType, KeyValuePair, LinearConversionDataType, LiteralOperand, LldpManagementAddressTxPortType, LldpManagementAddressType, LldpTlvType, LocalizedText, LogRecordsDataType, LoggerFactory, ManAddrIfSubtypeEnum, MdnsDiscoveryConfiguration, MessageSecurityModeEnum, MethodAttributes, MethodNode, ModelChangeStructureDataType, ModelChangeStructureVerbMaskEnum, ModificationInfo, ModifyMonitoredItemsRequest, ModifyMonitoredItemsResponse, ModifySubscriptionRequest, ModifySubscriptionResponse, MonitoredItemCreateRequest, MonitoredItemCreateResult, MonitoredItemModifyRequest, MonitoredItemModifyResult, MonitoredItemNotification, MonitoringFilter, MonitoringFilterResult, MonitoringModeEnum, MonitoringParameters, NameValuePair, NamingRuleTypeEnum, NegotiationStatusEnum, NetworkAddressDataType, NetworkAddressUrlDataType, NetworkGroupDataType, Node, NodeAttributes, NodeAttributesMaskEnum, NodeClassEnum, NodeId, NodeIdType, NodeReference, NodeTypeDescription, NotificationData, NotificationMessage, ObjectAttributes, ObjectNode, ObjectTypeAttributes, ObjectTypeNode, OpenFileModeEnum, OpenSecureChannelRequest, OpenSecureChannelResponse, OptionSet, Orientation, OverrideValueHandlingEnum, ParsingResult, PerformUpdateTypeEnum, PortIdSubtypeEnum, PortableNodeId, PortableQualifiedName, PriorityMappingEntryType, ProgramDiagnostic2DataType, ProgramDiagnosticDataType, PubSubConfiguration2DataType, PubSubConfigurationDataType, PubSubConfigurationRefDataType, PubSubConfigurationValueDataType, PubSubConnectionDataType, PubSubDiagnosticsCounterClassificationEnum, PubSubGroupDataType, PubSubKeyPushTargetDataType, PubSubStateEnum, PublishRequest, PublishResponse, PublishedActionDataType, PublishedActionMethodDataType, PublishedDataItemsDataType, PublishedDataSetCustomSourceDataType, PublishedDataSetDataType, PublishedDataSetSourceDataType, PublishedEventsDataType, PublishedVariableDataType, QosDataType, QualifiedName, QuantityDimension, QueryDataDescription, QueryDataSet, QueryFirstRequest, QueryFirstResponse, QueryNextRequest, QueryNextResponse, Range, RationalNumber, ReadAnnotationDataDetails, ReadAtTimeDetails, ReadEventDetails, ReadEventDetails2, ReadEventDetailsSorted, ReadProcessedDetails, ReadRawModifiedDetails, ReadRequest, ReadResponse, ReadValueId, ReaderGroupDataType, ReaderGroupMessageDataType, ReaderGroupTransportDataType, ReceiveQosDataType, ReceiveQosPriorityDataType, RedundancySupportEnum, RedundantServerDataType, RedundantServerModeEnum, ReferenceDescription, ReferenceDescriptionDataType, ReferenceListEntryDataType, ReferenceNode, ReferenceTypeAttributes, ReferenceTypeNode, RegisterNodesRequest, RegisterNodesResponse, RegisterServer2Request, RegisterServer2Response, RegisterServerRequest, RegisterServerResponse, RegisteredServer, RelativePath, RelativePathElement, RepublishRequest, RepublishResponse, RequestHeader, ResponseHeader, RolePermissionType, SamplingIntervalDiagnosticsDataType, SecureChannelChunkReader, SecureChannelChunkWriter, SecureChannelContext, SecureChannelFacade, SecureChannelMessageDecoder, SecureChannelMesssageEncoder, SecureChannelTypeDecoder, SecureChannelTypeEncoder, SecurityGroupDataType, SecuritySettingsDataType, SecurityTokenRequestTypeEnum, SemanticChangeStructureDataType, ServerDiagnosticsSummaryDataType, ServerEndpointDataType, ServerOnNetwork, ServerStateEnum, ServerStatusDataType, ServiceCertificateDataType, ServiceCounterDataType, ServiceFault, SessionDiagnosticsDataType, SessionSecurityDiagnosticsDataType, SessionlessInvokeRequestType, SessionlessInvokeResponseType, SetMonitoringModeRequest, SetMonitoringModeResponse, SetPublishingModeRequest, SetPublishingModeResponse, SetTriggeringRequest, SetTriggeringResponse, SignatureData, SignedSoftwareCertificate, SimpleAttributeOperand, SimpleTypeDescription, SortOrderTypeEnum, SortRuleElement, SpanContextDataType, StandaloneSubscribedDataSetDataType, StandaloneSubscribedDataSetRefDataType, StatusChangeNotification, StatusCode, StatusCodeGetFlagBits, StatusCodeIs, StatusCodeToString, StatusCodeToStringNumber, StatusResult, Structure, StructureDefinition, StructureDescription, StructureField, StructureTypeEnum, SubscribedDataSetDataType, SubscribedDataSetMirrorDataType, SubscriptionAcknowledgement, SubscriptionDiagnosticsDataType, TargetVariablesDataType, TcpConnectionHandler, TcpMessageDecoupler, TcpMessageInjector, TimeZoneDataType, TimestampsToReturnEnum, TraceContextDataType, TransactionErrorType, TransferResult, TransferSubscriptionsRequest, TransferSubscriptionsResponse, TranslateBrowsePathsToNodeIdsRequest, TranslateBrowsePathsToNodeIdsResponse, TransmitQosDataType, TransmitQosPriorityDataType, TrustListDataType, TrustListMasksEnum, TsnFailureCodeEnum, TsnListenerStatusEnum, TsnStreamStateEnum, TsnTalkerStatusEnum, TypeNode, UABinaryFileDataType, UadpDataSetReaderMessageDataType, UadpDataSetWriterMessageDataType, UadpWriterGroupMessageDataType, Union, UnregisterNodesRequest, UnregisterNodesResponse, UnsignedRationalNumber, UpdateDataDetails, UpdateEventDetails, UpdateStructureDataDetails, UserIdentityToken, UserManagementDataType, UserNameIdentityToken, UserTokenPolicy, UserTokenSettingsDataType, UserTokenTypeEnum, VariableAttributes, VariableNode, VariableTypeAttributes, VariableTypeNode, Variant, Vector, ViewAttributes, ViewDescription, ViewNode, WebSocketFascade, WebSocketReadableStream, WebSocketWritableStream, WriteRequest, WriteResponse, WriteValue, WriterGroupDataType, WriterGroupMessageDataType, WriterGroupTransportDataType, X509IdentityToken, XVType, XmlElement, _3DCartesianCoordinates, _3DFrame, _3DOrientation, _3DVector, getLogger, initLoggerProvider, registerBinaryDecoders, registerEncoders, registerJsonDecoders, registerTypeDecoders, registerXmlDecoders, uaByte, uaDouble, uaFloat, uaGuid, uaInt16, uaInt32, uaInt64, uaSbyte, uaUint16, uaUint32, uaUint64 };
17998
+ export { ActionMethodDataType, ActionStateEnum, ActionTargetDataType, ActivateSessionRequest, ActivateSessionResponse, AddNodesItem, AddNodesRequest, AddNodesResponse, AddNodesResult, AddReferencesItem, AddReferencesRequest, AddReferencesResponse, AdditionalParametersType, AggregateConfiguration, AggregateFilter, AggregateFilterResult, AliasNameDataType, Annotation, AnnotationDataType, AnonymousIdentityToken, ApplicationConfigurationDataType, ApplicationDescription, ApplicationIdentityDataType, ApplicationTypeEnum, Argument, AttributeOperand, AuthorizationServiceConfigurationDataType, AxisInformation, AxisScaleEnumerationEnum, BaseConfigurationDataType, BaseConfigurationRecordDataType, SecureChannelTypeDecoder as BinaryDecoderTransform, SecureChannelTypeEncoder as BinaryEncoderTransform, BinaryReader, BinaryWriter, BitFieldDefinition, BrokerConnectionTransportDataType, BrokerDataSetReaderTransportDataType, BrokerDataSetWriterTransportDataType, BrokerTransportQualityOfServiceEnum, BrokerWriterGroupTransportDataType, BrowseDescription, BrowseDirectionEnum, BrowseNextRequest, BrowseNextResponse, BrowsePath, BrowsePathResult, BrowsePathTarget, BrowseRequest, BrowseResponse, BrowseResult, BrowseResultMaskEnum, BuildInfo, CallMethodRequest, CallMethodResult, CallRequest, CallResponse, CancelRequest, CancelResponse, CartesianCoordinates, CertificateGroupDataType, ChannelSecurityToken, ChassisIdSubtypeEnum, CloseSecureChannelRequest, CloseSecureChannelResponse, CloseSessionRequest, CloseSessionResponse, ComplexNumberType, Configuration, ConfigurationUpdateTargetType, ConfigurationUpdateTypeEnum, ConfigurationVersionDataType, ConnectionTransportDataType, ConsoleSink, ContentFilter, ContentFilterElement, ContentFilterElementResult, ContentFilterResult, ConversionLimitEnumEnum, CreateMonitoredItemsRequest, CreateMonitoredItemsResponse, CreateSessionRequest, CreateSessionResponse, CreateSubscriptionRequest, CreateSubscriptionResponse, CurrencyUnitType, DataChangeFilter, DataChangeNotification, DataChangeTriggerEnum, DataSetMetaDataType, DataSetOrderingTypeEnum, DataSetReaderDataType, DataSetReaderMessageDataType, DataSetReaderTransportDataType, DataSetWriterDataType, DataSetWriterMessageDataType, DataSetWriterTransportDataType, DataTypeAttributes, DataTypeDefinition, DataTypeDescription, DataTypeNode, DataTypeSchemaHeader, DataValue, DatagramConnectionTransport2DataType, DatagramConnectionTransportDataType, DatagramDataSetReaderTransportDataType, DatagramWriterGroupTransport2DataType, DatagramWriterGroupTransportDataType, DeadbandTypeEnum, DecimalDataType, Decoder, DeleteAtTimeDetails, DeleteEventDetails, DeleteMonitoredItemsRequest, DeleteMonitoredItemsResponse, DeleteNodesItem, DeleteNodesRequest, DeleteNodesResponse, DeleteRawModifiedDetails, DeleteReferencesItem, DeleteReferencesRequest, DeleteReferencesResponse, DeleteSubscriptionsRequest, DeleteSubscriptionsResponse, DiagnosticInfo, DiagnosticsLevelEnum, DiscoveryConfiguration, DoubleComplexNumberType, DtlsPubSubConnectionDataType, DuplexEnum, EUInformation, ElementOperand, Encoder, EndpointConfiguration, EndpointDataType, EndpointDescription, EndpointType, EndpointUrlListDataType, EnumDefinition, EnumDescription, EnumField, EnumValueType, EphemeralKeyType, EventFieldList, EventFilter, EventFilterResult, EventNotificationList, ExceptionDeviationFormatEnum, ExpandedNodeId, ExtensionObject, FieldMetaData, FieldTargetDataType, FilterOperand, FilterOperatorEnum, FindServersOnNetworkRequest, FindServersOnNetworkResponse, FindServersRequest, FindServersResponse, Frame, GenericAttributeValue, GenericAttributes, GetEndpointsRequest, GetEndpointsResponse, HistoryData, HistoryEvent, HistoryEventFieldList, HistoryModifiedData, HistoryModifiedEvent, HistoryReadDetails, HistoryReadRequest, HistoryReadResponse, HistoryReadResult, HistoryReadValueId, HistoryUpdateDetails, HistoryUpdateRequest, HistoryUpdateResponse, HistoryUpdateResult, HistoryUpdateTypeEnum, IdTypeEnum, IdentityCriteriaTypeEnum, IdentityMappingRuleType, InstanceNode, InterfaceAdminStatusEnum, InterfaceOperStatusEnum, IssuedIdentityToken, JsonActionMetaDataMessage, JsonActionNetworkMessage, JsonActionRequestMessage, JsonActionResponderMessage, JsonActionResponseMessage, JsonApplicationDescriptionMessage, JsonDataSetMessage, JsonDataSetMetaDataMessage, JsonDataSetReaderMessageDataType, JsonDataSetWriterMessageDataType, JsonNetworkMessage, JsonPubSubConnectionMessage, JsonServerEndpointsMessage, JsonStatusMessage, JsonWriterGroupMessageDataType, KeyValuePair, LinearConversionDataType, LiteralOperand, LldpManagementAddressTxPortType, LldpManagementAddressType, LldpTlvType, LocalizedText, LogRecordsDataType, LoggerFactory, ManAddrIfSubtypeEnum, MdnsDiscoveryConfiguration, MessageSecurityModeEnum, MethodAttributes, MethodNode, ModelChangeStructureDataType, ModelChangeStructureVerbMaskEnum, ModificationInfo, ModifyMonitoredItemsRequest, ModifyMonitoredItemsResponse, ModifySubscriptionRequest, ModifySubscriptionResponse, MonitoredItemCreateRequest, MonitoredItemCreateResult, MonitoredItemModifyRequest, MonitoredItemModifyResult, MonitoredItemNotification, MonitoringFilter, MonitoringFilterResult, MonitoringModeEnum, MonitoringParameters, NameValuePair, NamingRuleTypeEnum, NegotiationStatusEnum, NetworkAddressDataType, NetworkAddressUrlDataType, NetworkGroupDataType, Node, NodeAttributes, NodeAttributesMaskEnum, NodeClassEnum, NodeId, NodeIdType, NodeReference, NodeTypeDescription, NotificationData, NotificationMessage, ObjectAttributes, ObjectNode, ObjectTypeAttributes, ObjectTypeNode, OpenFileModeEnum, OpenSecureChannelRequest, OpenSecureChannelResponse, OptionSet, Orientation, OverrideValueHandlingEnum, ParsingResult, PerformUpdateTypeEnum, PortIdSubtypeEnum, PortableNodeId, PortableQualifiedName, PriorityMappingEntryType, ProgramDiagnostic2DataType, ProgramDiagnosticDataType, PubSubConfiguration2DataType, PubSubConfigurationDataType, PubSubConfigurationRefDataType, PubSubConfigurationValueDataType, PubSubConnectionDataType, PubSubDiagnosticsCounterClassificationEnum, PubSubGroupDataType, PubSubKeyPushTargetDataType, PubSubStateEnum, PublishRequest, PublishResponse, PublishedActionDataType, PublishedActionMethodDataType, PublishedDataItemsDataType, PublishedDataSetCustomSourceDataType, PublishedDataSetDataType, PublishedDataSetSourceDataType, PublishedEventsDataType, PublishedVariableDataType, QosDataType, QualifiedName, QuantityDimension, QueryDataDescription, QueryDataSet, QueryFirstRequest, QueryFirstResponse, QueryNextRequest, QueryNextResponse, Range, RationalNumber, ReadAnnotationDataDetails, ReadAtTimeDetails, ReadEventDetails, ReadEventDetails2, ReadEventDetailsSorted, ReadProcessedDetails, ReadRawModifiedDetails, ReadRequest, ReadResponse, ReadValueId, ReaderGroupDataType, ReaderGroupMessageDataType, ReaderGroupTransportDataType, ReceiveQosDataType, ReceiveQosPriorityDataType, RedundancySupportEnum, RedundantServerDataType, RedundantServerModeEnum, ReferenceDescription, ReferenceDescriptionDataType, ReferenceListEntryDataType, ReferenceNode, ReferenceTypeAttributes, ReferenceTypeNode, RegisterNodesRequest, RegisterNodesResponse, RegisterServer2Request, RegisterServer2Response, RegisterServerRequest, RegisterServerResponse, RegisteredServer, RelativePath, RelativePathElement, RepublishRequest, RepublishResponse, RequestHeader, ResponseHeader, RolePermissionType, SamplingIntervalDiagnosticsDataType, SecureChannelChunkReader, SecureChannelChunkWriter, SecureChannelContext, SecureChannelFacade, SecureChannelMessageDecoder, SecureChannelMessageEncoder, SecureChannelTypeDecoder, SecureChannelTypeEncoder, SecurityGroupDataType, SecuritySettingsDataType, SecurityTokenRequestTypeEnum, SemanticChangeStructureDataType, ServerDiagnosticsSummaryDataType, ServerEndpointDataType, ServerOnNetwork, ServerStateEnum, ServerStatusDataType, ServiceCertificateDataType, ServiceCounterDataType, ServiceFault, SessionDiagnosticsDataType, SessionSecurityDiagnosticsDataType, SessionlessInvokeRequestType, SessionlessInvokeResponseType, SetMonitoringModeRequest, SetMonitoringModeResponse, SetPublishingModeRequest, SetPublishingModeResponse, SetTriggeringRequest, SetTriggeringResponse, SignatureData, SignedSoftwareCertificate, SimpleAttributeOperand, SimpleTypeDescription, SortOrderTypeEnum, SortRuleElement, SpanContextDataType, StandaloneSubscribedDataSetDataType, StandaloneSubscribedDataSetRefDataType, StatusChangeNotification, StatusCode, StatusCodeGetFlagBits, StatusCodeIs, StatusCodeToString, StatusCodeToStringNumber, StatusResult, Structure, StructureDefinition, StructureDescription, StructureField, StructureTypeEnum, SubscribedDataSetDataType, SubscribedDataSetMirrorDataType, SubscriptionAcknowledgement, SubscriptionDiagnosticsDataType, TargetVariablesDataType, TcpConnectionHandler, TcpMessageDecoupler, TcpMessageInjector, TimeZoneDataType, TimestampsToReturnEnum, TraceContextDataType, TransactionErrorType, TransferResult, TransferSubscriptionsRequest, TransferSubscriptionsResponse, TranslateBrowsePathsToNodeIdsRequest, TranslateBrowsePathsToNodeIdsResponse, TransmitQosDataType, TransmitQosPriorityDataType, TrustListDataType, TrustListMasksEnum, TsnFailureCodeEnum, TsnListenerStatusEnum, TsnStreamStateEnum, TsnTalkerStatusEnum, TypeNode, UABinaryFileDataType, UadpDataSetReaderMessageDataType, UadpDataSetWriterMessageDataType, UadpWriterGroupMessageDataType, Union, UnregisterNodesRequest, UnregisterNodesResponse, UnsignedRationalNumber, UpdateDataDetails, UpdateEventDetails, UpdateStructureDataDetails, UserIdentityToken, UserManagementDataType, UserNameIdentityToken, UserTokenPolicy, UserTokenSettingsDataType, UserTokenTypeEnum, VariableAttributes, VariableNode, VariableTypeAttributes, VariableTypeNode, Variant, Vector, ViewAttributes, ViewDescription, ViewNode, WebSocketFascade, WebSocketReadableStream, WebSocketWritableStream, WriteRequest, WriteResponse, WriteValue, WriterGroupDataType, WriterGroupMessageDataType, WriterGroupTransportDataType, X509IdentityToken, XVType, XmlElement, _3DCartesianCoordinates, _3DFrame, _3DOrientation, _3DVector, getLogger, initLoggerProvider, registerBinaryDecoders, registerEncoders, registerJsonDecoders, registerTypeDecoders, registerXmlDecoders, uaByte, uaDouble, uaFloat, uaGuid, uaInt16, uaInt32, uaInt64, uaSbyte, uaUint16, uaUint32, uaUint64 };
17860
17999
  //# sourceMappingURL=index.js.map
17861
18000
  //# sourceMappingURL=index.js.map