opcjs-client 0.1.18-alpha → 0.1.20-alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -28,6 +28,10 @@ var SessionService = class _SessionService extends ServiceBase {
28
28
  this.configuration = configuration;
29
29
  }
30
30
  logger = opcjsBase.getLogger("services.SessionService");
31
+ /**
32
+ * Creates a new session on the server (OPC UA Part 4, Section 5.7.2).
33
+ * @returns The session ID, authentication token, and selected server endpoint.
34
+ */
31
35
  async createSession() {
32
36
  this.logger.debug("Creating session...");
33
37
  const clientDescription = new opcjsBase.ApplicationDescription();
@@ -57,6 +61,10 @@ var SessionService = class _SessionService extends ServiceBase {
57
61
  if (!castedResponse || !castedResponse.sessionId || !castedResponse.authenticationToken) {
58
62
  throw new Error("CreateSessionResponse missing SessionId or AuthenticationToken");
59
63
  }
64
+ const serviceResult = castedResponse.responseHeader?.serviceResult;
65
+ if (serviceResult !== void 0 && serviceResult !== opcjsBase.StatusCode.Good) {
66
+ throw new Error(`CreateSessionRequest failed: ${opcjsBase.StatusCodeToString(serviceResult)}`);
67
+ }
60
68
  const endpoint = "opc." + this.secureChannel.getEndpointUrl();
61
69
  const endpointUrl = new URL(endpoint);
62
70
  const securityMode = this.secureChannel.getSecurityMode();
@@ -75,6 +83,10 @@ var SessionService = class _SessionService extends ServiceBase {
75
83
  endpoint: serverEndpoint
76
84
  };
77
85
  }
86
+ /**
87
+ * Activates an existing session using the supplied identity token (OPC UA Part 4, Section 5.7.3).
88
+ * @param identityToken - User identity token (anonymous, username/password, certificate, or issued token).
89
+ */
78
90
  async activateSession(identityToken) {
79
91
  const signatureData = new opcjsBase.SignatureData();
80
92
  signatureData.algorithm = this.secureChannel.getSecurityPolicy();
@@ -87,7 +99,11 @@ var SessionService = class _SessionService extends ServiceBase {
87
99
  request.userIdentityToken = opcjsBase.ExtensionObject.newBinary(identityToken);
88
100
  request.userTokenSignature = signatureData;
89
101
  this.logger.debug("Sending ActivateSessionRequest...");
90
- await this.secureChannel.issueServiceRequest(request);
102
+ const activateResponse = await this.secureChannel.issueServiceRequest(request);
103
+ const activateResult = activateResponse?.responseHeader?.serviceResult;
104
+ if (activateResult !== void 0 && activateResult !== opcjsBase.StatusCode.Good) {
105
+ throw new Error(`ActivateSessionRequest failed: ${opcjsBase.StatusCodeToString(activateResult)}`);
106
+ }
91
107
  this.logger.debug("Session activated.");
92
108
  }
93
109
  recreate(authToken) {
@@ -171,268 +187,17 @@ var SessionHandler = class {
171
187
  // src/services/attributeServiceAttributes.ts
172
188
  var AttrIdValue = 13;
173
189
 
174
- // ../base/src/types/statusCode.ts
175
- function StatusCodeToString(statusCode) {
176
- if (statusCode === void 0) {
177
- return "Unknown";
178
- }
179
- const name = Object.entries(StatusCode).find(([, v]) => v === statusCode)?.[0];
180
- return name ?? `0x${statusCode.toString(16).toUpperCase().padStart(8, "0")}`;
181
- }
182
- var StatusCode = /* @__PURE__ */ ((StatusCode2) => {
183
- StatusCode2[StatusCode2["Good"] = 0] = "Good";
184
- StatusCode2[StatusCode2["Uncertain"] = 1073741824] = "Uncertain";
185
- StatusCode2[StatusCode2["Bad"] = 2147483648] = "Bad";
186
- StatusCode2[StatusCode2["BadUnexpectedError"] = 2147549184] = "BadUnexpectedError";
187
- StatusCode2[StatusCode2["BadInternalError"] = 2147614720] = "BadInternalError";
188
- StatusCode2[StatusCode2["BadOutOfMemory"] = 2147680256] = "BadOutOfMemory";
189
- StatusCode2[StatusCode2["BadResourceUnavailable"] = 2147745792] = "BadResourceUnavailable";
190
- StatusCode2[StatusCode2["BadCommunicationError"] = 2147811328] = "BadCommunicationError";
191
- StatusCode2[StatusCode2["BadEncodingError"] = 2147876864] = "BadEncodingError";
192
- StatusCode2[StatusCode2["BadDecodingError"] = 2147942400] = "BadDecodingError";
193
- StatusCode2[StatusCode2["BadEncodingLimitsExceeded"] = 2148007936] = "BadEncodingLimitsExceeded";
194
- StatusCode2[StatusCode2["BadRequestTooLarge"] = 2159542272] = "BadRequestTooLarge";
195
- StatusCode2[StatusCode2["BadResponseTooLarge"] = 2159607808] = "BadResponseTooLarge";
196
- StatusCode2[StatusCode2["BadUnknownResponse"] = 2148073472] = "BadUnknownResponse";
197
- StatusCode2[StatusCode2["BadTimeout"] = 2148139008] = "BadTimeout";
198
- StatusCode2[StatusCode2["BadServiceUnsupported"] = 2148204544] = "BadServiceUnsupported";
199
- StatusCode2[StatusCode2["BadShutdown"] = 2148270080] = "BadShutdown";
200
- StatusCode2[StatusCode2["BadServerNotConnected"] = 2148335616] = "BadServerNotConnected";
201
- StatusCode2[StatusCode2["BadServerHalted"] = 2148401152] = "BadServerHalted";
202
- StatusCode2[StatusCode2["BadNothingToDo"] = 2148466688] = "BadNothingToDo";
203
- StatusCode2[StatusCode2["BadTooManyOperations"] = 2148532224] = "BadTooManyOperations";
204
- StatusCode2[StatusCode2["BadTooManyMonitoredItems"] = 2161836032] = "BadTooManyMonitoredItems";
205
- StatusCode2[StatusCode2["BadDataTypeIdUnknown"] = 2148597760] = "BadDataTypeIdUnknown";
206
- StatusCode2[StatusCode2["BadCertificateInvalid"] = 2148663296] = "BadCertificateInvalid";
207
- StatusCode2[StatusCode2["BadSecurityChecksFailed"] = 2148728832] = "BadSecurityChecksFailed";
208
- StatusCode2[StatusCode2["BadCertificatePolicyCheckFailed"] = 2165571584] = "BadCertificatePolicyCheckFailed";
209
- StatusCode2[StatusCode2["BadCertificateTimeInvalid"] = 2148794368] = "BadCertificateTimeInvalid";
210
- StatusCode2[StatusCode2["BadCertificateIssuerTimeInvalid"] = 2148859904] = "BadCertificateIssuerTimeInvalid";
211
- StatusCode2[StatusCode2["BadCertificateHostNameInvalid"] = 2148925440] = "BadCertificateHostNameInvalid";
212
- StatusCode2[StatusCode2["BadCertificateUriInvalid"] = 2148990976] = "BadCertificateUriInvalid";
213
- StatusCode2[StatusCode2["BadCertificateUseNotAllowed"] = 2149056512] = "BadCertificateUseNotAllowed";
214
- StatusCode2[StatusCode2["BadCertificateIssuerUseNotAllowed"] = 2149122048] = "BadCertificateIssuerUseNotAllowed";
215
- StatusCode2[StatusCode2["BadCertificateUntrusted"] = 2149187584] = "BadCertificateUntrusted";
216
- StatusCode2[StatusCode2["BadCertificateRevocationUnknown"] = 2149253120] = "BadCertificateRevocationUnknown";
217
- StatusCode2[StatusCode2["BadCertificateIssuerRevocationUnknown"] = 2149318656] = "BadCertificateIssuerRevocationUnknown";
218
- StatusCode2[StatusCode2["BadCertificateRevoked"] = 2149384192] = "BadCertificateRevoked";
219
- StatusCode2[StatusCode2["BadCertificateIssuerRevoked"] = 2149449728] = "BadCertificateIssuerRevoked";
220
- StatusCode2[StatusCode2["BadCertificateChainIncomplete"] = 2165112832] = "BadCertificateChainIncomplete";
221
- StatusCode2[StatusCode2["BadUserAccessDenied"] = 2149515264] = "BadUserAccessDenied";
222
- StatusCode2[StatusCode2["BadIdentityTokenInvalid"] = 2149580800] = "BadIdentityTokenInvalid";
223
- StatusCode2[StatusCode2["BadIdentityTokenRejected"] = 2149646336] = "BadIdentityTokenRejected";
224
- StatusCode2[StatusCode2["BadSecureChannelIdInvalid"] = 2149711872] = "BadSecureChannelIdInvalid";
225
- StatusCode2[StatusCode2["BadInvalidTimestamp"] = 2149777408] = "BadInvalidTimestamp";
226
- StatusCode2[StatusCode2["BadNonceInvalid"] = 2149842944] = "BadNonceInvalid";
227
- StatusCode2[StatusCode2["BadSessionIdInvalid"] = 2149908480] = "BadSessionIdInvalid";
228
- StatusCode2[StatusCode2["BadSessionClosed"] = 2149974016] = "BadSessionClosed";
229
- StatusCode2[StatusCode2["BadSessionNotActivated"] = 2150039552] = "BadSessionNotActivated";
230
- StatusCode2[StatusCode2["BadSubscriptionIdInvalid"] = 2150105088] = "BadSubscriptionIdInvalid";
231
- StatusCode2[StatusCode2["BadRequestHeaderInvalid"] = 2150236160] = "BadRequestHeaderInvalid";
232
- StatusCode2[StatusCode2["BadTimestampsToReturnInvalid"] = 2150301696] = "BadTimestampsToReturnInvalid";
233
- StatusCode2[StatusCode2["BadRequestCancelledByClient"] = 2150367232] = "BadRequestCancelledByClient";
234
- StatusCode2[StatusCode2["BadTooManyArguments"] = 2162491392] = "BadTooManyArguments";
235
- StatusCode2[StatusCode2["BadLicenseExpired"] = 2165178368] = "BadLicenseExpired";
236
- StatusCode2[StatusCode2["BadLicenseLimitsExceeded"] = 2165243904] = "BadLicenseLimitsExceeded";
237
- StatusCode2[StatusCode2["BadLicenseNotAvailable"] = 2165309440] = "BadLicenseNotAvailable";
238
- StatusCode2[StatusCode2["GoodSubscriptionTransferred"] = 2949120] = "GoodSubscriptionTransferred";
239
- StatusCode2[StatusCode2["GoodCompletesAsynchronously"] = 3014656] = "GoodCompletesAsynchronously";
240
- StatusCode2[StatusCode2["GoodOverload"] = 3080192] = "GoodOverload";
241
- StatusCode2[StatusCode2["GoodClamped"] = 3145728] = "GoodClamped";
242
- StatusCode2[StatusCode2["BadNoCommunication"] = 2150694912] = "BadNoCommunication";
243
- StatusCode2[StatusCode2["BadWaitingForInitialData"] = 2150760448] = "BadWaitingForInitialData";
244
- StatusCode2[StatusCode2["BadNodeIdInvalid"] = 2150825984] = "BadNodeIdInvalid";
245
- StatusCode2[StatusCode2["BadNodeIdUnknown"] = 2150891520] = "BadNodeIdUnknown";
246
- StatusCode2[StatusCode2["BadAttributeIdInvalid"] = 2150957056] = "BadAttributeIdInvalid";
247
- StatusCode2[StatusCode2["BadIndexRangeInvalid"] = 2151022592] = "BadIndexRangeInvalid";
248
- StatusCode2[StatusCode2["BadIndexRangeNoData"] = 2151088128] = "BadIndexRangeNoData";
249
- StatusCode2[StatusCode2["BadDataEncodingInvalid"] = 2151153664] = "BadDataEncodingInvalid";
250
- StatusCode2[StatusCode2["BadDataEncodingUnsupported"] = 2151219200] = "BadDataEncodingUnsupported";
251
- StatusCode2[StatusCode2["BadNotReadable"] = 2151284736] = "BadNotReadable";
252
- StatusCode2[StatusCode2["BadNotWritable"] = 2151350272] = "BadNotWritable";
253
- StatusCode2[StatusCode2["BadOutOfRange"] = 2151415808] = "BadOutOfRange";
254
- StatusCode2[StatusCode2["BadNotSupported"] = 2151481344] = "BadNotSupported";
255
- StatusCode2[StatusCode2["BadNotFound"] = 2151546880] = "BadNotFound";
256
- StatusCode2[StatusCode2["BadObjectDeleted"] = 2151612416] = "BadObjectDeleted";
257
- StatusCode2[StatusCode2["BadNotImplemented"] = 2151677952] = "BadNotImplemented";
258
- StatusCode2[StatusCode2["BadMonitoringModeInvalid"] = 2151743488] = "BadMonitoringModeInvalid";
259
- StatusCode2[StatusCode2["BadMonitoredItemIdInvalid"] = 2151809024] = "BadMonitoredItemIdInvalid";
260
- StatusCode2[StatusCode2["BadMonitoredItemFilterInvalid"] = 2151874560] = "BadMonitoredItemFilterInvalid";
261
- StatusCode2[StatusCode2["BadMonitoredItemFilterUnsupported"] = 2151940096] = "BadMonitoredItemFilterUnsupported";
262
- StatusCode2[StatusCode2["BadFilterNotAllowed"] = 2152005632] = "BadFilterNotAllowed";
263
- StatusCode2[StatusCode2["BadStructureMissing"] = 2152071168] = "BadStructureMissing";
264
- StatusCode2[StatusCode2["BadEventFilterInvalid"] = 2152136704] = "BadEventFilterInvalid";
265
- StatusCode2[StatusCode2["BadContentFilterInvalid"] = 2152202240] = "BadContentFilterInvalid";
266
- StatusCode2[StatusCode2["BadFilterOperatorInvalid"] = 2160132096] = "BadFilterOperatorInvalid";
267
- StatusCode2[StatusCode2["BadFilterOperatorUnsupported"] = 2160197632] = "BadFilterOperatorUnsupported";
268
- StatusCode2[StatusCode2["BadFilterOperandCountMismatch"] = 2160263168] = "BadFilterOperandCountMismatch";
269
- StatusCode2[StatusCode2["BadFilterOperandInvalid"] = 2152267776] = "BadFilterOperandInvalid";
270
- StatusCode2[StatusCode2["BadFilterElementInvalid"] = 2160328704] = "BadFilterElementInvalid";
271
- StatusCode2[StatusCode2["BadFilterLiteralInvalid"] = 2160394240] = "BadFilterLiteralInvalid";
272
- StatusCode2[StatusCode2["BadContinuationPointInvalid"] = 2152333312] = "BadContinuationPointInvalid";
273
- StatusCode2[StatusCode2["BadNoContinuationPoints"] = 2152398848] = "BadNoContinuationPoints";
274
- StatusCode2[StatusCode2["BadReferenceTypeIdInvalid"] = 2152464384] = "BadReferenceTypeIdInvalid";
275
- StatusCode2[StatusCode2["BadBrowseDirectionInvalid"] = 2152529920] = "BadBrowseDirectionInvalid";
276
- StatusCode2[StatusCode2["BadNodeNotInView"] = 2152595456] = "BadNodeNotInView";
277
- StatusCode2[StatusCode2["BadNumericOverflow"] = 2165440512] = "BadNumericOverflow";
278
- StatusCode2[StatusCode2["BadServerUriInvalid"] = 2152660992] = "BadServerUriInvalid";
279
- StatusCode2[StatusCode2["BadServerNameMissing"] = 2152726528] = "BadServerNameMissing";
280
- StatusCode2[StatusCode2["BadDiscoveryUrlMissing"] = 2152792064] = "BadDiscoveryUrlMissing";
281
- StatusCode2[StatusCode2["BadSempahoreFileMissing"] = 2152857600] = "BadSempahoreFileMissing";
282
- StatusCode2[StatusCode2["BadRequestTypeInvalid"] = 2152923136] = "BadRequestTypeInvalid";
283
- StatusCode2[StatusCode2["BadSecurityModeRejected"] = 2152988672] = "BadSecurityModeRejected";
284
- StatusCode2[StatusCode2["BadSecurityPolicyRejected"] = 2153054208] = "BadSecurityPolicyRejected";
285
- StatusCode2[StatusCode2["BadTooManySessions"] = 2153119744] = "BadTooManySessions";
286
- StatusCode2[StatusCode2["BadUserSignatureInvalid"] = 2153185280] = "BadUserSignatureInvalid";
287
- StatusCode2[StatusCode2["BadApplicationSignatureInvalid"] = 2153250816] = "BadApplicationSignatureInvalid";
288
- StatusCode2[StatusCode2["BadNoValidCertificates"] = 2153316352] = "BadNoValidCertificates";
289
- StatusCode2[StatusCode2["BadIdentityChangeNotSupported"] = 2160459776] = "BadIdentityChangeNotSupported";
290
- StatusCode2[StatusCode2["BadRequestCancelledByRequest"] = 2153381888] = "BadRequestCancelledByRequest";
291
- StatusCode2[StatusCode2["BadParentNodeIdInvalid"] = 2153447424] = "BadParentNodeIdInvalid";
292
- StatusCode2[StatusCode2["BadReferenceNotAllowed"] = 2153512960] = "BadReferenceNotAllowed";
293
- StatusCode2[StatusCode2["BadNodeIdRejected"] = 2153578496] = "BadNodeIdRejected";
294
- StatusCode2[StatusCode2["BadNodeIdExists"] = 2153644032] = "BadNodeIdExists";
295
- StatusCode2[StatusCode2["BadNodeClassInvalid"] = 2153709568] = "BadNodeClassInvalid";
296
- StatusCode2[StatusCode2["BadBrowseNameInvalid"] = 2153775104] = "BadBrowseNameInvalid";
297
- StatusCode2[StatusCode2["BadBrowseNameDuplicated"] = 2153840640] = "BadBrowseNameDuplicated";
298
- StatusCode2[StatusCode2["BadNodeAttributesInvalid"] = 2153906176] = "BadNodeAttributesInvalid";
299
- StatusCode2[StatusCode2["BadTypeDefinitionInvalid"] = 2153971712] = "BadTypeDefinitionInvalid";
300
- StatusCode2[StatusCode2["BadSourceNodeIdInvalid"] = 2154037248] = "BadSourceNodeIdInvalid";
301
- StatusCode2[StatusCode2["BadTargetNodeIdInvalid"] = 2154102784] = "BadTargetNodeIdInvalid";
302
- StatusCode2[StatusCode2["BadDuplicateReferenceNotAllowed"] = 2154168320] = "BadDuplicateReferenceNotAllowed";
303
- StatusCode2[StatusCode2["BadInvalidSelfReference"] = 2154233856] = "BadInvalidSelfReference";
304
- StatusCode2[StatusCode2["BadReferenceLocalOnly"] = 2154299392] = "BadReferenceLocalOnly";
305
- StatusCode2[StatusCode2["BadNoDeleteRights"] = 2154364928] = "BadNoDeleteRights";
306
- StatusCode2[StatusCode2["UncertainReferenceNotDeleted"] = 1086062592] = "UncertainReferenceNotDeleted";
307
- StatusCode2[StatusCode2["BadServerIndexInvalid"] = 2154430464] = "BadServerIndexInvalid";
308
- StatusCode2[StatusCode2["BadViewIdUnknown"] = 2154496e3] = "BadViewIdUnknown";
309
- StatusCode2[StatusCode2["BadViewTimestampInvalid"] = 2160656384] = "BadViewTimestampInvalid";
310
- StatusCode2[StatusCode2["BadViewParameterMismatch"] = 2160721920] = "BadViewParameterMismatch";
311
- StatusCode2[StatusCode2["BadViewVersionInvalid"] = 2160787456] = "BadViewVersionInvalid";
312
- StatusCode2[StatusCode2["UncertainNotAllNodesAvailable"] = 1086324736] = "UncertainNotAllNodesAvailable";
313
- StatusCode2[StatusCode2["GoodResultsMayBeIncomplete"] = 12189696] = "GoodResultsMayBeIncomplete";
314
- StatusCode2[StatusCode2["BadNotTypeDefinition"] = 2160590848] = "BadNotTypeDefinition";
315
- StatusCode2[StatusCode2["UncertainReferenceOutOfServer"] = 1080819712] = "UncertainReferenceOutOfServer";
316
- StatusCode2[StatusCode2["BadTooManyMatches"] = 2154627072] = "BadTooManyMatches";
317
- StatusCode2[StatusCode2["BadQueryTooComplex"] = 2154692608] = "BadQueryTooComplex";
318
- StatusCode2[StatusCode2["BadNoMatch"] = 2154758144] = "BadNoMatch";
319
- StatusCode2[StatusCode2["BadMaxAgeInvalid"] = 2154823680] = "BadMaxAgeInvalid";
320
- StatusCode2[StatusCode2["BadSecurityModeInsufficient"] = 2162556928] = "BadSecurityModeInsufficient";
321
- StatusCode2[StatusCode2["BadHistoryOperationInvalid"] = 2154889216] = "BadHistoryOperationInvalid";
322
- StatusCode2[StatusCode2["BadHistoryOperationUnsupported"] = 2154954752] = "BadHistoryOperationUnsupported";
323
- StatusCode2[StatusCode2["BadInvalidTimestampArgument"] = 2159869952] = "BadInvalidTimestampArgument";
324
- StatusCode2[StatusCode2["BadWriteNotSupported"] = 2155020288] = "BadWriteNotSupported";
325
- StatusCode2[StatusCode2["BadTypeMismatch"] = 2155085824] = "BadTypeMismatch";
326
- StatusCode2[StatusCode2["BadMethodInvalid"] = 2155151360] = "BadMethodInvalid";
327
- StatusCode2[StatusCode2["BadArgumentsMissing"] = 2155216896] = "BadArgumentsMissing";
328
- StatusCode2[StatusCode2["BadNotExecutable"] = 2165374976] = "BadNotExecutable";
329
- StatusCode2[StatusCode2["BadTooManySubscriptions"] = 2155282432] = "BadTooManySubscriptions";
330
- StatusCode2[StatusCode2["BadTooManyPublishRequests"] = 2155347968] = "BadTooManyPublishRequests";
331
- StatusCode2[StatusCode2["BadNoSubscription"] = 2155413504] = "BadNoSubscription";
332
- StatusCode2[StatusCode2["BadSequenceNumberUnknown"] = 2155479040] = "BadSequenceNumberUnknown";
333
- StatusCode2[StatusCode2["BadMessageNotAvailable"] = 2155544576] = "BadMessageNotAvailable";
334
- StatusCode2[StatusCode2["BadInsufficientClientProfile"] = 2155610112] = "BadInsufficientClientProfile";
335
- StatusCode2[StatusCode2["BadStateNotActive"] = 2160001024] = "BadStateNotActive";
336
- StatusCode2[StatusCode2["BadAlreadyExists"] = 2165637120] = "BadAlreadyExists";
337
- StatusCode2[StatusCode2["BadTcpServerTooBusy"] = 2155675648] = "BadTcpServerTooBusy";
338
- StatusCode2[StatusCode2["BadTcpMessageTypeInvalid"] = 2155741184] = "BadTcpMessageTypeInvalid";
339
- StatusCode2[StatusCode2["BadTcpSecureChannelUnknown"] = 2155806720] = "BadTcpSecureChannelUnknown";
340
- StatusCode2[StatusCode2["BadTcpMessageTooLarge"] = 2155872256] = "BadTcpMessageTooLarge";
341
- StatusCode2[StatusCode2["BadTcpNotEnoughResources"] = 2155937792] = "BadTcpNotEnoughResources";
342
- StatusCode2[StatusCode2["BadTcpInternalError"] = 2156003328] = "BadTcpInternalError";
343
- StatusCode2[StatusCode2["BadTcpEndpointUrlInvalid"] = 2156068864] = "BadTcpEndpointUrlInvalid";
344
- StatusCode2[StatusCode2["BadRequestInterrupted"] = 2156134400] = "BadRequestInterrupted";
345
- StatusCode2[StatusCode2["BadRequestTimeout"] = 2156199936] = "BadRequestTimeout";
346
- StatusCode2[StatusCode2["BadSecureChannelClosed"] = 2156265472] = "BadSecureChannelClosed";
347
- StatusCode2[StatusCode2["BadSecureChannelTokenUnknown"] = 2156331008] = "BadSecureChannelTokenUnknown";
348
- StatusCode2[StatusCode2["BadSequenceNumberInvalid"] = 2156396544] = "BadSequenceNumberInvalid";
349
- StatusCode2[StatusCode2["BadProtocolVersionUnsupported"] = 2159935488] = "BadProtocolVersionUnsupported";
350
- StatusCode2[StatusCode2["BadConfigurationError"] = 2156462080] = "BadConfigurationError";
351
- StatusCode2[StatusCode2["BadNotConnected"] = 2156527616] = "BadNotConnected";
352
- StatusCode2[StatusCode2["BadDeviceFailure"] = 2156593152] = "BadDeviceFailure";
353
- StatusCode2[StatusCode2["BadSensorFailure"] = 2156658688] = "BadSensorFailure";
354
- StatusCode2[StatusCode2["BadOutOfService"] = 2156724224] = "BadOutOfService";
355
- StatusCode2[StatusCode2["BadDeadbandFilterInvalid"] = 2156789760] = "BadDeadbandFilterInvalid";
356
- StatusCode2[StatusCode2["UncertainNoCommunicationLastUsableValue"] = 1083113472] = "UncertainNoCommunicationLastUsableValue";
357
- StatusCode2[StatusCode2["UncertainLastUsableValue"] = 1083179008] = "UncertainLastUsableValue";
358
- StatusCode2[StatusCode2["UncertainSubstituteValue"] = 1083244544] = "UncertainSubstituteValue";
359
- StatusCode2[StatusCode2["UncertainInitialValue"] = 1083310080] = "UncertainInitialValue";
360
- StatusCode2[StatusCode2["UncertainSensorNotAccurate"] = 1083375616] = "UncertainSensorNotAccurate";
361
- StatusCode2[StatusCode2["UncertainEngineeringUnitsExceeded"] = 1083441152] = "UncertainEngineeringUnitsExceeded";
362
- StatusCode2[StatusCode2["UncertainSubNormal"] = 1083506688] = "UncertainSubNormal";
363
- StatusCode2[StatusCode2["GoodLocalOverride"] = 9830400] = "GoodLocalOverride";
364
- StatusCode2[StatusCode2["BadRefreshInProgress"] = 2157379584] = "BadRefreshInProgress";
365
- StatusCode2[StatusCode2["BadConditionAlreadyDisabled"] = 2157445120] = "BadConditionAlreadyDisabled";
366
- StatusCode2[StatusCode2["BadConditionAlreadyEnabled"] = 2160852992] = "BadConditionAlreadyEnabled";
367
- StatusCode2[StatusCode2["BadConditionDisabled"] = 2157510656] = "BadConditionDisabled";
368
- StatusCode2[StatusCode2["BadEventIdUnknown"] = 2157576192] = "BadEventIdUnknown";
369
- StatusCode2[StatusCode2["BadEventNotAcknowledgeable"] = 2159738880] = "BadEventNotAcknowledgeable";
370
- StatusCode2[StatusCode2["BadDialogNotActive"] = 2160918528] = "BadDialogNotActive";
371
- StatusCode2[StatusCode2["BadDialogResponseInvalid"] = 2160984064] = "BadDialogResponseInvalid";
372
- StatusCode2[StatusCode2["BadConditionBranchAlreadyAcked"] = 2161049600] = "BadConditionBranchAlreadyAcked";
373
- StatusCode2[StatusCode2["BadConditionBranchAlreadyConfirmed"] = 2161115136] = "BadConditionBranchAlreadyConfirmed";
374
- StatusCode2[StatusCode2["BadConditionAlreadyShelved"] = 2161180672] = "BadConditionAlreadyShelved";
375
- StatusCode2[StatusCode2["BadConditionNotShelved"] = 2161246208] = "BadConditionNotShelved";
376
- StatusCode2[StatusCode2["BadShelvingTimeOutOfRange"] = 2161311744] = "BadShelvingTimeOutOfRange";
377
- StatusCode2[StatusCode2["BadNoData"] = 2157641728] = "BadNoData";
378
- StatusCode2[StatusCode2["BadBoundNotFound"] = 2161573888] = "BadBoundNotFound";
379
- StatusCode2[StatusCode2["BadBoundNotSupported"] = 2161639424] = "BadBoundNotSupported";
380
- StatusCode2[StatusCode2["BadDataLost"] = 2157772800] = "BadDataLost";
381
- StatusCode2[StatusCode2["BadDataUnavailable"] = 2157838336] = "BadDataUnavailable";
382
- StatusCode2[StatusCode2["BadEntryExists"] = 2157903872] = "BadEntryExists";
383
- StatusCode2[StatusCode2["BadNoEntryExists"] = 2157969408] = "BadNoEntryExists";
384
- StatusCode2[StatusCode2["BadTimestampNotSupported"] = 2158034944] = "BadTimestampNotSupported";
385
- StatusCode2[StatusCode2["GoodEntryInserted"] = 10616832] = "GoodEntryInserted";
386
- StatusCode2[StatusCode2["GoodEntryReplaced"] = 10682368] = "GoodEntryReplaced";
387
- StatusCode2[StatusCode2["UncertainDataSubNormal"] = 1084489728] = "UncertainDataSubNormal";
388
- StatusCode2[StatusCode2["GoodNoData"] = 10813440] = "GoodNoData";
389
- StatusCode2[StatusCode2["GoodMoreData"] = 10878976] = "GoodMoreData";
390
- StatusCode2[StatusCode2["BadAggregateListMismatch"] = 2161377280] = "BadAggregateListMismatch";
391
- StatusCode2[StatusCode2["BadAggregateNotSupported"] = 2161442816] = "BadAggregateNotSupported";
392
- StatusCode2[StatusCode2["BadAggregateInvalidInputs"] = 2161508352] = "BadAggregateInvalidInputs";
393
- StatusCode2[StatusCode2["BadAggregateConfigurationRejected"] = 2161770496] = "BadAggregateConfigurationRejected";
394
- StatusCode2[StatusCode2["GoodDataIgnored"] = 14221312] = "GoodDataIgnored";
395
- StatusCode2[StatusCode2["BadRequestNotAllowed"] = 2162425856] = "BadRequestNotAllowed";
396
- StatusCode2[StatusCode2["BadRequestNotComplete"] = 2165506048] = "BadRequestNotComplete";
397
- StatusCode2[StatusCode2["GoodEdited"] = 14417920] = "GoodEdited";
398
- StatusCode2[StatusCode2["GoodPostActionFailed"] = 14483456] = "GoodPostActionFailed";
399
- StatusCode2[StatusCode2["UncertainDominantValueChanged"] = 1088290816] = "UncertainDominantValueChanged";
400
- StatusCode2[StatusCode2["GoodDependentValueChanged"] = 14680064] = "GoodDependentValueChanged";
401
- StatusCode2[StatusCode2["BadDominantValueChanged"] = 2162229248] = "BadDominantValueChanged";
402
- StatusCode2[StatusCode2["UncertainDependentValueChanged"] = 1088552960] = "UncertainDependentValueChanged";
403
- StatusCode2[StatusCode2["BadDependentValueChanged"] = 2162360320] = "BadDependentValueChanged";
404
- StatusCode2[StatusCode2["GoodEditedDependentValueChanged"] = 18219008] = "GoodEditedDependentValueChanged";
405
- StatusCode2[StatusCode2["GoodEditedDominantValueChanged"] = 18284544] = "GoodEditedDominantValueChanged";
406
- StatusCode2[StatusCode2["GoodEditedDominantValueChangedDependentValueChanged"] = 18350080] = "GoodEditedDominantValueChangedDependentValueChanged";
407
- StatusCode2[StatusCode2["BadEditedOutOfRange"] = 2165899264] = "BadEditedOutOfRange";
408
- StatusCode2[StatusCode2["BadInitialValueOutOfRange"] = 2165964800] = "BadInitialValueOutOfRange";
409
- StatusCode2[StatusCode2["BadOutOfRangeDominantValueChanged"] = 2166030336] = "BadOutOfRangeDominantValueChanged";
410
- StatusCode2[StatusCode2["BadEditedOutOfRangeDominantValueChanged"] = 2166095872] = "BadEditedOutOfRangeDominantValueChanged";
411
- StatusCode2[StatusCode2["BadOutOfRangeDominantValueChangedDependentValueChanged"] = 2166161408] = "BadOutOfRangeDominantValueChangedDependentValueChanged";
412
- StatusCode2[StatusCode2["BadEditedOutOfRangeDominantValueChangedDependentValueChanged"] = 2166226944] = "BadEditedOutOfRangeDominantValueChangedDependentValueChanged";
413
- StatusCode2[StatusCode2["GoodCommunicationEvent"] = 10944512] = "GoodCommunicationEvent";
414
- StatusCode2[StatusCode2["GoodShutdownEvent"] = 11010048] = "GoodShutdownEvent";
415
- StatusCode2[StatusCode2["GoodCallAgain"] = 11075584] = "GoodCallAgain";
416
- StatusCode2[StatusCode2["GoodNonCriticalTimeout"] = 11141120] = "GoodNonCriticalTimeout";
417
- StatusCode2[StatusCode2["BadInvalidArgument"] = 2158690304] = "BadInvalidArgument";
418
- StatusCode2[StatusCode2["BadConnectionRejected"] = 2158755840] = "BadConnectionRejected";
419
- StatusCode2[StatusCode2["BadDisconnect"] = 2158821376] = "BadDisconnect";
420
- StatusCode2[StatusCode2["BadConnectionClosed"] = 2158886912] = "BadConnectionClosed";
421
- StatusCode2[StatusCode2["BadInvalidState"] = 2158952448] = "BadInvalidState";
422
- StatusCode2[StatusCode2["BadEndOfStream"] = 2159017984] = "BadEndOfStream";
423
- StatusCode2[StatusCode2["BadNoDataAvailable"] = 2159083520] = "BadNoDataAvailable";
424
- StatusCode2[StatusCode2["BadWaitingForResponse"] = 2159149056] = "BadWaitingForResponse";
425
- StatusCode2[StatusCode2["BadOperationAbandoned"] = 2159214592] = "BadOperationAbandoned";
426
- StatusCode2[StatusCode2["BadExpectedStreamToBlock"] = 2159280128] = "BadExpectedStreamToBlock";
427
- StatusCode2[StatusCode2["BadWouldBlock"] = 2159345664] = "BadWouldBlock";
428
- StatusCode2[StatusCode2["BadSyntaxError"] = 2159411200] = "BadSyntaxError";
429
- StatusCode2[StatusCode2["BadMaxConnectionsReached"] = 2159476736] = "BadMaxConnectionsReached";
430
- return StatusCode2;
431
- })(StatusCode || {});
432
-
433
190
  // src/services/attributeService.ts
434
191
  var AttributeService = class extends ServiceBase {
435
- async ReadValue(nodeIds) {
192
+ logger = opcjsBase.getLogger("services.AttributeService");
193
+ /**
194
+ * Reads the Value attribute of one or more Nodes (OPC UA Part 4, Section 5.10.2).
195
+ * @param nodeIds - NodeIds of the Nodes to read.
196
+ * @param maxAge - Maximum age of the cached value in milliseconds the server may return. 0 = always current value.
197
+ * @param timestampsToReturn - Which timestamps to include in results. Default: Source.
198
+ * @returns Array of results containing value and raw status code number, one per requested NodeId.
199
+ */
200
+ async ReadValue(nodeIds, maxAge = 0, timestampsToReturn = opcjsBase.TimestampsToReturnEnum.Source) {
436
201
  const readValueIds = nodeIds.map((ni) => {
437
202
  const readValueId = new opcjsBase.ReadValueId();
438
203
  readValueId.nodeId = ni;
@@ -443,18 +208,21 @@ var AttributeService = class extends ServiceBase {
443
208
  });
444
209
  const request = new opcjsBase.ReadRequest();
445
210
  request.requestHeader = this.createRequestHeader();
446
- request.maxAge = 6e4;
447
- request.timestampsToReturn = opcjsBase.TimestampsToReturnEnum.Source;
211
+ request.maxAge = maxAge;
212
+ request.timestampsToReturn = timestampsToReturn;
448
213
  request.nodesToRead = readValueIds;
449
- console.log("Sending ReadRequest...");
214
+ this.logger.debug("Sending ReadRequest...");
450
215
  const response = await this.secureChannel.issueServiceRequest(request);
216
+ const serviceResult = response.responseHeader?.serviceResult;
217
+ if (serviceResult !== void 0 && serviceResult !== opcjsBase.StatusCode.Good) {
218
+ throw new Error(`ReadRequest failed: ${opcjsBase.StatusCodeToString(serviceResult)} (${opcjsBase.StatusCodeToStringNumber(serviceResult)})`);
219
+ }
451
220
  const results = new Array();
452
221
  for (const dataValue of response.results ?? []) {
453
- const result = {
454
- status: StatusCodeToString(dataValue.statusCode),
222
+ results.push({
223
+ statusCode: dataValue.statusCode ?? opcjsBase.StatusCode.Good,
455
224
  value: dataValue.value
456
- };
457
- results.push(result);
225
+ });
458
226
  }
459
227
  return results;
460
228
  }
@@ -465,9 +233,9 @@ var AttributeService = class extends ServiceBase {
465
233
 
466
234
  // src/readValueResult.ts
467
235
  var ReadValueResult = class {
468
- constructor(value, status) {
236
+ constructor(value, statusCode) {
469
237
  this.value = value;
470
- this.status = status;
238
+ this.statusCode = statusCode;
471
239
  }
472
240
  };
473
241
 
@@ -487,6 +255,7 @@ var SubscriptionHandler = class {
487
255
  this.subscriptionService = subscriptionService;
488
256
  this.monitoredItemService = monitoredItemService;
489
257
  }
258
+ logger = opcjsBase.getLogger("SubscriptionHandler");
490
259
  entries = new Array();
491
260
  nextHandle = 0;
492
261
  async subscribe(ids, callback) {
@@ -538,7 +307,7 @@ var SubscriptionHandler = class {
538
307
  }]);
539
308
  }
540
309
  } else {
541
- console.log(`The change notification data type ${typeNodeId.namespace}:${typeNodeId.identifier} is not supported.`);
310
+ this.logger.warn(`Notification data type ${typeNodeId.namespace}:${typeNodeId.identifier} is not supported.`);
542
311
  }
543
312
  }
544
313
  setTimeout(() => {
@@ -547,29 +316,48 @@ var SubscriptionHandler = class {
547
316
  }
548
317
  };
549
318
  var SubscriptionService = class extends ServiceBase {
319
+ logger = opcjsBase.getLogger("services.SubscriptionService");
320
+ /**
321
+ * Creates a new subscription on the server (OPC UA Part 4, Section 5.14.2).
322
+ * @param options - Optional subscription parameters; server revises all values.
323
+ * @returns The server-assigned subscription ID.
324
+ */
550
325
  // https://reference.opcfoundation.org/Core/Part4/v105/docs/5.14.2
551
- async createSubscription() {
326
+ async createSubscription(options) {
552
327
  const request = new opcjsBase.CreateSubscriptionRequest();
553
328
  request.requestHeader = this.createRequestHeader();
554
- request.requestedPublishingInterval = 2e3;
555
- request.requestedLifetimeCount = 36e4;
556
- request.requestedMaxKeepAliveCount = 6e4;
557
- request.maxNotificationsPerPublish = 200;
329
+ request.requestedPublishingInterval = options?.requestedPublishingInterval ?? 2e3;
330
+ request.requestedLifetimeCount = options?.requestedLifetimeCount ?? 36e4;
331
+ request.requestedMaxKeepAliveCount = options?.requestedMaxKeepAliveCount ?? 6e4;
332
+ request.maxNotificationsPerPublish = options?.maxNotificationsPerPublish ?? 200;
558
333
  request.publishingEnabled = true;
559
- request.priority = 1;
560
- console.log("Sending createSubscription...");
334
+ request.priority = options?.priority ?? 1;
335
+ this.logger.debug("Sending CreateSubscriptionRequest...");
561
336
  const response = await this.secureChannel.issueServiceRequest(request);
562
- console.log("Subscription created with id:", response.subscriptionId);
337
+ const serviceResult = response.responseHeader?.serviceResult;
338
+ if (serviceResult !== void 0 && serviceResult !== opcjsBase.StatusCode.Good) {
339
+ throw new Error(`CreateSubscriptionRequest failed: ${opcjsBase.StatusCodeToString(serviceResult)}`);
340
+ }
341
+ this.logger.debug(`Subscription created with id: ${response.subscriptionId}`);
563
342
  return response.subscriptionId;
564
343
  }
344
+ /**
345
+ * Sends a publish request to receive notifications from active subscriptions (OPC UA Part 4, Section 5.14.5).
346
+ * @param acknowledgements - Sequence numbers to acknowledge from previous publish responses.
347
+ * @returns The publish response containing notification data.
348
+ */
565
349
  // https://reference.opcfoundation.org/Core/Part4/v105/docs/5.14.5
566
350
  async publish(acknowledgements) {
567
351
  const request = new opcjsBase.PublishRequest();
568
352
  request.requestHeader = this.createRequestHeader();
569
353
  request.subscriptionAcknowledgements = acknowledgements;
570
- console.log("Sending publish...");
354
+ this.logger.debug("Sending PublishRequest...");
571
355
  const response = await this.secureChannel.issueServiceRequest(request);
572
- console.log("Received publish response.");
356
+ const serviceResult = response.responseHeader?.serviceResult;
357
+ if (serviceResult !== void 0 && serviceResult !== opcjsBase.StatusCode.Good) {
358
+ throw new Error(`PublishRequest failed: ${opcjsBase.StatusCodeToString(serviceResult)}`);
359
+ }
360
+ this.logger.debug("Received PublishResponse.");
573
361
  return response;
574
362
  }
575
363
  constructor(authToken, secureChannel) {
@@ -577,7 +365,15 @@ var SubscriptionService = class extends ServiceBase {
577
365
  }
578
366
  };
579
367
  var MonitoredItemService = class extends ServiceBase {
580
- async createMonitoredItems(subscriptionId, ids) {
368
+ logger = opcjsBase.getLogger("services.MonitoredItemService");
369
+ /**
370
+ * Creates monitored items within a subscription (OPC UA Part 4, Section 5.13.2).
371
+ * @param subscriptionId - ID of the subscription to add monitored items to.
372
+ * @param ids - Array of NodeIds and client handles identifying the items to monitor.
373
+ * @param samplingInterval - Requested sampling interval in milliseconds. -1 = use subscription publishing interval.
374
+ * @param queueSize - Requested queue size for each monitored item.
375
+ */
376
+ async createMonitoredItems(subscriptionId, ids, samplingInterval = 1e3, queueSize = 100) {
581
377
  const items = ids.map((ni) => {
582
378
  const readValueId = new opcjsBase.ReadValueId();
583
379
  readValueId.nodeId = ni.id;
@@ -586,9 +382,9 @@ var MonitoredItemService = class extends ServiceBase {
586
382
  readValueId.dataEncoding = new opcjsBase.QualifiedName(0, "");
587
383
  const monitoringParameters = new opcjsBase.MonitoringParameters();
588
384
  monitoringParameters.clientHandle = ni.handle;
589
- monitoringParameters.samplingInterval = 1e3;
385
+ monitoringParameters.samplingInterval = samplingInterval;
590
386
  monitoringParameters.filter = opcjsBase.ExtensionObject.newEmpty();
591
- monitoringParameters.queueSize = 100;
387
+ monitoringParameters.queueSize = queueSize;
592
388
  monitoringParameters.discardOldest = true;
593
389
  const monitoredItemCreateRequest = new opcjsBase.MonitoredItemCreateRequest();
594
390
  monitoredItemCreateRequest.itemToMonitor = readValueId;
@@ -601,26 +397,41 @@ var MonitoredItemService = class extends ServiceBase {
601
397
  request.subscriptionId = subscriptionId;
602
398
  request.timestampsToReturn = opcjsBase.TimestampsToReturnEnum.Source;
603
399
  request.itemsToCreate = items;
604
- console.log("Sending createMonitoredItems...");
605
- await this.secureChannel.issueServiceRequest(request);
400
+ this.logger.debug("Sending CreateMonitoredItemsRequest...");
401
+ const response = await this.secureChannel.issueServiceRequest(request);
402
+ const serviceResult = response.responseHeader?.serviceResult;
403
+ if (serviceResult !== void 0 && serviceResult !== opcjsBase.StatusCode.Good) {
404
+ throw new Error(`CreateMonitoredItemsRequest failed: ${opcjsBase.StatusCodeToString(serviceResult)}`);
405
+ }
406
+ for (const result of response.results ?? []) {
407
+ if (result.statusCode !== void 0 && result.statusCode !== opcjsBase.StatusCode.Good) {
408
+ this.logger.warn(`Failed to create monitored item: ${opcjsBase.StatusCodeToString(result.statusCode)}`);
409
+ }
410
+ }
606
411
  }
607
412
  constructor(authToken, secureChannel) {
608
413
  super(authToken, secureChannel);
609
414
  }
610
415
  };
611
416
  var MethodService = class extends ServiceBase {
417
+ logger = opcjsBase.getLogger("services.MethodService");
612
418
  /**
613
419
  * Calls one or more methods on the server (OPC UA Part 4, Section 5.11.2).
614
420
  * @param methodsToCall - Array of CallMethodRequest describing each method to invoke.
615
- * @returns Array of CallMethodResult, one per requested method.
421
+ * @returns Array of results containing output argument values and raw status code number, one per requested method.
616
422
  */
617
423
  async call(methodsToCall) {
618
424
  const request = new opcjsBase.CallRequest();
619
425
  request.requestHeader = this.createRequestHeader();
620
426
  request.methodsToCall = methodsToCall;
427
+ this.logger.debug("Sending CallRequest...");
621
428
  const response = await this.secureChannel.issueServiceRequest(request);
429
+ const serviceResult = response.responseHeader?.serviceResult;
430
+ if (serviceResult !== void 0 && serviceResult !== opcjsBase.StatusCode.Good) {
431
+ throw new Error(`CallRequest failed: ${opcjsBase.StatusCodeToString(serviceResult)} (${opcjsBase.StatusCodeToStringNumber(serviceResult)})`);
432
+ }
622
433
  return response.results.map((result) => ({
623
- status: StatusCodeToString(result.statusCode),
434
+ statusCode: result.statusCode ?? opcjsBase.StatusCode.Good,
624
435
  value: result.outputArguments.map((arg) => arg.value)
625
436
  }));
626
437
  }
@@ -631,12 +442,18 @@ var MethodService = class extends ServiceBase {
631
442
 
632
443
  // src/callMethodResult.ts
633
444
  var CallMethodResult = class {
634
- constructor(values, status) {
445
+ constructor(values, statusCode) {
635
446
  this.values = values;
636
- this.status = status;
447
+ this.statusCode = statusCode;
637
448
  }
638
449
  };
639
450
  var BrowseService = class extends ServiceBase {
451
+ logger = opcjsBase.getLogger("services.BrowseService");
452
+ /**
453
+ * Browses one or more Nodes and returns their References (OPC UA Part 4, Section 5.9.2).
454
+ * @param nodesToBrowse - Array of BrowseDescriptions specifying nodes and filter criteria.
455
+ * @returns Array of BrowseResult, one per requested node.
456
+ */
640
457
  async browse(nodesToBrowse) {
641
458
  const view = new opcjsBase.ViewDescription();
642
459
  view.viewId = opcjsBase.NodeId.newNumeric(0, 0);
@@ -647,15 +464,31 @@ var BrowseService = class extends ServiceBase {
647
464
  request.view = view;
648
465
  request.requestedMaxReferencesPerNode = 0;
649
466
  request.nodesToBrowse = nodesToBrowse;
467
+ this.logger.debug("Sending BrowseRequest...");
650
468
  const response = await this.secureChannel.issueServiceRequest(request);
469
+ const serviceResult = response.responseHeader?.serviceResult;
470
+ if (serviceResult !== void 0 && serviceResult !== opcjsBase.StatusCode.Good) {
471
+ throw new Error(`BrowseRequest failed: ${opcjsBase.StatusCodeToString(serviceResult)}`);
472
+ }
651
473
  return response.results ?? [];
652
474
  }
475
+ /**
476
+ * Continues a Browse operation using continuation points (OPC UA Part 4, Section 5.9.3).
477
+ * @param continuationPoints - Continuation points returned by a prior Browse or BrowseNext call.
478
+ * @param releaseContinuationPoints - If true, releases the continuation points without returning results.
479
+ * @returns Array of BrowseResult, one per continuation point.
480
+ */
653
481
  async browseNext(continuationPoints, releaseContinuationPoints) {
654
482
  const request = new opcjsBase.BrowseNextRequest();
655
483
  request.requestHeader = this.createRequestHeader();
656
484
  request.releaseContinuationPoints = releaseContinuationPoints;
657
485
  request.continuationPoints = continuationPoints;
486
+ this.logger.debug("Sending BrowseNextRequest...");
658
487
  const response = await this.secureChannel.issueServiceRequest(request);
488
+ const serviceResult = response.responseHeader?.serviceResult;
489
+ if (serviceResult !== void 0 && serviceResult !== opcjsBase.StatusCode.Good) {
490
+ throw new Error(`BrowseNextRequest failed: ${opcjsBase.StatusCodeToString(serviceResult)}`);
491
+ }
659
492
  return response.results ?? [];
660
493
  }
661
494
  constructor(authToken, secureChannel) {
@@ -759,7 +592,7 @@ var Client = class {
759
592
  }
760
593
  async read(ids) {
761
594
  const result = await this.attributeService?.ReadValue(ids);
762
- return result?.map((r) => new ReadValueResult(r.value, r.status)) || [];
595
+ return result?.map((r) => new ReadValueResult(r.value, r.statusCode)) || [];
763
596
  }
764
597
  /**
765
598
  * Method for calling a single method on the server.
@@ -775,7 +608,7 @@ var Client = class {
775
608
  request.inputArguments = inputArguments.map((arg) => opcjsBase.Variant.newFrom(arg));
776
609
  const responses = await this.methodService.call([request]);
777
610
  const response = responses[0];
778
- return new CallMethodResult(response.value, response.status);
611
+ return new CallMethodResult(response.value, response.statusCode);
779
612
  }
780
613
  async browse(nodeId, recursive = false) {
781
614
  const visited = /* @__PURE__ */ new Set();