node-opcua-role-set-server 2.176.0 → 2.177.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.
@@ -45,6 +45,24 @@ export interface InstallRoleBasedSecurityOptions {
45
45
  persistencePath?: string;
46
46
  /** Encrypt that archive at rest (AES-256-GCM, key derived from this secret). */
47
47
  persistenceSecret?: string;
48
+ /**
49
+ * Install the `UserManagement` Object (OPC 10000-18 §5). Default `true`.
50
+ *
51
+ * Set `false` to model a server that implements the RoleSet — roles and
52
+ * their identity mappings — **without** the optional `UserManagement`
53
+ * companion Object. That shape is common in the field, and it behaves
54
+ * differently in a client in a way worth being able to test: `readUsers()`
55
+ * answers with an *empty list* rather than failing, because there is no API
56
+ * to enumerate accounts at all. A client cannot tell that apart from "this
57
+ * server has no users" unless it looks for the Object.
58
+ *
59
+ * **Authentication is unaffected.** The `userManager` bridge still validates
60
+ * credentials against the seeded user store and still resolves Roles; only
61
+ * the Object exposing user *administration* is left out. That is exactly the
62
+ * real-world case: the server knows its users, but offers no way to list or
63
+ * manage them over OPC UA.
64
+ */
65
+ userManagement?: boolean;
48
66
  }
49
67
  /** The shared stores + bridge produced by {@link createRoleBasedSecurity}. */
50
68
  export interface RoleBasedSecurity {
@@ -60,7 +78,8 @@ export interface RoleBasedSecurity {
60
78
  */
61
79
  install(server: IServerForRoleSet & IServerForUserManagement, options?: InstallRoleBasedSecurityOptions): Promise<{
62
80
  roleSet: InstallRoleSetResult;
63
- userManagement: InstallUserManagementResult;
81
+ /** Absent when `userManagement: false` — there is nothing to return. */
82
+ userManagement?: InstallUserManagementResult;
64
83
  }>;
65
84
  }
66
85
  /**
@@ -107,6 +107,11 @@ async function createRoleBasedSecurity(options) {
107
107
  });
108
108
  }
109
109
  const roleSet = await (0, install_role_set_js_1.installRoleSet)(server, { store: identityStore, persistence });
110
+ if (installOptions?.userManagement === false) {
111
+ // Deliberately no UserManagement Object. Credentials still work:
112
+ // the userManager bridge authenticates from userStore either way.
113
+ return { roleSet };
114
+ }
110
115
  const userManagement = await (0, install_user_management_js_1.installUserManagement)(server, { store: userStore, persistence });
111
116
  return { roleSet, userManagement };
112
117
  }
@@ -1 +1 @@
1
- {"version":3,"file":"install_role_based_security.js","sourceRoot":"","sources":["../source/install_role_based_security.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install_role_based_security.js","sourceRoot":"","sources":["../source/install_role_based_security.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "node-opcua-role-set-server",
3
- "version": "2.176.0",
3
+ "version": "2.177.1",
4
4
  "description": "pure nodejs OPCUA SDK - server-side role-set management (OPC 10000-18)",
5
5
  "scripts": {
6
6
  "build": "tsc -b",
@@ -16,17 +16,17 @@
16
16
  "npm": ">=10.x"
17
17
  },
18
18
  "dependencies": {
19
- "node-opcua-address-space": "2.176.0",
20
- "node-opcua-address-space-base": "2.176.0",
19
+ "node-opcua-address-space": "2.177.0",
20
+ "node-opcua-address-space-base": "2.177.0",
21
21
  "node-opcua-constants": "2.176.0",
22
- "node-opcua-data-model": "2.176.0",
22
+ "node-opcua-data-model": "2.177.0",
23
23
  "node-opcua-debug": "2.175.6",
24
- "node-opcua-nodeid": "2.176.0",
25
- "node-opcua-role-set-common": "2.176.0",
26
- "node-opcua-service-call": "2.176.0",
24
+ "node-opcua-nodeid": "2.177.0",
25
+ "node-opcua-role-set-common": "2.177.0",
26
+ "node-opcua-service-call": "2.177.0",
27
27
  "node-opcua-status-code": "2.176.0",
28
- "node-opcua-types": "2.176.0",
29
- "node-opcua-variant": "2.176.0"
28
+ "node-opcua-types": "2.177.0",
29
+ "node-opcua-variant": "2.177.0"
30
30
  },
31
31
  "devDependencies": {
32
32
  "node-opcua-leak-detector": "2.175.6",
@@ -47,7 +47,7 @@
47
47
  "internet of things"
48
48
  ],
49
49
  "homepage": "http://node-opcua.github.io/",
50
- "gitHead": "a4569830a5a564a7ff3e8cf37c44fd35b3f72ac1",
50
+ "gitHead": "064029878247adf2fa5d14a8124e1930431e2428",
51
51
  "files": [
52
52
  "dist",
53
53
  "source"
@@ -89,6 +89,24 @@ export interface InstallRoleBasedSecurityOptions {
89
89
  persistencePath?: string;
90
90
  /** Encrypt that archive at rest (AES-256-GCM, key derived from this secret). */
91
91
  persistenceSecret?: string;
92
+ /**
93
+ * Install the `UserManagement` Object (OPC 10000-18 §5). Default `true`.
94
+ *
95
+ * Set `false` to model a server that implements the RoleSet — roles and
96
+ * their identity mappings — **without** the optional `UserManagement`
97
+ * companion Object. That shape is common in the field, and it behaves
98
+ * differently in a client in a way worth being able to test: `readUsers()`
99
+ * answers with an *empty list* rather than failing, because there is no API
100
+ * to enumerate accounts at all. A client cannot tell that apart from "this
101
+ * server has no users" unless it looks for the Object.
102
+ *
103
+ * **Authentication is unaffected.** The `userManager` bridge still validates
104
+ * credentials against the seeded user store and still resolves Roles; only
105
+ * the Object exposing user *administration* is left out. That is exactly the
106
+ * real-world case: the server knows its users, but offers no way to list or
107
+ * manage them over OPC UA.
108
+ */
109
+ userManagement?: boolean;
92
110
  }
93
111
 
94
112
  /** The shared stores + bridge produced by {@link createRoleBasedSecurity}. */
@@ -106,7 +124,11 @@ export interface RoleBasedSecurity {
106
124
  install(
107
125
  server: IServerForRoleSet & IServerForUserManagement,
108
126
  options?: InstallRoleBasedSecurityOptions
109
- ): Promise<{ roleSet: InstallRoleSetResult; userManagement: InstallUserManagementResult }>;
127
+ ): Promise<{
128
+ roleSet: InstallRoleSetResult;
129
+ /** Absent when `userManagement: false` — there is nothing to return. */
130
+ userManagement?: InstallUserManagementResult;
131
+ }>;
110
132
  }
111
133
 
112
134
  const userNameRule = (userName: string): IdentityMappingRuleType =>
@@ -200,6 +222,11 @@ export async function createRoleBasedSecurity(options?: CreateRoleBasedSecurityO
200
222
  }
201
223
 
202
224
  const roleSet = await installRoleSet(server, { store: identityStore, persistence });
225
+ if (installOptions?.userManagement === false) {
226
+ // Deliberately no UserManagement Object. Credentials still work:
227
+ // the userManager bridge authenticates from userStore either way.
228
+ return { roleSet };
229
+ }
203
230
  const userManagement = await installUserManagement(server, { store: userStore, persistence });
204
231
  return { roleSet, userManagement };
205
232
  }