opcjs-client 0.1.10 → 0.1.16-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 +397 -48
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +145 -17
- package/dist/index.d.ts +145 -17
- package/dist/index.js +399 -49
- package/dist/index.js.map +1 -1
- package/package.json +6 -4
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { initLoggerProvider, getLogger, WebSocketFascade, WebSocketReadableStream, WebSocketWritableStream, SecureChannelContext, TcpMessageInjector, TcpConnectionHandler, TcpMessageDecoupler, SecureChannelMesssageEncoder, SecureChannelTypeDecoder, SecureChannelMessageDecoder, SecureChannelTypeEncoder, SecureChannelChunkWriter, SecureChannelChunkReader, SecureChannelFacade, CallMethodRequest, Variant, Configuration, LoggerFactory, Encoder, BinaryWriter, registerEncoders, Decoder, BinaryReader, registerTypeDecoders, registerBinaryDecoders, UserTokenTypeEnum, AnonymousIdentityToken, UserNameIdentityToken, IssuedIdentityToken, NodeId, ReadValueId, QualifiedName, ReadRequest, TimestampsToReturnEnum, CallRequest, SubscriptionAcknowledgement, CreateSubscriptionRequest, PublishRequest, MonitoringParameters, ExtensionObject, MonitoredItemCreateRequest, MonitoringModeEnum, CreateMonitoredItemsRequest, ApplicationDescription, LocalizedText, ApplicationTypeEnum, CreateSessionRequest, CreateSessionResponse, SignatureData, ActivateSessionRequest, RequestHeader } from 'opcjs-base';
|
|
2
2
|
|
|
3
3
|
// src/client.ts
|
|
4
4
|
var ServiceBase = class {
|
|
@@ -25,8 +25,9 @@ var SessionService = class _SessionService extends ServiceBase {
|
|
|
25
25
|
super(authToken, secureChannel);
|
|
26
26
|
this.configuration = configuration;
|
|
27
27
|
}
|
|
28
|
+
logger = getLogger("services.SessionService");
|
|
28
29
|
async createSession() {
|
|
29
|
-
|
|
30
|
+
this.logger.debug("Creating session...");
|
|
30
31
|
const clientDescription = new ApplicationDescription();
|
|
31
32
|
clientDescription.applicationUri = this.configuration.applicationUri;
|
|
32
33
|
clientDescription.productUri = this.configuration.productUri;
|
|
@@ -45,7 +46,7 @@ var SessionService = class _SessionService extends ServiceBase {
|
|
|
45
46
|
request.clientCertificate = null;
|
|
46
47
|
request.requestedSessionTimeout = 6e4;
|
|
47
48
|
request.maxResponseMessageSize = 0;
|
|
48
|
-
|
|
49
|
+
this.logger.debug("Sending CreateSessionRequest...");
|
|
49
50
|
const response = await this.secureChannel.issueServiceRequest(request);
|
|
50
51
|
if (!response || !(response instanceof CreateSessionResponse)) {
|
|
51
52
|
throw new Error("Invalid response type for CreateSessionRequest");
|
|
@@ -65,7 +66,7 @@ var SessionService = class _SessionService extends ServiceBase {
|
|
|
65
66
|
if (!serverEndpoint) {
|
|
66
67
|
throw new Error(`Server endpoint ${endpoint} not found in CreateSessionResponse`);
|
|
67
68
|
}
|
|
68
|
-
|
|
69
|
+
this.logger.debug("Session created with id:", castedResponse.sessionId.identifier);
|
|
69
70
|
return {
|
|
70
71
|
sessionId: castedResponse.sessionId.identifier,
|
|
71
72
|
authToken: castedResponse.authenticationToken,
|
|
@@ -83,9 +84,9 @@ var SessionService = class _SessionService extends ServiceBase {
|
|
|
83
84
|
request.localeIds = ["en-US"];
|
|
84
85
|
request.userIdentityToken = ExtensionObject.newBinary(identityToken);
|
|
85
86
|
request.userTokenSignature = signatureData;
|
|
86
|
-
|
|
87
|
+
this.logger.debug("Sending ActivateSessionRequest...");
|
|
87
88
|
await this.secureChannel.issueServiceRequest(request);
|
|
88
|
-
|
|
89
|
+
this.logger.debug("Session activated.");
|
|
89
90
|
}
|
|
90
91
|
recreate(authToken) {
|
|
91
92
|
return new _SessionService(authToken, this.secureChannel, this.configuration);
|
|
@@ -168,6 +169,265 @@ var SessionHandler = class {
|
|
|
168
169
|
// src/services/attributeServiceAttributes.ts
|
|
169
170
|
var AttrIdValue = 13;
|
|
170
171
|
|
|
172
|
+
// ../base/src/types/statusCode.ts
|
|
173
|
+
function StatusCodeToString(statusCode) {
|
|
174
|
+
if (statusCode === void 0) {
|
|
175
|
+
return "Unknown";
|
|
176
|
+
}
|
|
177
|
+
const name = Object.entries(StatusCode).find(([, v]) => v === statusCode)?.[0];
|
|
178
|
+
return name ?? `0x${statusCode.toString(16).toUpperCase().padStart(8, "0")}`;
|
|
179
|
+
}
|
|
180
|
+
var StatusCode = /* @__PURE__ */ ((StatusCode2) => {
|
|
181
|
+
StatusCode2[StatusCode2["Good"] = 0] = "Good";
|
|
182
|
+
StatusCode2[StatusCode2["Uncertain"] = 1073741824] = "Uncertain";
|
|
183
|
+
StatusCode2[StatusCode2["Bad"] = 2147483648] = "Bad";
|
|
184
|
+
StatusCode2[StatusCode2["BadUnexpectedError"] = 2147549184] = "BadUnexpectedError";
|
|
185
|
+
StatusCode2[StatusCode2["BadInternalError"] = 2147614720] = "BadInternalError";
|
|
186
|
+
StatusCode2[StatusCode2["BadOutOfMemory"] = 2147680256] = "BadOutOfMemory";
|
|
187
|
+
StatusCode2[StatusCode2["BadResourceUnavailable"] = 2147745792] = "BadResourceUnavailable";
|
|
188
|
+
StatusCode2[StatusCode2["BadCommunicationError"] = 2147811328] = "BadCommunicationError";
|
|
189
|
+
StatusCode2[StatusCode2["BadEncodingError"] = 2147876864] = "BadEncodingError";
|
|
190
|
+
StatusCode2[StatusCode2["BadDecodingError"] = 2147942400] = "BadDecodingError";
|
|
191
|
+
StatusCode2[StatusCode2["BadEncodingLimitsExceeded"] = 2148007936] = "BadEncodingLimitsExceeded";
|
|
192
|
+
StatusCode2[StatusCode2["BadRequestTooLarge"] = 2159542272] = "BadRequestTooLarge";
|
|
193
|
+
StatusCode2[StatusCode2["BadResponseTooLarge"] = 2159607808] = "BadResponseTooLarge";
|
|
194
|
+
StatusCode2[StatusCode2["BadUnknownResponse"] = 2148073472] = "BadUnknownResponse";
|
|
195
|
+
StatusCode2[StatusCode2["BadTimeout"] = 2148139008] = "BadTimeout";
|
|
196
|
+
StatusCode2[StatusCode2["BadServiceUnsupported"] = 2148204544] = "BadServiceUnsupported";
|
|
197
|
+
StatusCode2[StatusCode2["BadShutdown"] = 2148270080] = "BadShutdown";
|
|
198
|
+
StatusCode2[StatusCode2["BadServerNotConnected"] = 2148335616] = "BadServerNotConnected";
|
|
199
|
+
StatusCode2[StatusCode2["BadServerHalted"] = 2148401152] = "BadServerHalted";
|
|
200
|
+
StatusCode2[StatusCode2["BadNothingToDo"] = 2148466688] = "BadNothingToDo";
|
|
201
|
+
StatusCode2[StatusCode2["BadTooManyOperations"] = 2148532224] = "BadTooManyOperations";
|
|
202
|
+
StatusCode2[StatusCode2["BadTooManyMonitoredItems"] = 2161836032] = "BadTooManyMonitoredItems";
|
|
203
|
+
StatusCode2[StatusCode2["BadDataTypeIdUnknown"] = 2148597760] = "BadDataTypeIdUnknown";
|
|
204
|
+
StatusCode2[StatusCode2["BadCertificateInvalid"] = 2148663296] = "BadCertificateInvalid";
|
|
205
|
+
StatusCode2[StatusCode2["BadSecurityChecksFailed"] = 2148728832] = "BadSecurityChecksFailed";
|
|
206
|
+
StatusCode2[StatusCode2["BadCertificatePolicyCheckFailed"] = 2165571584] = "BadCertificatePolicyCheckFailed";
|
|
207
|
+
StatusCode2[StatusCode2["BadCertificateTimeInvalid"] = 2148794368] = "BadCertificateTimeInvalid";
|
|
208
|
+
StatusCode2[StatusCode2["BadCertificateIssuerTimeInvalid"] = 2148859904] = "BadCertificateIssuerTimeInvalid";
|
|
209
|
+
StatusCode2[StatusCode2["BadCertificateHostNameInvalid"] = 2148925440] = "BadCertificateHostNameInvalid";
|
|
210
|
+
StatusCode2[StatusCode2["BadCertificateUriInvalid"] = 2148990976] = "BadCertificateUriInvalid";
|
|
211
|
+
StatusCode2[StatusCode2["BadCertificateUseNotAllowed"] = 2149056512] = "BadCertificateUseNotAllowed";
|
|
212
|
+
StatusCode2[StatusCode2["BadCertificateIssuerUseNotAllowed"] = 2149122048] = "BadCertificateIssuerUseNotAllowed";
|
|
213
|
+
StatusCode2[StatusCode2["BadCertificateUntrusted"] = 2149187584] = "BadCertificateUntrusted";
|
|
214
|
+
StatusCode2[StatusCode2["BadCertificateRevocationUnknown"] = 2149253120] = "BadCertificateRevocationUnknown";
|
|
215
|
+
StatusCode2[StatusCode2["BadCertificateIssuerRevocationUnknown"] = 2149318656] = "BadCertificateIssuerRevocationUnknown";
|
|
216
|
+
StatusCode2[StatusCode2["BadCertificateRevoked"] = 2149384192] = "BadCertificateRevoked";
|
|
217
|
+
StatusCode2[StatusCode2["BadCertificateIssuerRevoked"] = 2149449728] = "BadCertificateIssuerRevoked";
|
|
218
|
+
StatusCode2[StatusCode2["BadCertificateChainIncomplete"] = 2165112832] = "BadCertificateChainIncomplete";
|
|
219
|
+
StatusCode2[StatusCode2["BadUserAccessDenied"] = 2149515264] = "BadUserAccessDenied";
|
|
220
|
+
StatusCode2[StatusCode2["BadIdentityTokenInvalid"] = 2149580800] = "BadIdentityTokenInvalid";
|
|
221
|
+
StatusCode2[StatusCode2["BadIdentityTokenRejected"] = 2149646336] = "BadIdentityTokenRejected";
|
|
222
|
+
StatusCode2[StatusCode2["BadSecureChannelIdInvalid"] = 2149711872] = "BadSecureChannelIdInvalid";
|
|
223
|
+
StatusCode2[StatusCode2["BadInvalidTimestamp"] = 2149777408] = "BadInvalidTimestamp";
|
|
224
|
+
StatusCode2[StatusCode2["BadNonceInvalid"] = 2149842944] = "BadNonceInvalid";
|
|
225
|
+
StatusCode2[StatusCode2["BadSessionIdInvalid"] = 2149908480] = "BadSessionIdInvalid";
|
|
226
|
+
StatusCode2[StatusCode2["BadSessionClosed"] = 2149974016] = "BadSessionClosed";
|
|
227
|
+
StatusCode2[StatusCode2["BadSessionNotActivated"] = 2150039552] = "BadSessionNotActivated";
|
|
228
|
+
StatusCode2[StatusCode2["BadSubscriptionIdInvalid"] = 2150105088] = "BadSubscriptionIdInvalid";
|
|
229
|
+
StatusCode2[StatusCode2["BadRequestHeaderInvalid"] = 2150236160] = "BadRequestHeaderInvalid";
|
|
230
|
+
StatusCode2[StatusCode2["BadTimestampsToReturnInvalid"] = 2150301696] = "BadTimestampsToReturnInvalid";
|
|
231
|
+
StatusCode2[StatusCode2["BadRequestCancelledByClient"] = 2150367232] = "BadRequestCancelledByClient";
|
|
232
|
+
StatusCode2[StatusCode2["BadTooManyArguments"] = 2162491392] = "BadTooManyArguments";
|
|
233
|
+
StatusCode2[StatusCode2["BadLicenseExpired"] = 2165178368] = "BadLicenseExpired";
|
|
234
|
+
StatusCode2[StatusCode2["BadLicenseLimitsExceeded"] = 2165243904] = "BadLicenseLimitsExceeded";
|
|
235
|
+
StatusCode2[StatusCode2["BadLicenseNotAvailable"] = 2165309440] = "BadLicenseNotAvailable";
|
|
236
|
+
StatusCode2[StatusCode2["GoodSubscriptionTransferred"] = 2949120] = "GoodSubscriptionTransferred";
|
|
237
|
+
StatusCode2[StatusCode2["GoodCompletesAsynchronously"] = 3014656] = "GoodCompletesAsynchronously";
|
|
238
|
+
StatusCode2[StatusCode2["GoodOverload"] = 3080192] = "GoodOverload";
|
|
239
|
+
StatusCode2[StatusCode2["GoodClamped"] = 3145728] = "GoodClamped";
|
|
240
|
+
StatusCode2[StatusCode2["BadNoCommunication"] = 2150694912] = "BadNoCommunication";
|
|
241
|
+
StatusCode2[StatusCode2["BadWaitingForInitialData"] = 2150760448] = "BadWaitingForInitialData";
|
|
242
|
+
StatusCode2[StatusCode2["BadNodeIdInvalid"] = 2150825984] = "BadNodeIdInvalid";
|
|
243
|
+
StatusCode2[StatusCode2["BadNodeIdUnknown"] = 2150891520] = "BadNodeIdUnknown";
|
|
244
|
+
StatusCode2[StatusCode2["BadAttributeIdInvalid"] = 2150957056] = "BadAttributeIdInvalid";
|
|
245
|
+
StatusCode2[StatusCode2["BadIndexRangeInvalid"] = 2151022592] = "BadIndexRangeInvalid";
|
|
246
|
+
StatusCode2[StatusCode2["BadIndexRangeNoData"] = 2151088128] = "BadIndexRangeNoData";
|
|
247
|
+
StatusCode2[StatusCode2["BadDataEncodingInvalid"] = 2151153664] = "BadDataEncodingInvalid";
|
|
248
|
+
StatusCode2[StatusCode2["BadDataEncodingUnsupported"] = 2151219200] = "BadDataEncodingUnsupported";
|
|
249
|
+
StatusCode2[StatusCode2["BadNotReadable"] = 2151284736] = "BadNotReadable";
|
|
250
|
+
StatusCode2[StatusCode2["BadNotWritable"] = 2151350272] = "BadNotWritable";
|
|
251
|
+
StatusCode2[StatusCode2["BadOutOfRange"] = 2151415808] = "BadOutOfRange";
|
|
252
|
+
StatusCode2[StatusCode2["BadNotSupported"] = 2151481344] = "BadNotSupported";
|
|
253
|
+
StatusCode2[StatusCode2["BadNotFound"] = 2151546880] = "BadNotFound";
|
|
254
|
+
StatusCode2[StatusCode2["BadObjectDeleted"] = 2151612416] = "BadObjectDeleted";
|
|
255
|
+
StatusCode2[StatusCode2["BadNotImplemented"] = 2151677952] = "BadNotImplemented";
|
|
256
|
+
StatusCode2[StatusCode2["BadMonitoringModeInvalid"] = 2151743488] = "BadMonitoringModeInvalid";
|
|
257
|
+
StatusCode2[StatusCode2["BadMonitoredItemIdInvalid"] = 2151809024] = "BadMonitoredItemIdInvalid";
|
|
258
|
+
StatusCode2[StatusCode2["BadMonitoredItemFilterInvalid"] = 2151874560] = "BadMonitoredItemFilterInvalid";
|
|
259
|
+
StatusCode2[StatusCode2["BadMonitoredItemFilterUnsupported"] = 2151940096] = "BadMonitoredItemFilterUnsupported";
|
|
260
|
+
StatusCode2[StatusCode2["BadFilterNotAllowed"] = 2152005632] = "BadFilterNotAllowed";
|
|
261
|
+
StatusCode2[StatusCode2["BadStructureMissing"] = 2152071168] = "BadStructureMissing";
|
|
262
|
+
StatusCode2[StatusCode2["BadEventFilterInvalid"] = 2152136704] = "BadEventFilterInvalid";
|
|
263
|
+
StatusCode2[StatusCode2["BadContentFilterInvalid"] = 2152202240] = "BadContentFilterInvalid";
|
|
264
|
+
StatusCode2[StatusCode2["BadFilterOperatorInvalid"] = 2160132096] = "BadFilterOperatorInvalid";
|
|
265
|
+
StatusCode2[StatusCode2["BadFilterOperatorUnsupported"] = 2160197632] = "BadFilterOperatorUnsupported";
|
|
266
|
+
StatusCode2[StatusCode2["BadFilterOperandCountMismatch"] = 2160263168] = "BadFilterOperandCountMismatch";
|
|
267
|
+
StatusCode2[StatusCode2["BadFilterOperandInvalid"] = 2152267776] = "BadFilterOperandInvalid";
|
|
268
|
+
StatusCode2[StatusCode2["BadFilterElementInvalid"] = 2160328704] = "BadFilterElementInvalid";
|
|
269
|
+
StatusCode2[StatusCode2["BadFilterLiteralInvalid"] = 2160394240] = "BadFilterLiteralInvalid";
|
|
270
|
+
StatusCode2[StatusCode2["BadContinuationPointInvalid"] = 2152333312] = "BadContinuationPointInvalid";
|
|
271
|
+
StatusCode2[StatusCode2["BadNoContinuationPoints"] = 2152398848] = "BadNoContinuationPoints";
|
|
272
|
+
StatusCode2[StatusCode2["BadReferenceTypeIdInvalid"] = 2152464384] = "BadReferenceTypeIdInvalid";
|
|
273
|
+
StatusCode2[StatusCode2["BadBrowseDirectionInvalid"] = 2152529920] = "BadBrowseDirectionInvalid";
|
|
274
|
+
StatusCode2[StatusCode2["BadNodeNotInView"] = 2152595456] = "BadNodeNotInView";
|
|
275
|
+
StatusCode2[StatusCode2["BadNumericOverflow"] = 2165440512] = "BadNumericOverflow";
|
|
276
|
+
StatusCode2[StatusCode2["BadServerUriInvalid"] = 2152660992] = "BadServerUriInvalid";
|
|
277
|
+
StatusCode2[StatusCode2["BadServerNameMissing"] = 2152726528] = "BadServerNameMissing";
|
|
278
|
+
StatusCode2[StatusCode2["BadDiscoveryUrlMissing"] = 2152792064] = "BadDiscoveryUrlMissing";
|
|
279
|
+
StatusCode2[StatusCode2["BadSempahoreFileMissing"] = 2152857600] = "BadSempahoreFileMissing";
|
|
280
|
+
StatusCode2[StatusCode2["BadRequestTypeInvalid"] = 2152923136] = "BadRequestTypeInvalid";
|
|
281
|
+
StatusCode2[StatusCode2["BadSecurityModeRejected"] = 2152988672] = "BadSecurityModeRejected";
|
|
282
|
+
StatusCode2[StatusCode2["BadSecurityPolicyRejected"] = 2153054208] = "BadSecurityPolicyRejected";
|
|
283
|
+
StatusCode2[StatusCode2["BadTooManySessions"] = 2153119744] = "BadTooManySessions";
|
|
284
|
+
StatusCode2[StatusCode2["BadUserSignatureInvalid"] = 2153185280] = "BadUserSignatureInvalid";
|
|
285
|
+
StatusCode2[StatusCode2["BadApplicationSignatureInvalid"] = 2153250816] = "BadApplicationSignatureInvalid";
|
|
286
|
+
StatusCode2[StatusCode2["BadNoValidCertificates"] = 2153316352] = "BadNoValidCertificates";
|
|
287
|
+
StatusCode2[StatusCode2["BadIdentityChangeNotSupported"] = 2160459776] = "BadIdentityChangeNotSupported";
|
|
288
|
+
StatusCode2[StatusCode2["BadRequestCancelledByRequest"] = 2153381888] = "BadRequestCancelledByRequest";
|
|
289
|
+
StatusCode2[StatusCode2["BadParentNodeIdInvalid"] = 2153447424] = "BadParentNodeIdInvalid";
|
|
290
|
+
StatusCode2[StatusCode2["BadReferenceNotAllowed"] = 2153512960] = "BadReferenceNotAllowed";
|
|
291
|
+
StatusCode2[StatusCode2["BadNodeIdRejected"] = 2153578496] = "BadNodeIdRejected";
|
|
292
|
+
StatusCode2[StatusCode2["BadNodeIdExists"] = 2153644032] = "BadNodeIdExists";
|
|
293
|
+
StatusCode2[StatusCode2["BadNodeClassInvalid"] = 2153709568] = "BadNodeClassInvalid";
|
|
294
|
+
StatusCode2[StatusCode2["BadBrowseNameInvalid"] = 2153775104] = "BadBrowseNameInvalid";
|
|
295
|
+
StatusCode2[StatusCode2["BadBrowseNameDuplicated"] = 2153840640] = "BadBrowseNameDuplicated";
|
|
296
|
+
StatusCode2[StatusCode2["BadNodeAttributesInvalid"] = 2153906176] = "BadNodeAttributesInvalid";
|
|
297
|
+
StatusCode2[StatusCode2["BadTypeDefinitionInvalid"] = 2153971712] = "BadTypeDefinitionInvalid";
|
|
298
|
+
StatusCode2[StatusCode2["BadSourceNodeIdInvalid"] = 2154037248] = "BadSourceNodeIdInvalid";
|
|
299
|
+
StatusCode2[StatusCode2["BadTargetNodeIdInvalid"] = 2154102784] = "BadTargetNodeIdInvalid";
|
|
300
|
+
StatusCode2[StatusCode2["BadDuplicateReferenceNotAllowed"] = 2154168320] = "BadDuplicateReferenceNotAllowed";
|
|
301
|
+
StatusCode2[StatusCode2["BadInvalidSelfReference"] = 2154233856] = "BadInvalidSelfReference";
|
|
302
|
+
StatusCode2[StatusCode2["BadReferenceLocalOnly"] = 2154299392] = "BadReferenceLocalOnly";
|
|
303
|
+
StatusCode2[StatusCode2["BadNoDeleteRights"] = 2154364928] = "BadNoDeleteRights";
|
|
304
|
+
StatusCode2[StatusCode2["UncertainReferenceNotDeleted"] = 1086062592] = "UncertainReferenceNotDeleted";
|
|
305
|
+
StatusCode2[StatusCode2["BadServerIndexInvalid"] = 2154430464] = "BadServerIndexInvalid";
|
|
306
|
+
StatusCode2[StatusCode2["BadViewIdUnknown"] = 2154496e3] = "BadViewIdUnknown";
|
|
307
|
+
StatusCode2[StatusCode2["BadViewTimestampInvalid"] = 2160656384] = "BadViewTimestampInvalid";
|
|
308
|
+
StatusCode2[StatusCode2["BadViewParameterMismatch"] = 2160721920] = "BadViewParameterMismatch";
|
|
309
|
+
StatusCode2[StatusCode2["BadViewVersionInvalid"] = 2160787456] = "BadViewVersionInvalid";
|
|
310
|
+
StatusCode2[StatusCode2["UncertainNotAllNodesAvailable"] = 1086324736] = "UncertainNotAllNodesAvailable";
|
|
311
|
+
StatusCode2[StatusCode2["GoodResultsMayBeIncomplete"] = 12189696] = "GoodResultsMayBeIncomplete";
|
|
312
|
+
StatusCode2[StatusCode2["BadNotTypeDefinition"] = 2160590848] = "BadNotTypeDefinition";
|
|
313
|
+
StatusCode2[StatusCode2["UncertainReferenceOutOfServer"] = 1080819712] = "UncertainReferenceOutOfServer";
|
|
314
|
+
StatusCode2[StatusCode2["BadTooManyMatches"] = 2154627072] = "BadTooManyMatches";
|
|
315
|
+
StatusCode2[StatusCode2["BadQueryTooComplex"] = 2154692608] = "BadQueryTooComplex";
|
|
316
|
+
StatusCode2[StatusCode2["BadNoMatch"] = 2154758144] = "BadNoMatch";
|
|
317
|
+
StatusCode2[StatusCode2["BadMaxAgeInvalid"] = 2154823680] = "BadMaxAgeInvalid";
|
|
318
|
+
StatusCode2[StatusCode2["BadSecurityModeInsufficient"] = 2162556928] = "BadSecurityModeInsufficient";
|
|
319
|
+
StatusCode2[StatusCode2["BadHistoryOperationInvalid"] = 2154889216] = "BadHistoryOperationInvalid";
|
|
320
|
+
StatusCode2[StatusCode2["BadHistoryOperationUnsupported"] = 2154954752] = "BadHistoryOperationUnsupported";
|
|
321
|
+
StatusCode2[StatusCode2["BadInvalidTimestampArgument"] = 2159869952] = "BadInvalidTimestampArgument";
|
|
322
|
+
StatusCode2[StatusCode2["BadWriteNotSupported"] = 2155020288] = "BadWriteNotSupported";
|
|
323
|
+
StatusCode2[StatusCode2["BadTypeMismatch"] = 2155085824] = "BadTypeMismatch";
|
|
324
|
+
StatusCode2[StatusCode2["BadMethodInvalid"] = 2155151360] = "BadMethodInvalid";
|
|
325
|
+
StatusCode2[StatusCode2["BadArgumentsMissing"] = 2155216896] = "BadArgumentsMissing";
|
|
326
|
+
StatusCode2[StatusCode2["BadNotExecutable"] = 2165374976] = "BadNotExecutable";
|
|
327
|
+
StatusCode2[StatusCode2["BadTooManySubscriptions"] = 2155282432] = "BadTooManySubscriptions";
|
|
328
|
+
StatusCode2[StatusCode2["BadTooManyPublishRequests"] = 2155347968] = "BadTooManyPublishRequests";
|
|
329
|
+
StatusCode2[StatusCode2["BadNoSubscription"] = 2155413504] = "BadNoSubscription";
|
|
330
|
+
StatusCode2[StatusCode2["BadSequenceNumberUnknown"] = 2155479040] = "BadSequenceNumberUnknown";
|
|
331
|
+
StatusCode2[StatusCode2["BadMessageNotAvailable"] = 2155544576] = "BadMessageNotAvailable";
|
|
332
|
+
StatusCode2[StatusCode2["BadInsufficientClientProfile"] = 2155610112] = "BadInsufficientClientProfile";
|
|
333
|
+
StatusCode2[StatusCode2["BadStateNotActive"] = 2160001024] = "BadStateNotActive";
|
|
334
|
+
StatusCode2[StatusCode2["BadAlreadyExists"] = 2165637120] = "BadAlreadyExists";
|
|
335
|
+
StatusCode2[StatusCode2["BadTcpServerTooBusy"] = 2155675648] = "BadTcpServerTooBusy";
|
|
336
|
+
StatusCode2[StatusCode2["BadTcpMessageTypeInvalid"] = 2155741184] = "BadTcpMessageTypeInvalid";
|
|
337
|
+
StatusCode2[StatusCode2["BadTcpSecureChannelUnknown"] = 2155806720] = "BadTcpSecureChannelUnknown";
|
|
338
|
+
StatusCode2[StatusCode2["BadTcpMessageTooLarge"] = 2155872256] = "BadTcpMessageTooLarge";
|
|
339
|
+
StatusCode2[StatusCode2["BadTcpNotEnoughResources"] = 2155937792] = "BadTcpNotEnoughResources";
|
|
340
|
+
StatusCode2[StatusCode2["BadTcpInternalError"] = 2156003328] = "BadTcpInternalError";
|
|
341
|
+
StatusCode2[StatusCode2["BadTcpEndpointUrlInvalid"] = 2156068864] = "BadTcpEndpointUrlInvalid";
|
|
342
|
+
StatusCode2[StatusCode2["BadRequestInterrupted"] = 2156134400] = "BadRequestInterrupted";
|
|
343
|
+
StatusCode2[StatusCode2["BadRequestTimeout"] = 2156199936] = "BadRequestTimeout";
|
|
344
|
+
StatusCode2[StatusCode2["BadSecureChannelClosed"] = 2156265472] = "BadSecureChannelClosed";
|
|
345
|
+
StatusCode2[StatusCode2["BadSecureChannelTokenUnknown"] = 2156331008] = "BadSecureChannelTokenUnknown";
|
|
346
|
+
StatusCode2[StatusCode2["BadSequenceNumberInvalid"] = 2156396544] = "BadSequenceNumberInvalid";
|
|
347
|
+
StatusCode2[StatusCode2["BadProtocolVersionUnsupported"] = 2159935488] = "BadProtocolVersionUnsupported";
|
|
348
|
+
StatusCode2[StatusCode2["BadConfigurationError"] = 2156462080] = "BadConfigurationError";
|
|
349
|
+
StatusCode2[StatusCode2["BadNotConnected"] = 2156527616] = "BadNotConnected";
|
|
350
|
+
StatusCode2[StatusCode2["BadDeviceFailure"] = 2156593152] = "BadDeviceFailure";
|
|
351
|
+
StatusCode2[StatusCode2["BadSensorFailure"] = 2156658688] = "BadSensorFailure";
|
|
352
|
+
StatusCode2[StatusCode2["BadOutOfService"] = 2156724224] = "BadOutOfService";
|
|
353
|
+
StatusCode2[StatusCode2["BadDeadbandFilterInvalid"] = 2156789760] = "BadDeadbandFilterInvalid";
|
|
354
|
+
StatusCode2[StatusCode2["UncertainNoCommunicationLastUsableValue"] = 1083113472] = "UncertainNoCommunicationLastUsableValue";
|
|
355
|
+
StatusCode2[StatusCode2["UncertainLastUsableValue"] = 1083179008] = "UncertainLastUsableValue";
|
|
356
|
+
StatusCode2[StatusCode2["UncertainSubstituteValue"] = 1083244544] = "UncertainSubstituteValue";
|
|
357
|
+
StatusCode2[StatusCode2["UncertainInitialValue"] = 1083310080] = "UncertainInitialValue";
|
|
358
|
+
StatusCode2[StatusCode2["UncertainSensorNotAccurate"] = 1083375616] = "UncertainSensorNotAccurate";
|
|
359
|
+
StatusCode2[StatusCode2["UncertainEngineeringUnitsExceeded"] = 1083441152] = "UncertainEngineeringUnitsExceeded";
|
|
360
|
+
StatusCode2[StatusCode2["UncertainSubNormal"] = 1083506688] = "UncertainSubNormal";
|
|
361
|
+
StatusCode2[StatusCode2["GoodLocalOverride"] = 9830400] = "GoodLocalOverride";
|
|
362
|
+
StatusCode2[StatusCode2["BadRefreshInProgress"] = 2157379584] = "BadRefreshInProgress";
|
|
363
|
+
StatusCode2[StatusCode2["BadConditionAlreadyDisabled"] = 2157445120] = "BadConditionAlreadyDisabled";
|
|
364
|
+
StatusCode2[StatusCode2["BadConditionAlreadyEnabled"] = 2160852992] = "BadConditionAlreadyEnabled";
|
|
365
|
+
StatusCode2[StatusCode2["BadConditionDisabled"] = 2157510656] = "BadConditionDisabled";
|
|
366
|
+
StatusCode2[StatusCode2["BadEventIdUnknown"] = 2157576192] = "BadEventIdUnknown";
|
|
367
|
+
StatusCode2[StatusCode2["BadEventNotAcknowledgeable"] = 2159738880] = "BadEventNotAcknowledgeable";
|
|
368
|
+
StatusCode2[StatusCode2["BadDialogNotActive"] = 2160918528] = "BadDialogNotActive";
|
|
369
|
+
StatusCode2[StatusCode2["BadDialogResponseInvalid"] = 2160984064] = "BadDialogResponseInvalid";
|
|
370
|
+
StatusCode2[StatusCode2["BadConditionBranchAlreadyAcked"] = 2161049600] = "BadConditionBranchAlreadyAcked";
|
|
371
|
+
StatusCode2[StatusCode2["BadConditionBranchAlreadyConfirmed"] = 2161115136] = "BadConditionBranchAlreadyConfirmed";
|
|
372
|
+
StatusCode2[StatusCode2["BadConditionAlreadyShelved"] = 2161180672] = "BadConditionAlreadyShelved";
|
|
373
|
+
StatusCode2[StatusCode2["BadConditionNotShelved"] = 2161246208] = "BadConditionNotShelved";
|
|
374
|
+
StatusCode2[StatusCode2["BadShelvingTimeOutOfRange"] = 2161311744] = "BadShelvingTimeOutOfRange";
|
|
375
|
+
StatusCode2[StatusCode2["BadNoData"] = 2157641728] = "BadNoData";
|
|
376
|
+
StatusCode2[StatusCode2["BadBoundNotFound"] = 2161573888] = "BadBoundNotFound";
|
|
377
|
+
StatusCode2[StatusCode2["BadBoundNotSupported"] = 2161639424] = "BadBoundNotSupported";
|
|
378
|
+
StatusCode2[StatusCode2["BadDataLost"] = 2157772800] = "BadDataLost";
|
|
379
|
+
StatusCode2[StatusCode2["BadDataUnavailable"] = 2157838336] = "BadDataUnavailable";
|
|
380
|
+
StatusCode2[StatusCode2["BadEntryExists"] = 2157903872] = "BadEntryExists";
|
|
381
|
+
StatusCode2[StatusCode2["BadNoEntryExists"] = 2157969408] = "BadNoEntryExists";
|
|
382
|
+
StatusCode2[StatusCode2["BadTimestampNotSupported"] = 2158034944] = "BadTimestampNotSupported";
|
|
383
|
+
StatusCode2[StatusCode2["GoodEntryInserted"] = 10616832] = "GoodEntryInserted";
|
|
384
|
+
StatusCode2[StatusCode2["GoodEntryReplaced"] = 10682368] = "GoodEntryReplaced";
|
|
385
|
+
StatusCode2[StatusCode2["UncertainDataSubNormal"] = 1084489728] = "UncertainDataSubNormal";
|
|
386
|
+
StatusCode2[StatusCode2["GoodNoData"] = 10813440] = "GoodNoData";
|
|
387
|
+
StatusCode2[StatusCode2["GoodMoreData"] = 10878976] = "GoodMoreData";
|
|
388
|
+
StatusCode2[StatusCode2["BadAggregateListMismatch"] = 2161377280] = "BadAggregateListMismatch";
|
|
389
|
+
StatusCode2[StatusCode2["BadAggregateNotSupported"] = 2161442816] = "BadAggregateNotSupported";
|
|
390
|
+
StatusCode2[StatusCode2["BadAggregateInvalidInputs"] = 2161508352] = "BadAggregateInvalidInputs";
|
|
391
|
+
StatusCode2[StatusCode2["BadAggregateConfigurationRejected"] = 2161770496] = "BadAggregateConfigurationRejected";
|
|
392
|
+
StatusCode2[StatusCode2["GoodDataIgnored"] = 14221312] = "GoodDataIgnored";
|
|
393
|
+
StatusCode2[StatusCode2["BadRequestNotAllowed"] = 2162425856] = "BadRequestNotAllowed";
|
|
394
|
+
StatusCode2[StatusCode2["BadRequestNotComplete"] = 2165506048] = "BadRequestNotComplete";
|
|
395
|
+
StatusCode2[StatusCode2["GoodEdited"] = 14417920] = "GoodEdited";
|
|
396
|
+
StatusCode2[StatusCode2["GoodPostActionFailed"] = 14483456] = "GoodPostActionFailed";
|
|
397
|
+
StatusCode2[StatusCode2["UncertainDominantValueChanged"] = 1088290816] = "UncertainDominantValueChanged";
|
|
398
|
+
StatusCode2[StatusCode2["GoodDependentValueChanged"] = 14680064] = "GoodDependentValueChanged";
|
|
399
|
+
StatusCode2[StatusCode2["BadDominantValueChanged"] = 2162229248] = "BadDominantValueChanged";
|
|
400
|
+
StatusCode2[StatusCode2["UncertainDependentValueChanged"] = 1088552960] = "UncertainDependentValueChanged";
|
|
401
|
+
StatusCode2[StatusCode2["BadDependentValueChanged"] = 2162360320] = "BadDependentValueChanged";
|
|
402
|
+
StatusCode2[StatusCode2["GoodEditedDependentValueChanged"] = 18219008] = "GoodEditedDependentValueChanged";
|
|
403
|
+
StatusCode2[StatusCode2["GoodEditedDominantValueChanged"] = 18284544] = "GoodEditedDominantValueChanged";
|
|
404
|
+
StatusCode2[StatusCode2["GoodEditedDominantValueChangedDependentValueChanged"] = 18350080] = "GoodEditedDominantValueChangedDependentValueChanged";
|
|
405
|
+
StatusCode2[StatusCode2["BadEditedOutOfRange"] = 2165899264] = "BadEditedOutOfRange";
|
|
406
|
+
StatusCode2[StatusCode2["BadInitialValueOutOfRange"] = 2165964800] = "BadInitialValueOutOfRange";
|
|
407
|
+
StatusCode2[StatusCode2["BadOutOfRangeDominantValueChanged"] = 2166030336] = "BadOutOfRangeDominantValueChanged";
|
|
408
|
+
StatusCode2[StatusCode2["BadEditedOutOfRangeDominantValueChanged"] = 2166095872] = "BadEditedOutOfRangeDominantValueChanged";
|
|
409
|
+
StatusCode2[StatusCode2["BadOutOfRangeDominantValueChangedDependentValueChanged"] = 2166161408] = "BadOutOfRangeDominantValueChangedDependentValueChanged";
|
|
410
|
+
StatusCode2[StatusCode2["BadEditedOutOfRangeDominantValueChangedDependentValueChanged"] = 2166226944] = "BadEditedOutOfRangeDominantValueChangedDependentValueChanged";
|
|
411
|
+
StatusCode2[StatusCode2["GoodCommunicationEvent"] = 10944512] = "GoodCommunicationEvent";
|
|
412
|
+
StatusCode2[StatusCode2["GoodShutdownEvent"] = 11010048] = "GoodShutdownEvent";
|
|
413
|
+
StatusCode2[StatusCode2["GoodCallAgain"] = 11075584] = "GoodCallAgain";
|
|
414
|
+
StatusCode2[StatusCode2["GoodNonCriticalTimeout"] = 11141120] = "GoodNonCriticalTimeout";
|
|
415
|
+
StatusCode2[StatusCode2["BadInvalidArgument"] = 2158690304] = "BadInvalidArgument";
|
|
416
|
+
StatusCode2[StatusCode2["BadConnectionRejected"] = 2158755840] = "BadConnectionRejected";
|
|
417
|
+
StatusCode2[StatusCode2["BadDisconnect"] = 2158821376] = "BadDisconnect";
|
|
418
|
+
StatusCode2[StatusCode2["BadConnectionClosed"] = 2158886912] = "BadConnectionClosed";
|
|
419
|
+
StatusCode2[StatusCode2["BadInvalidState"] = 2158952448] = "BadInvalidState";
|
|
420
|
+
StatusCode2[StatusCode2["BadEndOfStream"] = 2159017984] = "BadEndOfStream";
|
|
421
|
+
StatusCode2[StatusCode2["BadNoDataAvailable"] = 2159083520] = "BadNoDataAvailable";
|
|
422
|
+
StatusCode2[StatusCode2["BadWaitingForResponse"] = 2159149056] = "BadWaitingForResponse";
|
|
423
|
+
StatusCode2[StatusCode2["BadOperationAbandoned"] = 2159214592] = "BadOperationAbandoned";
|
|
424
|
+
StatusCode2[StatusCode2["BadExpectedStreamToBlock"] = 2159280128] = "BadExpectedStreamToBlock";
|
|
425
|
+
StatusCode2[StatusCode2["BadWouldBlock"] = 2159345664] = "BadWouldBlock";
|
|
426
|
+
StatusCode2[StatusCode2["BadSyntaxError"] = 2159411200] = "BadSyntaxError";
|
|
427
|
+
StatusCode2[StatusCode2["BadMaxConnectionsReached"] = 2159476736] = "BadMaxConnectionsReached";
|
|
428
|
+
return StatusCode2;
|
|
429
|
+
})(StatusCode || {});
|
|
430
|
+
|
|
171
431
|
// src/services/attributeService.ts
|
|
172
432
|
var AttributeService = class extends ServiceBase {
|
|
173
433
|
async ReadValue(nodeIds) {
|
|
@@ -187,9 +447,9 @@ var AttributeService = class extends ServiceBase {
|
|
|
187
447
|
console.log("Sending ReadRequest...");
|
|
188
448
|
const response = await this.secureChannel.issueServiceRequest(request);
|
|
189
449
|
const results = new Array();
|
|
190
|
-
for (
|
|
450
|
+
for (const dataValue of response.results ?? []) {
|
|
191
451
|
const result = {
|
|
192
|
-
status: dataValue.statusCode
|
|
452
|
+
status: StatusCodeToString(dataValue.statusCode),
|
|
193
453
|
value: dataValue.value
|
|
194
454
|
};
|
|
195
455
|
results.push(result);
|
|
@@ -233,7 +493,7 @@ var SubscriptionHandler = class {
|
|
|
233
493
|
}
|
|
234
494
|
const subscriptionId = await this.subscriptionService.createSubscription();
|
|
235
495
|
const items = [];
|
|
236
|
-
for (
|
|
496
|
+
for (const id of ids) {
|
|
237
497
|
const entry = new SubscriptionHandlerEntry(
|
|
238
498
|
subscriptionId,
|
|
239
499
|
this.nextHandle++,
|
|
@@ -242,7 +502,7 @@ var SubscriptionHandler = class {
|
|
|
242
502
|
);
|
|
243
503
|
this.entries.push(entry);
|
|
244
504
|
const item = {
|
|
245
|
-
id
|
|
505
|
+
id,
|
|
246
506
|
handle: entry.handle
|
|
247
507
|
};
|
|
248
508
|
items.push(item);
|
|
@@ -261,12 +521,12 @@ var SubscriptionHandler = class {
|
|
|
261
521
|
const response = await this.subscriptionService.publish(acknowledgements);
|
|
262
522
|
const messagesToAcknowledge = response.notificationMessage.sequenceNumber;
|
|
263
523
|
const notificationDatas = response.notificationMessage.notificationData;
|
|
264
|
-
for (
|
|
524
|
+
for (const notificationData of notificationDatas) {
|
|
265
525
|
const decodedData = notificationData.data;
|
|
266
526
|
const typeNodeId = notificationData.typeId;
|
|
267
527
|
if (typeNodeId.namespace === 0 && typeNodeId.identifier === 811) {
|
|
268
528
|
const dataChangeNotification = decodedData;
|
|
269
|
-
for (
|
|
529
|
+
for (const item of dataChangeNotification.monitoredItems) {
|
|
270
530
|
const clientHandle = item.clientHandle;
|
|
271
531
|
const value = item.value;
|
|
272
532
|
const entry = this.entries.find((e) => e.handle == clientHandle);
|
|
@@ -346,6 +606,34 @@ var MonitoredItemService = class extends ServiceBase {
|
|
|
346
606
|
super(authToken, secureChannel);
|
|
347
607
|
}
|
|
348
608
|
};
|
|
609
|
+
var MethodService = class extends ServiceBase {
|
|
610
|
+
/**
|
|
611
|
+
* Calls one or more methods on the server (OPC UA Part 4, Section 5.11.2).
|
|
612
|
+
* @param methodsToCall - Array of CallMethodRequest describing each method to invoke.
|
|
613
|
+
* @returns Array of CallMethodResult, one per requested method.
|
|
614
|
+
*/
|
|
615
|
+
async call(methodsToCall) {
|
|
616
|
+
const request = new CallRequest();
|
|
617
|
+
request.requestHeader = this.createRequestHeader();
|
|
618
|
+
request.methodsToCall = methodsToCall;
|
|
619
|
+
const response = await this.secureChannel.issueServiceRequest(request);
|
|
620
|
+
return response.results.map((result) => ({
|
|
621
|
+
status: StatusCodeToString(result.statusCode),
|
|
622
|
+
value: result.outputArguments.map((arg) => arg.value)
|
|
623
|
+
}));
|
|
624
|
+
}
|
|
625
|
+
constructor(authToken, secureChannel) {
|
|
626
|
+
super(authToken, secureChannel);
|
|
627
|
+
}
|
|
628
|
+
};
|
|
629
|
+
|
|
630
|
+
// src/callMethodResult.ts
|
|
631
|
+
var CallMethodResult = class {
|
|
632
|
+
constructor(values, status) {
|
|
633
|
+
this.values = values;
|
|
634
|
+
this.status = status;
|
|
635
|
+
}
|
|
636
|
+
};
|
|
349
637
|
|
|
350
638
|
// src/client.ts
|
|
351
639
|
var Client = class {
|
|
@@ -353,11 +641,15 @@ var Client = class {
|
|
|
353
641
|
this.configuration = configuration;
|
|
354
642
|
this.identity = identity;
|
|
355
643
|
this.endpointUrl = endpointUrl;
|
|
644
|
+
initLoggerProvider(configuration.loggerFactory);
|
|
645
|
+
this.logger = getLogger("Client");
|
|
356
646
|
}
|
|
357
647
|
endpointUrl;
|
|
358
|
-
|
|
648
|
+
attributeService;
|
|
649
|
+
methodService;
|
|
359
650
|
session;
|
|
360
651
|
subscriptionHandler;
|
|
652
|
+
logger;
|
|
361
653
|
getSession() {
|
|
362
654
|
if (!this.session) {
|
|
363
655
|
throw new Error("No session available");
|
|
@@ -365,43 +657,99 @@ var Client = class {
|
|
|
365
657
|
return this.session;
|
|
366
658
|
}
|
|
367
659
|
async connect() {
|
|
368
|
-
const
|
|
660
|
+
const wsOptions = { endpoint: this.endpointUrl };
|
|
661
|
+
const ws = new WebSocketFascade(wsOptions);
|
|
662
|
+
const webSocketReadableStream = new WebSocketReadableStream(ws, 1e3);
|
|
663
|
+
const webSocketWritableStream = new WebSocketWritableStream(ws);
|
|
664
|
+
const scContext = new SecureChannelContext(this.endpointUrl);
|
|
665
|
+
const tcpMessageInjector = new TcpMessageInjector();
|
|
666
|
+
const tcpConnectionHandler = new TcpConnectionHandler(tcpMessageInjector, scContext);
|
|
667
|
+
const tcpMessageDecoupler = new TcpMessageDecoupler(tcpConnectionHandler.onTcpMessage.bind(tcpConnectionHandler));
|
|
668
|
+
const scMessageEncoder = new SecureChannelMesssageEncoder(scContext);
|
|
669
|
+
const scTypeDecoder = new SecureChannelTypeDecoder(
|
|
670
|
+
this.configuration.decoder
|
|
671
|
+
);
|
|
672
|
+
const scMessageDecoder = new SecureChannelMessageDecoder(scContext);
|
|
673
|
+
const scTypeEncoder = new SecureChannelTypeEncoder(
|
|
674
|
+
this.configuration.encoder
|
|
675
|
+
);
|
|
676
|
+
const scChunkWriter = new SecureChannelChunkWriter(scContext);
|
|
677
|
+
const scChunkReader = new SecureChannelChunkReader(scContext);
|
|
678
|
+
webSocketReadableStream.pipeTo(tcpMessageDecoupler.writable);
|
|
679
|
+
tcpMessageDecoupler.readable.pipeTo(scMessageDecoder.writable);
|
|
680
|
+
scMessageDecoder.readable.pipeTo(scChunkReader.writable);
|
|
681
|
+
scChunkReader.readable.pipeTo(scTypeDecoder.writable);
|
|
682
|
+
scTypeEncoder.readable.pipeTo(scChunkWriter.writable);
|
|
683
|
+
scChunkWriter.readable.pipeTo(scMessageEncoder.writable);
|
|
684
|
+
scMessageEncoder.readable.pipeTo(tcpMessageInjector.writable);
|
|
685
|
+
tcpMessageInjector.readable.pipeTo(webSocketWritableStream);
|
|
686
|
+
const sc = new SecureChannelFacade(scContext, scTypeDecoder, scTypeEncoder);
|
|
369
687
|
let connected = false;
|
|
370
688
|
while (!connected) {
|
|
371
|
-
|
|
372
|
-
|
|
689
|
+
this.logger.debug(`Connecting to OPC UA server at ${this.endpointUrl}...`);
|
|
690
|
+
await ws.connect();
|
|
691
|
+
this.logger.debug("WebSocket connection established, now establishing TCP connection...");
|
|
692
|
+
connected = await tcpConnectionHandler.connect(this.endpointUrl);
|
|
373
693
|
if (!connected) {
|
|
374
|
-
|
|
694
|
+
this.logger.info("Connection failed, retrying in 2 seconds...");
|
|
375
695
|
await new Promise((resolve) => setTimeout(resolve, 2e3));
|
|
376
696
|
}
|
|
377
697
|
}
|
|
378
|
-
|
|
379
|
-
this.
|
|
380
|
-
await
|
|
381
|
-
|
|
698
|
+
this.logger.info("Connected to OPC UA server.");
|
|
699
|
+
this.logger.debug("Opening secure channel...");
|
|
700
|
+
await sc.openSecureChannel();
|
|
701
|
+
this.logger.debug("Secure channel established.");
|
|
702
|
+
this.logger.debug("Creating session...");
|
|
703
|
+
const sessionHandler = new SessionHandler(sc, this.configuration);
|
|
382
704
|
this.session = await sessionHandler.createNewSession(this.identity);
|
|
705
|
+
this.logger.debug("Session created.");
|
|
706
|
+
this.logger.debug("Initializing services...");
|
|
707
|
+
this.attributeService = new AttributeService(this.session.getAuthToken(), sc);
|
|
708
|
+
this.methodService = new MethodService(this.session.getAuthToken(), sc);
|
|
383
709
|
this.subscriptionHandler = new SubscriptionHandler(
|
|
384
|
-
new SubscriptionService(this.session.getAuthToken(),
|
|
385
|
-
new MonitoredItemService(this.session.getAuthToken(),
|
|
710
|
+
new SubscriptionService(this.session.getAuthToken(), sc),
|
|
711
|
+
new MonitoredItemService(this.session.getAuthToken(), sc)
|
|
386
712
|
);
|
|
387
713
|
}
|
|
388
714
|
async disconnect() {
|
|
389
|
-
|
|
390
|
-
if (this.channel) {
|
|
391
|
-
await this.channel.disconnect();
|
|
392
|
-
}
|
|
715
|
+
this.logger.info("Disconnecting from OPC UA server...");
|
|
393
716
|
}
|
|
394
717
|
async read(ids) {
|
|
395
|
-
const
|
|
396
|
-
|
|
397
|
-
|
|
718
|
+
const result = await this.attributeService?.ReadValue(ids);
|
|
719
|
+
return result?.map((r) => new ReadValueResult(r.value, r.status)) || [];
|
|
720
|
+
}
|
|
721
|
+
/**
|
|
722
|
+
* Method for calling a single method on the server.
|
|
723
|
+
* @param objectId - NodeId of the Object that owns the method.
|
|
724
|
+
* @param methodId - NodeId of the Method to invoke.
|
|
725
|
+
* @param inputArguments - Input argument Variants (default: empty).
|
|
726
|
+
* @returns The CallMethodResult for the invoked method.
|
|
727
|
+
*/
|
|
728
|
+
async callMethod(objectId, methodId, inputArguments = []) {
|
|
729
|
+
const request = new CallMethodRequest();
|
|
730
|
+
request.objectId = objectId;
|
|
731
|
+
request.methodId = methodId;
|
|
732
|
+
request.inputArguments = inputArguments.map((arg) => Variant.newFrom(arg));
|
|
733
|
+
const responses = await this.methodService.call([request]);
|
|
734
|
+
const response = responses[0];
|
|
735
|
+
return new CallMethodResult(response.value, response.status);
|
|
398
736
|
}
|
|
399
737
|
async subscribe(ids, callback) {
|
|
400
738
|
this.subscriptionHandler?.subscribe(ids, callback);
|
|
401
739
|
}
|
|
402
740
|
};
|
|
403
741
|
var ConfigurationClient = class _ConfigurationClient extends Configuration {
|
|
404
|
-
static getSimple(name, company) {
|
|
742
|
+
static getSimple(name, company, loggerFactory) {
|
|
743
|
+
if (!loggerFactory) {
|
|
744
|
+
loggerFactory = new LoggerFactory({
|
|
745
|
+
defaultLevel: "DEBUG",
|
|
746
|
+
//todo: use enum
|
|
747
|
+
categoryLevels: {
|
|
748
|
+
"transport.*": "TRACE",
|
|
749
|
+
"secureChannel.*": "TRACE"
|
|
750
|
+
}
|
|
751
|
+
});
|
|
752
|
+
}
|
|
405
753
|
const applicationUri = `urn:${company}:${name}`;
|
|
406
754
|
const productUri = `urn:${company}:${name}:product`;
|
|
407
755
|
const encoder = new Encoder();
|
|
@@ -415,24 +763,26 @@ var ConfigurationClient = class _ConfigurationClient extends Configuration {
|
|
|
415
763
|
});
|
|
416
764
|
registerTypeDecoders(decoder);
|
|
417
765
|
registerBinaryDecoders(decoder);
|
|
418
|
-
return new _ConfigurationClient(
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
}
|
|
428
|
-
static newId(namespace, identifier) {
|
|
429
|
-
return new _Id(new NodeId(namespace, identifier));
|
|
430
|
-
}
|
|
431
|
-
toNodeId() {
|
|
432
|
-
return this.nodeId;
|
|
766
|
+
return new _ConfigurationClient(
|
|
767
|
+
name,
|
|
768
|
+
applicationUri,
|
|
769
|
+
name,
|
|
770
|
+
productUri,
|
|
771
|
+
encoder,
|
|
772
|
+
decoder,
|
|
773
|
+
loggerFactory
|
|
774
|
+
);
|
|
433
775
|
}
|
|
434
|
-
|
|
435
|
-
|
|
776
|
+
constructor(applicationName, applicationUri, productName, productUri, encoder, decoder, loggerFactory) {
|
|
777
|
+
super(
|
|
778
|
+
applicationName,
|
|
779
|
+
applicationUri,
|
|
780
|
+
productName,
|
|
781
|
+
productUri,
|
|
782
|
+
encoder,
|
|
783
|
+
decoder,
|
|
784
|
+
loggerFactory
|
|
785
|
+
);
|
|
436
786
|
}
|
|
437
787
|
};
|
|
438
788
|
var UserIdentity = class _UserIdentity {
|
|
@@ -478,6 +828,6 @@ var UserIdentity = class _UserIdentity {
|
|
|
478
828
|
}
|
|
479
829
|
};
|
|
480
830
|
|
|
481
|
-
export { Client, ConfigurationClient,
|
|
831
|
+
export { Client, ConfigurationClient, UserIdentity };
|
|
482
832
|
//# sourceMappingURL=index.js.map
|
|
483
833
|
//# sourceMappingURL=index.js.map
|