node-opcua-address-space 2.175.3 → 2.176.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.
@@ -2,12 +2,12 @@
2
2
  * @module node-opcua-address-space
3
3
  */
4
4
  /** biome-ignore-all lint/style/useLiteralEnumMembers: still needed */
5
- import type { BaseNode, ISessionBase, ISessionContext, UAObject, UAObjectType } from "node-opcua-address-space-base";
5
+ import type { BaseNode, IAddressSpace, ISessionBase, ISessionContext, UAObject, UAObjectType } from "node-opcua-address-space-base";
6
6
  import { ObjectIds } from "node-opcua-constants";
7
7
  import { type Certificate } from "node-opcua-crypto/web";
8
- import { AccessRestrictionsFlag, PermissionFlag } from "node-opcua-data-model";
8
+ import { AccessRestrictionsFlag, PermissionFlag, type QualifiedNameLike } from "node-opcua-data-model";
9
9
  import type { PreciseClock } from "node-opcua-date-time";
10
- import { type NodeId, type NodeIdLike } from "node-opcua-nodeid";
10
+ import { NodeId, type NodeIdLike } from "node-opcua-nodeid";
11
11
  import { AnonymousIdentityToken, MessageSecurityMode, PermissionType, type RolePermissionType, UserNameIdentityToken, X509IdentityToken } from "node-opcua-types";
12
12
  export { PermissionType, RolePermissionType, RolePermissionTypeOptions } from "node-opcua-types";
13
13
  export type AnyUserIdentityToken = UserNameIdentityToken | AnonymousIdentityToken | X509IdentityToken;
@@ -89,18 +89,71 @@ export interface IRoleResolutionContext {
89
89
  export interface IRoleResolver {
90
90
  resolveRoles(userIdentityToken: AnyUserIdentityToken, context?: IRoleResolutionContext): NodeId[];
91
91
  }
92
+ /**
93
+ * What to do when a permission cannot be resolved for a Session — either because no Role
94
+ * could be attached to its identity, or because neither the node nor its namespace declares
95
+ * any RolePermissions.
96
+ *
97
+ * - `"allow"` : grant every permission. This is what node-opcua has always done, and what
98
+ * the vast majority of address spaces need, since almost no server declares
99
+ * RolePermissions on its own nodes.
100
+ * - `"deny"` : grant nothing. Fail-closed, for products that drive access entirely from
101
+ * declared policy. Expect to set DefaultRolePermissions on every namespace,
102
+ * otherwise the address space becomes unreadable.
103
+ *
104
+ * Note that this governs *Sessions only*. A SessionContext with no Session at all is an
105
+ * in-process caller (SessionContext.defaultContext, PseudoSession) and stays permissive
106
+ * whatever this is set to — see {@link SessionContext.getPermissions}.
107
+ */
108
+ export type UnresolvedPermissionPolicy = "allow" | "deny";
92
109
  export interface IServerBase {
93
110
  userManager?: IUserManager;
94
111
  rolePolicyOverride?: IRolePolicyOverride | null;
95
112
  /** Additional role resolvers (identity stores, LDAP, etc.) */
96
113
  roleResolvers?: IRoleResolver[];
114
+ /**
115
+ * how to treat a permission that could not be resolved for a Session.
116
+ * @default "allow"
117
+ */
118
+ unresolvedPermissionPolicy?: UnresolvedPermissionPolicy;
97
119
  }
98
120
  export interface SessionContextOptions {
99
121
  session?: ISessionBase;
100
122
  object?: UAObject | UAObjectType;
101
123
  server?: IServerBase;
102
124
  }
103
- export declare function makeRoles(roleIds: NodeIdLike[] | string | WellKnownRoles): NodeId[];
125
+ /**
126
+ * A Role, designated either by its NodeId or by its BrowseName.
127
+ *
128
+ * Roles outside namespace 0 (the GDS Roles, or any Role added with AddRole) have
129
+ * NodeIds that depend on the order in which nodesets were loaded, so naming them is
130
+ * more robust than hard coding `ns=1;i=1661`. Resolving a BrowseName requires an
131
+ * address space, since the RoleSet is where the answer lives.
132
+ *
133
+ * A QualifiedName whose namespaceIndex is left undefined matches in any namespace,
134
+ * as long as the BrowseName is unambiguous.
135
+ */
136
+ export type RoleIdLike = NodeIdLike | QualifiedNameLike;
137
+ /**
138
+ * build the list of Role NodeIds a user is granted, from any of the accepted spellings:
139
+ *
140
+ * ```ts
141
+ * makeRoles(WellKnownRoles.Observer); // a well known Role
142
+ * makeRoles("Observer;Operator"); // semicolon separated names
143
+ * makeRoles("ns=1;i=1661"); // an explicit NodeId
144
+ * makeRoles(["Observer", "ns=1;i=1661"]); // mixed
145
+ * makeRoles("1:DiscoveryAdmin", addressSpace); // BrowseName, namespace index
146
+ * makeRoles("DiscoveryAdmin", addressSpace); // BrowseName, any namespace
147
+ * makeRoles([{ name: "DiscoveryAdmin" }], addressSpace); // idem, as a QualifiedName
148
+ * // when the namespace is known by its URI rather than by its index:
149
+ * makeRoles([{ namespaceIndex: addressSpace.getNamespaceIndex(gdsUri), name: "DiscoveryAdmin" }], addressSpace);
150
+ * ```
151
+ *
152
+ * @param roleIds the Roles to resolve
153
+ * @param addressSpace required only to resolve a Role by BrowseName, since that
154
+ * lookup goes through the RoleSet
155
+ */
156
+ export declare function makeRoles(roleIds: RoleIdLike[] | string | WellKnownRoles, addressSpace?: IAddressSpace): NodeId[];
104
157
  export declare class SessionContext implements ISessionContext {
105
158
  static defaultContext: SessionContext;
106
159
  object: UAObject | UAObjectType | undefined;
@@ -134,6 +187,39 @@ export declare class SessionContext implements ISessionContext {
134
187
  */
135
188
  getCurrentUserRoles(): NodeId[];
136
189
  getApplicableRolePermissions(node: BaseNode): RolePermissionType[] | null;
190
+ /**
191
+ * true when this context carries no Session at all.
192
+ *
193
+ * That is an in-process caller — SessionContext.defaultContext, or a PseudoSession
194
+ * driving the address space from inside the server — not a remote one. Such a caller
195
+ * has already passed whatever authorization its own entry point applies, and the
196
+ * address space is not the place to second-guess it, so it is always granted every
197
+ * permission. This is deliberate, and distinct from a remote Session whose identity
198
+ * merely failed to resolve to a Role: that case is governed by
199
+ * IServerBase.unresolvedPermissionPolicy.
200
+ */
201
+ private get isInProcessCaller();
202
+ /** what an unresolved permission means for this context: everything, or nothing */
203
+ private get unresolvedPermissions();
204
+ /**
205
+ * the Roles to evaluate permissions against: the ones the user resolved to, plus the
206
+ * Anonymous Role, which every Session stands on.
207
+ *
208
+ * Opc.Ua.NodeSet2.xml names exactly five Roles across its 854 RolePermission entries —
209
+ * Anonymous, SecurityAdmin, ConfigureAdmin and the two SecurityKeyServer ones — and
210
+ * never AuthenticatedUser, Observer, Operator, Engineer or Supervisor. Its 195 Anonymous
211
+ * entries (Browse, Browse|Read, Browse|Call) are therefore not a privilege reserved for
212
+ * unauthenticated Sessions; they are the floor granted to everyone. Read literally, an
213
+ * authenticated user would be unable to browse the Server Object at all, and would have
214
+ * strictly less access than an anonymous one.
215
+ *
216
+ * Adding the Anonymous Role here can only widen a permission set, never narrow it, and
217
+ * only ever to what an unauthenticated Session already has — so it cannot grant anything
218
+ * an attacker could not obtain by simply not authenticating. It leaves
219
+ * getCurrentUserRoles() alone: the identity a Session reports stays truthful, only the
220
+ * permission evaluation gains the baseline.
221
+ */
222
+ private getRolesForPermissionEvaluation;
137
223
  getPermissions(node: BaseNode): PermissionFlag;
138
224
  getAccessRestrictions(node: BaseNode): AccessRestrictionsFlag;
139
225
  /**
@@ -55,9 +55,11 @@ exports.WellKnownRolesNodeId = {
55
55
  SecurityAdmin: node_opcua_constants_1.ObjectIds.WellKnownRole_SecurityAdmin,
56
56
  Supervisor: node_opcua_constants_1.ObjectIds.WellKnownRole_Supervisor
57
57
  };
58
- function getPermissionForRole(rolePermissions, role) {
58
+ function getPermissionForRole(rolePermissions, role, unresolved) {
59
59
  if (rolePermissions === null) {
60
- return node_opcua_data_model_1.allPermissions;
60
+ // neither the node nor its namespace declares any policy: nothing to match the
61
+ // Role against, so the answer is the caller's fail-open / fail-closed default
62
+ return unresolved;
61
63
  }
62
64
  const a = rolePermissions.find((r) => {
63
65
  if (!r.roleId) {
@@ -121,14 +123,127 @@ function getDefaultUserRolePermissionsOnNamespace(namespace, context) {
121
123
  }
122
124
  return null;
123
125
  }
124
- function makeRoles(roleIds) {
126
+ /** "i=15668", "ns=1;i=1661", "ns=2;s=MyRole", "g=...", "b=..." */
127
+ const nodeIdExpressionRegExp = /^(ns=\d+;)?[isgb]=/;
128
+ /** "1:DiscoveryAdmin" */
129
+ const namespacedBrowseNameRegExp = /^(\d+):(.+)$/;
130
+ /** the left-hand half of a NodeId that a naive split(";") has torn in two */
131
+ const namespacePrefixRegExp = /^ns=\d+$/;
132
+ const roleSetNodeId = (0, node_opcua_nodeid_1.resolveNodeId)(node_opcua_constants_1.ObjectIds.Server_ServerCapabilities_RoleSet);
133
+ const anonymousRoleNodeId = (0, node_opcua_nodeid_1.resolveNodeId)(node_opcua_constants_2.WellKnownRoles.Anonymous);
134
+ function isQualifiedName(role) {
135
+ return typeof role === "object" && role !== null && !(role instanceof node_opcua_nodeid_1.NodeId) && "name" in role;
136
+ }
137
+ /**
138
+ * split a semicolon separated list of Roles.
139
+ *
140
+ * NodeId expressions contain a semicolon of their own ("ns=1;i=1661"), so a plain
141
+ * split() would tear them in half: glue the two pieces back together.
142
+ */
143
+ function splitRoleList(roleIds) {
144
+ const roles = [];
145
+ for (const token of roleIds.split(";")) {
146
+ const role = token.trim();
147
+ if (role.length === 0) {
148
+ continue;
149
+ }
150
+ const previous = roles.length > 0 ? roles[roles.length - 1] : undefined;
151
+ if (previous !== undefined && namespacePrefixRegExp.test(previous)) {
152
+ roles[roles.length - 1] = `${previous};${role}`;
153
+ continue;
154
+ }
155
+ roles.push(role);
156
+ }
157
+ return roles;
158
+ }
159
+ /** the standard Roles of OPC 10000-3, which live in namespace 0 and need no address space */
160
+ function tryResolveWellKnownRole(browseName) {
161
+ const name = browseName.startsWith("WellKnownRole_") ? browseName.slice("WellKnownRole_".length) : browseName;
162
+ try {
163
+ return (0, node_opcua_nodeid_1.resolveNodeId)(`WellKnownRole_${name}`);
164
+ }
165
+ catch {
166
+ return null;
167
+ }
168
+ }
169
+ /**
170
+ * look a Role up by BrowseName in the RoleSet (OPC 10000-18 §4.3), which is where
171
+ * both the standard Roles and the ones contributed by companion nodesets are listed.
172
+ */
173
+ function resolveRoleByBrowseName(browseName, namespaceIndex, addressSpace) {
174
+ if (!browseName) {
175
+ throw new Error("makeRoles: a Role given as a QualifiedName must carry a name");
176
+ }
177
+ if (!addressSpace) {
178
+ throw new Error(`makeRoles: cannot resolve the Role "${browseName}": it is not a standard Role of namespace 0, ` +
179
+ "so an address space must be passed as the second argument of makeRoles()");
180
+ }
181
+ const roleSet = addressSpace.findNode(roleSetNodeId);
182
+ if (!roleSet) {
183
+ throw new Error(`makeRoles: cannot resolve the Role "${browseName}": the address space has no RoleSet`);
184
+ }
185
+ const candidates = roleSet
186
+ .findReferencesExAsObject("HasComponent", node_opcua_data_model_1.BrowseDirection.Forward)
187
+ .filter((node) => node.nodeClass === node_opcua_data_model_1.NodeClass.Object && node.browseName.name === browseName)
188
+ .filter((node) => namespaceIndex === undefined || node.browseName.namespaceIndex === namespaceIndex);
189
+ if (candidates.length === 0) {
190
+ const known = roleSet
191
+ .findReferencesExAsObject("HasComponent", node_opcua_data_model_1.BrowseDirection.Forward)
192
+ .filter((node) => node.nodeClass === node_opcua_data_model_1.NodeClass.Object)
193
+ .map((node) => node.browseName.toString())
194
+ .join(", ");
195
+ throw new Error(`makeRoles: cannot find a Role named "${browseName}" in the RoleSet. Known Roles are: ${known}`);
196
+ }
197
+ if (candidates.length > 1) {
198
+ const ambiguous = candidates.map((node) => node.browseName.toString()).join(", ");
199
+ throw new Error(`makeRoles: the Role name "${browseName}" is ambiguous (${ambiguous}), please qualify it with its namespace`);
200
+ }
201
+ return candidates[0].nodeId;
202
+ }
203
+ function resolveRole(role, addressSpace) {
204
+ if (isQualifiedName(role)) {
205
+ return resolveRoleByBrowseName(role.name, role.namespaceIndex, addressSpace);
206
+ }
207
+ if (typeof role !== "string") {
208
+ return (0, node_opcua_nodeid_1.resolveNodeId)(role);
209
+ }
210
+ if (nodeIdExpressionRegExp.test(role)) {
211
+ return (0, node_opcua_nodeid_1.resolveNodeId)(role);
212
+ }
213
+ const namespacedBrowseName = namespacedBrowseNameRegExp.exec(role);
214
+ if (namespacedBrowseName) {
215
+ return resolveRoleByBrowseName(namespacedBrowseName[2], parseInt(namespacedBrowseName[1], 10), addressSpace);
216
+ }
217
+ // a bare name: the standard Roles resolve without an address space, the others need one
218
+ return tryResolveWellKnownRole(role) ?? resolveRoleByBrowseName(role, undefined, addressSpace);
219
+ }
220
+ /**
221
+ * build the list of Role NodeIds a user is granted, from any of the accepted spellings:
222
+ *
223
+ * ```ts
224
+ * makeRoles(WellKnownRoles.Observer); // a well known Role
225
+ * makeRoles("Observer;Operator"); // semicolon separated names
226
+ * makeRoles("ns=1;i=1661"); // an explicit NodeId
227
+ * makeRoles(["Observer", "ns=1;i=1661"]); // mixed
228
+ * makeRoles("1:DiscoveryAdmin", addressSpace); // BrowseName, namespace index
229
+ * makeRoles("DiscoveryAdmin", addressSpace); // BrowseName, any namespace
230
+ * makeRoles([{ name: "DiscoveryAdmin" }], addressSpace); // idem, as a QualifiedName
231
+ * // when the namespace is known by its URI rather than by its index:
232
+ * makeRoles([{ namespaceIndex: addressSpace.getNamespaceIndex(gdsUri), name: "DiscoveryAdmin" }], addressSpace);
233
+ * ```
234
+ *
235
+ * @param roleIds the Roles to resolve
236
+ * @param addressSpace required only to resolve a Role by BrowseName, since that
237
+ * lookup goes through the RoleSet
238
+ */
239
+ function makeRoles(roleIds, addressSpace) {
125
240
  if (typeof roleIds === "number") {
126
241
  roleIds = [roleIds];
127
242
  }
128
243
  if (typeof roleIds === "string") {
129
- roleIds = roleIds.split(";").map((r) => (0, node_opcua_nodeid_1.resolveNodeId)(`WellKnownRole_${r}`));
244
+ roleIds = splitRoleList(roleIds);
130
245
  }
131
- return roleIds.map((r) => (0, node_opcua_nodeid_1.resolveNodeId)(r));
246
+ return roleIds.map((role) => resolveRole(role, addressSpace));
132
247
  }
133
248
  class SessionContext {
134
249
  static defaultContext = new SessionContext({});
@@ -209,11 +324,16 @@ class SessionContext {
209
324
  */
210
325
  getCurrentUserRoles() {
211
326
  if (!this.session) {
212
- return []; // default context => no Session
327
+ // no Session: an in-process caller. getPermissions grants it everything —
328
+ // an empty list here does NOT mean "no rights", see unresolvedPermissions.
329
+ return [];
213
330
  }
214
331
  (0, node_opcua_assert_1.assert)(this.session != null, "expecting a session");
215
332
  const userIdentityToken = this.session.userIdentityToken;
216
333
  if (!userIdentityToken) {
334
+ // a Session that was never activated. Distinct from the case above: this one
335
+ // is remote, and how the empty list is then interpreted depends on
336
+ // IServerBase.unresolvedPermissionPolicy.
217
337
  return [];
218
338
  }
219
339
  const anonymous = makeRoles([node_opcua_constants_2.WellKnownRoles.Anonymous]);
@@ -267,15 +387,67 @@ class SessionContext {
267
387
  }
268
388
  return node.rolePermissions;
269
389
  }
390
+ /**
391
+ * true when this context carries no Session at all.
392
+ *
393
+ * That is an in-process caller — SessionContext.defaultContext, or a PseudoSession
394
+ * driving the address space from inside the server — not a remote one. Such a caller
395
+ * has already passed whatever authorization its own entry point applies, and the
396
+ * address space is not the place to second-guess it, so it is always granted every
397
+ * permission. This is deliberate, and distinct from a remote Session whose identity
398
+ * merely failed to resolve to a Role: that case is governed by
399
+ * IServerBase.unresolvedPermissionPolicy.
400
+ */
401
+ get isInProcessCaller() {
402
+ return !this.session;
403
+ }
404
+ /** what an unresolved permission means for this context: everything, or nothing */
405
+ get unresolvedPermissions() {
406
+ if (this.isInProcessCaller) {
407
+ return node_opcua_data_model_1.allPermissions;
408
+ }
409
+ return this.server?.unresolvedPermissionPolicy === "deny" ? node_opcua_data_model_1.PermissionFlag.None : node_opcua_data_model_1.allPermissions;
410
+ }
411
+ /**
412
+ * the Roles to evaluate permissions against: the ones the user resolved to, plus the
413
+ * Anonymous Role, which every Session stands on.
414
+ *
415
+ * Opc.Ua.NodeSet2.xml names exactly five Roles across its 854 RolePermission entries —
416
+ * Anonymous, SecurityAdmin, ConfigureAdmin and the two SecurityKeyServer ones — and
417
+ * never AuthenticatedUser, Observer, Operator, Engineer or Supervisor. Its 195 Anonymous
418
+ * entries (Browse, Browse|Read, Browse|Call) are therefore not a privilege reserved for
419
+ * unauthenticated Sessions; they are the floor granted to everyone. Read literally, an
420
+ * authenticated user would be unable to browse the Server Object at all, and would have
421
+ * strictly less access than an anonymous one.
422
+ *
423
+ * Adding the Anonymous Role here can only widen a permission set, never narrow it, and
424
+ * only ever to what an unauthenticated Session already has — so it cannot grant anything
425
+ * an attacker could not obtain by simply not authenticating. It leaves
426
+ * getCurrentUserRoles() alone: the identity a Session reports stays truthful, only the
427
+ * permission evaluation gains the baseline.
428
+ */
429
+ getRolesForPermissionEvaluation(roles) {
430
+ if (roles.find((role) => (0, node_opcua_nodeid_1.sameNodeId)(role, anonymousRoleNodeId))) {
431
+ return roles;
432
+ }
433
+ return [...roles, anonymousRoleNodeId];
434
+ }
270
435
  getPermissions(node) {
271
436
  const applicableRolePermissions = this.getApplicableRolePermissions(node);
272
437
  const roles = this.getCurrentUserRoles();
273
438
  if (roles.length === 0) {
274
- return node_opcua_data_model_1.allPermissions;
439
+ // Two very different situations land here:
440
+ // - no Session at all: an in-process caller, always trusted (see isInProcessCaller)
441
+ // - a Session that resolved to no Role, either because it carries no
442
+ // UserIdentityToken (it was never activated) or because its user matched
443
+ // nothing. Permissive by default, for backwards compatibility, but a server
444
+ // can set unresolvedPermissionPolicy: "deny" to fail closed instead.
445
+ return this.unresolvedPermissions;
275
446
  }
447
+ const unresolved = this.unresolvedPermissions;
276
448
  let orFlags = 0;
277
- for (const role of roles) {
278
- orFlags = orFlags | getPermissionForRole(applicableRolePermissions, role);
449
+ for (const role of this.getRolesForPermissionEvaluation(roles)) {
450
+ orFlags = orFlags | getPermissionForRole(applicableRolePermissions, role, unresolved);
279
451
  }
280
452
  return orFlags;
281
453
  }
@@ -1 +1 @@
1
- {"version":3,"file":"session_context.js","sourceRoot":"","sources":["../../source/session_context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session_context.js","sourceRoot":"","sources":["../../source/session_context.ts"],"names":[],"mappings":"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"}
@@ -720,9 +720,14 @@ class BaseNodeImpl extends node_opcua_address_space_base_1.TypedEventEmitter {
720
720
  return;
721
721
  }
722
722
  install_components_as_object_properties(this);
723
+ // Only this node is new, so only this node has to appear on the parent.
724
+ // Re-walking every child the parent already has made building a folder
725
+ // of N children cost O(N^2) - measured at 7.2s for 3000 children, of
726
+ // which 4.1s was spent re-installing properties that were already there.
727
+ const self = this;
723
728
  function install_extra_properties_on_parent(ref) {
724
729
  const node = reference_impl_1.ReferenceImpl.resolveReferenceNode(addressSpace, ref);
725
- install_components_as_object_properties(node);
730
+ install_child_as_object_property(node, self);
726
731
  }
727
732
  // make sure parent have extra properties updated
728
733
  const parentComponents = this.findReferencesEx("HasComponent", node_opcua_data_model_1.BrowseDirection.Inverse);
@@ -1462,43 +1467,55 @@ const reservedNames = {
1462
1467
  * install hierarchical references as javascript properties
1463
1468
  * Components/Properties/Organizes
1464
1469
  */
1470
+ /**
1471
+ * Expose a single child of `parentObj` as a JavaScript property on it.
1472
+ *
1473
+ * Split out of {@link install_components_as_object_properties} so that adding
1474
+ * one child does not have to re-walk every child the parent already has: that
1475
+ * made building a large folder quadratic. See
1476
+ * {@link BaseNodeImpl.install_extra_properties}.
1477
+ */
1478
+ function install_child_as_object_property(parentObj, child) {
1479
+ // the parent may be unresolvable while a nodeset is still loading, which is
1480
+ // why the whole-parent form guarded it too
1481
+ if (!parentObj || !child) {
1482
+ return;
1483
+ }
1484
+ // assumption: we ignore namespace here .
1485
+ const name = (0, node_opcua_utils_1.lowerFirstLetter)(child.browseName.name || "");
1486
+ if (Object.hasOwn(reservedNames, name)) {
1487
+ // ignore reserved names
1488
+ if (doDebug) {
1489
+ debugLog(chalk_1.default.bgWhite.red(`Ignoring reserved keyword ${name}`));
1490
+ }
1491
+ return;
1492
+ }
1493
+ // ignore reserved names
1494
+ doDebug && debugLog(`Installing property ${name}`, " on ", parentObj.browseName.toString());
1495
+ const hasProperty = Object.hasOwn(parentObj, name);
1496
+ if (hasProperty &&
1497
+ parentObj[name] !== null &&
1498
+ parentObj[name] !== undefined) {
1499
+ return;
1500
+ }
1501
+ Object.defineProperty(parentObj, name, {
1502
+ configurable: true, // set to true, so we can undefine later
1503
+ enumerable: true,
1504
+ // xx writable: false,
1505
+ get() {
1506
+ return child;
1507
+ }
1508
+ // value: child
1509
+ });
1510
+ }
1465
1511
  function install_components_as_object_properties(parentObj) {
1466
1512
  if (!parentObj) {
1467
1513
  return;
1468
1514
  }
1469
1515
  const addressSpace = parentObj.addressSpace;
1470
1516
  const hierarchicalRefs = parentObj.findHierarchicalReferences();
1471
- const children = hierarchicalRefs.map((r) => reference_impl_1.ReferenceImpl.resolveReferenceNode(addressSpace, r));
1472
- for (const child of children) {
1473
- if (!child) {
1474
- continue;
1475
- }
1476
- // assumption: we ignore namespace here .
1477
- const name = (0, node_opcua_utils_1.lowerFirstLetter)(child.browseName.name || "");
1478
- if (Object.hasOwn(reservedNames, name)) {
1479
- // ignore reserved names
1480
- if (doDebug) {
1481
- debugLog(chalk_1.default.bgWhite.red(`Ignoring reserved keyword ${name}`));
1482
- }
1483
- continue;
1484
- }
1485
- // ignore reserved names
1486
- doDebug && debugLog(`Installing property ${name}`, " on ", parentObj.browseName.toString());
1487
- const hasProperty = Object.hasOwn(parentObj, name);
1488
- if (hasProperty &&
1489
- parentObj[name] !== null &&
1490
- parentObj[name] !== undefined) {
1491
- continue;
1492
- }
1493
- Object.defineProperty(parentObj, name, {
1494
- configurable: true, // set to true, so we can undefine later
1495
- enumerable: true,
1496
- // xx writable: false,
1497
- get() {
1498
- return child;
1499
- }
1500
- // value: child
1501
- });
1517
+ for (const reference of hierarchicalRefs) {
1518
+ install_child_as_object_property(parentObj, reference_impl_1.ReferenceImpl.resolveReferenceNode(addressSpace, reference));
1502
1519
  }
1503
1520
  }
1504
1521
  function getReferenceType(reference) {