node-opcua-role-set-server 2.183.1 → 2.184.1

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 (53) hide show
  1. package/dist/audit.d.ts +1 -0
  2. package/dist/audit.d.ts.map +1 -0
  3. package/dist/audit.js +5 -8
  4. package/dist/audit.js.map +1 -1
  5. package/dist/bind_restriction_methods.d.ts +1 -0
  6. package/dist/bind_restriction_methods.d.ts.map +1 -0
  7. package/dist/bind_restriction_methods.js +20 -26
  8. package/dist/bind_restriction_methods.js.map +1 -1
  9. package/dist/bind_role_methods.d.ts +1 -0
  10. package/dist/bind_role_methods.d.ts.map +1 -0
  11. package/dist/bind_role_methods.js +26 -30
  12. package/dist/bind_role_methods.js.map +1 -1
  13. package/dist/bind_user_management.d.ts +1 -0
  14. package/dist/bind_user_management.d.ts.map +1 -0
  15. package/dist/bind_user_management.js +40 -46
  16. package/dist/bind_user_management.js.map +1 -1
  17. package/dist/harden.d.ts +1 -0
  18. package/dist/harden.d.ts.map +1 -0
  19. package/dist/harden.js +7 -11
  20. package/dist/harden.js.map +1 -1
  21. package/dist/index.d.ts +1 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +10 -31
  24. package/dist/index.js.map +1 -1
  25. package/dist/install_role_based_security.d.ts +1 -0
  26. package/dist/install_role_based_security.d.ts.map +1 -0
  27. package/dist/install_role_based_security.js +17 -20
  28. package/dist/install_role_based_security.js.map +1 -1
  29. package/dist/install_role_set.d.ts +1 -0
  30. package/dist/install_role_set.d.ts.map +1 -0
  31. package/dist/install_role_set.js +80 -83
  32. package/dist/install_role_set.js.map +1 -1
  33. package/dist/install_user_management.d.ts +1 -0
  34. package/dist/install_user_management.d.ts.map +1 -0
  35. package/dist/install_user_management.js +30 -33
  36. package/dist/install_user_management.js.map +1 -1
  37. package/dist/role_set_resolver.d.ts +1 -0
  38. package/dist/role_set_resolver.d.ts.map +1 -0
  39. package/dist/role_set_resolver.js +1 -5
  40. package/dist/role_set_resolver.js.map +1 -1
  41. package/dist/security_checks.d.ts +1 -0
  42. package/dist/security_checks.d.ts.map +1 -0
  43. package/dist/security_checks.js +10 -14
  44. package/dist/security_checks.js.map +1 -1
  45. package/dist/user_management_user_manager.d.ts +1 -0
  46. package/dist/user_management_user_manager.d.ts.map +1 -0
  47. package/dist/user_management_user_manager.js +10 -13
  48. package/dist/user_management_user_manager.js.map +1 -1
  49. package/dist/variant_args.d.ts +1 -0
  50. package/dist/variant_args.d.ts.map +1 -0
  51. package/dist/variant_args.js +3 -8
  52. package/dist/variant_args.js.map +1 -1
  53. package/package.json +17 -16
@@ -1,14 +1,11 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.installUserManagement = installUserManagement;
4
- const node_opcua_constants_1 = require("node-opcua-constants");
5
- const node_opcua_role_set_common_1 = require("node-opcua-role-set-common");
6
- const node_opcua_status_code_1 = require("node-opcua-status-code");
7
- const node_opcua_types_1 = require("node-opcua-types");
8
- const node_opcua_variant_1 = require("node-opcua-variant");
9
- const audit_js_1 = require("./audit.js");
10
- const bind_user_management_js_1 = require("./bind_user_management.js");
11
- const harden_js_1 = require("./harden.js");
1
+ import { MethodIds, ObjectIds, VariableIds } from "node-opcua-constants";
2
+ import { ArchiveStore, InMemoryUserManagementStore } from "node-opcua-role-set-common";
3
+ import { StatusCodes } from "node-opcua-status-code";
4
+ import { Range, UserManagementDataType, UserNameIdentityToken } from "node-opcua-types";
5
+ import { DataType, VariantArrayType } from "node-opcua-variant";
6
+ import { raiseAuditMethodEvent } from "./audit.js";
7
+ import { makeAddUserHandler, makeChangePasswordHandler, makeModifyUserHandler, makeRemoveUserHandler } from "./bind_user_management.js";
8
+ import { hardenAdminOnly, hardenEncryptedOnly } from "./harden.js";
12
9
  /** PasswordOptionsMask bit values (OPC 10000-18 §5.2.2). */
13
10
  const PasswordOptions = {
14
11
  RequiresUpperCaseCharacters: 1 << 5,
@@ -30,7 +27,7 @@ function makeSessionCloser(engine) {
30
27
  // snapshot first: closeSession mutates the engine's session map
31
28
  for (const session of getSessions.call(engine)) {
32
29
  const token = session.userIdentityToken;
33
- if (token instanceof node_opcua_types_1.UserNameIdentityToken && token.userName === userName) {
30
+ if (token instanceof UserNameIdentityToken && token.userName === userName) {
34
31
  closeSession.call(engine, session.authenticationToken, /* deleteSubscriptions */ true, "Terminated");
35
32
  closed += 1;
36
33
  }
@@ -57,22 +54,22 @@ function passwordOptionsMask(policy) {
57
54
  * available (the standard nodeset must be loaded so the `UserManagement`
58
55
  * Object exists).
59
56
  */
60
- async function installUserManagement(server, options) {
57
+ export async function installUserManagement(server, options) {
61
58
  const addressSpace = server.engine.addressSpace;
62
59
  if (!addressSpace) {
63
60
  throw new Error("installUserManagement: address space is not available. Call this after server.start().");
64
61
  }
65
- const userManagement = addressSpace.findNode(node_opcua_constants_1.ObjectIds.UserManagement);
62
+ const userManagement = addressSpace.findNode(ObjectIds.UserManagement);
66
63
  if (!userManagement) {
67
64
  throw new Error("installUserManagement: UserManagement Object (i=24290) not found in address space.");
68
65
  }
69
66
  const policy = options?.policy ?? {};
70
- const store = options?.store ?? new node_opcua_role_set_common_1.InMemoryUserManagementStore(policy);
67
+ const store = options?.store ?? new InMemoryUserManagementStore(policy);
71
68
  // Consolidated-archive coordination: hydrate persisted users (salted hashes)
72
69
  // and register the `users` section so a shared coordinator persists them
73
70
  // alongside the role configuration.
74
71
  const persistence = options?.persistence ??
75
- (options?.persistencePath ? new node_opcua_role_set_common_1.ArchiveStore(options.persistencePath, { secret: options.persistenceSecret }) : undefined);
72
+ (options?.persistencePath ? new ArchiveStore(options.persistencePath, { secret: options.persistenceSecret }) : undefined);
76
73
  if (persistence && store.importUsers) {
77
74
  const archive = await persistence.load();
78
75
  if (archive?.users)
@@ -82,12 +79,12 @@ async function installUserManagement(server, options) {
82
79
  if (persistence && exportUsers) {
83
80
  persistence.setUsersProvider(() => exportUsers());
84
81
  }
85
- const usersVar = addressSpace.findNode(node_opcua_constants_1.VariableIds.UserManagement_Users);
82
+ const usersVar = addressSpace.findNode(VariableIds.UserManagement_Users);
86
83
  function refreshUsers() {
87
84
  usersVar?.setValueFromSource({
88
- dataType: node_opcua_variant_1.DataType.ExtensionObject,
89
- arrayType: node_opcua_variant_1.VariantArrayType.Array,
90
- value: store.getUsers().map((u) => new node_opcua_types_1.UserManagementDataType({
85
+ dataType: DataType.ExtensionObject,
86
+ arrayType: VariantArrayType.Array,
87
+ value: store.getUsers().map((u) => new UserManagementDataType({
91
88
  userName: u.userName,
92
89
  userConfiguration: u.userConfiguration,
93
90
  description: u.description
@@ -108,7 +105,7 @@ async function installUserManagement(server, options) {
108
105
  ? (userName) => {
109
106
  const closed = closeSessionsForUser(userName);
110
107
  if (closed > 0) {
111
- (0, audit_js_1.raiseAuditMethodEvent)(serverObject, "AuditUpdateMethodEventType", {
108
+ raiseAuditMethodEvent(serverObject, "AuditUpdateMethodEventType", {
112
109
  sourceNode: userManagement.nodeId,
113
110
  sourceName: "Method/UserDeactivated",
114
111
  clientUserId: userName,
@@ -119,12 +116,12 @@ async function installUserManagement(server, options) {
119
116
  }
120
117
  : undefined,
121
118
  onAudit: (audit) => {
122
- (0, audit_js_1.raiseAuditMethodEvent)(serverObject, "AuditUpdateMethodEventType", {
119
+ raiseAuditMethodEvent(serverObject, "AuditUpdateMethodEventType", {
123
120
  sourceNode: userManagement.nodeId,
124
121
  sourceName: `Method/${audit.method}`,
125
122
  methodId: audit.methodNodeId,
126
123
  clientUserId: audit.callerUserName,
127
- status: audit.statusCode === node_opcua_status_code_1.StatusCodes.Good,
124
+ status: audit.statusCode === StatusCodes.Good,
128
125
  message: `${audit.method}('${audit.targetUserName}') by '${audit.callerUserName}' → ${audit.statusCode.name}`
129
126
  // NOTE: inputArguments deliberately omitted — they contain passwords
130
127
  });
@@ -134,19 +131,19 @@ async function installUserManagement(server, options) {
134
131
  // Users list, which reveals account names) are SecurityAdmin-only over an
135
132
  // encrypted channel; ChangePassword stays callable by any authenticated user
136
133
  // but still requires encryption (§4.4.1 / §5.2.8).
137
- (0, harden_js_1.hardenAdminOnly)(bindMethod(addressSpace, node_opcua_constants_1.MethodIds.UserManagement_AddUser, (0, bind_user_management_js_1.makeAddUserHandler)(methodOptions)));
138
- (0, harden_js_1.hardenAdminOnly)(bindMethod(addressSpace, node_opcua_constants_1.MethodIds.UserManagement_ModifyUser, (0, bind_user_management_js_1.makeModifyUserHandler)(methodOptions)));
139
- (0, harden_js_1.hardenAdminOnly)(bindMethod(addressSpace, node_opcua_constants_1.MethodIds.UserManagement_RemoveUser, (0, bind_user_management_js_1.makeRemoveUserHandler)(methodOptions)));
140
- (0, harden_js_1.hardenEncryptedOnly)(bindMethod(addressSpace, node_opcua_constants_1.MethodIds.UserManagement_ChangePassword, (0, bind_user_management_js_1.makeChangePasswordHandler)(methodOptions)));
141
- (0, harden_js_1.hardenAdminOnly)(usersVar);
134
+ hardenAdminOnly(bindMethod(addressSpace, MethodIds.UserManagement_AddUser, makeAddUserHandler(methodOptions)));
135
+ hardenAdminOnly(bindMethod(addressSpace, MethodIds.UserManagement_ModifyUser, makeModifyUserHandler(methodOptions)));
136
+ hardenAdminOnly(bindMethod(addressSpace, MethodIds.UserManagement_RemoveUser, makeRemoveUserHandler(methodOptions)));
137
+ hardenEncryptedOnly(bindMethod(addressSpace, MethodIds.UserManagement_ChangePassword, makeChangePasswordHandler(methodOptions)));
138
+ hardenAdminOnly(usersVar);
142
139
  // Publish the password policy and the initial (empty) user list.
143
- const lengthVar = addressSpace.findNode(node_opcua_constants_1.VariableIds.UserManagement_PasswordLength);
140
+ const lengthVar = addressSpace.findNode(VariableIds.UserManagement_PasswordLength);
144
141
  lengthVar?.setValueFromSource({
145
- dataType: node_opcua_variant_1.DataType.ExtensionObject,
146
- value: new node_opcua_types_1.Range({ low: policy.minLength ?? 0, high: policy.maxLength ?? 0 })
142
+ dataType: DataType.ExtensionObject,
143
+ value: new Range({ low: policy.minLength ?? 0, high: policy.maxLength ?? 0 })
147
144
  });
148
- const optionsVar = addressSpace.findNode(node_opcua_constants_1.VariableIds.UserManagement_PasswordOptions);
149
- optionsVar?.setValueFromSource({ dataType: node_opcua_variant_1.DataType.UInt32, value: passwordOptionsMask(policy) });
145
+ const optionsVar = addressSpace.findNode(VariableIds.UserManagement_PasswordOptions);
146
+ optionsVar?.setValueFromSource({ dataType: DataType.UInt32, value: passwordOptionsMask(policy) });
150
147
  refreshUsers();
151
148
  return { store };
152
149
  }
@@ -1 +1 @@
1
- {"version":3,"file":"install_user_management.js","sourceRoot":"","sources":["../source/install_user_management.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install_user_management.js","sourceRoot":"","sources":["../source/install_user_management.ts"],"names":[],"mappings":"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"}
@@ -21,3 +21,4 @@ export declare class RoleSetResolver {
21
21
  constructor(store: IIdentityMappingStore, restrictionStore?: IRoleRestrictionStore | undefined);
22
22
  resolveRoles(userIdentityToken: AnyUserIdentityToken, context?: ResolutionContext): NodeId[];
23
23
  }
24
+ //# sourceMappingURL=role_set_resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role_set_resolver.d.ts","sourceRoot":"","sources":["../source/role_set_resolver.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EACR,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACpB,MAAM,4BAA4B,CAAC;AAEpC;;;;;;;;GAQG;AACH,qBAAa,eAAe;IAEpB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IAFtC,YACqB,KAAK,EAAE,qBAAqB,EAC5B,gBAAgB,CAAC,EAAE,qBAAqB,YAAA,EACzD;IAEG,YAAY,CAAC,iBAAiB,EAAE,oBAAoB,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,MAAM,EAAE,CAOlG;CACJ"}
@@ -1,6 +1,3 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RoleSetResolver = void 0;
4
1
  /**
5
2
  * Adapts an {@link IIdentityMappingStore} (and an optional
6
3
  * {@link IRoleRestrictionStore}) to the `IRoleResolver` contract so it can be
@@ -10,7 +7,7 @@ exports.RoleSetResolver = void 0;
10
7
  * restriction store is provided and a resolution context is available — the
11
8
  * Session's application/endpoint comply with the Role's restrictions.
12
9
  */
13
- class RoleSetResolver {
10
+ export class RoleSetResolver {
14
11
  store;
15
12
  restrictionStore;
16
13
  constructor(store, restrictionStore) {
@@ -26,5 +23,4 @@ class RoleSetResolver {
26
23
  return roles.filter((roleId) => restrictionStore.complies(roleId, context));
27
24
  }
28
25
  }
29
- exports.RoleSetResolver = RoleSetResolver;
30
26
  //# sourceMappingURL=role_set_resolver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"role_set_resolver.js","sourceRoot":"","sources":["../source/role_set_resolver.ts"],"names":[],"mappings":";;;AAcA;;;;;;;;GAQG;AACH,MAAa,eAAe;IAEH;IACA;IAFrB,YACqB,KAA4B,EAC5B,gBAAwC;QADxC,UAAK,GAAL,KAAK,CAAuB;QAC5B,qBAAgB,GAAhB,gBAAgB,CAAwB;IAC1D,CAAC;IAEG,YAAY,CAAC,iBAAuC,EAAE,OAA2B;QACpF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;QACzD,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,OAAO,EAAE,CAAC;YACrC,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAC/C,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAChF,CAAC;CACJ;AAdD,0CAcC"}
1
+ {"version":3,"file":"role_set_resolver.js","sourceRoot":"","sources":["../source/role_set_resolver.ts"],"names":[],"mappings":"AAcA;;;;;;;;GAQG;AACH,MAAM,OAAO,eAAe;IAEH,KAAK;IACL,gBAAgB;IAFrC,YACqB,KAA4B,EAC5B,gBAAwC;qBADxC,KAAK;gCACL,gBAAgB;IAClC,CAAC;IAEG,YAAY,CAAC,iBAAuC,EAAE,OAA2B;QACpF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;QACzD,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,OAAO,EAAE,CAAC;YACrC,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAC/C,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAChF,CAAC;CACJ"}
@@ -23,3 +23,4 @@ export declare function checkSecurityAdminAccess(context: ISessionContext): Call
23
23
  * @returns a denial result, or `null` if the channel is acceptable.
24
24
  */
25
25
  export declare function checkEncryptedChannel(context: ISessionContext): CallMethodResultOptions | null;
26
+ //# sourceMappingURL=security_checks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security_checks.d.ts","sourceRoot":"","sources":["../source/security_checks.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAGrE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAIvE;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,eAAe,GAAG,uBAAuB,GAAG,IAAI,CAOjG;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,eAAe,GAAG,uBAAuB,GAAG,IAAI,CAS9F"}
@@ -1,20 +1,16 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.checkSecurityAdminAccess = checkSecurityAdminAccess;
4
- exports.checkEncryptedChannel = checkEncryptedChannel;
5
- const node_opcua_nodeid_1 = require("node-opcua-nodeid");
6
- const node_opcua_role_set_common_1 = require("node-opcua-role-set-common");
7
- const node_opcua_status_code_1 = require("node-opcua-status-code");
8
- const node_opcua_types_1 = require("node-opcua-types");
1
+ import { sameNodeId } from "node-opcua-nodeid";
2
+ import { WellKnownRoleIds } from "node-opcua-role-set-common";
3
+ import { StatusCodes } from "node-opcua-status-code";
4
+ import { MessageSecurityMode } from "node-opcua-types";
9
5
  /**
10
6
  * Verify the calling session holds the SecurityAdmin role.
11
7
  * @returns a `Bad_UserAccessDenied` denial, or `null` if authorized.
12
8
  */
13
- function checkSecurityAdminAccess(context) {
9
+ export function checkSecurityAdminAccess(context) {
14
10
  const roles = context.getCurrentUserRoles();
15
- const hasSecurityAdmin = roles.some((r) => (0, node_opcua_nodeid_1.sameNodeId)(r, node_opcua_role_set_common_1.WellKnownRoleIds.SecurityAdmin));
11
+ const hasSecurityAdmin = roles.some((r) => sameNodeId(r, WellKnownRoleIds.SecurityAdmin));
16
12
  if (!hasSecurityAdmin) {
17
- return { statusCode: node_opcua_status_code_1.StatusCodes.BadUserAccessDenied };
13
+ return { statusCode: StatusCodes.BadUserAccessDenied };
18
14
  }
19
15
  return null;
20
16
  }
@@ -28,13 +24,13 @@ function checkSecurityAdminAccess(context) {
28
24
  *
29
25
  * @returns a denial result, or `null` if the channel is acceptable.
30
26
  */
31
- function checkEncryptedChannel(context) {
27
+ export function checkEncryptedChannel(context) {
32
28
  const securityMode = context.session?.channel?.securityMode;
33
29
  if (securityMode === undefined) {
34
30
  return null; // mode unknown (in-process) → cannot enforce
35
31
  }
36
- if (securityMode !== node_opcua_types_1.MessageSecurityMode.SignAndEncrypt) {
37
- return { statusCode: node_opcua_status_code_1.StatusCodes.BadSecurityModeInsufficient };
32
+ if (securityMode !== MessageSecurityMode.SignAndEncrypt) {
33
+ return { statusCode: StatusCodes.BadSecurityModeInsufficient };
38
34
  }
39
35
  return null;
40
36
  }
@@ -1 +1 @@
1
- {"version":3,"file":"security_checks.js","sourceRoot":"","sources":["../source/security_checks.ts"],"names":[],"mappings":";;AAkBA,4DAOC;AAYD,sDASC;AAtCD,yDAA+C;AAC/C,2EAA8D;AAE9D,mEAAqD;AACrD,uDAAuD;AAEvD;;;GAGG;AACH,SAAgB,wBAAwB,CAAC,OAAwB;IAC7D,MAAM,KAAK,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAC5C,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,8BAAU,EAAC,CAAC,EAAE,6CAAgB,CAAC,aAAa,CAAC,CAAC,CAAC;IAC1F,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACpB,OAAO,EAAE,UAAU,EAAE,oCAAW,CAAC,mBAAmB,EAAE,CAAC;IAC3D,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,qBAAqB,CAAC,OAAwB;IAC1D,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC;IAC5D,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC,CAAC,6CAA6C;IAC9D,CAAC;IACD,IAAI,YAAY,KAAK,sCAAmB,CAAC,cAAc,EAAE,CAAC;QACtD,OAAO,EAAE,UAAU,EAAE,oCAAW,CAAC,2BAA2B,EAAE,CAAC;IACnE,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"security_checks.js","sourceRoot":"","sources":["../source/security_checks.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,OAAwB;IAC7D,MAAM,KAAK,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAC5C,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC;IAC1F,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACpB,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,mBAAmB,EAAE,CAAC;IAC3D,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAwB;IAC1D,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC;IAC5D,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC,CAAC,6CAA6C;IAC9D,CAAC;IACD,IAAI,YAAY,KAAK,mBAAmB,CAAC,cAAc,EAAE,CAAC;QACtD,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,2BAA2B,EAAE,CAAC;IACnE,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC"}
@@ -41,3 +41,4 @@ export interface IManagedUserManager {
41
41
  */
42
42
  export declare function createUserManager(userStore: IUserManagementStore, identityStore: IIdentityMappingStore): IManagedUserManager;
43
43
  export {};
44
+ //# sourceMappingURL=user_management_user_manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user_management_user_manager.d.ts","sourceRoot":"","sources":["../source/user_management_user_manager.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAc,KAAK,MAAM,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,KAAK,EAAwB,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACpH,OAAO,EAAE,KAAK,UAAU,EAAe,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,KAAK,uBAAuB,EAAgD,MAAM,kBAAkB,CAAC;AAE9G,oFAAoF;AACpF,UAAU,WAAW;IACjB,YAAY,CAAC,IAAI,MAAM,CAAC;IACxB,sFAAsF;IACtF,sBAAsB,CAAC,EAAE,OAAO,CAAC;CACpC;AAED,2EAA2E;AAC3E,KAAK,iBAAiB,GAAG,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,YAAY,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;AAE7E,MAAM,WAAW,mBAAmB;IAChC;;;;OAIG;IACH,gBAAgB,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC3G,uFAAuF;IACvF,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzC;;;;OAIG;IACH,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,uBAAuB,EAAE,CAAC;IAC9D;;;;OAIG;IACH,oBAAoB,CAAC,SAAS,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;IACpE,yEAAyE;IACzE,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CAC5D;AAID;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,oBAAoB,EAAE,aAAa,EAAE,qBAAqB,GAAG,mBAAmB,CAoD5H"}
@@ -1,6 +1,3 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createUserManager = createUserManager;
4
1
  /**
5
2
  * @module node-opcua-role-set-server
6
3
  *
@@ -20,20 +17,20 @@ exports.createUserManager = createUserManager;
20
17
  * The server `userManager` invokes `isValidUser` with `this` bound to the
21
18
  * ServerSession, which is how the SessionId is captured (non-breaking).
22
19
  */
23
- const node_opcua_constants_1 = require("node-opcua-constants");
24
- const node_opcua_nodeid_1 = require("node-opcua-nodeid");
25
- const node_opcua_status_code_1 = require("node-opcua-status-code");
26
- const node_opcua_types_1 = require("node-opcua-types");
20
+ import { WellKnownRoles } from "node-opcua-constants";
21
+ import { makeNodeId } from "node-opcua-nodeid";
22
+ import { StatusCodes } from "node-opcua-status-code";
23
+ import { UserConfigurationMask, UserNameIdentityToken } from "node-opcua-types";
27
24
  const has = (mask, bit) => (mask & bit) === bit;
28
25
  /**
29
26
  * Create a server `userManager` backed by the given user store. Roles are
30
27
  * resolved from `identityStore` (a UserName identity rule per user); while a
31
28
  * user must change the password, only the Anonymous Role is granted.
32
29
  */
33
- function createUserManager(userStore, identityStore) {
30
+ export function createUserManager(userStore, identityStore) {
34
31
  const lastAuthStatus = new Map();
35
32
  const statusBySession = new Map();
36
- const anonymousOnly = () => [(0, node_opcua_nodeid_1.makeNodeId)(node_opcua_constants_1.WellKnownRoles.Anonymous)];
33
+ const anonymousOnly = () => [makeNodeId(WellKnownRoles.Anonymous)];
37
34
  return {
38
35
  lastAuthStatus,
39
36
  getSessionAuthStatus(sessionId) {
@@ -52,17 +49,17 @@ function createUserManager(userStore, identityStore) {
52
49
  }
53
50
  // flag the session so ActivateSession returns Good_PasswordChangeRequired
54
51
  if (this) {
55
- this.passwordChangeRequired = result.statusCode === node_opcua_status_code_1.StatusCodes.GoodPasswordChangeRequired;
52
+ this.passwordChangeRequired = result.statusCode === StatusCodes.GoodPasswordChangeRequired;
56
53
  }
57
- callback(null, result.statusCode === node_opcua_status_code_1.StatusCodes.Good || result.statusCode === node_opcua_status_code_1.StatusCodes.GoodPasswordChangeRequired);
54
+ callback(null, result.statusCode === StatusCodes.Good || result.statusCode === StatusCodes.GoodPasswordChangeRequired);
58
55
  }, (err) => callback(err instanceof Error ? err : new Error(String(err))));
59
56
  },
60
57
  getUserRoles(userName) {
61
58
  const user = userStore.getUsers().find((u) => u.userName === userName);
62
- if (user && has(user.userConfiguration, node_opcua_types_1.UserConfigurationMask.MustChangePassword)) {
59
+ if (user && has(user.userConfiguration, UserConfigurationMask.MustChangePassword)) {
63
60
  return anonymousOnly();
64
61
  }
65
- const token = new node_opcua_types_1.UserNameIdentityToken({ userName });
62
+ const token = new UserNameIdentityToken({ userName });
66
63
  return identityStore.resolveRoles(token);
67
64
  },
68
65
  getIdentitiesForRole(role) {
@@ -1 +1 @@
1
- {"version":3,"file":"user_management_user_manager.js","sourceRoot":"","sources":["../source/user_management_user_manager.ts"],"names":[],"mappings":";;AAmEA,8CAoDC;AAvHD;;;;;;;;;;;;;;;;;;GAkBG;AACH,+DAAsD;AACtD,yDAA6E;AAE7E,mEAAsE;AACtE,uDAA8G;AAqC9G,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,GAAW,EAAW,EAAE,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC;AAEzE;;;;GAIG;AACH,SAAgB,iBAAiB,CAAC,SAA+B,EAAE,aAAoC;IACnG,MAAM,cAAc,GAAG,IAAI,GAAG,EAAsB,CAAC;IACrD,MAAM,eAAe,GAAG,IAAI,GAAG,EAAsB,CAAC;IACtD,MAAM,aAAa,GAAG,GAAa,EAAE,CAAC,CAAC,IAAA,8BAAU,EAAC,qCAAc,CAAC,SAAS,CAAC,CAAC,CAAC;IAE7E,OAAO;QACH,cAAc;QAEd,oBAAoB,CAAC,SAAqB;YACtC,OAAO,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,gBAAgB,CAAoB,QAAgB,EAAE,QAAgB,EAAE,QAA2B;YAC/F,qEAAqE;YACrE,6BAA6B;YAC7B,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,IAAI,CAC3C,CAAC,MAAM,EAAE,EAAE;gBACP,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;gBAChD,gEAAgE;gBAChE,uCAAuC;gBACvC,MAAM,SAAS,GAAG,IAAI,EAAE,YAAY,EAAE,EAAE,CAAC;gBACzC,IAAI,SAAS,EAAE,CAAC;oBACZ,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;gBACjE,CAAC;gBACD,0EAA0E;gBAC1E,IAAI,IAAI,EAAE,CAAC;oBACP,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAC,UAAU,KAAK,oCAAW,CAAC,0BAA0B,CAAC;gBAC/F,CAAC;gBACD,QAAQ,CACJ,IAAI,EACJ,MAAM,CAAC,UAAU,KAAK,oCAAW,CAAC,IAAI,IAAI,MAAM,CAAC,UAAU,KAAK,oCAAW,CAAC,0BAA0B,CACzG,CAAC;YACN,CAAC,EACD,CAAC,GAAY,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAClF,CAAC;QACN,CAAC;QAED,YAAY,CAAC,QAAgB;YACzB,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;YACvE,IAAI,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,wCAAqB,CAAC,kBAAkB,CAAC,EAAE,CAAC;gBAChF,OAAO,aAAa,EAAE,CAAC;YAC3B,CAAC;YACD,MAAM,KAAK,GAAyB,IAAI,wCAAqB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC5E,OAAO,aAAa,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAC7C,CAAC;QAED,oBAAoB,CAAC,IAAY;YAC7B,wEAAwE;YACxE,iEAAiE;YACjE,OAAO,aAAa,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QACpD,CAAC;KACJ,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"user_management_user_manager.js","sourceRoot":"","sources":["../source/user_management_user_manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAgC,MAAM,mBAAmB,CAAC;AAE7E,OAAO,EAAmB,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAgC,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAqC9G,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,GAAW,EAAW,EAAE,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC;AAEzE;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAA+B,EAAE,aAAoC;IACnG,MAAM,cAAc,GAAG,IAAI,GAAG,EAAsB,CAAC;IACrD,MAAM,eAAe,GAAG,IAAI,GAAG,EAAsB,CAAC;IACtD,MAAM,aAAa,GAAG,GAAa,EAAE,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC;IAE7E,OAAO;QACH,cAAc;QAEd,oBAAoB,CAAC,SAAqB;YACtC,OAAO,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,gBAAgB,CAAoB,QAAgB,EAAE,QAAgB,EAAE,QAA2B;YAC/F,qEAAqE;YACrE,6BAA6B;YAC7B,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,IAAI,CAC3C,CAAC,MAAM,EAAE,EAAE;gBACP,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;gBAChD,gEAAgE;gBAChE,uCAAuC;gBACvC,MAAM,SAAS,GAAG,IAAI,EAAE,YAAY,EAAE,EAAE,CAAC;gBACzC,IAAI,SAAS,EAAE,CAAC;oBACZ,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;gBACjE,CAAC;gBACD,0EAA0E;gBAC1E,IAAI,IAAI,EAAE,CAAC;oBACP,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAC,UAAU,KAAK,WAAW,CAAC,0BAA0B,CAAC;gBAC/F,CAAC;gBACD,QAAQ,CACJ,IAAI,EACJ,MAAM,CAAC,UAAU,KAAK,WAAW,CAAC,IAAI,IAAI,MAAM,CAAC,UAAU,KAAK,WAAW,CAAC,0BAA0B,CACzG,CAAC;YACN,CAAC,EACD,CAAC,GAAY,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAClF,CAAC;QACN,CAAC;QAED,YAAY,CAAC,QAAgB;YACzB,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;YACvE,IAAI,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,qBAAqB,CAAC,kBAAkB,CAAC,EAAE,CAAC;gBAChF,OAAO,aAAa,EAAE,CAAC;YAC3B,CAAC;YACD,MAAM,KAAK,GAAyB,IAAI,qBAAqB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC5E,OAAO,aAAa,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAC7C,CAAC;QAED,oBAAoB,CAAC,IAAY;YAC7B,wEAAwE;YACxE,iEAAiE;YACjE,OAAO,aAAa,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QACpD,CAAC;KACJ,CAAC;AACN,CAAC"}
@@ -11,3 +11,4 @@ export declare function asString(v: Variant | undefined): string | null;
11
11
  export declare function asBoolean(v: Variant | undefined): boolean;
12
12
  /** The UserConfigurationMask value of an argument (missing / non-numeric → `0`). */
13
13
  export declare function asMask(v: Variant | undefined): UserConfigurationMask;
14
+ //# sourceMappingURL=variant_args.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variant_args.d.ts","sourceRoot":"","sources":["../source/variant_args.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAElD,2EAA2E;AAC3E,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAE9D;AAED,0EAA0E;AAC1E,wBAAgB,SAAS,CAAC,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAEzD;AAED,oFAAoF;AACpF,wBAAgB,MAAM,CAAC,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,qBAAqB,CAEpE"}
@@ -1,18 +1,13 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.asString = asString;
4
- exports.asBoolean = asBoolean;
5
- exports.asMask = asMask;
6
1
  /** The string value of an argument, or `null` if absent / not a string. */
7
- function asString(v) {
2
+ export function asString(v) {
8
3
  return v && typeof v.value === "string" ? v.value : null;
9
4
  }
10
5
  /** The boolean value of an argument (missing / non-boolean → `false`). */
11
- function asBoolean(v) {
6
+ export function asBoolean(v) {
12
7
  return !!v && v.value === true;
13
8
  }
14
9
  /** The UserConfigurationMask value of an argument (missing / non-numeric → `0`). */
15
- function asMask(v) {
10
+ export function asMask(v) {
16
11
  return (v && typeof v.value === "number" ? v.value : 0);
17
12
  }
18
13
  //# sourceMappingURL=variant_args.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"variant_args.js","sourceRoot":"","sources":["../source/variant_args.ts"],"names":[],"mappings":";;AASA,4BAEC;AAGD,8BAEC;AAGD,wBAEC;AAbD,2EAA2E;AAC3E,SAAgB,QAAQ,CAAC,CAAsB;IAC3C,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7D,CAAC;AAED,0EAA0E;AAC1E,SAAgB,SAAS,CAAC,CAAsB;IAC5C,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC;AACnC,CAAC;AAED,oFAAoF;AACpF,SAAgB,MAAM,CAAC,CAAsB;IACzC,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAA0B,CAAC;AACrF,CAAC"}
1
+ {"version":3,"file":"variant_args.js","sourceRoot":"","sources":["../source/variant_args.ts"],"names":[],"mappings":"AAQA,2EAA2E;AAC3E,MAAM,UAAU,QAAQ,CAAC,CAAsB;IAC3C,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7D,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,SAAS,CAAC,CAAsB;IAC5C,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC;AACnC,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,MAAM,CAAC,CAAsB;IACzC,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAA0B,CAAC;AACrF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "node-opcua-role-set-server",
3
- "version": "2.183.1",
3
+ "type": "module",
4
+ "version": "2.184.1",
4
5
  "description": "pure nodejs OPCUA SDK - server-side role-set management (OPC 10000-18)",
5
6
  "scripts": {
6
7
  "build": "tsc -b",
@@ -19,22 +20,22 @@
19
20
  "node": ">=22.13.0"
20
21
  },
21
22
  "dependencies": {
22
- "node-opcua-address-space": "2.183.1",
23
- "node-opcua-address-space-base": "2.183.1",
24
- "node-opcua-constants": "2.183.0",
25
- "node-opcua-data-model": "2.183.0",
26
- "node-opcua-debug": "2.183.0",
27
- "node-opcua-nodeid": "2.183.0",
28
- "node-opcua-role-set-common": "2.183.0",
29
- "node-opcua-service-call": "2.183.0",
30
- "node-opcua-status-code": "2.183.0",
31
- "node-opcua-types": "2.183.0",
32
- "node-opcua-variant": "2.183.0"
23
+ "node-opcua-address-space": "2.184.1",
24
+ "node-opcua-address-space-base": "2.184.1",
25
+ "node-opcua-constants": "2.184.0",
26
+ "node-opcua-data-model": "2.184.1",
27
+ "node-opcua-debug": "2.184.0",
28
+ "node-opcua-nodeid": "2.184.1",
29
+ "node-opcua-role-set-common": "2.184.1",
30
+ "node-opcua-service-call": "2.184.1",
31
+ "node-opcua-status-code": "2.184.1",
32
+ "node-opcua-types": "2.184.1",
33
+ "node-opcua-variant": "2.184.1"
33
34
  },
34
35
  "devDependencies": {
35
- "node-opcua-leak-detector": "2.183.0",
36
- "node-opcua-nodesets": "2.183.0",
37
- "node-opcua-test-helpers": "2.183.0"
36
+ "node-opcua-leak-detector": "2.184.1",
37
+ "node-opcua-nodesets": "2.184.0",
38
+ "node-opcua-test-helpers": "2.184.0"
38
39
  },
39
40
  "author": "Etienne Rossignon",
40
41
  "license": "MIT",
@@ -51,7 +52,7 @@
51
52
  "internet of things"
52
53
  ],
53
54
  "homepage": "http://node-opcua.github.io/",
54
- "gitHead": "2326127b73f78cae1f0957788f16850a3be70701",
55
+ "gitHead": "29af4e8ac45f585e7b0d8cff9c799b4f0f2f0985",
55
56
  "files": [
56
57
  "dist",
57
58
  "source"