@halix/action-sdk 1.0.44 → 1.0.45

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.
@@ -0,0 +1,279 @@
1
+ "use strict";
2
+ // Halix SDK License v1.0
3
+ // Copyright (c) 2025 halix.io LLC.
4
+ //
5
+ // This source code is licensed for use **only** within applications
6
+ // running on the Halix platform, in accordance with Halix SDK guidelines.
7
+ //
8
+ // Unauthorized use outside the Halix platform is prohibited.
9
+ // Full license terms available in the LICENSE file.
10
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
11
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
12
+ return new (P || (P = Promise))(function (resolve, reject) {
13
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
14
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
15
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
16
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
17
+ });
18
+ };
19
+ var __importDefault = (this && this.__importDefault) || function (mod) {
20
+ return (mod && mod.__esModule) ? mod : { "default": mod };
21
+ };
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.listRoles = listRoles;
24
+ exports.listRolesAsObservable = listRolesAsObservable;
25
+ exports.listBusinessPrivileges = listBusinessPrivileges;
26
+ exports.listBusinessPrivilegesAsObservable = listBusinessPrivilegesAsObservable;
27
+ exports.listSandboxUsers = listSandboxUsers;
28
+ exports.listSandboxUsersAsObservable = listSandboxUsersAsObservable;
29
+ exports.getUserAccess = getUserAccess;
30
+ exports.getUserAccessAsObservable = getUserAccessAsObservable;
31
+ exports.inviteUser = inviteUser;
32
+ exports.inviteUserAsObservable = inviteUserAsObservable;
33
+ exports.updateUserAccess = updateUserAccess;
34
+ exports.updateUserAccessAsObservable = updateUserAccessAsObservable;
35
+ exports.removeUserAccess = removeUserAccess;
36
+ exports.removeUserAccessAsObservable = removeUserAccessAsObservable;
37
+ exports.hasBusinessPrivilege = hasBusinessPrivilege;
38
+ exports.userPrivileges = userPrivileges;
39
+ /**
40
+ * @module @halix/action-sdk/access
41
+ * @description Access, roles, business privileges, invitations, and user scope assignment for the Halix Platform action SDK.
42
+ * This module lets custom code inspect role and privilege metadata, invite users, and update a user's access inside the
43
+ * current sandbox.
44
+ *
45
+ * Key concepts:
46
+ * - `Role.id` is the stable semantic role identifier used by configuration and generated code.
47
+ * - `Role.objKey` is the persisted role object key. APIs that accept `roleKeys` require `Role.objKey`, not `Role.id`.
48
+ * - `BusinessPrivilege.id` is the stable privilege identifier used by privilege checks such as `hasBusinessPrivilege`.
49
+ * - `ScopeKeyItem` entries define the data scope a user receives for an organization, user proxy, or custom data scope.
50
+ *
51
+ * @usage
52
+ * ## When to Use
53
+ * - **Build role assignment UI** -> `listRoles`, then submit matching `role.objKey` values as `roleKeys`
54
+ * - **Show or check business privileges** -> `listBusinessPrivileges`, `hasBusinessPrivilege`, `userPrivileges`
55
+ * - **List users in the current sandbox** -> `listSandboxUsers`
56
+ * - **Inspect one user's access** -> `getUserAccess`
57
+ * - **Invite a user by email** -> `inviteUser`
58
+ * - **Add or update a user's scope entry** -> `updateUserAccess`
59
+ * - **Remove one user scope entry** -> `removeUserAccess`
60
+ *
61
+ * ## Role Key Rule
62
+ * Never submit semantic role IDs as `roleKeys`. Resolve them first:
63
+ * 1. call `listRoles()`
64
+ * 2. find the role where `role.id` matches the semantic ID
65
+ * 3. submit `role.objKey` in `InviteUserRequest.roleKeys` or `UpdateAccessRequest.roleKeys`
66
+ *
67
+ * ## Key Functions
68
+ * | Function | Use For |
69
+ * |----------|---------|
70
+ * | `listRoles` | Read assignable roles for the current sandbox |
71
+ * | `listBusinessPrivileges` | Read business privilege metadata |
72
+ * | `listSandboxUsers` | Read users with access to the current sandbox |
73
+ * | `getUserAccess` | Read one user's current scope entries and roles |
74
+ * | `inviteUser` | Invite a new user and assign initial role keys/scopes |
75
+ * | `updateUserAccess` | Add or update one user scope entry |
76
+ * | `removeUserAccess` | Remove one user scope entry |
77
+ * | `hasBusinessPrivilege` | Check whether the current user has a privilege ID |
78
+ * | `userPrivileges` | Return the current user's privilege IDs |
79
+ *
80
+ * @example
81
+ * // Resolve a semantic role ID to the persisted object key before assignment
82
+ * const roles = await hx.listRoles();
83
+ * const memberRole = roles.find((role) => role.id === 'householdMember');
84
+ * if (!memberRole?.objKey) {
85
+ * throw new Error('Required role not found.');
86
+ * }
87
+ * await hx.updateUserAccess(userKey, {
88
+ * roleKeys: [memberRole.objKey],
89
+ * scopeKeyItems: [{ scopeKey: orgKey, dataElementId: 'family' }],
90
+ * });
91
+ *
92
+ * @example
93
+ * // Check the current user's business privilege
94
+ * if (hx.hasBusinessPrivilege('manageSharedLists')) {
95
+ * // Show controls for sharing list access
96
+ * }
97
+ */
98
+ const axios_1 = __importDefault(require("axios"));
99
+ const rxjs_1 = require("rxjs");
100
+ const sdk_general_1 = require("./sdk-general");
101
+ function authHeaders() {
102
+ return __awaiter(this, void 0, void 0, function* () {
103
+ if (!sdk_general_1.getAuthToken) {
104
+ throw new Error('SDK not initialized.');
105
+ }
106
+ const authToken = yield (0, rxjs_1.lastValueFrom)((0, sdk_general_1.getAuthToken)());
107
+ return { Authorization: `Bearer ${authToken}` };
108
+ });
109
+ }
110
+ /**
111
+ * Lists roles available in the current sandbox.
112
+ *
113
+ * Use this before assigning roles so semantic role IDs can be resolved to persisted `objKey` values. Assignment
114
+ * requests must send `Role.objKey` values in `roleKeys`.
115
+ *
116
+ * @returns Promise resolving to role metadata for the current sandbox
117
+ */
118
+ function listRoles() {
119
+ return __awaiter(this, void 0, void 0, function* () {
120
+ const response = yield axios_1.default.get(`${sdk_general_1.serviceAddress}/access/sandboxes/${sdk_general_1.sandboxKey}/allRoles`, {
121
+ headers: yield authHeaders(),
122
+ });
123
+ return response.data;
124
+ });
125
+ }
126
+ /**
127
+ * Observable version of `listRoles`. See `listRoles` for details.
128
+ */
129
+ function listRolesAsObservable() {
130
+ return (0, rxjs_1.from)(listRoles());
131
+ }
132
+ /**
133
+ * Lists business privileges available in the current sandbox.
134
+ *
135
+ * Business privilege IDs are used by `hasBusinessPrivilege`, current-user privilege checks, and role
136
+ * `businessPrivilegeIds`.
137
+ *
138
+ * @returns Promise resolving to business privilege metadata
139
+ */
140
+ function listBusinessPrivileges() {
141
+ return __awaiter(this, void 0, void 0, function* () {
142
+ const response = yield axios_1.default.get(`${sdk_general_1.serviceAddress}/access/sandboxes/${sdk_general_1.sandboxKey}/businessPrivileges`, {
143
+ headers: yield authHeaders(),
144
+ });
145
+ return response.data;
146
+ });
147
+ }
148
+ /**
149
+ * Observable version of `listBusinessPrivileges`. See `listBusinessPrivileges` for details.
150
+ */
151
+ function listBusinessPrivilegesAsObservable() {
152
+ return (0, rxjs_1.from)(listBusinessPrivileges());
153
+ }
154
+ /**
155
+ * Lists users with access to the current sandbox.
156
+ *
157
+ * Use `getUserAccess` when full scope-entry details are needed for a specific user.
158
+ *
159
+ * @returns Promise resolving to sandbox user summaries
160
+ */
161
+ function listSandboxUsers() {
162
+ return __awaiter(this, void 0, void 0, function* () {
163
+ const response = yield axios_1.default.get(`${sdk_general_1.serviceAddress}/access/sandboxes/${sdk_general_1.sandboxKey}/users`, {
164
+ headers: yield authHeaders(),
165
+ });
166
+ return response.data;
167
+ });
168
+ }
169
+ /**
170
+ * Observable version of `listSandboxUsers`. See `listSandboxUsers` for details.
171
+ */
172
+ function listSandboxUsersAsObservable() {
173
+ return (0, rxjs_1.from)(listSandboxUsers());
174
+ }
175
+ /**
176
+ * Gets one user's current sandbox access, including scope entries and any role metadata returned by the access service.
177
+ *
178
+ * @param userKey - Persisted user object key
179
+ * @returns Promise resolving to the user's access wrapper
180
+ */
181
+ function getUserAccess(userKey) {
182
+ return __awaiter(this, void 0, void 0, function* () {
183
+ const response = yield axios_1.default.get(`${sdk_general_1.serviceAddress}/access/sandboxes/${sdk_general_1.sandboxKey}/user/${userKey}/access`, {
184
+ headers: yield authHeaders(),
185
+ });
186
+ return response.data;
187
+ });
188
+ }
189
+ /**
190
+ * Observable version of `getUserAccess`. See `getUserAccess` for details.
191
+ */
192
+ function getUserAccessAsObservable(userKey) {
193
+ return (0, rxjs_1.from)(getUserAccess(userKey));
194
+ }
195
+ /**
196
+ * Invites a user by email and assigns initial sandbox access.
197
+ *
198
+ * `req.roleKeys` must contain persisted role object keys from `Role.objKey`, not semantic role IDs. Resolve desired
199
+ * semantic IDs with `listRoles` before calling this function.
200
+ *
201
+ * @param req - Invitation and initial access request
202
+ * @returns Promise resolving to invitation result metadata
203
+ */
204
+ function inviteUser(req) {
205
+ return __awaiter(this, void 0, void 0, function* () {
206
+ const response = yield axios_1.default.post(`${sdk_general_1.serviceAddress}/access/sandboxes/${sdk_general_1.sandboxKey}/inviteByEmail`, req, {
207
+ headers: yield authHeaders(),
208
+ });
209
+ return response.data;
210
+ });
211
+ }
212
+ /**
213
+ * Observable version of `inviteUser`. See `inviteUser` for details.
214
+ */
215
+ function inviteUserAsObservable(req) {
216
+ return (0, rxjs_1.from)(inviteUser(req));
217
+ }
218
+ /**
219
+ * Adds or updates one user's sandbox scope entry.
220
+ *
221
+ * If `req.scopeElementId` is present, the existing scope entry is updated. If it is omitted, a new scope entry is
222
+ * added. `req.roleKeys` must contain persisted role object keys from `Role.objKey`, not semantic role IDs.
223
+ *
224
+ * @param userKey - Persisted user object key
225
+ * @param req - Scope-entry access update request
226
+ */
227
+ function updateUserAccess(userKey, req) {
228
+ return __awaiter(this, void 0, void 0, function* () {
229
+ const path = req.scopeElementId ? 'updateScopeElement' : 'addScopeElement';
230
+ yield axios_1.default.post(`${sdk_general_1.serviceAddress}/access/sandboxes/${sdk_general_1.sandboxKey}/user/${userKey}/${path}`, req, {
231
+ headers: yield authHeaders(),
232
+ });
233
+ });
234
+ }
235
+ /**
236
+ * Observable version of `updateUserAccess`. See `updateUserAccess` for details.
237
+ */
238
+ function updateUserAccessAsObservable(userKey, req) {
239
+ return (0, rxjs_1.from)(updateUserAccess(userKey, req));
240
+ }
241
+ /**
242
+ * Removes one sandbox scope entry from a user.
243
+ *
244
+ * @param userKey - Persisted user object key
245
+ * @param scopeElementId - Scope element ID to remove from the user
246
+ */
247
+ function removeUserAccess(userKey, scopeElementId) {
248
+ return __awaiter(this, void 0, void 0, function* () {
249
+ yield axios_1.default.delete(`${sdk_general_1.serviceAddress}/access/sandboxes/${sdk_general_1.sandboxKey}/user/${userKey}/removeScopeElements`, {
250
+ headers: yield authHeaders(),
251
+ data: { scopeElementIds: [scopeElementId] },
252
+ });
253
+ });
254
+ }
255
+ /**
256
+ * Observable version of `removeUserAccess`. See `removeUserAccess` for details.
257
+ */
258
+ function removeUserAccessAsObservable(userKey, scopeElementId) {
259
+ return (0, rxjs_1.from)(removeUserAccess(userKey, scopeElementId));
260
+ }
261
+ /**
262
+ * Checks whether the current user context contains a business privilege ID.
263
+ *
264
+ * @param privilegeId - Stable business privilege ID
265
+ * @returns True when the current user has the privilege
266
+ */
267
+ function hasBusinessPrivilege(privilegeId) {
268
+ var _a, _b;
269
+ return (_b = (_a = sdk_general_1.userContext === null || sdk_general_1.userContext === void 0 ? void 0 : sdk_general_1.userContext.businessPrivileges) === null || _a === void 0 ? void 0 : _a.includes(privilegeId)) !== null && _b !== void 0 ? _b : false;
270
+ }
271
+ /**
272
+ * Returns the current user's business privilege IDs from the SDK user context.
273
+ *
274
+ * @returns Business privilege IDs for the current user, or an empty array when none are available
275
+ */
276
+ function userPrivileges() {
277
+ var _a;
278
+ return (_a = sdk_general_1.userContext === null || sdk_general_1.userContext === void 0 ? void 0 : sdk_general_1.userContext.businessPrivileges) !== null && _a !== void 0 ? _a : [];
279
+ }
package/lib/cjs/index.js CHANGED
@@ -8,8 +8,8 @@
8
8
  // Unauthorized use outside the Halix platform is prohibited.
9
9
  // Full license terms available in the LICENSE file.
10
10
  Object.defineProperty(exports, "__esModule", { value: true });
11
- exports.massDelete = exports.massEditAsObservable = exports.massEdit = exports.getListDataAsObservable = exports.getListData = exports.getOrganizationPreferenceAsObservable = exports.getUserPreferenceAsObservable = exports.getOrganizationPreference = exports.getUserPreference = exports.sendMessageAsObservable = exports.sendMessage = exports.MessageMethod = exports.downloadResourceAsObservable = exports.downloadResource = exports.createOrUpdateResourceAsObservable = exports.createOrUpdateResource = exports.sendFileContentsAsObservable = exports.sendFileContents = exports.saveResourceAsObservable = exports.saveResource = exports.getOrCreateResourceAsObservable = exports.getOrCreateResource = exports.deleteRelatedObjectsAsObservable = exports.deleteRelatedObjects = exports.deleteRelatedObjectAsObservable = exports.deleteRelatedObject = exports.deleteObjectAsObservable = exports.deleteObject = exports.saveRelatedObjectAsObservable = exports.saveRelatedObject = exports.saveObjectAsObservable = exports.saveObject = exports.getObjectsAsObservable = exports.getObjects = exports.getAccessibleObjectsAsObservable = exports.getAccessibleObjects = exports.getRelatedObjectsAsObservable = exports.getRelatedObjects = exports.getObjectAsObservable = exports.getObject = exports.prepareErrorResponse = exports.prepareSuccessResponse = exports.initialize = exports.useBody = exports.params = exports.userContext = exports.actionSubject = exports.serviceAddress = exports.sandboxKey = exports.getAuthToken = void 0;
12
- exports.debounceFn = exports.getValueFromObject = exports.compareValues = exports.sortObjectArray = exports.sendAIMessageAsObservable = exports.sendAIMessage = exports.submitStandalonePaymentAsObservable = exports.submitStandalonePayment = exports.getAggregateDataAsObservable = exports.getAggregateData = exports.AggregationResponse = exports.massDeleteAsObservable = void 0;
11
+ exports.sendFileContentsAsObservable = exports.sendFileContents = exports.saveResourceAsObservable = exports.saveResource = exports.getOrCreateResourceAsObservable = exports.getOrCreateResource = exports.userPrivileges = exports.hasBusinessPrivilege = exports.removeUserAccessAsObservable = exports.removeUserAccess = exports.updateUserAccessAsObservable = exports.updateUserAccess = exports.inviteUserAsObservable = exports.inviteUser = exports.getUserAccessAsObservable = exports.getUserAccess = exports.listSandboxUsersAsObservable = exports.listSandboxUsers = exports.listBusinessPrivilegesAsObservable = exports.listBusinessPrivileges = exports.listRolesAsObservable = exports.listRoles = exports.deleteRelatedObjectsAsObservable = exports.deleteRelatedObjects = exports.deleteRelatedObjectAsObservable = exports.deleteRelatedObject = exports.deleteObjectAsObservable = exports.deleteObject = exports.saveRelatedObjectAsObservable = exports.saveRelatedObject = exports.saveObjectAsObservable = exports.saveObject = exports.getObjectsAsObservable = exports.getObjects = exports.getAccessibleObjectsAsObservable = exports.getAccessibleObjects = exports.getRelatedObjectsAsObservable = exports.getRelatedObjects = exports.getObjectAsObservable = exports.getObject = exports.prepareErrorResponse = exports.prepareSuccessResponse = exports.initialize = exports.useBody = exports.params = exports.userContext = exports.actionSubject = exports.serviceAddress = exports.sandboxKey = exports.getAuthToken = void 0;
12
+ exports.debounceFn = exports.getValueFromObject = exports.compareValues = exports.sortObjectArray = exports.sendAIMessageAsObservable = exports.sendAIMessage = exports.submitStandalonePaymentAsObservable = exports.submitStandalonePayment = exports.getAggregateDataAsObservable = exports.getAggregateData = exports.AggregationResponse = exports.massDeleteAsObservable = exports.massDelete = exports.massEditAsObservable = exports.massEdit = exports.getListDataAsObservable = exports.getListData = exports.getOrganizationPreferenceAsObservable = exports.getUserPreferenceAsObservable = exports.getOrganizationPreference = exports.getUserPreference = exports.sendMessageAsObservable = exports.sendMessage = exports.MessageMethod = exports.downloadResourceAsObservable = exports.downloadResource = exports.createOrUpdateResourceAsObservable = exports.createOrUpdateResource = void 0;
13
13
  /**
14
14
  * @module @halix/action-sdk
15
15
  * @description Halix Platform action SDK for developing NodeJS Lambda-based actions on the Halix
@@ -58,6 +58,26 @@ Object.defineProperty(exports, "deleteRelatedObjectAsObservable", { enumerable:
58
58
  Object.defineProperty(exports, "deleteRelatedObjects", { enumerable: true, get: function () { return data_crud_1.deleteRelatedObjects; } });
59
59
  Object.defineProperty(exports, "deleteRelatedObjectsAsObservable", { enumerable: true, get: function () { return data_crud_1.deleteRelatedObjectsAsObservable; } });
60
60
  // ================================================================================
61
+ // ACCESS FUNCTIONS
62
+ // ================================================================================
63
+ var access_1 = require("./access");
64
+ Object.defineProperty(exports, "listRoles", { enumerable: true, get: function () { return access_1.listRoles; } });
65
+ Object.defineProperty(exports, "listRolesAsObservable", { enumerable: true, get: function () { return access_1.listRolesAsObservable; } });
66
+ Object.defineProperty(exports, "listBusinessPrivileges", { enumerable: true, get: function () { return access_1.listBusinessPrivileges; } });
67
+ Object.defineProperty(exports, "listBusinessPrivilegesAsObservable", { enumerable: true, get: function () { return access_1.listBusinessPrivilegesAsObservable; } });
68
+ Object.defineProperty(exports, "listSandboxUsers", { enumerable: true, get: function () { return access_1.listSandboxUsers; } });
69
+ Object.defineProperty(exports, "listSandboxUsersAsObservable", { enumerable: true, get: function () { return access_1.listSandboxUsersAsObservable; } });
70
+ Object.defineProperty(exports, "getUserAccess", { enumerable: true, get: function () { return access_1.getUserAccess; } });
71
+ Object.defineProperty(exports, "getUserAccessAsObservable", { enumerable: true, get: function () { return access_1.getUserAccessAsObservable; } });
72
+ Object.defineProperty(exports, "inviteUser", { enumerable: true, get: function () { return access_1.inviteUser; } });
73
+ Object.defineProperty(exports, "inviteUserAsObservable", { enumerable: true, get: function () { return access_1.inviteUserAsObservable; } });
74
+ Object.defineProperty(exports, "updateUserAccess", { enumerable: true, get: function () { return access_1.updateUserAccess; } });
75
+ Object.defineProperty(exports, "updateUserAccessAsObservable", { enumerable: true, get: function () { return access_1.updateUserAccessAsObservable; } });
76
+ Object.defineProperty(exports, "removeUserAccess", { enumerable: true, get: function () { return access_1.removeUserAccess; } });
77
+ Object.defineProperty(exports, "removeUserAccessAsObservable", { enumerable: true, get: function () { return access_1.removeUserAccessAsObservable; } });
78
+ Object.defineProperty(exports, "hasBusinessPrivilege", { enumerable: true, get: function () { return access_1.hasBusinessPrivilege; } });
79
+ Object.defineProperty(exports, "userPrivileges", { enumerable: true, get: function () { return access_1.userPrivileges; } });
80
+ // ================================================================================
61
81
  // CONTENT FUNCTIONS
62
82
  // ================================================================================
63
83
  var content_1 = require("./content");
@@ -39,6 +39,9 @@ function initialize(event) {
39
39
  }
40
40
  if (body) {
41
41
  ({ sandboxKey: exports.sandboxKey, serviceAddress: exports.serviceAddress, actionSubject: exports.actionSubject, userContext: exports.userContext, params: exports.params } = body);
42
+ if (exports.userContext && !exports.userContext.businessPrivileges) {
43
+ exports.userContext.businessPrivileges = [];
44
+ }
42
45
  if (body.authToken) {
43
46
  exports.getAuthToken = () => (0, rxjs_1.of)(body.authToken);
44
47
  }
@@ -0,0 +1,230 @@
1
+ import { Observable } from 'rxjs';
2
+ /**
3
+ * A data scope assigned to a user as part of a sandbox scope entry.
4
+ */
5
+ export interface ScopeKeyItem {
6
+ /** Object key for the scoped record, such as an organization or user proxy object key. */
7
+ scopeKey: string;
8
+ /** Data element ID for the scoped object. */
9
+ dataElementId: string;
10
+ /** Optional display label for the scope entry. */
11
+ label?: string;
12
+ /** Optional custom data scope identifier when assigning a custom scope. */
13
+ customDataScopeId?: string;
14
+ }
15
+ /**
16
+ * Role metadata available in the current sandbox.
17
+ *
18
+ * Use `id` to identify the intended role in code. Use `objKey` when assigning the role to a user through `roleKeys`.
19
+ */
20
+ export interface Role {
21
+ /** Persisted role object key. Required when assigning roles through `roleKeys`. */
22
+ objKey?: string;
23
+ /** Stable semantic role identifier. Do not submit this as a role key. */
24
+ id: string;
25
+ /** Human-readable role name. */
26
+ name: string;
27
+ /** Human-readable role description. */
28
+ description?: string;
29
+ /** Navigation object keys granted to this role. */
30
+ navigationKeys?: string[];
31
+ /** Data element object keys readable by this role. */
32
+ readDataElementKeys?: string[];
33
+ /** Data element object keys writable by this role. */
34
+ writeDataElementKeys?: string[];
35
+ /** Data element object keys deletable by this role. */
36
+ deleteDataElementKeys?: string[];
37
+ /** Platform system roles granted to this role. */
38
+ systemRoles?: string[];
39
+ /** Business privilege IDs granted to this role. */
40
+ businessPrivilegeIds?: string[];
41
+ /** Optional role grouping labels. */
42
+ categories?: string[];
43
+ }
44
+ /**
45
+ * Business privilege metadata available in the current sandbox.
46
+ */
47
+ export interface BusinessPrivilege {
48
+ /** Persisted privilege object key, when included by the API. */
49
+ objKey?: string;
50
+ /** Stable business privilege identifier used for checks and role grants. */
51
+ id: string;
52
+ /** Human-readable privilege name. */
53
+ name: string;
54
+ /** Human-readable privilege description. */
55
+ description?: string;
56
+ /** Optional privilege grouping labels. */
57
+ categories?: string[];
58
+ }
59
+ /**
60
+ * User summary for a user with access to the current sandbox.
61
+ */
62
+ export interface SandboxUser {
63
+ /** Persisted user object key. */
64
+ userKey: string;
65
+ /** Display name, when available. */
66
+ name?: string;
67
+ /** Email address, when available. */
68
+ email?: string;
69
+ /** Raw scope entries returned by the access service. */
70
+ scopeElements?: unknown[];
71
+ }
72
+ /**
73
+ * Full access wrapper for one user, including scope entries and role metadata when returned by the access service.
74
+ */
75
+ export interface UserAccessWrapper {
76
+ /** Raw user payload returned by the access service. */
77
+ user: unknown;
78
+ /** Raw scope entries for the user. */
79
+ scopeElements: unknown[];
80
+ /** Role metadata associated with the user's access, when returned. */
81
+ roles?: Role[];
82
+ }
83
+ /**
84
+ * Request body for inviting a user and assigning initial sandbox access.
85
+ */
86
+ export interface InviteUserRequest {
87
+ /** Email address for the invited user. */
88
+ email: string;
89
+ /** Optional first name for the invited user. */
90
+ firstName?: string;
91
+ /** Optional last name for the invited user. */
92
+ lastName?: string;
93
+ /** User proxy data element ID used to create or link the user proxy record. */
94
+ userProxyElementId: string;
95
+ /** Optional organization proxy object key for organization-scoped invitations. */
96
+ orgProxyKey?: string;
97
+ /** Persisted role object keys (`Role.objKey`). Never pass semantic `Role.id` values here. */
98
+ roleKeys: string[];
99
+ /** Optional data scopes granted to the invited user. */
100
+ scopeKeyItems?: ScopeKeyItem[];
101
+ /** Optional notification template identifier. */
102
+ notificationTemplate?: string;
103
+ }
104
+ /**
105
+ * Result returned from an invitation request.
106
+ */
107
+ export interface InviteResult {
108
+ /** Invitation/user token key, when returned by the access service. */
109
+ userTokenKey?: string;
110
+ /** Persisted user object key, when a user was created or resolved. */
111
+ userKey?: string;
112
+ /** Invited email address. */
113
+ email?: string;
114
+ [key: string]: unknown;
115
+ }
116
+ /**
117
+ * Request body for adding or updating one user scope entry.
118
+ */
119
+ export interface UpdateAccessRequest {
120
+ /** Existing scope element ID. When omitted, a new scope entry is added. */
121
+ scopeElementId?: string;
122
+ /** Persisted role object keys (`Role.objKey`). Never pass semantic `Role.id` values here. */
123
+ roleKeys: string[];
124
+ /** Data scopes to store on the scope entry. */
125
+ scopeKeyItems: ScopeKeyItem[];
126
+ /** Whether this scope entry should apply globally instead of being limited to the provided scopes. */
127
+ globalAccess?: boolean;
128
+ }
129
+ /**
130
+ * Lists roles available in the current sandbox.
131
+ *
132
+ * Use this before assigning roles so semantic role IDs can be resolved to persisted `objKey` values. Assignment
133
+ * requests must send `Role.objKey` values in `roleKeys`.
134
+ *
135
+ * @returns Promise resolving to role metadata for the current sandbox
136
+ */
137
+ export declare function listRoles(): Promise<Role[]>;
138
+ /**
139
+ * Observable version of `listRoles`. See `listRoles` for details.
140
+ */
141
+ export declare function listRolesAsObservable(): Observable<Role[]>;
142
+ /**
143
+ * Lists business privileges available in the current sandbox.
144
+ *
145
+ * Business privilege IDs are used by `hasBusinessPrivilege`, current-user privilege checks, and role
146
+ * `businessPrivilegeIds`.
147
+ *
148
+ * @returns Promise resolving to business privilege metadata
149
+ */
150
+ export declare function listBusinessPrivileges(): Promise<BusinessPrivilege[]>;
151
+ /**
152
+ * Observable version of `listBusinessPrivileges`. See `listBusinessPrivileges` for details.
153
+ */
154
+ export declare function listBusinessPrivilegesAsObservable(): Observable<BusinessPrivilege[]>;
155
+ /**
156
+ * Lists users with access to the current sandbox.
157
+ *
158
+ * Use `getUserAccess` when full scope-entry details are needed for a specific user.
159
+ *
160
+ * @returns Promise resolving to sandbox user summaries
161
+ */
162
+ export declare function listSandboxUsers(): Promise<SandboxUser[]>;
163
+ /**
164
+ * Observable version of `listSandboxUsers`. See `listSandboxUsers` for details.
165
+ */
166
+ export declare function listSandboxUsersAsObservable(): Observable<SandboxUser[]>;
167
+ /**
168
+ * Gets one user's current sandbox access, including scope entries and any role metadata returned by the access service.
169
+ *
170
+ * @param userKey - Persisted user object key
171
+ * @returns Promise resolving to the user's access wrapper
172
+ */
173
+ export declare function getUserAccess(userKey: string): Promise<UserAccessWrapper>;
174
+ /**
175
+ * Observable version of `getUserAccess`. See `getUserAccess` for details.
176
+ */
177
+ export declare function getUserAccessAsObservable(userKey: string): Observable<UserAccessWrapper>;
178
+ /**
179
+ * Invites a user by email and assigns initial sandbox access.
180
+ *
181
+ * `req.roleKeys` must contain persisted role object keys from `Role.objKey`, not semantic role IDs. Resolve desired
182
+ * semantic IDs with `listRoles` before calling this function.
183
+ *
184
+ * @param req - Invitation and initial access request
185
+ * @returns Promise resolving to invitation result metadata
186
+ */
187
+ export declare function inviteUser(req: InviteUserRequest): Promise<InviteResult>;
188
+ /**
189
+ * Observable version of `inviteUser`. See `inviteUser` for details.
190
+ */
191
+ export declare function inviteUserAsObservable(req: InviteUserRequest): Observable<InviteResult>;
192
+ /**
193
+ * Adds or updates one user's sandbox scope entry.
194
+ *
195
+ * If `req.scopeElementId` is present, the existing scope entry is updated. If it is omitted, a new scope entry is
196
+ * added. `req.roleKeys` must contain persisted role object keys from `Role.objKey`, not semantic role IDs.
197
+ *
198
+ * @param userKey - Persisted user object key
199
+ * @param req - Scope-entry access update request
200
+ */
201
+ export declare function updateUserAccess(userKey: string, req: UpdateAccessRequest): Promise<void>;
202
+ /**
203
+ * Observable version of `updateUserAccess`. See `updateUserAccess` for details.
204
+ */
205
+ export declare function updateUserAccessAsObservable(userKey: string, req: UpdateAccessRequest): Observable<void>;
206
+ /**
207
+ * Removes one sandbox scope entry from a user.
208
+ *
209
+ * @param userKey - Persisted user object key
210
+ * @param scopeElementId - Scope element ID to remove from the user
211
+ */
212
+ export declare function removeUserAccess(userKey: string, scopeElementId: string): Promise<void>;
213
+ /**
214
+ * Observable version of `removeUserAccess`. See `removeUserAccess` for details.
215
+ */
216
+ export declare function removeUserAccessAsObservable(userKey: string, scopeElementId: string): Observable<void>;
217
+ /**
218
+ * Checks whether the current user context contains a business privilege ID.
219
+ *
220
+ * @param privilegeId - Stable business privilege ID
221
+ * @returns True when the current user has the privilege
222
+ */
223
+ export declare function hasBusinessPrivilege(privilegeId: string): boolean;
224
+ /**
225
+ * Returns the current user's business privilege IDs from the SDK user context.
226
+ *
227
+ * @returns Business privilege IDs for the current user, or an empty array when none are available
228
+ */
229
+ export declare function userPrivileges(): string[];
230
+ //# sourceMappingURL=access.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access.d.ts","sourceRoot":"","sources":["../../../src/access.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@
5
5
  */
6
6
  export { getAuthToken, sandboxKey, serviceAddress, actionSubject, userContext, params, useBody, initialize, type UserContext, type IncomingEventBody, type BaseActionResponse, type ActionResponse, type NotificationConfig, type ListActionResponse, type FormTemplateActionResponse, type PageTemplateActionResponse, type ObjectSaveActionResponse, type CalculatedFieldActionResponse, type SingleValueActionResponse, type ErrorResponse, prepareSuccessResponse, prepareErrorResponse } from './sdk-general';
7
7
  export { type SaveOptions, getObject, getObjectAsObservable, getRelatedObjects, getRelatedObjectsAsObservable, getAccessibleObjects, getAccessibleObjectsAsObservable, getObjects, getObjectsAsObservable, saveObject, saveObjectAsObservable, saveRelatedObject, saveRelatedObjectAsObservable, deleteObject, deleteObjectAsObservable, deleteRelatedObject, deleteRelatedObjectAsObservable, deleteRelatedObjects, deleteRelatedObjectsAsObservable } from './data-crud';
8
+ export { type ScopeKeyItem, type Role, type BusinessPrivilege, type SandboxUser, type UserAccessWrapper, type InviteUserRequest, type InviteResult, type UpdateAccessRequest, listRoles, listRolesAsObservable, listBusinessPrivileges, listBusinessPrivilegesAsObservable, listSandboxUsers, listSandboxUsersAsObservable, getUserAccess, getUserAccessAsObservable, inviteUser, inviteUserAsObservable, updateUserAccess, updateUserAccessAsObservable, removeUserAccess, removeUserAccessAsObservable, hasBusinessPrivilege, userPrivileges, } from './access';
8
9
  export { type ContentResource, getOrCreateResource, getOrCreateResourceAsObservable, saveResource, saveResourceAsObservable, sendFileContents, sendFileContentsAsObservable, createOrUpdateResource, createOrUpdateResourceAsObservable, downloadResource, downloadResourceAsObservable } from './content';
9
10
  export { MessageMethod, type MessageRequest, sendMessage, sendMessageAsObservable } from './messaging';
10
11
  export { getUserPreference, getOrganizationPreference, getUserPreferenceAsObservable, getOrganizationPreferenceAsObservable } from './preferences';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AASA;;;;GAIG;AAMH,OAAO,EAEH,YAAY,EACZ,UAAU,EACV,cAAc,EACd,aAAa,EACb,WAAW,EACX,MAAM,EACN,OAAO,EAGP,UAAU,EAGV,KAAK,WAAW,EAChB,KAAK,iBAAiB,EAGtB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,EAC/B,KAAK,wBAAwB,EAC7B,KAAK,6BAA6B,EAClC,KAAK,yBAAyB,EAC9B,KAAK,aAAa,EAGlB,sBAAsB,EACtB,oBAAoB,EACvB,MAAM,eAAe,CAAC;AAMvB,OAAO,EAEH,KAAK,WAAW,EAGhB,SAAS,EACT,qBAAqB,EACrB,iBAAiB,EACjB,6BAA6B,EAC7B,oBAAoB,EACpB,gCAAgC,EAChC,UAAU,EACV,sBAAsB,EAGtB,UAAU,EACV,sBAAsB,EACtB,iBAAiB,EACjB,6BAA6B,EAG7B,YAAY,EACZ,wBAAwB,EACxB,mBAAmB,EACnB,+BAA+B,EAC/B,oBAAoB,EACpB,gCAAgC,EACnC,MAAM,aAAa,CAAC;AAMrB,OAAO,EAEH,KAAK,eAAe,EAGpB,mBAAmB,EACnB,+BAA+B,EAC/B,YAAY,EACZ,wBAAwB,EACxB,gBAAgB,EAChB,4BAA4B,EAC5B,sBAAsB,EACtB,kCAAkC,EAClC,gBAAgB,EAChB,4BAA4B,EAC/B,MAAM,WAAW,CAAC;AAMnB,OAAO,EAEH,aAAa,EAGb,KAAK,cAAc,EAGnB,WAAW,EACX,uBAAuB,EAC1B,MAAM,aAAa,CAAC;AAMrB,OAAO,EAEH,iBAAiB,EACjB,yBAAyB,EACzB,6BAA6B,EAC7B,qCAAqC,EACxC,MAAM,eAAe,CAAC;AAMvB,OAAO,EAEH,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EAGvB,WAAW,EACX,uBAAuB,EACvB,QAAQ,EACR,oBAAoB,EACpB,UAAU,EACV,sBAAsB,EACzB,MAAM,SAAS,CAAC;AAMjB,OAAO,EAEH,mBAAmB,EAGnB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,yBAAyB,EAC9B,KAAK,aAAa,EAClB,KAAK,eAAe,EAGpB,gBAAgB,EAChB,4BAA4B,EAC/B,MAAM,kBAAkB,CAAC;AAM1B,OAAO,EAEH,KAAK,2BAA2B,EAChC,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAG5B,uBAAuB,EACvB,mCAAmC,EACtC,MAAM,YAAY,CAAC;AAMpB,OAAO,EAEH,KAAK,gBAAgB,EAGrB,aAAa,EACb,yBAAyB,EAC5B,MAAM,MAAM,CAAC;AAMd,OAAO,EACH,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,UAAU,EACb,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"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"}
@@ -58,6 +58,7 @@ export interface UserContext {
58
58
  orgProxyKey: string;
59
59
  orgKey: string;
60
60
  userProxyKey: string;
61
+ businessPrivileges: string[];
61
62
  navigationContext: {
62
63
  navigationKey: string;
63
64
  navLevel: "organization" | "user";
@@ -1 +1 @@
1
- {"version":3,"file":"sdk-general.d.ts","sourceRoot":"","sources":["../../../src/sdk-general.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sdk-general.d.ts","sourceRoot":"","sources":["../../../src/sdk-general.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,232 @@
1
+ // Halix SDK License v1.0
2
+ // Copyright (c) 2025 halix.io LLC.
3
+ //
4
+ // This source code is licensed for use **only** within applications
5
+ // running on the Halix platform, in accordance with Halix SDK guidelines.
6
+ //
7
+ // Unauthorized use outside the Halix platform is prohibited.
8
+ // Full license terms available in the LICENSE file.
9
+ /**
10
+ * @module @halix/action-sdk/access
11
+ * @description Access, roles, business privileges, invitations, and user scope assignment for the Halix Platform action SDK.
12
+ * This module lets custom code inspect role and privilege metadata, invite users, and update a user's access inside the
13
+ * current sandbox.
14
+ *
15
+ * Key concepts:
16
+ * - `Role.id` is the stable semantic role identifier used by configuration and generated code.
17
+ * - `Role.objKey` is the persisted role object key. APIs that accept `roleKeys` require `Role.objKey`, not `Role.id`.
18
+ * - `BusinessPrivilege.id` is the stable privilege identifier used by privilege checks such as `hasBusinessPrivilege`.
19
+ * - `ScopeKeyItem` entries define the data scope a user receives for an organization, user proxy, or custom data scope.
20
+ *
21
+ * @usage
22
+ * ## When to Use
23
+ * - **Build role assignment UI** -> `listRoles`, then submit matching `role.objKey` values as `roleKeys`
24
+ * - **Show or check business privileges** -> `listBusinessPrivileges`, `hasBusinessPrivilege`, `userPrivileges`
25
+ * - **List users in the current sandbox** -> `listSandboxUsers`
26
+ * - **Inspect one user's access** -> `getUserAccess`
27
+ * - **Invite a user by email** -> `inviteUser`
28
+ * - **Add or update a user's scope entry** -> `updateUserAccess`
29
+ * - **Remove one user scope entry** -> `removeUserAccess`
30
+ *
31
+ * ## Role Key Rule
32
+ * Never submit semantic role IDs as `roleKeys`. Resolve them first:
33
+ * 1. call `listRoles()`
34
+ * 2. find the role where `role.id` matches the semantic ID
35
+ * 3. submit `role.objKey` in `InviteUserRequest.roleKeys` or `UpdateAccessRequest.roleKeys`
36
+ *
37
+ * ## Key Functions
38
+ * | Function | Use For |
39
+ * |----------|---------|
40
+ * | `listRoles` | Read assignable roles for the current sandbox |
41
+ * | `listBusinessPrivileges` | Read business privilege metadata |
42
+ * | `listSandboxUsers` | Read users with access to the current sandbox |
43
+ * | `getUserAccess` | Read one user's current scope entries and roles |
44
+ * | `inviteUser` | Invite a new user and assign initial role keys/scopes |
45
+ * | `updateUserAccess` | Add or update one user scope entry |
46
+ * | `removeUserAccess` | Remove one user scope entry |
47
+ * | `hasBusinessPrivilege` | Check whether the current user has a privilege ID |
48
+ * | `userPrivileges` | Return the current user's privilege IDs |
49
+ *
50
+ * @example
51
+ * // Resolve a semantic role ID to the persisted object key before assignment
52
+ * const roles = await hx.listRoles();
53
+ * const memberRole = roles.find((role) => role.id === 'householdMember');
54
+ * if (!memberRole?.objKey) {
55
+ * throw new Error('Required role not found.');
56
+ * }
57
+ * await hx.updateUserAccess(userKey, {
58
+ * roleKeys: [memberRole.objKey],
59
+ * scopeKeyItems: [{ scopeKey: orgKey, dataElementId: 'family' }],
60
+ * });
61
+ *
62
+ * @example
63
+ * // Check the current user's business privilege
64
+ * if (hx.hasBusinessPrivilege('manageSharedLists')) {
65
+ * // Show controls for sharing list access
66
+ * }
67
+ */
68
+ import axios from 'axios';
69
+ import { from, lastValueFrom } from 'rxjs';
70
+ import { getAuthToken, sandboxKey, serviceAddress, userContext } from './sdk-general';
71
+ async function authHeaders() {
72
+ if (!getAuthToken) {
73
+ throw new Error('SDK not initialized.');
74
+ }
75
+ const authToken = await lastValueFrom(getAuthToken());
76
+ return { Authorization: `Bearer ${authToken}` };
77
+ }
78
+ /**
79
+ * Lists roles available in the current sandbox.
80
+ *
81
+ * Use this before assigning roles so semantic role IDs can be resolved to persisted `objKey` values. Assignment
82
+ * requests must send `Role.objKey` values in `roleKeys`.
83
+ *
84
+ * @returns Promise resolving to role metadata for the current sandbox
85
+ */
86
+ export async function listRoles() {
87
+ const response = await axios.get(`${serviceAddress}/access/sandboxes/${sandboxKey}/allRoles`, {
88
+ headers: await authHeaders(),
89
+ });
90
+ return response.data;
91
+ }
92
+ /**
93
+ * Observable version of `listRoles`. See `listRoles` for details.
94
+ */
95
+ export function listRolesAsObservable() {
96
+ return from(listRoles());
97
+ }
98
+ /**
99
+ * Lists business privileges available in the current sandbox.
100
+ *
101
+ * Business privilege IDs are used by `hasBusinessPrivilege`, current-user privilege checks, and role
102
+ * `businessPrivilegeIds`.
103
+ *
104
+ * @returns Promise resolving to business privilege metadata
105
+ */
106
+ export async function listBusinessPrivileges() {
107
+ const response = await axios.get(`${serviceAddress}/access/sandboxes/${sandboxKey}/businessPrivileges`, {
108
+ headers: await authHeaders(),
109
+ });
110
+ return response.data;
111
+ }
112
+ /**
113
+ * Observable version of `listBusinessPrivileges`. See `listBusinessPrivileges` for details.
114
+ */
115
+ export function listBusinessPrivilegesAsObservable() {
116
+ return from(listBusinessPrivileges());
117
+ }
118
+ /**
119
+ * Lists users with access to the current sandbox.
120
+ *
121
+ * Use `getUserAccess` when full scope-entry details are needed for a specific user.
122
+ *
123
+ * @returns Promise resolving to sandbox user summaries
124
+ */
125
+ export async function listSandboxUsers() {
126
+ const response = await axios.get(`${serviceAddress}/access/sandboxes/${sandboxKey}/users`, {
127
+ headers: await authHeaders(),
128
+ });
129
+ return response.data;
130
+ }
131
+ /**
132
+ * Observable version of `listSandboxUsers`. See `listSandboxUsers` for details.
133
+ */
134
+ export function listSandboxUsersAsObservable() {
135
+ return from(listSandboxUsers());
136
+ }
137
+ /**
138
+ * Gets one user's current sandbox access, including scope entries and any role metadata returned by the access service.
139
+ *
140
+ * @param userKey - Persisted user object key
141
+ * @returns Promise resolving to the user's access wrapper
142
+ */
143
+ export async function getUserAccess(userKey) {
144
+ const response = await axios.get(`${serviceAddress}/access/sandboxes/${sandboxKey}/user/${userKey}/access`, {
145
+ headers: await authHeaders(),
146
+ });
147
+ return response.data;
148
+ }
149
+ /**
150
+ * Observable version of `getUserAccess`. See `getUserAccess` for details.
151
+ */
152
+ export function getUserAccessAsObservable(userKey) {
153
+ return from(getUserAccess(userKey));
154
+ }
155
+ /**
156
+ * Invites a user by email and assigns initial sandbox access.
157
+ *
158
+ * `req.roleKeys` must contain persisted role object keys from `Role.objKey`, not semantic role IDs. Resolve desired
159
+ * semantic IDs with `listRoles` before calling this function.
160
+ *
161
+ * @param req - Invitation and initial access request
162
+ * @returns Promise resolving to invitation result metadata
163
+ */
164
+ export async function inviteUser(req) {
165
+ const response = await axios.post(`${serviceAddress}/access/sandboxes/${sandboxKey}/inviteByEmail`, req, {
166
+ headers: await authHeaders(),
167
+ });
168
+ return response.data;
169
+ }
170
+ /**
171
+ * Observable version of `inviteUser`. See `inviteUser` for details.
172
+ */
173
+ export function inviteUserAsObservable(req) {
174
+ return from(inviteUser(req));
175
+ }
176
+ /**
177
+ * Adds or updates one user's sandbox scope entry.
178
+ *
179
+ * If `req.scopeElementId` is present, the existing scope entry is updated. If it is omitted, a new scope entry is
180
+ * added. `req.roleKeys` must contain persisted role object keys from `Role.objKey`, not semantic role IDs.
181
+ *
182
+ * @param userKey - Persisted user object key
183
+ * @param req - Scope-entry access update request
184
+ */
185
+ export async function updateUserAccess(userKey, req) {
186
+ const path = req.scopeElementId ? 'updateScopeElement' : 'addScopeElement';
187
+ await axios.post(`${serviceAddress}/access/sandboxes/${sandboxKey}/user/${userKey}/${path}`, req, {
188
+ headers: await authHeaders(),
189
+ });
190
+ }
191
+ /**
192
+ * Observable version of `updateUserAccess`. See `updateUserAccess` for details.
193
+ */
194
+ export function updateUserAccessAsObservable(userKey, req) {
195
+ return from(updateUserAccess(userKey, req));
196
+ }
197
+ /**
198
+ * Removes one sandbox scope entry from a user.
199
+ *
200
+ * @param userKey - Persisted user object key
201
+ * @param scopeElementId - Scope element ID to remove from the user
202
+ */
203
+ export async function removeUserAccess(userKey, scopeElementId) {
204
+ await axios.delete(`${serviceAddress}/access/sandboxes/${sandboxKey}/user/${userKey}/removeScopeElements`, {
205
+ headers: await authHeaders(),
206
+ data: { scopeElementIds: [scopeElementId] },
207
+ });
208
+ }
209
+ /**
210
+ * Observable version of `removeUserAccess`. See `removeUserAccess` for details.
211
+ */
212
+ export function removeUserAccessAsObservable(userKey, scopeElementId) {
213
+ return from(removeUserAccess(userKey, scopeElementId));
214
+ }
215
+ /**
216
+ * Checks whether the current user context contains a business privilege ID.
217
+ *
218
+ * @param privilegeId - Stable business privilege ID
219
+ * @returns True when the current user has the privilege
220
+ */
221
+ export function hasBusinessPrivilege(privilegeId) {
222
+ return userContext?.businessPrivileges?.includes(privilegeId) ?? false;
223
+ }
224
+ /**
225
+ * Returns the current user's business privilege IDs from the SDK user context.
226
+ *
227
+ * @returns Business privilege IDs for the current user, or an empty array when none are available
228
+ */
229
+ export function userPrivileges() {
230
+ return userContext?.businessPrivileges ?? [];
231
+ }
232
+ //# sourceMappingURL=access.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access.js","sourceRoot":"","sources":["../../src/access.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,mCAAmC;AACnC,EAAE;AACF,oEAAoE;AACpE,0EAA0E;AAC1E,EAAE;AACF,6DAA6D;AAC7D,oDAAoD;AAEpD;;;;GAIG;AAEH,mFAAmF;AACnF,sDAAsD;AACtD,mFAAmF;AAEnF,OAAO;AACH,UAAU;AACV,YAAY,EACZ,UAAU,EACV,cAAc,EACd,aAAa,EACb,WAAW,EACX,MAAM,EACN,OAAO;AAEP,iBAAiB;AACjB,UAAU;AAkBV,mBAAmB;AACnB,sBAAsB,EACtB,oBAAoB,EACvB,MAAM,eAAe,CAAC;AAEvB,mFAAmF;AACnF,sBAAsB;AACtB,mFAAmF;AAEnF,OAAO;AAIH,iBAAiB;AACjB,SAAS,EACT,qBAAqB,EACrB,iBAAiB,EACjB,6BAA6B,EAC7B,oBAAoB,EACpB,gCAAgC,EAChC,UAAU,EACV,sBAAsB;AAEtB,YAAY;AACZ,UAAU,EACV,sBAAsB,EACtB,iBAAiB,EACjB,6BAA6B;AAE7B,cAAc;AACd,YAAY,EACZ,wBAAwB,EACxB,mBAAmB,EACnB,+BAA+B,EAC/B,oBAAoB,EACpB,gCAAgC,EACnC,MAAM,aAAa,CAAC;AAErB,mFAAmF;AACnF,oBAAoB;AACpB,mFAAmF;AAEnF,OAAO;AAIH,oBAAoB;AACpB,mBAAmB,EACnB,+BAA+B,EAC/B,YAAY,EACZ,wBAAwB,EACxB,gBAAgB,EAChB,4BAA4B,EAC5B,sBAAsB,EACtB,kCAAkC,EAClC,gBAAgB,EAChB,4BAA4B,EAC/B,MAAM,WAAW,CAAC;AAEnB,mFAAmF;AACnF,sBAAsB;AACtB,mFAAmF;AAEnF,OAAO;AACH,kBAAkB;AAClB,aAAa;AAKb,sBAAsB;AACtB,WAAW,EACX,uBAAuB,EAC1B,MAAM,aAAa,CAAC;AAErB,mFAAmF;AACnF,uBAAuB;AACvB,mFAAmF;AAEnF,OAAO;AACH,uBAAuB;AACvB,iBAAiB,EACjB,yBAAyB,EACzB,6BAA6B,EAC7B,qCAAqC,EACxC,MAAM,eAAe,CAAC;AAEvB,mFAAmF;AACnF,sBAAsB;AACtB,mFAAmF;AAEnF,OAAO;AAcH,YAAY;AACZ,WAAW,EACX,uBAAuB,EACvB,QAAQ,EACR,oBAAoB,EACpB,UAAU,EACV,sBAAsB,EACzB,MAAM,SAAS,CAAC;AAEjB,mFAAmF;AACnF,2BAA2B;AAC3B,mFAAmF;AAEnF,OAAO;AACH,UAAU;AACV,mBAAmB;AAYnB,YAAY;AACZ,gBAAgB,EAChB,4BAA4B,EAC/B,MAAM,kBAAkB,CAAC;AAE1B,mFAAmF;AACnF,oBAAoB;AACpB,mFAAmF;AAEnF,OAAO;AAMH,YAAY;AACZ,uBAAuB,EACvB,mCAAmC,EACtC,MAAM,YAAY,CAAC;AAEpB,mFAAmF;AACnF,eAAe;AACf,mFAAmF;AAEnF,OAAO;AAIH,eAAe;AACf,aAAa,EACb,yBAAyB,EAC5B,MAAM,MAAM,CAAC;AAEd,mFAAmF;AACnF,oBAAoB;AACpB,mFAAmF;AAEnF,OAAO,EACH,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,UAAU,EACb,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,mCAAmC;AACnC,EAAE;AACF,oEAAoE;AACpE,0EAA0E;AAC1E,EAAE;AACF,6DAA6D;AAC7D,oDAAoD;AAEpD;;;;GAIG;AAEH,mFAAmF;AACnF,sDAAsD;AACtD,mFAAmF;AAEnF,OAAO;AACH,UAAU;AACV,YAAY,EACZ,UAAU,EACV,cAAc,EACd,aAAa,EACb,WAAW,EACX,MAAM,EACN,OAAO;AAEP,iBAAiB;AACjB,UAAU;AAkBV,mBAAmB;AACnB,sBAAsB,EACtB,oBAAoB,EACvB,MAAM,eAAe,CAAC;AAEvB,mFAAmF;AACnF,sBAAsB;AACtB,mFAAmF;AAEnF,OAAO;AAIH,iBAAiB;AACjB,SAAS,EACT,qBAAqB,EACrB,iBAAiB,EACjB,6BAA6B,EAC7B,oBAAoB,EACpB,gCAAgC,EAChC,UAAU,EACV,sBAAsB;AAEtB,YAAY;AACZ,UAAU,EACV,sBAAsB,EACtB,iBAAiB,EACjB,6BAA6B;AAE7B,cAAc;AACd,YAAY,EACZ,wBAAwB,EACxB,mBAAmB,EACnB,+BAA+B,EAC/B,oBAAoB,EACpB,gCAAgC,EACnC,MAAM,aAAa,CAAC;AAErB,mFAAmF;AACnF,mBAAmB;AACnB,mFAAmF;AAEnF,OAAO,EASH,SAAS,EACT,qBAAqB,EACrB,sBAAsB,EACtB,kCAAkC,EAClC,gBAAgB,EAChB,4BAA4B,EAC5B,aAAa,EACb,yBAAyB,EACzB,UAAU,EACV,sBAAsB,EACtB,gBAAgB,EAChB,4BAA4B,EAC5B,gBAAgB,EAChB,4BAA4B,EAC5B,oBAAoB,EACpB,cAAc,GACjB,MAAM,UAAU,CAAC;AAElB,mFAAmF;AACnF,oBAAoB;AACpB,mFAAmF;AAEnF,OAAO;AAIH,oBAAoB;AACpB,mBAAmB,EACnB,+BAA+B,EAC/B,YAAY,EACZ,wBAAwB,EACxB,gBAAgB,EAChB,4BAA4B,EAC5B,sBAAsB,EACtB,kCAAkC,EAClC,gBAAgB,EAChB,4BAA4B,EAC/B,MAAM,WAAW,CAAC;AAEnB,mFAAmF;AACnF,sBAAsB;AACtB,mFAAmF;AAEnF,OAAO;AACH,kBAAkB;AAClB,aAAa;AAKb,sBAAsB;AACtB,WAAW,EACX,uBAAuB,EAC1B,MAAM,aAAa,CAAC;AAErB,mFAAmF;AACnF,uBAAuB;AACvB,mFAAmF;AAEnF,OAAO;AACH,uBAAuB;AACvB,iBAAiB,EACjB,yBAAyB,EACzB,6BAA6B,EAC7B,qCAAqC,EACxC,MAAM,eAAe,CAAC;AAEvB,mFAAmF;AACnF,sBAAsB;AACtB,mFAAmF;AAEnF,OAAO;AAcH,YAAY;AACZ,WAAW,EACX,uBAAuB,EACvB,QAAQ,EACR,oBAAoB,EACpB,UAAU,EACV,sBAAsB,EACzB,MAAM,SAAS,CAAC;AAEjB,mFAAmF;AACnF,2BAA2B;AAC3B,mFAAmF;AAEnF,OAAO;AACH,UAAU;AACV,mBAAmB;AAYnB,YAAY;AACZ,gBAAgB,EAChB,4BAA4B,EAC/B,MAAM,kBAAkB,CAAC;AAE1B,mFAAmF;AACnF,oBAAoB;AACpB,mFAAmF;AAEnF,OAAO;AAMH,YAAY;AACZ,uBAAuB,EACvB,mCAAmC,EACtC,MAAM,YAAY,CAAC;AAEpB,mFAAmF;AACnF,eAAe;AACf,mFAAmF;AAEnF,OAAO;AAIH,eAAe;AACf,aAAa,EACb,yBAAyB,EAC5B,MAAM,MAAM,CAAC;AAEd,mFAAmF;AACnF,oBAAoB;AACpB,mFAAmF;AAEnF,OAAO,EACH,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,UAAU,EACb,MAAM,aAAa,CAAC"}
package/lib/esm/index.mjs CHANGED
@@ -32,6 +32,10 @@ saveObject, saveObjectAsObservable, saveRelatedObject, saveRelatedObjectAsObserv
32
32
  // Data Delete
33
33
  deleteObject, deleteObjectAsObservable, deleteRelatedObject, deleteRelatedObjectAsObservable, deleteRelatedObjects, deleteRelatedObjectsAsObservable } from './data-crud';
34
34
  // ================================================================================
35
+ // ACCESS FUNCTIONS
36
+ // ================================================================================
37
+ export { listRoles, listRolesAsObservable, listBusinessPrivileges, listBusinessPrivilegesAsObservable, listSandboxUsers, listSandboxUsersAsObservable, getUserAccess, getUserAccessAsObservable, inviteUser, inviteUserAsObservable, updateUserAccess, updateUserAccessAsObservable, removeUserAccess, removeUserAccessAsObservable, hasBusinessPrivilege, userPrivileges, } from './access';
38
+ // ================================================================================
35
39
  // CONTENT FUNCTIONS
36
40
  // ================================================================================
37
41
  export {
@@ -64,6 +64,9 @@ export function initialize(event) {
64
64
  }
65
65
  if (body) {
66
66
  ({ sandboxKey, serviceAddress, actionSubject, userContext, params } = body);
67
+ if (userContext && !userContext.businessPrivileges) {
68
+ userContext.businessPrivileges = [];
69
+ }
67
70
  if (body.authToken) {
68
71
  getAuthToken = () => of(body.authToken);
69
72
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sdk-general.js","sourceRoot":"","sources":["../../src/sdk-general.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,mCAAmC;AACnC,EAAE;AACF,oEAAoE;AACpE,0EAA0E;AAC1E,EAAE;AACF,6DAA6D;AAC7D,oDAAoD;AAEpD;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAc,EAAE,EAAE,MAAM,MAAM,CAAC;AAEtC,mFAAmF;AACnF,sCAAsC;AACtC,mFAAmF;AAEnF;;GAEG;AACH,MAAM,CAAC,IAAI,YAAsC,CAAC;AAElD;;GAEG;AACH,MAAM,CAAC,IAAI,UAAkB,CAAC;AAE9B;;GAEG;AACH,MAAM,CAAC,IAAI,cAAsB,CAAC;AAElC;;GAEG;AACH,MAAM,CAAC,IAAI,aAAkB,CAAC;AAE9B;;GAEG;AACH,MAAM,CAAC,IAAI,WAAwB,CAAC;AAEpC;;GAEG;AACH,MAAM,CAAC,IAAI,MAAc,CAAC;AAE1B;;GAEG;AACH,MAAM,CAAC,IAAI,OAAgB,CAAC;AAE5B;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,KAAmC;IAE1D,IAAI,IAAI,GAAQ,KAAK,CAAC;IACtB,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACb,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QAClB,OAAO,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,IAAI,IAAI,EAAE,CAAC;QACP,CAAC,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;QAE5E,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,YAAY,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5C,CAAC;aAAM,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACjC,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC;QAC3C,CAAC;IACL,CAAC;AACL,CAAC;AAwKD,mFAAmF;AACnF,4BAA4B;AAC5B,mFAAmF;AAEnF;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,eAA+B;IAClE,IAAI,OAAO,EAAE,CAAC;QACV,OAAO;YACH,UAAU,EAAE,GAAG;YACf,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC;SACxC,CAAC;IACN,CAAC;IAED,OAAO,eAAe,CAAC;AAC3B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,YAAoB;IACrD,IAAI,OAAO,EAAE,CAAC;QACV,OAAO;YACH,UAAU,EAAE,GAAG;YACf,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;SACzC,CAAC;IACN,CAAC;IAED,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;AACnD,CAAC"}
1
+ {"version":3,"file":"sdk-general.js","sourceRoot":"","sources":["../../src/sdk-general.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,mCAAmC;AACnC,EAAE;AACF,oEAAoE;AACpE,0EAA0E;AAC1E,EAAE;AACF,6DAA6D;AAC7D,oDAAoD;AAEpD;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAc,EAAE,EAAE,MAAM,MAAM,CAAC;AAEtC,mFAAmF;AACnF,sCAAsC;AACtC,mFAAmF;AAEnF;;GAEG;AACH,MAAM,CAAC,IAAI,YAAsC,CAAC;AAElD;;GAEG;AACH,MAAM,CAAC,IAAI,UAAkB,CAAC;AAE9B;;GAEG;AACH,MAAM,CAAC,IAAI,cAAsB,CAAC;AAElC;;GAEG;AACH,MAAM,CAAC,IAAI,aAAkB,CAAC;AAE9B;;GAEG;AACH,MAAM,CAAC,IAAI,WAAwB,CAAC;AAEpC;;GAEG;AACH,MAAM,CAAC,IAAI,MAAc,CAAC;AAE1B;;GAEG;AACH,MAAM,CAAC,IAAI,OAAgB,CAAC;AAE5B;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,KAAmC;IAE1D,IAAI,IAAI,GAAQ,KAAK,CAAC;IACtB,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACb,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QAClB,OAAO,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,IAAI,IAAI,EAAE,CAAC;QACP,CAAC,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;QAC5E,IAAI,WAAW,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE,CAAC;YACjD,WAAW,CAAC,kBAAkB,GAAG,EAAE,CAAC;QACxC,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,YAAY,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5C,CAAC;aAAM,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACjC,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC;QAC3C,CAAC;IACL,CAAC;AACL,CAAC;AAyKD,mFAAmF;AACnF,4BAA4B;AAC5B,mFAAmF;AAEnF;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,eAA+B;IAClE,IAAI,OAAO,EAAE,CAAC;QACV,OAAO;YACH,UAAU,EAAE,GAAG;YACf,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC;SACxC,CAAC;IACN,CAAC;IAED,OAAO,eAAe,CAAC;AAC3B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,YAAoB;IACrD,IAAI,OAAO,EAAE,CAAC;QACV,OAAO;YACH,UAAU,EAAE,GAAG;YACf,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;SACzC,CAAC;IACN,CAAC;IAED,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;AACnD,CAAC"}
@@ -0,0 +1,229 @@
1
+ import { Observable } from 'rxjs';
2
+ /**
3
+ * A data scope assigned to a user as part of a sandbox scope entry.
4
+ */
5
+ export interface ScopeKeyItem {
6
+ /** Object key for the scoped record, such as an organization or user proxy object key. */
7
+ scopeKey: string;
8
+ /** Data element ID for the scoped object. */
9
+ dataElementId: string;
10
+ /** Optional display label for the scope entry. */
11
+ label?: string;
12
+ /** Optional custom data scope identifier when assigning a custom scope. */
13
+ customDataScopeId?: string;
14
+ }
15
+ /**
16
+ * Role metadata available in the current sandbox.
17
+ *
18
+ * Use `id` to identify the intended role in code. Use `objKey` when assigning the role to a user through `roleKeys`.
19
+ */
20
+ export interface Role {
21
+ /** Persisted role object key. Required when assigning roles through `roleKeys`. */
22
+ objKey?: string;
23
+ /** Stable semantic role identifier. Do not submit this as a role key. */
24
+ id: string;
25
+ /** Human-readable role name. */
26
+ name: string;
27
+ /** Human-readable role description. */
28
+ description?: string;
29
+ /** Navigation object keys granted to this role. */
30
+ navigationKeys?: string[];
31
+ /** Data element object keys readable by this role. */
32
+ readDataElementKeys?: string[];
33
+ /** Data element object keys writable by this role. */
34
+ writeDataElementKeys?: string[];
35
+ /** Data element object keys deletable by this role. */
36
+ deleteDataElementKeys?: string[];
37
+ /** Platform system roles granted to this role. */
38
+ systemRoles?: string[];
39
+ /** Business privilege IDs granted to this role. */
40
+ businessPrivilegeIds?: string[];
41
+ /** Optional role grouping labels. */
42
+ categories?: string[];
43
+ }
44
+ /**
45
+ * Business privilege metadata available in the current sandbox.
46
+ */
47
+ export interface BusinessPrivilege {
48
+ /** Persisted privilege object key, when included by the API. */
49
+ objKey?: string;
50
+ /** Stable business privilege identifier used for checks and role grants. */
51
+ id: string;
52
+ /** Human-readable privilege name. */
53
+ name: string;
54
+ /** Human-readable privilege description. */
55
+ description?: string;
56
+ /** Optional privilege grouping labels. */
57
+ categories?: string[];
58
+ }
59
+ /**
60
+ * User summary for a user with access to the current sandbox.
61
+ */
62
+ export interface SandboxUser {
63
+ /** Persisted user object key. */
64
+ userKey: string;
65
+ /** Display name, when available. */
66
+ name?: string;
67
+ /** Email address, when available. */
68
+ email?: string;
69
+ /** Raw scope entries returned by the access service. */
70
+ scopeElements?: unknown[];
71
+ }
72
+ /**
73
+ * Full access wrapper for one user, including scope entries and role metadata when returned by the access service.
74
+ */
75
+ export interface UserAccessWrapper {
76
+ /** Raw user payload returned by the access service. */
77
+ user: unknown;
78
+ /** Raw scope entries for the user. */
79
+ scopeElements: unknown[];
80
+ /** Role metadata associated with the user's access, when returned. */
81
+ roles?: Role[];
82
+ }
83
+ /**
84
+ * Request body for inviting a user and assigning initial sandbox access.
85
+ */
86
+ export interface InviteUserRequest {
87
+ /** Email address for the invited user. */
88
+ email: string;
89
+ /** Optional first name for the invited user. */
90
+ firstName?: string;
91
+ /** Optional last name for the invited user. */
92
+ lastName?: string;
93
+ /** User proxy data element ID used to create or link the user proxy record. */
94
+ userProxyElementId: string;
95
+ /** Optional organization proxy object key for organization-scoped invitations. */
96
+ orgProxyKey?: string;
97
+ /** Persisted role object keys (`Role.objKey`). Never pass semantic `Role.id` values here. */
98
+ roleKeys: string[];
99
+ /** Optional data scopes granted to the invited user. */
100
+ scopeKeyItems?: ScopeKeyItem[];
101
+ /** Optional notification template identifier. */
102
+ notificationTemplate?: string;
103
+ }
104
+ /**
105
+ * Result returned from an invitation request.
106
+ */
107
+ export interface InviteResult {
108
+ /** Invitation/user token key, when returned by the access service. */
109
+ userTokenKey?: string;
110
+ /** Persisted user object key, when a user was created or resolved. */
111
+ userKey?: string;
112
+ /** Invited email address. */
113
+ email?: string;
114
+ [key: string]: unknown;
115
+ }
116
+ /**
117
+ * Request body for adding or updating one user scope entry.
118
+ */
119
+ export interface UpdateAccessRequest {
120
+ /** Existing scope element ID. When omitted, a new scope entry is added. */
121
+ scopeElementId?: string;
122
+ /** Persisted role object keys (`Role.objKey`). Never pass semantic `Role.id` values here. */
123
+ roleKeys: string[];
124
+ /** Data scopes to store on the scope entry. */
125
+ scopeKeyItems: ScopeKeyItem[];
126
+ /** Whether this scope entry should apply globally instead of being limited to the provided scopes. */
127
+ globalAccess?: boolean;
128
+ }
129
+ /**
130
+ * Lists roles available in the current sandbox.
131
+ *
132
+ * Use this before assigning roles so semantic role IDs can be resolved to persisted `objKey` values. Assignment
133
+ * requests must send `Role.objKey` values in `roleKeys`.
134
+ *
135
+ * @returns Promise resolving to role metadata for the current sandbox
136
+ */
137
+ export declare function listRoles(): Promise<Role[]>;
138
+ /**
139
+ * Observable version of `listRoles`. See `listRoles` for details.
140
+ */
141
+ export declare function listRolesAsObservable(): Observable<Role[]>;
142
+ /**
143
+ * Lists business privileges available in the current sandbox.
144
+ *
145
+ * Business privilege IDs are used by `hasBusinessPrivilege`, current-user privilege checks, and role
146
+ * `businessPrivilegeIds`.
147
+ *
148
+ * @returns Promise resolving to business privilege metadata
149
+ */
150
+ export declare function listBusinessPrivileges(): Promise<BusinessPrivilege[]>;
151
+ /**
152
+ * Observable version of `listBusinessPrivileges`. See `listBusinessPrivileges` for details.
153
+ */
154
+ export declare function listBusinessPrivilegesAsObservable(): Observable<BusinessPrivilege[]>;
155
+ /**
156
+ * Lists users with access to the current sandbox.
157
+ *
158
+ * Use `getUserAccess` when full scope-entry details are needed for a specific user.
159
+ *
160
+ * @returns Promise resolving to sandbox user summaries
161
+ */
162
+ export declare function listSandboxUsers(): Promise<SandboxUser[]>;
163
+ /**
164
+ * Observable version of `listSandboxUsers`. See `listSandboxUsers` for details.
165
+ */
166
+ export declare function listSandboxUsersAsObservable(): Observable<SandboxUser[]>;
167
+ /**
168
+ * Gets one user's current sandbox access, including scope entries and any role metadata returned by the access service.
169
+ *
170
+ * @param userKey - Persisted user object key
171
+ * @returns Promise resolving to the user's access wrapper
172
+ */
173
+ export declare function getUserAccess(userKey: string): Promise<UserAccessWrapper>;
174
+ /**
175
+ * Observable version of `getUserAccess`. See `getUserAccess` for details.
176
+ */
177
+ export declare function getUserAccessAsObservable(userKey: string): Observable<UserAccessWrapper>;
178
+ /**
179
+ * Invites a user by email and assigns initial sandbox access.
180
+ *
181
+ * `req.roleKeys` must contain persisted role object keys from `Role.objKey`, not semantic role IDs. Resolve desired
182
+ * semantic IDs with `listRoles` before calling this function.
183
+ *
184
+ * @param req - Invitation and initial access request
185
+ * @returns Promise resolving to invitation result metadata
186
+ */
187
+ export declare function inviteUser(req: InviteUserRequest): Promise<InviteResult>;
188
+ /**
189
+ * Observable version of `inviteUser`. See `inviteUser` for details.
190
+ */
191
+ export declare function inviteUserAsObservable(req: InviteUserRequest): Observable<InviteResult>;
192
+ /**
193
+ * Adds or updates one user's sandbox scope entry.
194
+ *
195
+ * If `req.scopeElementId` is present, the existing scope entry is updated. If it is omitted, a new scope entry is
196
+ * added. `req.roleKeys` must contain persisted role object keys from `Role.objKey`, not semantic role IDs.
197
+ *
198
+ * @param userKey - Persisted user object key
199
+ * @param req - Scope-entry access update request
200
+ */
201
+ export declare function updateUserAccess(userKey: string, req: UpdateAccessRequest): Promise<void>;
202
+ /**
203
+ * Observable version of `updateUserAccess`. See `updateUserAccess` for details.
204
+ */
205
+ export declare function updateUserAccessAsObservable(userKey: string, req: UpdateAccessRequest): Observable<void>;
206
+ /**
207
+ * Removes one sandbox scope entry from a user.
208
+ *
209
+ * @param userKey - Persisted user object key
210
+ * @param scopeElementId - Scope element ID to remove from the user
211
+ */
212
+ export declare function removeUserAccess(userKey: string, scopeElementId: string): Promise<void>;
213
+ /**
214
+ * Observable version of `removeUserAccess`. See `removeUserAccess` for details.
215
+ */
216
+ export declare function removeUserAccessAsObservable(userKey: string, scopeElementId: string): Observable<void>;
217
+ /**
218
+ * Checks whether the current user context contains a business privilege ID.
219
+ *
220
+ * @param privilegeId - Stable business privilege ID
221
+ * @returns True when the current user has the privilege
222
+ */
223
+ export declare function hasBusinessPrivilege(privilegeId: string): boolean;
224
+ /**
225
+ * Returns the current user's business privilege IDs from the SDK user context.
226
+ *
227
+ * @returns Business privilege IDs for the current user, or an empty array when none are available
228
+ */
229
+ export declare function userPrivileges(): string[];
@@ -5,6 +5,7 @@
5
5
  */
6
6
  export { getAuthToken, sandboxKey, serviceAddress, actionSubject, userContext, params, useBody, initialize, type UserContext, type IncomingEventBody, type BaseActionResponse, type ActionResponse, type NotificationConfig, type ListActionResponse, type FormTemplateActionResponse, type PageTemplateActionResponse, type ObjectSaveActionResponse, type CalculatedFieldActionResponse, type SingleValueActionResponse, type ErrorResponse, prepareSuccessResponse, prepareErrorResponse } from './sdk-general';
7
7
  export { type SaveOptions, getObject, getObjectAsObservable, getRelatedObjects, getRelatedObjectsAsObservable, getAccessibleObjects, getAccessibleObjectsAsObservable, getObjects, getObjectsAsObservable, saveObject, saveObjectAsObservable, saveRelatedObject, saveRelatedObjectAsObservable, deleteObject, deleteObjectAsObservable, deleteRelatedObject, deleteRelatedObjectAsObservable, deleteRelatedObjects, deleteRelatedObjectsAsObservable } from './data-crud';
8
+ export { type ScopeKeyItem, type Role, type BusinessPrivilege, type SandboxUser, type UserAccessWrapper, type InviteUserRequest, type InviteResult, type UpdateAccessRequest, listRoles, listRolesAsObservable, listBusinessPrivileges, listBusinessPrivilegesAsObservable, listSandboxUsers, listSandboxUsersAsObservable, getUserAccess, getUserAccessAsObservable, inviteUser, inviteUserAsObservable, updateUserAccess, updateUserAccessAsObservable, removeUserAccess, removeUserAccessAsObservable, hasBusinessPrivilege, userPrivileges, } from './access';
8
9
  export { type ContentResource, getOrCreateResource, getOrCreateResourceAsObservable, saveResource, saveResourceAsObservable, sendFileContents, sendFileContentsAsObservable, createOrUpdateResource, createOrUpdateResourceAsObservable, downloadResource, downloadResourceAsObservable } from './content';
9
10
  export { MessageMethod, type MessageRequest, sendMessage, sendMessageAsObservable } from './messaging';
10
11
  export { getUserPreference, getOrganizationPreference, getUserPreferenceAsObservable, getOrganizationPreferenceAsObservable } from './preferences';
@@ -58,6 +58,7 @@ export interface UserContext {
58
58
  orgProxyKey: string;
59
59
  orgKey: string;
60
60
  userProxyKey: string;
61
+ businessPrivileges: string[];
61
62
  navigationContext: {
62
63
  navigationKey: string;
63
64
  navLevel: "organization" | "user";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@halix/action-sdk",
3
- "version": "1.0.44",
3
+ "version": "1.0.45",
4
4
  "description": "Halix Platform action SDK",
5
5
  "types": "./lib/cjs/types/index.d.ts",
6
6
  "main": "./lib/cjs/index.js",