@halix/action-sdk 1.0.43 → 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.
- package/lib/cjs/access.js +279 -0
- package/lib/cjs/content.js +62 -0
- package/lib/cjs/index.js +24 -2
- package/lib/cjs/sdk-general.js +3 -0
- package/lib/cjs/types/access.d.ts +230 -0
- package/lib/cjs/types/access.d.ts.map +1 -0
- package/lib/cjs/types/content.d.ts +42 -0
- package/lib/cjs/types/content.d.ts.map +1 -1
- package/lib/cjs/types/index.d.ts +2 -1
- package/lib/cjs/types/index.d.ts.map +1 -1
- package/lib/cjs/types/sdk-general.d.ts +1 -0
- package/lib/cjs/types/sdk-general.d.ts.map +1 -1
- package/lib/esm/access.js +232 -0
- package/lib/esm/access.js.map +1 -0
- package/lib/esm/content.js +57 -0
- package/lib/esm/content.js.map +1 -1
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/index.mjs +5 -1
- package/lib/esm/sdk-general.js +3 -0
- package/lib/esm/sdk-general.js.map +1 -1
- package/lib/esm/types/access.d.ts +229 -0
- package/lib/esm/types/content.d.ts +42 -0
- package/lib/esm/types/index.d.ts +2 -1
- package/lib/esm/types/sdk-general.d.ts +1 -0
- package/package.json +1 -1
|
@@ -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/content.js
CHANGED
|
@@ -28,6 +28,8 @@ exports.sendFileContents = sendFileContents;
|
|
|
28
28
|
exports.sendFileContentsAsObservable = sendFileContentsAsObservable;
|
|
29
29
|
exports.createOrUpdateResource = createOrUpdateResource;
|
|
30
30
|
exports.createOrUpdateResourceAsObservable = createOrUpdateResourceAsObservable;
|
|
31
|
+
exports.downloadResource = downloadResource;
|
|
32
|
+
exports.downloadResourceAsObservable = downloadResourceAsObservable;
|
|
31
33
|
/**
|
|
32
34
|
* @module @halix/action-sdk/content
|
|
33
35
|
* @description Content resource management functions for the Halix Platform action SDK. This module
|
|
@@ -36,6 +38,7 @@ exports.createOrUpdateResourceAsObservable = createOrUpdateResourceAsObservable;
|
|
|
36
38
|
* Key features:
|
|
37
39
|
* - Retrieve content resources (images, documents, etc.)
|
|
38
40
|
* - Upload/save content resources (images, documents, etc.)
|
|
41
|
+
* - Download file resources in the browser (e.g. as a button click handler)
|
|
39
42
|
*/
|
|
40
43
|
const axios_1 = __importDefault(require("axios"));
|
|
41
44
|
const rxjs_1 = require("rxjs");
|
|
@@ -197,3 +200,62 @@ function createOrUpdateResource(resourceKey, fileToUpload, publicFlag, resourceT
|
|
|
197
200
|
function createOrUpdateResourceAsObservable(resourceKey, fileToUpload, publicFlag, resourceType, tags) {
|
|
198
201
|
return (0, rxjs_1.from)(createOrUpdateResource(resourceKey, fileToUpload, publicFlag, resourceType, tags));
|
|
199
202
|
}
|
|
203
|
+
/**
|
|
204
|
+
* Fetches a file resource from the Halix content service and returns it as a `Blob` along with
|
|
205
|
+
* the filename derived from the `Content-Disposition` response header (falling back to
|
|
206
|
+
* `resourceKey` when the header is absent).
|
|
207
|
+
*
|
|
208
|
+
* This function is environment-agnostic: it performs only the authenticated HTTP fetch and leaves
|
|
209
|
+
* all presentation logic to the caller.
|
|
210
|
+
*
|
|
211
|
+
* **Browser download example** — trigger the native Save dialog from a click handler:
|
|
212
|
+
* ```js
|
|
213
|
+
* button.addEventListener('click', async () => {
|
|
214
|
+
* const { blob, fileName } = await downloadResource(recipe.attachmentKey);
|
|
215
|
+
* const url = URL.createObjectURL(blob);
|
|
216
|
+
* const a = document.createElement('a');
|
|
217
|
+
* a.href = url;
|
|
218
|
+
* a.download = fileName;
|
|
219
|
+
* a.click();
|
|
220
|
+
* URL.revokeObjectURL(url);
|
|
221
|
+
* });
|
|
222
|
+
* ```
|
|
223
|
+
*
|
|
224
|
+
* **Node.js example** — write the blob to disk:
|
|
225
|
+
* ```js
|
|
226
|
+
* const { blob } = await downloadResource(recipe.attachmentKey);
|
|
227
|
+
* const buffer = Buffer.from(await blob.arrayBuffer());
|
|
228
|
+
* fs.writeFileSync('attachment.pdf', buffer);
|
|
229
|
+
* ```
|
|
230
|
+
*
|
|
231
|
+
* @param resourceKey - Key of the content resource to fetch
|
|
232
|
+
* @returns Promise resolving to `{ blob, fileName }`
|
|
233
|
+
*/
|
|
234
|
+
function downloadResource(resourceKey) {
|
|
235
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
236
|
+
var _a, _b;
|
|
237
|
+
if (!sdk_general_1.getAuthToken) {
|
|
238
|
+
const errorMessage = 'SDK not initialized.';
|
|
239
|
+
console.error(errorMessage);
|
|
240
|
+
throw new Error(errorMessage);
|
|
241
|
+
}
|
|
242
|
+
const url = `${sdk_general_1.serviceAddress}/filecontent/${sdk_general_1.sandboxKey}/${resourceKey}`;
|
|
243
|
+
const authToken = yield (0, rxjs_1.lastValueFrom)((0, sdk_general_1.getAuthToken)());
|
|
244
|
+
console.log("Sending GET request to " + url + " with token " + authToken);
|
|
245
|
+
const response = yield axios_1.default.get(url, {
|
|
246
|
+
headers: { "Authorization": `Bearer ${authToken}` },
|
|
247
|
+
responseType: 'blob',
|
|
248
|
+
});
|
|
249
|
+
const blob = response.data;
|
|
250
|
+
const disposition = (_a = response.headers['content-disposition']) !== null && _a !== void 0 ? _a : '';
|
|
251
|
+
const match = disposition.match(/filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/);
|
|
252
|
+
const fileName = ((_b = match === null || match === void 0 ? void 0 : match[1]) !== null && _b !== void 0 ? _b : '').replace(/['"]/g, '') || resourceKey;
|
|
253
|
+
return { blob, fileName };
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Observable version of downloadResource. See downloadResource for details.
|
|
258
|
+
*/
|
|
259
|
+
function downloadResourceAsObservable(resourceKey) {
|
|
260
|
+
return (0, rxjs_1.from)(downloadResource(resourceKey));
|
|
261
|
+
}
|
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.
|
|
12
|
-
exports.debounceFn = exports.getValueFromObject = exports.compareValues = exports.sortObjectArray = exports.sendAIMessageAsObservable = exports.sendAIMessage = exports.submitStandalonePaymentAsObservable = exports.submitStandalonePayment = exports.getAggregateDataAsObservable = exports.getAggregateData = 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");
|
|
@@ -70,6 +90,8 @@ Object.defineProperty(exports, "sendFileContents", { enumerable: true, get: func
|
|
|
70
90
|
Object.defineProperty(exports, "sendFileContentsAsObservable", { enumerable: true, get: function () { return content_1.sendFileContentsAsObservable; } });
|
|
71
91
|
Object.defineProperty(exports, "createOrUpdateResource", { enumerable: true, get: function () { return content_1.createOrUpdateResource; } });
|
|
72
92
|
Object.defineProperty(exports, "createOrUpdateResourceAsObservable", { enumerable: true, get: function () { return content_1.createOrUpdateResourceAsObservable; } });
|
|
93
|
+
Object.defineProperty(exports, "downloadResource", { enumerable: true, get: function () { return content_1.downloadResource; } });
|
|
94
|
+
Object.defineProperty(exports, "downloadResourceAsObservable", { enumerable: true, get: function () { return content_1.downloadResourceAsObservable; } });
|
|
73
95
|
// ================================================================================
|
|
74
96
|
// MESSAGING FUNCTIONS
|
|
75
97
|
// ================================================================================
|
package/lib/cjs/sdk-general.js
CHANGED
|
@@ -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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"}
|