opcjs-base 0.1.26-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.cjs +256 -124
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +85 -55
- package/dist/index.d.ts +85 -55
- package/dist/index.js +256 -124
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,5 +1,39 @@
|
|
|
1
1
|
import { XMLParser } from 'fast-xml-parser';
|
|
2
2
|
|
|
3
|
+
// src/types/expandedNodeId.ts
|
|
4
|
+
var ExpandedNodeId = class {
|
|
5
|
+
/** The wrapped NodeId. */
|
|
6
|
+
nodeId;
|
|
7
|
+
/** The server index (optional, for cross-server references). */
|
|
8
|
+
serverIndex;
|
|
9
|
+
/** The namespace URI (optional, alternative to the namespace index on nodeId). */
|
|
10
|
+
namespaceUri;
|
|
11
|
+
/**
|
|
12
|
+
* Create a new ExpandedNodeId.
|
|
13
|
+
*
|
|
14
|
+
* @param nodeId - The wrapped NodeId
|
|
15
|
+
* @param namespaceUri - Optional namespace URI
|
|
16
|
+
* @param serverIndex - Optional server index
|
|
17
|
+
*/
|
|
18
|
+
constructor(nodeId, namespaceUri, serverIndex) {
|
|
19
|
+
this.nodeId = nodeId;
|
|
20
|
+
this.namespaceUri = namespaceUri;
|
|
21
|
+
this.serverIndex = serverIndex;
|
|
22
|
+
}
|
|
23
|
+
/** Convert ExpandedNodeId to string representation. */
|
|
24
|
+
toString() {
|
|
25
|
+
let result = "";
|
|
26
|
+
if (this.serverIndex !== void 0) {
|
|
27
|
+
result += `svr=${this.serverIndex};`;
|
|
28
|
+
}
|
|
29
|
+
if (this.namespaceUri !== void 0) {
|
|
30
|
+
result += `nsu=${this.namespaceUri};`;
|
|
31
|
+
}
|
|
32
|
+
result += this.nodeId.toString();
|
|
33
|
+
return result;
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
|
|
3
37
|
// src/types/nodeId.ts
|
|
4
38
|
var NodeIdType = /* @__PURE__ */ ((NodeIdType2) => {
|
|
5
39
|
NodeIdType2[NodeIdType2["Numeric"] = 0] = "Numeric";
|
|
@@ -170,47 +204,6 @@ var NodeId = class _NodeId {
|
|
|
170
204
|
}
|
|
171
205
|
};
|
|
172
206
|
|
|
173
|
-
// src/types/expandedNodeId.ts
|
|
174
|
-
var ExpandedNodeId = class extends NodeId {
|
|
175
|
-
/**
|
|
176
|
-
* The server index (optional, for cross-server references)
|
|
177
|
-
*/
|
|
178
|
-
serverIndex;
|
|
179
|
-
/**
|
|
180
|
-
* The namespace URI (optional, alternative to namespace index)
|
|
181
|
-
*/
|
|
182
|
-
namespaceUri;
|
|
183
|
-
/**
|
|
184
|
-
* Create a new ExpandedNodeId
|
|
185
|
-
*
|
|
186
|
-
* @param namespace - The namespace index
|
|
187
|
-
* @param identifier - The identifier
|
|
188
|
-
* @param namespaceUri - Optional namespace URI
|
|
189
|
-
* @param serverIndex - Optional server index
|
|
190
|
-
*/
|
|
191
|
-
constructor(namespace = 0, identifier = 0, namespaceUri, serverIndex) {
|
|
192
|
-
super(namespace, identifier);
|
|
193
|
-
this.namespaceUri = namespaceUri;
|
|
194
|
-
this.serverIndex = serverIndex;
|
|
195
|
-
}
|
|
196
|
-
/**
|
|
197
|
-
* Convert ExpandedNodeId to string representation
|
|
198
|
-
*
|
|
199
|
-
* @returns String representation of the ExpandedNodeId
|
|
200
|
-
*/
|
|
201
|
-
toString() {
|
|
202
|
-
let result = "";
|
|
203
|
-
if (this.serverIndex !== void 0) {
|
|
204
|
-
result += `svr=${this.serverIndex};`;
|
|
205
|
-
}
|
|
206
|
-
if (this.namespaceUri !== void 0) {
|
|
207
|
-
result += `nsu=${this.namespaceUri};`;
|
|
208
|
-
}
|
|
209
|
-
result += super.toString();
|
|
210
|
-
return result;
|
|
211
|
-
}
|
|
212
|
-
};
|
|
213
|
-
|
|
214
207
|
// src/codecs/encoder.ts
|
|
215
208
|
var Encoder = class {
|
|
216
209
|
encoders = /* @__PURE__ */ new Map();
|
|
@@ -228,7 +221,7 @@ var Encoder = class {
|
|
|
228
221
|
}
|
|
229
222
|
const writer = writerFactory();
|
|
230
223
|
const encodingId = value.getBinaryEncodingId();
|
|
231
|
-
const eid = new ExpandedNodeId(0, encodingId);
|
|
224
|
+
const eid = new ExpandedNodeId(new NodeId(0, encodingId));
|
|
232
225
|
writer.writeExpandedNodeId(eid);
|
|
233
226
|
const typeId = value.getTypeId();
|
|
234
227
|
const encodingFunction = this.encoders.get(typeId);
|
|
@@ -275,7 +268,7 @@ var Decoder = class {
|
|
|
275
268
|
}
|
|
276
269
|
const reader = readerFactory(data);
|
|
277
270
|
const eid = reader.readExpandedNodeId();
|
|
278
|
-
return this.decodeWithEncodingId(eid.identifier, reader);
|
|
271
|
+
return this.decodeWithEncodingId(eid.nodeId.identifier, reader);
|
|
279
272
|
}
|
|
280
273
|
decodeWithEncodingId(encodingId, reader) {
|
|
281
274
|
const decodingInfo = this.encodingIdMap.get(encodingId);
|
|
@@ -491,7 +484,7 @@ function decodeExpandedNodeId(reader) {
|
|
|
491
484
|
if (hasServerIndex) {
|
|
492
485
|
serverIndex = reader.readUInt32();
|
|
493
486
|
}
|
|
494
|
-
return new ExpandedNodeId(nodeId
|
|
487
|
+
return new ExpandedNodeId(nodeId, namespaceUri, serverIndex);
|
|
495
488
|
}
|
|
496
489
|
function encodeExpandedNodeId(writer, value) {
|
|
497
490
|
let extraFlags = 0;
|
|
@@ -502,9 +495,9 @@ function encodeExpandedNodeId(writer, value) {
|
|
|
502
495
|
extraFlags |= ExpandedNodeIdMask.ServerIndexFlag;
|
|
503
496
|
}
|
|
504
497
|
if (extraFlags === 0) {
|
|
505
|
-
encodeNodeId(writer, value);
|
|
498
|
+
encodeNodeId(writer, value.nodeId);
|
|
506
499
|
} else {
|
|
507
|
-
encodeNodeIdWithExtraFlags(writer, value, extraFlags);
|
|
500
|
+
encodeNodeIdWithExtraFlags(writer, value.nodeId, extraFlags);
|
|
508
501
|
}
|
|
509
502
|
if (value.namespaceUri !== void 0) {
|
|
510
503
|
writer.writeString(value.namespaceUri);
|
|
@@ -725,7 +718,7 @@ function encodeLocalizedText(writer, value) {
|
|
|
725
718
|
// src/types/extensionObject.ts
|
|
726
719
|
var ExtensionObject = class _ExtensionObject {
|
|
727
720
|
/**
|
|
728
|
-
* The NodeId that identifies the type of structure encoded in the body.
|
|
721
|
+
* The NodeId (or ExpandedNodeId) that identifies the type of structure encoded in the body.
|
|
729
722
|
*/
|
|
730
723
|
typeId;
|
|
731
724
|
/**
|
|
@@ -1054,7 +1047,7 @@ function decodeExtensionObject(reader, decoder) {
|
|
|
1054
1047
|
}
|
|
1055
1048
|
function encodeExtensionObject(writer, value, encoder) {
|
|
1056
1049
|
const typeId = value.typeId;
|
|
1057
|
-
if (
|
|
1050
|
+
if (typeId instanceof ExpandedNodeId) {
|
|
1058
1051
|
encodeExpandedNodeId(writer, typeId);
|
|
1059
1052
|
} else {
|
|
1060
1053
|
encodeNodeId(writer, typeId);
|
|
@@ -1370,7 +1363,7 @@ function StatusCodeToString(statusCode) {
|
|
|
1370
1363
|
if (statusCode === void 0) {
|
|
1371
1364
|
return "Unknown";
|
|
1372
1365
|
}
|
|
1373
|
-
const baseCode = statusCode & 4294901760;
|
|
1366
|
+
const baseCode = (statusCode & 4294901760) >>> 0;
|
|
1374
1367
|
const name = Object.entries(StatusCode).find(([, v]) => v === baseCode)?.[0];
|
|
1375
1368
|
return name ?? `0x${baseCode.toString(16).toUpperCase().padStart(8, "0")}`;
|
|
1376
1369
|
}
|
|
@@ -1393,7 +1386,7 @@ function StatusCodeGetFlagBits(statusCode) {
|
|
|
1393
1386
|
};
|
|
1394
1387
|
}
|
|
1395
1388
|
function StatusCodeIs(statusCode, expected) {
|
|
1396
|
-
return (statusCode & 4294901760) === expected;
|
|
1389
|
+
return (statusCode & 4294901760) >>> 0 === expected;
|
|
1397
1390
|
}
|
|
1398
1391
|
|
|
1399
1392
|
// src/types/dataValue.ts
|
|
@@ -2937,12 +2930,22 @@ var SecureChannelTypeEncoder = class extends TransformStream {
|
|
|
2937
2930
|
}
|
|
2938
2931
|
};
|
|
2939
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
|
+
|
|
2940
2941
|
// src/secureChannel/secureChannelTypeDecoder.ts
|
|
2941
2942
|
var SecureChannelTypeDecoder = class extends TransformStream {
|
|
2942
2943
|
constructor(decoder) {
|
|
2943
2944
|
super({
|
|
2944
2945
|
transform(msg, controller) {
|
|
2945
|
-
|
|
2946
|
+
if (msg.header.msgType !== MsgTypeAbort) {
|
|
2947
|
+
msg.body = decoder.decode(msg.body, "binary");
|
|
2948
|
+
}
|
|
2946
2949
|
controller.enqueue(msg);
|
|
2947
2950
|
}
|
|
2948
2951
|
});
|
|
@@ -17404,13 +17407,6 @@ var MsgSymmetric = class _MsgSymmetric extends MsgBase2 {
|
|
|
17404
17407
|
}
|
|
17405
17408
|
};
|
|
17406
17409
|
|
|
17407
|
-
// src/secureChannel/messages/msgType.ts
|
|
17408
|
-
var MsgTypeOpenFinal = "O".charCodeAt(0) | "P".charCodeAt(0) << 8 | "N".charCodeAt(0) << 16 | "F".charCodeAt(0) << 24;
|
|
17409
|
-
var MsgTypeAbort = "M".charCodeAt(0) | "S".charCodeAt(0) << 8 | "G".charCodeAt(0) << 16 | "A".charCodeAt(0) << 24;
|
|
17410
|
-
var MsgTypeChunk = "M".charCodeAt(0) | "S".charCodeAt(0) << 8 | "G".charCodeAt(0) << 16 | "C".charCodeAt(0) << 24;
|
|
17411
|
-
var MsgTypeFinal = "M".charCodeAt(0) | "S".charCodeAt(0) << 8 | "G".charCodeAt(0) << 16 | "F".charCodeAt(0) << 24;
|
|
17412
|
-
var MsgTypeCloseFinal = "C".charCodeAt(0) | "L".charCodeAt(0) << 8 | "O".charCodeAt(0) << 16 | "F".charCodeAt(0) << 24;
|
|
17413
|
-
|
|
17414
17410
|
// src/secureChannel/pendingRequests.ts
|
|
17415
17411
|
var PendingRequests = class {
|
|
17416
17412
|
map = /* @__PURE__ */ new Map();
|
|
@@ -17462,6 +17458,7 @@ var Certificate = class {
|
|
|
17462
17458
|
};
|
|
17463
17459
|
|
|
17464
17460
|
// src/secureChannel/secureChannelFacade.ts
|
|
17461
|
+
var TOKEN_RENEW_FRACTION = 0.75;
|
|
17465
17462
|
var SecureChannelFacade = class {
|
|
17466
17463
|
// ─── Constructor ────────────────────────────────────────────────────────────────
|
|
17467
17464
|
constructor(context, readerTransform, writerTransform) {
|
|
@@ -17476,11 +17473,17 @@ var SecureChannelFacade = class {
|
|
|
17476
17473
|
logger = getLogger("secureChannel.SecureChannelFacade");
|
|
17477
17474
|
writer;
|
|
17478
17475
|
reader;
|
|
17476
|
+
/** Timer handle for the scheduled token renewal; undefined when no renewal is pending. */
|
|
17477
|
+
renewalTimer;
|
|
17479
17478
|
/**
|
|
17480
|
-
*
|
|
17481
|
-
*
|
|
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.
|
|
17482
17485
|
*/
|
|
17483
|
-
async
|
|
17486
|
+
async sendOpenSecureChannel(requestType) {
|
|
17484
17487
|
const requestHeader = new RequestHeader();
|
|
17485
17488
|
requestHeader.authenticationToken = NodeId.newTwoByte(0);
|
|
17486
17489
|
requestHeader.timestamp = /* @__PURE__ */ new Date();
|
|
@@ -17492,31 +17495,72 @@ var SecureChannelFacade = class {
|
|
|
17492
17495
|
const request = new OpenSecureChannelRequest();
|
|
17493
17496
|
request.requestHeader = requestHeader;
|
|
17494
17497
|
request.clientProtocolVersion = 0;
|
|
17495
|
-
request.requestType =
|
|
17498
|
+
request.requestType = requestType;
|
|
17496
17499
|
request.securityMode = this.context.securityPolicy.getSecurityMode();
|
|
17497
17500
|
request.clientNonce = null;
|
|
17498
17501
|
request.requestedLifetime = 36e5;
|
|
17499
17502
|
const { sequenceNumber, requestId } = this.context.nextIds();
|
|
17500
|
-
this.context.securityAlgorithm = this.context.securityPolicy.getAlgorithmAsymmetric(
|
|
17503
|
+
this.context.securityAlgorithm = this.context.securityPolicy.getAlgorithmAsymmetric(
|
|
17504
|
+
new Uint8Array(),
|
|
17505
|
+
new Uint8Array()
|
|
17506
|
+
);
|
|
17501
17507
|
const msg = new MsgAsymmetric(
|
|
17502
|
-
new MsgHeader2(MsgTypeOpenFinal, 0,
|
|
17508
|
+
new MsgHeader2(MsgTypeOpenFinal, 0, this.context.channelId),
|
|
17503
17509
|
new MsgSecurityHeaderAsymmetric(
|
|
17504
17510
|
"http://opcfoundation.org/UA/SecurityPolicy#None"
|
|
17505
17511
|
),
|
|
17506
17512
|
new MsgSequenceHeader(sequenceNumber, requestId),
|
|
17507
17513
|
request
|
|
17508
17514
|
);
|
|
17509
|
-
this.
|
|
17510
|
-
|
|
17511
|
-
|
|
17512
|
-
|
|
17513
|
-
|
|
17514
|
-
|
|
17515
|
-
|
|
17516
|
-
|
|
17517
|
-
|
|
17518
|
-
|
|
17519
|
-
|
|
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();
|
|
17520
17564
|
}
|
|
17521
17565
|
// ─── ISecureChannel implementation ─────────────────────────────────────────────
|
|
17522
17566
|
getSecurityPolicy() {
|
|
@@ -17553,14 +17597,20 @@ var SecureChannelFacade = class {
|
|
|
17553
17597
|
if (!value) {
|
|
17554
17598
|
this.logger.error("Received empty frame");
|
|
17555
17599
|
}
|
|
17556
|
-
const
|
|
17557
|
-
if (
|
|
17558
|
-
|
|
17559
|
-
|
|
17560
|
-
|
|
17561
|
-
);
|
|
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}`));
|
|
17562
17607
|
} else {
|
|
17563
|
-
|
|
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
|
+
}
|
|
17564
17614
|
}
|
|
17565
17615
|
}
|
|
17566
17616
|
} catch (e) {
|
|
@@ -17691,33 +17741,67 @@ var SecurityPolicyNone = class {
|
|
|
17691
17741
|
};
|
|
17692
17742
|
|
|
17693
17743
|
// src/secureChannel/secureChannelContext.ts
|
|
17694
|
-
var
|
|
17744
|
+
var SEQ_WRAP_THRESHOLD = 4294967295 - 1024;
|
|
17745
|
+
var SEQ_WRAP_START = 1;
|
|
17695
17746
|
var SecureChannelContext = class {
|
|
17696
17747
|
constructor(endpointUrl) {
|
|
17697
17748
|
this.endpointUrl = endpointUrl;
|
|
17698
17749
|
}
|
|
17699
|
-
|
|
17700
|
-
|
|
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;
|
|
17701
17758
|
channelId = 0;
|
|
17702
17759
|
tokenId = 0;
|
|
17703
|
-
maxSendBufferSize =
|
|
17704
|
-
maxRecvBufferSize =
|
|
17705
|
-
|
|
17760
|
+
maxSendBufferSize = 2147483647;
|
|
17761
|
+
maxRecvBufferSize = 2147483647;
|
|
17762
|
+
/** Pending chunk bodies keyed by requestId, for reassembling multi-chunk messages. */
|
|
17763
|
+
chunkBuffers = /* @__PURE__ */ new Map();
|
|
17706
17764
|
securityAlgorithm;
|
|
17765
|
+
/** Last remote sequence number seen; undefined before the first received message. */
|
|
17766
|
+
lastRemoteSequenceNumber = void 0;
|
|
17707
17767
|
securityPolicy = new SecurityPolicyNone();
|
|
17708
17768
|
/**
|
|
17709
|
-
*
|
|
17710
|
-
*
|
|
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.
|
|
17711
17791
|
*/
|
|
17712
17792
|
nextIds() {
|
|
17713
|
-
|
|
17714
|
-
|
|
17715
|
-
|
|
17716
|
-
|
|
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;
|
|
17717
17799
|
}
|
|
17718
17800
|
};
|
|
17719
17801
|
|
|
17720
17802
|
// src/secureChannel/secureChannelMessageDecoder.ts
|
|
17803
|
+
var SEQ_WRAP_THRESHOLD2 = 4294967295 - 1024;
|
|
17804
|
+
var SEQ_WRAP_MAX = 1024;
|
|
17721
17805
|
var SecureChannelMessageDecoder = class extends TransformStream {
|
|
17722
17806
|
constructor(context) {
|
|
17723
17807
|
super({
|
|
@@ -17726,12 +17810,34 @@ var SecureChannelMessageDecoder = class extends TransformStream {
|
|
|
17726
17810
|
this.context = context;
|
|
17727
17811
|
}
|
|
17728
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
|
+
}
|
|
17729
17834
|
transform(data, controller) {
|
|
17730
17835
|
const buffer = new BinaryReader(data);
|
|
17731
17836
|
const header = MsgHeader2.decode(buffer);
|
|
17732
17837
|
switch (header.msgType) {
|
|
17733
|
-
case MsgTypeOpenFinal:
|
|
17734
|
-
|
|
17838
|
+
case MsgTypeOpenFinal:
|
|
17839
|
+
case MsgTypeOpenChunk: {
|
|
17840
|
+
this.logger.debug("SecureChannel received OpenFinal/OpenChunk message");
|
|
17735
17841
|
const secHeader = MsgSecurityHeaderAsymmetric.decode(buffer);
|
|
17736
17842
|
const msgAsym = MsgAsymmetric.decode(
|
|
17737
17843
|
buffer,
|
|
@@ -17739,16 +17845,22 @@ var SecureChannelMessageDecoder = class extends TransformStream {
|
|
|
17739
17845
|
secHeader,
|
|
17740
17846
|
this.context.securityAlgorithm
|
|
17741
17847
|
);
|
|
17848
|
+
if (!this.validateSequenceNumber(msgAsym.sequenceHeader.sequenceNumber, controller)) return;
|
|
17742
17849
|
controller.enqueue(msgAsym);
|
|
17743
17850
|
break;
|
|
17744
17851
|
}
|
|
17745
|
-
case MsgTypeAbort:
|
|
17746
|
-
this.logger.warn("
|
|
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);
|
|
17747
17857
|
break;
|
|
17858
|
+
}
|
|
17748
17859
|
case MsgTypeChunk: {
|
|
17749
17860
|
this.logger.debug("SecureChannel received Chunk message.");
|
|
17750
17861
|
const secHeader = MsgSecurityHeaderSymmetric.decode(buffer);
|
|
17751
17862
|
const msgSym = MsgSymmetric.decode(buffer, header, secHeader, this.context.securityAlgorithm);
|
|
17863
|
+
if (!this.validateSequenceNumber(msgSym.sequenceHeader.sequenceNumber, controller)) return;
|
|
17752
17864
|
controller.enqueue(msgSym);
|
|
17753
17865
|
break;
|
|
17754
17866
|
}
|
|
@@ -17756,11 +17868,12 @@ var SecureChannelMessageDecoder = class extends TransformStream {
|
|
|
17756
17868
|
this.logger.debug("SecureChannel received Final message");
|
|
17757
17869
|
const secHeader = MsgSecurityHeaderSymmetric.decode(buffer);
|
|
17758
17870
|
const msgSym = MsgSymmetric.decode(buffer, header, secHeader, this.context.securityAlgorithm);
|
|
17871
|
+
if (!this.validateSequenceNumber(msgSym.sequenceHeader.sequenceNumber, controller)) return;
|
|
17759
17872
|
controller.enqueue(msgSym);
|
|
17760
17873
|
break;
|
|
17761
17874
|
}
|
|
17762
17875
|
case MsgTypeCloseFinal:
|
|
17763
|
-
this.logger.warn("Unimplemented
|
|
17876
|
+
this.logger.warn("Unimplemented CloseFinal message.");
|
|
17764
17877
|
break;
|
|
17765
17878
|
default:
|
|
17766
17879
|
this.logger.warn("SecureChannel received unknown message type:", header.msgType);
|
|
@@ -17770,7 +17883,7 @@ var SecureChannelMessageDecoder = class extends TransformStream {
|
|
|
17770
17883
|
};
|
|
17771
17884
|
|
|
17772
17885
|
// src/secureChannel/secureChannelMessageEncoder.ts
|
|
17773
|
-
var
|
|
17886
|
+
var SecureChannelMessageEncoder = class extends TransformStream {
|
|
17774
17887
|
constructor(context) {
|
|
17775
17888
|
super({
|
|
17776
17889
|
transform(msg, controller) {
|
|
@@ -17785,24 +17898,33 @@ var SecureChannelMesssageEncoder = class extends TransformStream {
|
|
|
17785
17898
|
// src/secureChannel/secureChannelChunkReader.ts
|
|
17786
17899
|
var SecureChannelChunkReader = class extends TransformStream {
|
|
17787
17900
|
logger = getLogger("secureChannel.SecureChannelChunkReader");
|
|
17788
|
-
prependChunk(chunk, body) {
|
|
17789
|
-
const result = new Uint8Array(chunk.byteLength + body.byteLength);
|
|
17790
|
-
result.set(chunk, 0);
|
|
17791
|
-
result.set(body, chunk.byteLength);
|
|
17792
|
-
return result;
|
|
17793
|
-
}
|
|
17794
17901
|
transform(msg, context, controller) {
|
|
17902
|
+
const requestId = msg.sequenceHeader.requestId;
|
|
17795
17903
|
switch (msg.header.msgType) {
|
|
17796
|
-
case MsgTypeChunk:
|
|
17904
|
+
case MsgTypeChunk:
|
|
17905
|
+
case MsgTypeOpenChunk: {
|
|
17797
17906
|
this.logger.debug("Received Chunk message");
|
|
17798
|
-
context.chunkBuffers.
|
|
17907
|
+
const chunks = context.chunkBuffers.get(requestId) ?? [];
|
|
17908
|
+
chunks.push(msg.body);
|
|
17909
|
+
context.chunkBuffers.set(requestId, chunks);
|
|
17799
17910
|
break;
|
|
17800
17911
|
}
|
|
17801
|
-
case MsgTypeFinal:
|
|
17912
|
+
case MsgTypeFinal:
|
|
17913
|
+
case MsgTypeOpenFinal: {
|
|
17802
17914
|
this.logger.debug("Received Final message");
|
|
17803
|
-
|
|
17804
|
-
|
|
17805
|
-
|
|
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);
|
|
17806
17928
|
}
|
|
17807
17929
|
controller.enqueue(msg);
|
|
17808
17930
|
break;
|
|
@@ -17836,33 +17958,43 @@ var SecureChannelChunkWriter = class extends TransformStream {
|
|
|
17836
17958
|
this.logger.debug("Received Final message");
|
|
17837
17959
|
const securityAlgorithm = this.context.securityAlgorithm;
|
|
17838
17960
|
const maxCipherTextSize = this.context.maxSendBufferSize - MsgHeader2.Size - MsgSecurityHeaderSymmetric.Size;
|
|
17839
|
-
const
|
|
17840
|
-
const maxPayloadSize = maxPlainTextSize - securityAlgorithm.GetSignatureLength() - 1 - MsgSecurityHeaderSymmetric.Size + (securityAlgorithm.IsAuthenticated() ? 1 : 0);
|
|
17961
|
+
const maxPayloadSize = securityAlgorithm.GetMaxPayload(maxCipherTextSize) - MsgSequenceHeader.Size;
|
|
17841
17962
|
const data = msgSymmetric.body;
|
|
17842
|
-
const
|
|
17843
|
-
if (
|
|
17844
|
-
this.logger.debug(`Message body exceeds max chunk size, splitting into ${
|
|
17845
|
-
for (let i = 0; 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++) {
|
|
17846
17967
|
const chunkMsg = new MsgSymmetric(
|
|
17847
|
-
|
|
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),
|
|
17848
17971
|
msgSymmetric.securityHeader,
|
|
17849
|
-
|
|
17972
|
+
new MsgSequenceHeader(
|
|
17973
|
+
this.context.nextSequenceNumber(),
|
|
17974
|
+
msgSymmetric.sequenceHeader.requestId
|
|
17975
|
+
),
|
|
17850
17976
|
data.subarray(i * maxPayloadSize, (i + 1) * maxPayloadSize)
|
|
17851
17977
|
);
|
|
17852
|
-
this.logger.trace(
|
|
17978
|
+
this.logger.trace(
|
|
17979
|
+
`Enqueuing chunk ${i + 1}/${numChunks} with size ${chunkMsg.body.byteLength} bytes.`
|
|
17980
|
+
);
|
|
17853
17981
|
controller.enqueue(chunkMsg);
|
|
17854
17982
|
}
|
|
17855
|
-
msg.
|
|
17983
|
+
msg.sequenceHeader = new MsgSequenceHeader(
|
|
17984
|
+
this.context.nextSequenceNumber(),
|
|
17985
|
+
msgSymmetric.sequenceHeader.requestId
|
|
17986
|
+
);
|
|
17987
|
+
msg.body = data.subarray((numChunks - 1) * maxPayloadSize);
|
|
17856
17988
|
}
|
|
17857
17989
|
break;
|
|
17858
17990
|
}
|
|
17859
17991
|
}
|
|
17860
17992
|
}
|
|
17861
|
-
this.logger.trace(`Enqueuing
|
|
17993
|
+
this.logger.trace(`Enqueuing final message with body size ${msg.body.byteLength} bytes.`);
|
|
17862
17994
|
controller.enqueue(msg);
|
|
17863
17995
|
}
|
|
17864
17996
|
};
|
|
17865
17997
|
|
|
17866
|
-
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 };
|
|
17867
17999
|
//# sourceMappingURL=index.js.map
|
|
17868
18000
|
//# sourceMappingURL=index.js.map
|