node-opcua-address-space 2.184.7 → 2.185.0

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.
Files changed (45) hide show
  1. package/api/helpers/argument_list.ts +1 -1
  2. package/api/helpers/call_helpers.ts +152 -7
  3. package/api/loader/nodeset_record.ts +1 -1
  4. package/api/loader/nodeset_record_applier.ts +1 -0
  5. package/api/loader/nodeset_xml_producer.ts +1 -0
  6. package/api/session_context.ts +38 -0
  7. package/dist/api/helpers/argument_list.js +1 -1
  8. package/dist/api/helpers/argument_list.js.map +1 -1
  9. package/dist/api/helpers/call_helpers.d.ts +1 -1
  10. package/dist/api/helpers/call_helpers.d.ts.map +1 -1
  11. package/dist/api/helpers/call_helpers.js +137 -4
  12. package/dist/api/helpers/call_helpers.js.map +1 -1
  13. package/dist/api/loader/nodeset_record.d.ts +1 -1
  14. package/dist/api/loader/nodeset_record.js +1 -1
  15. package/dist/api/loader/nodeset_record_applier.d.ts.map +1 -1
  16. package/dist/api/loader/nodeset_record_applier.js +1 -0
  17. package/dist/api/loader/nodeset_record_applier.js.map +1 -1
  18. package/dist/api/loader/nodeset_xml_producer.d.ts.map +1 -1
  19. package/dist/api/loader/nodeset_xml_producer.js +1 -0
  20. package/dist/api/loader/nodeset_xml_producer.js.map +1 -1
  21. package/dist/api/session_context.d.ts +28 -1
  22. package/dist/api/session_context.d.ts.map +1 -1
  23. package/dist/api/session_context.js +32 -0
  24. package/dist/api/session_context.js.map +1 -1
  25. package/dist/impl/data_access/semantics_changed.d.ts +1 -1
  26. package/dist/impl/data_access/semantics_changed.js +1 -1
  27. package/dist/impl/nodeset_tools/nodeset_to_records.d.ts.map +1 -1
  28. package/dist/impl/nodeset_tools/nodeset_to_records.js +5 -7
  29. package/dist/impl/nodeset_tools/nodeset_to_records.js.map +1 -1
  30. package/dist/impl/nodeset_tools/nodeset_to_xml.d.ts +7 -1
  31. package/dist/impl/nodeset_tools/nodeset_to_xml.d.ts.map +1 -1
  32. package/dist/impl/nodeset_tools/nodeset_to_xml.js +15 -4
  33. package/dist/impl/nodeset_tools/nodeset_to_xml.js.map +1 -1
  34. package/dist/impl/ua_reference_type_impl.d.ts.map +1 -1
  35. package/dist/impl/ua_reference_type_impl.js +2 -1
  36. package/dist/impl/ua_reference_type_impl.js.map +1 -1
  37. package/dist/impl/ua_variable_impl.js +1 -1
  38. package/dist/impl/ua_variable_impl.js.map +1 -1
  39. package/dist/tsconfig_base.tsbuildinfo +1 -1
  40. package/impl/data_access/semantics_changed.ts +1 -1
  41. package/impl/nodeset_tools/nodeset_to_records.ts +7 -8
  42. package/impl/nodeset_tools/nodeset_to_xml.ts +15 -4
  43. package/impl/ua_reference_type_impl.ts +2 -1
  44. package/impl/ua_variable_impl.ts +1 -1
  45. package/package.json +27 -27
@@ -293,7 +293,7 @@ export function verifyArguments_ArgumentList(
293
293
  return { inputArgumentResults, statusCode: StatusCodes.BadTooManyArguments };
294
294
  }
295
295
 
296
- // Part 4 5.11.2 (Call): when one of the input arguments is not valid the
296
+ // OPC 10000-4 v1.05.07 §5.12.2 (Call): when one of the input arguments is not valid the
297
297
  // operation statusCode is BadInvalidArgument and inputArgumentResults[i]
298
298
  // carries the per-argument reason (BadTypeMismatch for a wrong DataType or
299
299
  // ValueRank, BadOutOfRange for a value outside the range). A per-argument
@@ -2,13 +2,13 @@
2
2
  * @module node-opcua-address-space
3
3
  */
4
4
 
5
- import type { IAddressSpace, ISessionContext, UAMethod, UAObject } from "node-opcua-address-space-base";
5
+ import type { BaseNode, IAddressSpace, ISessionContext, UAMethod, UAObject, UAObjectType } from "node-opcua-address-space-base";
6
6
  import { assert } from "node-opcua-assert";
7
- import { NodeClass } from "node-opcua-data-model";
8
- import { NodeId } from "node-opcua-nodeid";
7
+ import { BrowseDirection, NodeClass } from "node-opcua-data-model";
8
+ import { NodeId, sameNodeId } from "node-opcua-nodeid";
9
9
  import type { CallMethodRequest } from "node-opcua-service-call";
10
- import { StatusCodes } from "node-opcua-status-code";
11
- import type { CallMethodResultOptions } from "node-opcua-types";
10
+ import { type StatusCode, StatusCodes } from "node-opcua-status-code";
11
+ import { type CallMethodResultOptions, PermissionType } from "node-opcua-types";
12
12
  import type { Variant } from "node-opcua-variant";
13
13
 
14
14
  import { getMethodDeclaration_ArgumentList, verifyArguments_ArgumentList } from "./argument_list.js";
@@ -32,6 +32,133 @@ import { resolveOpaqueOnAddressSpace } from "./resolve_opaque_on_address_space.j
32
32
  // A server shall accept a ByteString if an array of Byte is expected.
33
33
  // BadNoCommunication
34
34
 
35
+ // guards against a cyclic MethodDeclarationId chain or a runaway type hierarchy
36
+ const maxDepth = 64;
37
+
38
+ /** true when `method` was instantiated from `declaration`, directly or through a chain of MethodDeclarationId */
39
+ function isDeclaredBy(method: UAMethod, declaration: UAMethod): boolean {
40
+ let current: UAMethod = method;
41
+ for (let i = 0; i < maxDepth; i++) {
42
+ const declarationId = current.methodDeclarationId;
43
+ if (!declarationId || sameNodeId(declarationId, current.nodeId)) {
44
+ return false;
45
+ }
46
+ if (sameNodeId(declarationId, declaration.nodeId)) {
47
+ return true;
48
+ }
49
+ const next = current.addressSpace.findNode(declarationId);
50
+ if (!next || next.nodeClass !== NodeClass.Method) {
51
+ return false;
52
+ }
53
+ current = next as UAMethod;
54
+ }
55
+ return false;
56
+ }
57
+
58
+ /**
59
+ * the Method whose implementation runs: the target's own, else the one named by methodId, else the first
60
+ * bound Method along the target's MethodDeclarationId chain (an instance created before its type's method was
61
+ * bound). The target itself when none is bound: execute() then reports it as not bound.
62
+ */
63
+ function implementationOf(targetMethod: UAMethod, methodObj: UAMethod): UAMethod {
64
+ if (targetMethod.isBound()) {
65
+ return targetMethod;
66
+ }
67
+ if (methodObj.isBound()) {
68
+ return methodObj;
69
+ }
70
+ let current: UAMethod = targetMethod;
71
+ for (let i = 0; i < maxDepth; i++) {
72
+ const declarationId = current.methodDeclarationId;
73
+ if (!declarationId || sameNodeId(declarationId, current.nodeId)) {
74
+ break;
75
+ }
76
+ const next = current.addressSpace.findNode(declarationId);
77
+ if (!next || next.nodeClass !== NodeClass.Method) {
78
+ break;
79
+ }
80
+ current = next as UAMethod;
81
+ if (current.isBound()) {
82
+ return current;
83
+ }
84
+ }
85
+ return targetMethod;
86
+ }
87
+
88
+ /** the ObjectType of `object` (or `object` itself when it is an ObjectType) and all its supertypes */
89
+ function typeHierarchyOf(object: UAObject | UAObjectType): UAObjectType[] {
90
+ const types: UAObjectType[] = [];
91
+ let type: UAObjectType | null =
92
+ object.nodeClass === NodeClass.ObjectType ? (object as UAObjectType) : (object as UAObject).typeDefinitionObj;
93
+ while (type && types.length < maxDepth) {
94
+ types.push(type);
95
+ type = type.subtypeOfObj;
96
+ }
97
+ return types;
98
+ }
99
+
100
+ /**
101
+ * true when `declaringNode` is an ObjectType that defines methods for `object`: one of its types or supertypes,
102
+ * or an InterfaceType (or a supertype of one) that the object or one of its types implements (OPC 10000-3 v1.05.06 §4.10)
103
+ */
104
+ function isTypeOf(declaringNode: BaseNode | null, object: UAObject | UAObjectType): boolean {
105
+ if (!declaringNode || declaringNode.nodeClass !== NodeClass.ObjectType) {
106
+ return false;
107
+ }
108
+ const types = typeHierarchyOf(object);
109
+ if (types.includes(declaringNode as UAObjectType)) {
110
+ return true;
111
+ }
112
+ if (!object.addressSpace.findReferenceType("HasInterface")) {
113
+ return false;
114
+ }
115
+ for (const node of [object, ...types]) {
116
+ for (const iface of node.findReferencesExAsObject("HasInterface", BrowseDirection.Forward)) {
117
+ if (
118
+ iface === declaringNode ||
119
+ (iface.nodeClass === NodeClass.ObjectType && (iface as UAObjectType).isSubtypeOf(declaringNode as UAObjectType))
120
+ ) {
121
+ return true;
122
+ }
123
+ }
124
+ }
125
+ return false;
126
+ }
127
+
128
+ /**
129
+ * OPC 10000-4 v1.05.07 §5.12.2 Call, methodId: "If the objectId is the NodeId of an Object, the methodId is either the
130
+ * NodeId of the Method that is a component of the Object instance or the NodeId of the Method in the ObjectType
131
+ * that defines the Method. Independent of the methodId parameter, the RolePermissions are always verified with
132
+ * the Method Node that is the target of a HasComponent from the Node defined by objectId."
133
+ *
134
+ * Returns the Method whose AccessRestrictions and RolePermissions govern the call:
135
+ * - `methodObj` itself when it is a component of `object`;
136
+ * - otherwise the component of `object` instantiated from `methodObj` (MethodDeclarationId), or, when
137
+ * `methodObj` belongs to a type of `object`, the component with the same BrowseName;
138
+ * - `methodObj` when it belongs to a type of `object` that has no such component (a method called on its
139
+ * ObjectType, or an optional method not instantiated);
140
+ * - BadMethodInvalid when `methodObj` is neither a method of `object` nor one of its types.
141
+ */
142
+ function resolveMethodOfObject(
143
+ object: UAObject | UAObjectType,
144
+ methodObj: UAMethod
145
+ ): { statusCode: StatusCode; method?: UAMethod } {
146
+ if (object.getMethodById(methodObj.nodeId)) {
147
+ return { statusCode: StatusCodes.Good, method: methodObj };
148
+ }
149
+ const methods = object.getMethods();
150
+ const instantiated = methods.find((m) => isDeclaredBy(m, methodObj));
151
+ if (instantiated) {
152
+ return { statusCode: StatusCodes.Good, method: instantiated };
153
+ }
154
+ if (!isTypeOf(methodObj.parent, object)) {
155
+ return { statusCode: StatusCodes.BadMethodInvalid };
156
+ }
157
+ const browseName = methodObj.browseName.toString();
158
+ const sameName = methods.find((m) => m.browseName.toString() === browseName);
159
+ return { statusCode: StatusCodes.Good, method: sameName || methodObj };
160
+ }
161
+
35
162
  export async function callMethodHelper(
36
163
  context: ISessionContext,
37
164
  addressSpace: IAddressSpace,
@@ -60,7 +187,14 @@ export async function callMethodHelper(
60
187
  return { statusCode: StatusCodes.BadMethodInvalid };
61
188
  }
62
189
 
63
- const response1 = getMethodDeclaration_ArgumentList(addressSpace, objectId, methodId);
190
+ const resolved = resolveMethodOfObject(object, methodObj);
191
+ if (!resolved.method) {
192
+ return { statusCode: resolved.statusCode };
193
+ }
194
+ // the Method whose AccessRestrictions and RolePermissions apply, whatever methodId named
195
+ const targetMethod = resolved.method;
196
+
197
+ const response1 = getMethodDeclaration_ArgumentList(addressSpace, objectId, targetMethod.nodeId);
64
198
 
65
199
  if (response1.statusCode.isNotGood()) {
66
200
  return { statusCode: response1.statusCode };
@@ -81,7 +215,18 @@ export async function callMethodHelper(
81
215
  try {
82
216
  await resolveOpaqueOnAddressSpace(addressSpace, inputArguments);
83
217
 
84
- const callMethodResponse = await methodObj.execute(object, inputArguments, context);
218
+ // execute() verifies the method it runs on; when the instance method has no implementation of its own,
219
+ // the declaration's runs, so the instance method is verified here first, in the same order as execute()
220
+ const executingMethod = implementationOf(targetMethod, methodObj);
221
+ if (executingMethod !== targetMethod) {
222
+ if (context.isAccessRestricted(targetMethod)) {
223
+ return { statusCode: StatusCodes.BadSecurityModeInsufficient };
224
+ }
225
+ if (!context.checkPermission(targetMethod, PermissionType.Call)) {
226
+ return { statusCode: StatusCodes.BadUserAccessDenied };
227
+ }
228
+ }
229
+ const callMethodResponse = await executingMethod.execute(object, inputArguments, context);
85
230
  callMethodResponse.inputArgumentResults = callMethodResponse.inputArgumentResults || response.inputArgumentResults || [];
86
231
  assert(callMethodResponse.statusCode);
87
232
 
@@ -29,7 +29,7 @@ import type { EnumFieldOptions, StructureFieldOptions } from "node-opcua-xml2jso
29
29
  * was built from, and nothing else would ever invalidate it. The source digest cannot: the source
30
30
  * did not change. This number is the only lever.
31
31
  */
32
- export const NODESET_RECORD_SCHEMA = 5;
32
+ export const NODESET_RECORD_SCHEMA = 6;
33
33
 
34
34
  export interface NodesetModelRecord {
35
35
  modelUri: string;
@@ -633,6 +633,7 @@ export class NodesetRecordApplier implements NodesetRecordConsumer {
633
633
  const params = {
634
634
  ...this.common(record),
635
635
  isAbstract: record.isAbstract,
636
+ symmetric: !!record.symmetric,
636
637
  displayName: record.displayName,
637
638
  description: record.description,
638
639
  inverseName: record.inverseName
@@ -216,6 +216,7 @@ export function makeXmlNodesetRecordReader(): XmlNodesetRecordReader {
216
216
  init(this: NodeState, _name: string, attrs: XmlAttributes) {
217
217
  this.obj = baseRecord(NodeClass.ReferenceType, attrs);
218
218
  this.obj.isAbstract = coerceBoolean(attrs.IsAbstract);
219
+ this.obj.symmetric = coerceBoolean(attrs.Symmetric);
219
220
  },
220
221
  ...emit,
221
222
  parser: {
@@ -32,6 +32,7 @@ import {
32
32
  AnonymousIdentityToken,
33
33
  MessageSecurityMode,
34
34
  PermissionType,
35
+ type RequestHeader,
35
36
  type RolePermissionType,
36
37
  UserNameIdentityToken,
37
38
  X509IdentityToken
@@ -192,6 +193,8 @@ export interface SessionContextOptions {
192
193
  session?: ISessionBase /* ServerSession */;
193
194
  object?: UAObject | UAObjectType;
194
195
  server?: IServerBase /* OPCUAServer*/;
196
+ /** see {@link SessionContext.requestHeader} */
197
+ requestHeader?: RequestHeader;
195
198
  }
196
199
 
197
200
  function getPermissionForRole(
@@ -442,6 +445,7 @@ export class SessionContext implements ISessionContext {
442
445
  public continuationPoints: Buffer[] = [];
443
446
  public readonly session?: ISessionBase;
444
447
  public readonly server?: IServerBase;
448
+ public readonly requestHeader?: RequestHeader;
445
449
 
446
450
  constructor(options?: SessionContextOptions) {
447
451
  options = options || {};
@@ -449,6 +453,31 @@ export class SessionContext implements ISessionContext {
449
453
  this.object = options.object;
450
454
  this.server = options.server;
451
455
  this.currentTime = undefined;
456
+ this.requestHeader = options.requestHeader;
457
+ }
458
+
459
+ /**
460
+ * A SessionContext identical to this one, plus `requestHeader` (and the `getAuditEntryId()`
461
+ * it feeds). Deliberately a **new** instance rather than a mutation of `this`: build one per
462
+ * Call service invocation (see opcua_server.ts _on_CallRequest), never by writing onto the
463
+ * Session's own long-lived sessionContext. That object is shared and read concurrently by
464
+ * every request in flight on the Session (ServerSession#sessionContext is one instance for
465
+ * the Session's whole lifetime - see also UAMethodImpl#execute, which already mutates
466
+ * `context.object` on whatever context it is handed), so a shared mutable RequestHeader
467
+ * field would let two Calls running at once on the same Session overwrite or read back the
468
+ * wrong id. A fresh instance per Call has none of that: nothing but the caller holds a
469
+ * reference to it.
470
+ */
471
+ public withRequestHeader(requestHeader: RequestHeader): SessionContext {
472
+ return new SessionContext({ session: this.session, object: this.object, server: this.server, requestHeader });
473
+ }
474
+
475
+ /**
476
+ * `requestHeader?.auditEntryId`, or `undefined` when either is absent or the id is empty -
477
+ * see {@link ISessionContext.getAuditEntryId}.
478
+ */
479
+ public getAuditEntryId(): string | undefined {
480
+ return this.requestHeader?.auditEntryId || undefined;
452
481
  }
453
482
 
454
483
  /**
@@ -483,6 +512,15 @@ export class SessionContext implements ISessionContext {
483
512
  return this.session?.getEndpointUrl?.() ?? null;
484
513
  }
485
514
 
515
+ /**
516
+ * The Session's preferred locales, most preferred first (OPC 10000-4 v1.05.07 §5.7.3
517
+ * ActivateSession localeIds, §5.4 Locale Negotiation). `[]` without a Session, or before
518
+ * the Session's first successful ActivateSession with a non-empty localeIds.
519
+ */
520
+ public getPreferredLocales(): string[] {
521
+ return this.session?.localeIds ? [...this.session.localeIds] : [];
522
+ }
523
+
486
524
  public toJSON(): Record<string, string | null> {
487
525
  return {
488
526
  userName: this.getUserName(),
@@ -240,7 +240,7 @@ export function verifyArguments_ArgumentList(addressSpace, methodInputArguments,
240
240
  inputArguments.length);
241
241
  return { inputArgumentResults, statusCode: StatusCodes.BadTooManyArguments };
242
242
  }
243
- // Part 4 5.11.2 (Call): when one of the input arguments is not valid the
243
+ // OPC 10000-4 v1.05.07 §5.12.2 (Call): when one of the input arguments is not valid the
244
244
  // operation statusCode is BadInvalidArgument and inputArgumentResults[i]
245
245
  // carries the per-argument reason (BadTypeMismatch for a wrong DataType or
246
246
  // ValueRank, BadOutOfRange for a value outside the range). A per-argument
@@ -1 +1 @@
1
- {"version":3,"file":"argument_list.js","sourceRoot":"","sources":["../../../api/helpers/argument_list.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"argument_list.js","sourceRoot":"","sources":["../../../api/helpers/argument_list.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,6 @@
3
3
  */
4
4
  import type { IAddressSpace, ISessionContext } from "node-opcua-address-space-base";
5
5
  import type { CallMethodRequest } from "node-opcua-service-call";
6
- import type { CallMethodResultOptions } from "node-opcua-types";
6
+ import { type CallMethodResultOptions } from "node-opcua-types";
7
7
  export declare function callMethodHelper(context: ISessionContext, addressSpace: IAddressSpace, callMethodRequest: CallMethodRequest): Promise<CallMethodResultOptions>;
8
8
  //# sourceMappingURL=call_helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"call_helpers.d.ts","sourceRoot":"","sources":["../../../api/helpers/call_helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAsB,MAAM,+BAA+B,CAAC;AAIxG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAwBhE,wBAAsB,gBAAgB,CAClC,OAAO,EAAE,eAAe,EACxB,YAAY,EAAE,aAAa,EAC3B,iBAAiB,EAAE,iBAAiB,GACrC,OAAO,CAAC,uBAAuB,CAAC,CA+DlC"}
1
+ {"version":3,"file":"call_helpers.d.ts","sourceRoot":"","sources":["../../../api/helpers/call_helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAY,aAAa,EAAE,eAAe,EAAoC,MAAM,+BAA+B,CAAC;AAIhI,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,OAAO,EAAE,KAAK,uBAAuB,EAAkB,MAAM,kBAAkB,CAAC;AAuJhF,wBAAsB,gBAAgB,CAClC,OAAO,EAAE,eAAe,EACxB,YAAY,EAAE,aAAa,EAC3B,iBAAiB,EAAE,iBAAiB,GACrC,OAAO,CAAC,uBAAuB,CAAC,CAiFlC"}
@@ -2,9 +2,10 @@
2
2
  * @module node-opcua-address-space
3
3
  */
4
4
  import { assert } from "node-opcua-assert";
5
- import { NodeClass } from "node-opcua-data-model";
6
- import { NodeId } from "node-opcua-nodeid";
5
+ import { BrowseDirection, NodeClass } from "node-opcua-data-model";
6
+ import { NodeId, sameNodeId } from "node-opcua-nodeid";
7
7
  import { StatusCodes } from "node-opcua-status-code";
8
+ import { PermissionType } from "node-opcua-types";
8
9
  import { getMethodDeclaration_ArgumentList, verifyArguments_ArgumentList } from "./argument_list.js";
9
10
  import { resolveOpaqueOnAddressSpace } from "./resolve_opaque_on_address_space.js";
10
11
  // Symbolic Id Description
@@ -24,6 +25,121 @@ import { resolveOpaqueOnAddressSpace } from "./resolve_opaque_on_address_space.j
24
25
  // A ByteString is structurally the same as a one dimensional array of Byte.
25
26
  // A server shall accept a ByteString if an array of Byte is expected.
26
27
  // BadNoCommunication
28
+ // guards against a cyclic MethodDeclarationId chain or a runaway type hierarchy
29
+ const maxDepth = 64;
30
+ /** true when `method` was instantiated from `declaration`, directly or through a chain of MethodDeclarationId */
31
+ function isDeclaredBy(method, declaration) {
32
+ let current = method;
33
+ for (let i = 0; i < maxDepth; i++) {
34
+ const declarationId = current.methodDeclarationId;
35
+ if (!declarationId || sameNodeId(declarationId, current.nodeId)) {
36
+ return false;
37
+ }
38
+ if (sameNodeId(declarationId, declaration.nodeId)) {
39
+ return true;
40
+ }
41
+ const next = current.addressSpace.findNode(declarationId);
42
+ if (!next || next.nodeClass !== NodeClass.Method) {
43
+ return false;
44
+ }
45
+ current = next;
46
+ }
47
+ return false;
48
+ }
49
+ /**
50
+ * the Method whose implementation runs: the target's own, else the one named by methodId, else the first
51
+ * bound Method along the target's MethodDeclarationId chain (an instance created before its type's method was
52
+ * bound). The target itself when none is bound: execute() then reports it as not bound.
53
+ */
54
+ function implementationOf(targetMethod, methodObj) {
55
+ if (targetMethod.isBound()) {
56
+ return targetMethod;
57
+ }
58
+ if (methodObj.isBound()) {
59
+ return methodObj;
60
+ }
61
+ let current = targetMethod;
62
+ for (let i = 0; i < maxDepth; i++) {
63
+ const declarationId = current.methodDeclarationId;
64
+ if (!declarationId || sameNodeId(declarationId, current.nodeId)) {
65
+ break;
66
+ }
67
+ const next = current.addressSpace.findNode(declarationId);
68
+ if (!next || next.nodeClass !== NodeClass.Method) {
69
+ break;
70
+ }
71
+ current = next;
72
+ if (current.isBound()) {
73
+ return current;
74
+ }
75
+ }
76
+ return targetMethod;
77
+ }
78
+ /** the ObjectType of `object` (or `object` itself when it is an ObjectType) and all its supertypes */
79
+ function typeHierarchyOf(object) {
80
+ const types = [];
81
+ let type = object.nodeClass === NodeClass.ObjectType ? object : object.typeDefinitionObj;
82
+ while (type && types.length < maxDepth) {
83
+ types.push(type);
84
+ type = type.subtypeOfObj;
85
+ }
86
+ return types;
87
+ }
88
+ /**
89
+ * true when `declaringNode` is an ObjectType that defines methods for `object`: one of its types or supertypes,
90
+ * or an InterfaceType (or a supertype of one) that the object or one of its types implements (OPC 10000-3 v1.05.06 §4.10)
91
+ */
92
+ function isTypeOf(declaringNode, object) {
93
+ if (!declaringNode || declaringNode.nodeClass !== NodeClass.ObjectType) {
94
+ return false;
95
+ }
96
+ const types = typeHierarchyOf(object);
97
+ if (types.includes(declaringNode)) {
98
+ return true;
99
+ }
100
+ if (!object.addressSpace.findReferenceType("HasInterface")) {
101
+ return false;
102
+ }
103
+ for (const node of [object, ...types]) {
104
+ for (const iface of node.findReferencesExAsObject("HasInterface", BrowseDirection.Forward)) {
105
+ if (iface === declaringNode ||
106
+ (iface.nodeClass === NodeClass.ObjectType && iface.isSubtypeOf(declaringNode))) {
107
+ return true;
108
+ }
109
+ }
110
+ }
111
+ return false;
112
+ }
113
+ /**
114
+ * OPC 10000-4 v1.05.07 §5.12.2 Call, methodId: "If the objectId is the NodeId of an Object, the methodId is either the
115
+ * NodeId of the Method that is a component of the Object instance or the NodeId of the Method in the ObjectType
116
+ * that defines the Method. Independent of the methodId parameter, the RolePermissions are always verified with
117
+ * the Method Node that is the target of a HasComponent from the Node defined by objectId."
118
+ *
119
+ * Returns the Method whose AccessRestrictions and RolePermissions govern the call:
120
+ * - `methodObj` itself when it is a component of `object`;
121
+ * - otherwise the component of `object` instantiated from `methodObj` (MethodDeclarationId), or, when
122
+ * `methodObj` belongs to a type of `object`, the component with the same BrowseName;
123
+ * - `methodObj` when it belongs to a type of `object` that has no such component (a method called on its
124
+ * ObjectType, or an optional method not instantiated);
125
+ * - BadMethodInvalid when `methodObj` is neither a method of `object` nor one of its types.
126
+ */
127
+ function resolveMethodOfObject(object, methodObj) {
128
+ if (object.getMethodById(methodObj.nodeId)) {
129
+ return { statusCode: StatusCodes.Good, method: methodObj };
130
+ }
131
+ const methods = object.getMethods();
132
+ const instantiated = methods.find((m) => isDeclaredBy(m, methodObj));
133
+ if (instantiated) {
134
+ return { statusCode: StatusCodes.Good, method: instantiated };
135
+ }
136
+ if (!isTypeOf(methodObj.parent, object)) {
137
+ return { statusCode: StatusCodes.BadMethodInvalid };
138
+ }
139
+ const browseName = methodObj.browseName.toString();
140
+ const sameName = methods.find((m) => m.browseName.toString() === browseName);
141
+ return { statusCode: StatusCodes.Good, method: sameName || methodObj };
142
+ }
27
143
  export async function callMethodHelper(context, addressSpace, callMethodRequest) {
28
144
  const objectId = callMethodRequest.objectId;
29
145
  const methodId = callMethodRequest.methodId;
@@ -44,7 +160,13 @@ export async function callMethodHelper(context, addressSpace, callMethodRequest)
44
160
  if (methodObj.nodeClass !== NodeClass.Method) {
45
161
  return { statusCode: StatusCodes.BadMethodInvalid };
46
162
  }
47
- const response1 = getMethodDeclaration_ArgumentList(addressSpace, objectId, methodId);
163
+ const resolved = resolveMethodOfObject(object, methodObj);
164
+ if (!resolved.method) {
165
+ return { statusCode: resolved.statusCode };
166
+ }
167
+ // the Method whose AccessRestrictions and RolePermissions apply, whatever methodId named
168
+ const targetMethod = resolved.method;
169
+ const response1 = getMethodDeclaration_ArgumentList(addressSpace, objectId, targetMethod.nodeId);
48
170
  if (response1.statusCode.isNotGood()) {
49
171
  return { statusCode: response1.statusCode };
50
172
  }
@@ -60,7 +182,18 @@ export async function callMethodHelper(context, addressSpace, callMethodRequest)
60
182
  }
61
183
  try {
62
184
  await resolveOpaqueOnAddressSpace(addressSpace, inputArguments);
63
- const callMethodResponse = await methodObj.execute(object, inputArguments, context);
185
+ // execute() verifies the method it runs on; when the instance method has no implementation of its own,
186
+ // the declaration's runs, so the instance method is verified here first, in the same order as execute()
187
+ const executingMethod = implementationOf(targetMethod, methodObj);
188
+ if (executingMethod !== targetMethod) {
189
+ if (context.isAccessRestricted(targetMethod)) {
190
+ return { statusCode: StatusCodes.BadSecurityModeInsufficient };
191
+ }
192
+ if (!context.checkPermission(targetMethod, PermissionType.Call)) {
193
+ return { statusCode: StatusCodes.BadUserAccessDenied };
194
+ }
195
+ }
196
+ const callMethodResponse = await executingMethod.execute(object, inputArguments, context);
64
197
  callMethodResponse.inputArgumentResults = callMethodResponse.inputArgumentResults || response.inputArgumentResults || [];
65
198
  assert(callMethodResponse.statusCode);
66
199
  if (callMethodResponse.statusCode?.isGood()) {
@@ -1 +1 @@
1
- {"version":3,"file":"call_helpers.js","sourceRoot":"","sources":["../../../api/helpers/call_helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"call_helpers.js","sourceRoot":"","sources":["../../../api/helpers/call_helpers.ts"],"names":[],"mappings":"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"}
@@ -28,7 +28,7 @@ import type { EnumFieldOptions, StructureFieldOptions } from "node-opcua-xml2jso
28
28
  * was built from, and nothing else would ever invalidate it. The source digest cannot: the source
29
29
  * did not change. This number is the only lever.
30
30
  */
31
- export declare const NODESET_RECORD_SCHEMA = 5;
31
+ export declare const NODESET_RECORD_SCHEMA = 6;
32
32
  export interface NodesetModelRecord {
33
33
  modelUri: string;
34
34
  version: string;
@@ -8,7 +8,7 @@
8
8
  * was built from, and nothing else would ever invalidate it. The source digest cannot: the source
9
9
  * did not change. This number is the only lever.
10
10
  */
11
- export const NODESET_RECORD_SCHEMA = 5;
11
+ export const NODESET_RECORD_SCHEMA = 6;
12
12
  /**
13
13
  * an extension object the reader could not decode on the spot: its XML body waits in the value
14
14
  * until the data types are known, then a consumer decodes it
@@ -1 +1 @@
1
- {"version":3,"file":"nodeset_record_applier.d.ts","sourceRoot":"","sources":["../../../api/loader/nodeset_record_applier.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAER,QAAQ,EAER,aAAa,EAEb,WAAW,EAGd,MAAM,+BAA+B,CAAC;AAevC,OAAO,EAAE,MAAM,EAAiB,MAAM,mBAAmB,CAAC;AAQ1D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAEpF,OAAO,EAIH,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAE7B,MAAM,qBAAqB,CAAC;AAO7B,MAAM,MAAM,IAAI,GAAG,CAAC,YAAY,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAElE,6EAA6E;AAC7E,MAAM,WAAW,gBAAgB;IAC7B,SAAS,EAAE,IAAI,EAAE,CAAC;IAClB,6BAA6B,EAAE,IAAI,EAAE,CAAC;IACtC,2BAA2B,EAAE,IAAI,EAAE,CAAC;IACpC,6BAA6B,EAAE,IAAI,EAAE,CAAC;IACtC,6CAA6C,EAAE,IAAI,EAAE,CAAC;IACtD,2BAA2B,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC3E;AACD,wBAAgB,oBAAoB,IAAI,gBAAgB,CASvD;AA2ID,yDAAyD;AACzD,MAAM,WAAW,qBAAqB;IAClC,mGAAmG;IACnG,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;IACvB,2DAA2D;IAC3D,UAAU,EAAE,KAAK,CAAC,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;CAC9C;AAED,qBAAa,oBAAqB,YAAW,qBAAqB;IAiB1D,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAjB3B,+GAA+G;IAC/G,OAAO,CAAC,OAAO,CAAiE;IAEhF,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;IACnD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAU;IAC/C,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAU;IAGlD,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,iBAAiB,CAA6B;IACtD,OAAO,CAAC,aAAa,CAAsC;IAC3D,OAAO,CAAC,UAAU,CAAS;IAE3B,YACI,YAAY,EAAE,aAAa,EACV,OAAO,EAAE,oBAAoB,EAC7B,MAAM,EAAE,gBAAgB,EAQ5C;IAEM,KAAK,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CASxC;IAGD,OAAO,CAAC,WAAW;IAoDnB,OAAO,CAAC,YAAY;IAoEpB,OAAO,CAAC,uBAAuB;IAU/B,yEAAyE;IACzE,OAAO,CAAC,SAAS;IAcjB,OAAO,CAAC,eAAe;IAGvB,OAAO,CAAC,sBAAsB;IAI9B;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,eAAe,CAiB9B;IAEF;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAuCtB,OAAO,CAAC,SAAS;IAcjB,OAAO,CAAC,WAAW;IAwBnB,OAAO,CAAC,MAAM;IAYd,sGAAsG;IACtG,OAAO,CAAC,UAAU;IAWlB;;;;;;OAMG;IACH,OAAO,CAAC,MAAM;IAiBd;;;;;OAKG;IACI,yBAAyB,IAAI,qBAAqB,CAIxD;IAED,OAAO,CAAC,UAAU;IAoBlB,OAAO,CAAC,SAAS;IAoFjB,OAAO,CAAC,aAAa;IAwCrB;;;OAGG;IACH,OAAO,CAAC,YAAY;IA4CpB,OAAO,CAAC,0BAA0B;IAsBlC,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,aAAa;IAsErB,oGAAoG;IACpG,OAAO,CAAC,eAAe;IAYvB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IA4B1B,OAAO,CAAC,iBAAiB;CAkB5B"}
1
+ {"version":3,"file":"nodeset_record_applier.d.ts","sourceRoot":"","sources":["../../../api/loader/nodeset_record_applier.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAER,QAAQ,EAER,aAAa,EAEb,WAAW,EAGd,MAAM,+BAA+B,CAAC;AAevC,OAAO,EAAE,MAAM,EAAiB,MAAM,mBAAmB,CAAC;AAQ1D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAEpF,OAAO,EAIH,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAE7B,MAAM,qBAAqB,CAAC;AAO7B,MAAM,MAAM,IAAI,GAAG,CAAC,YAAY,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAElE,6EAA6E;AAC7E,MAAM,WAAW,gBAAgB;IAC7B,SAAS,EAAE,IAAI,EAAE,CAAC;IAClB,6BAA6B,EAAE,IAAI,EAAE,CAAC;IACtC,2BAA2B,EAAE,IAAI,EAAE,CAAC;IACpC,6BAA6B,EAAE,IAAI,EAAE,CAAC;IACtC,6CAA6C,EAAE,IAAI,EAAE,CAAC;IACtD,2BAA2B,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC3E;AACD,wBAAgB,oBAAoB,IAAI,gBAAgB,CASvD;AA2ID,yDAAyD;AACzD,MAAM,WAAW,qBAAqB;IAClC,mGAAmG;IACnG,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;IACvB,2DAA2D;IAC3D,UAAU,EAAE,KAAK,CAAC,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;CAC9C;AAED,qBAAa,oBAAqB,YAAW,qBAAqB;IAiB1D,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAjB3B,+GAA+G;IAC/G,OAAO,CAAC,OAAO,CAAiE;IAEhF,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;IACnD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAU;IAC/C,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAU;IAGlD,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,iBAAiB,CAA6B;IACtD,OAAO,CAAC,aAAa,CAAsC;IAC3D,OAAO,CAAC,UAAU,CAAS;IAE3B,YACI,YAAY,EAAE,aAAa,EACV,OAAO,EAAE,oBAAoB,EAC7B,MAAM,EAAE,gBAAgB,EAQ5C;IAEM,KAAK,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CASxC;IAGD,OAAO,CAAC,WAAW;IAoDnB,OAAO,CAAC,YAAY;IAoEpB,OAAO,CAAC,uBAAuB;IAU/B,yEAAyE;IACzE,OAAO,CAAC,SAAS;IAcjB,OAAO,CAAC,eAAe;IAGvB,OAAO,CAAC,sBAAsB;IAI9B;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,eAAe,CAiB9B;IAEF;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAuCtB,OAAO,CAAC,SAAS;IAcjB,OAAO,CAAC,WAAW;IAwBnB,OAAO,CAAC,MAAM;IAYd,sGAAsG;IACtG,OAAO,CAAC,UAAU;IAWlB;;;;;;OAMG;IACH,OAAO,CAAC,MAAM;IAiBd;;;;;OAKG;IACI,yBAAyB,IAAI,qBAAqB,CAIxD;IAED,OAAO,CAAC,UAAU;IAoBlB,OAAO,CAAC,SAAS;IAqFjB,OAAO,CAAC,aAAa;IAwCrB;;;OAGG;IACH,OAAO,CAAC,YAAY;IA4CpB,OAAO,CAAC,0BAA0B;IAsBlC,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,aAAa;IAsErB,oGAAoG;IACpG,OAAO,CAAC,eAAe;IAYvB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IA4B1B,OAAO,CAAC,iBAAiB;CAkB5B"}
@@ -493,6 +493,7 @@ export class NodesetRecordApplier {
493
493
  const params = {
494
494
  ...this.common(record),
495
495
  isAbstract: record.isAbstract,
496
+ symmetric: !!record.symmetric,
496
497
  displayName: record.displayName,
497
498
  description: record.description,
498
499
  inverseName: record.inverseName