@encodeagent/platform-helper-util 1.2508.1241505

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/README.md +121 -0
  2. package/dist/__tests__/core.test.d.ts +5 -0
  3. package/dist/__tests__/core.test.d.ts.map +1 -0
  4. package/dist/__tests__/core.test.js +128 -0
  5. package/dist/__tests__/core.test.js.map +1 -0
  6. package/dist/__tests__/shortid.test.d.ts +5 -0
  7. package/dist/__tests__/shortid.test.d.ts.map +1 -0
  8. package/dist/__tests__/shortid.test.js +72 -0
  9. package/dist/__tests__/shortid.test.js.map +1 -0
  10. package/dist/__tests__/slug.test.d.ts +5 -0
  11. package/dist/__tests__/slug.test.d.ts.map +1 -0
  12. package/dist/__tests__/slug.test.js +31 -0
  13. package/dist/__tests__/slug.test.js.map +1 -0
  14. package/dist/__tests__/token.test.d.ts +5 -0
  15. package/dist/__tests__/token.test.d.ts.map +1 -0
  16. package/dist/__tests__/token.test.js +49 -0
  17. package/dist/__tests__/token.test.js.map +1 -0
  18. package/dist/__tests__/uuid.test.d.ts +5 -0
  19. package/dist/__tests__/uuid.test.d.ts.map +1 -0
  20. package/dist/__tests__/uuid.test.js +42 -0
  21. package/dist/__tests__/uuid.test.js.map +1 -0
  22. package/dist/__tests__/value-of-object.test.d.ts +5 -0
  23. package/dist/__tests__/value-of-object.test.d.ts.map +1 -0
  24. package/dist/__tests__/value-of-object.test.js +49 -0
  25. package/dist/__tests__/value-of-object.test.js.map +1 -0
  26. package/dist/ai/llm.d.ts +90 -0
  27. package/dist/ai/llm.d.ts.map +1 -0
  28. package/dist/ai/llm.js +524 -0
  29. package/dist/ai/llm.js.map +1 -0
  30. package/dist/ai/model.d.ts +14 -0
  31. package/dist/ai/model.d.ts.map +1 -0
  32. package/dist/ai/model.js +120 -0
  33. package/dist/ai/model.js.map +1 -0
  34. package/dist/ai/types.d.ts +85 -0
  35. package/dist/ai/types.d.ts.map +1 -0
  36. package/dist/ai/types.js +15 -0
  37. package/dist/ai/types.js.map +1 -0
  38. package/dist/ai/util.d.ts +28 -0
  39. package/dist/ai/util.d.ts.map +1 -0
  40. package/dist/ai/util.js +43 -0
  41. package/dist/ai/util.js.map +1 -0
  42. package/dist/auth.d.ts +34 -0
  43. package/dist/auth.d.ts.map +1 -0
  44. package/dist/auth.js +568 -0
  45. package/dist/auth.js.map +1 -0
  46. package/dist/colors.d.ts +79 -0
  47. package/dist/colors.d.ts.map +1 -0
  48. package/dist/colors.js +492 -0
  49. package/dist/colors.js.map +1 -0
  50. package/dist/constants.d.ts +86 -0
  51. package/dist/constants.d.ts.map +1 -0
  52. package/dist/constants.js +2578 -0
  53. package/dist/constants.js.map +1 -0
  54. package/dist/core.d.ts +337 -0
  55. package/dist/core.d.ts.map +1 -0
  56. package/dist/core.js +1165 -0
  57. package/dist/core.js.map +1 -0
  58. package/dist/cost.d.ts +35 -0
  59. package/dist/cost.d.ts.map +1 -0
  60. package/dist/cost.js +143 -0
  61. package/dist/cost.js.map +1 -0
  62. package/dist/file.d.ts +55 -0
  63. package/dist/file.d.ts.map +1 -0
  64. package/dist/file.js +273 -0
  65. package/dist/file.js.map +1 -0
  66. package/dist/html.d.ts +44 -0
  67. package/dist/html.d.ts.map +1 -0
  68. package/dist/html.js +420 -0
  69. package/dist/html.js.map +1 -0
  70. package/dist/index.d.ts +53 -0
  71. package/dist/index.d.ts.map +1 -0
  72. package/dist/index.js +313 -0
  73. package/dist/index.js.map +1 -0
  74. package/dist/markdown.d.ts +20 -0
  75. package/dist/markdown.d.ts.map +1 -0
  76. package/dist/markdown.js +38 -0
  77. package/dist/markdown.js.map +1 -0
  78. package/dist/metadata.d.ts +39 -0
  79. package/dist/metadata.d.ts.map +1 -0
  80. package/dist/metadata.js +110 -0
  81. package/dist/metadata.js.map +1 -0
  82. package/dist/record.d.ts +67 -0
  83. package/dist/record.d.ts.map +1 -0
  84. package/dist/record.js +404 -0
  85. package/dist/record.js.map +1 -0
  86. package/dist/shortid.d.ts +42 -0
  87. package/dist/shortid.d.ts.map +1 -0
  88. package/dist/shortid.js +42 -0
  89. package/dist/shortid.js.map +1 -0
  90. package/dist/slug.d.ts +24 -0
  91. package/dist/slug.d.ts.map +1 -0
  92. package/dist/slug.js +43 -0
  93. package/dist/slug.js.map +1 -0
  94. package/dist/token.d.ts +34 -0
  95. package/dist/token.d.ts.map +1 -0
  96. package/dist/token.js +20 -0
  97. package/dist/token.js.map +1 -0
  98. package/dist/tree.d.ts +27 -0
  99. package/dist/tree.d.ts.map +1 -0
  100. package/dist/tree.js +193 -0
  101. package/dist/tree.js.map +1 -0
  102. package/dist/types.d.ts +270 -0
  103. package/dist/types.d.ts.map +1 -0
  104. package/dist/types.js +29 -0
  105. package/dist/types.js.map +1 -0
  106. package/dist/uuid.d.ts +25 -0
  107. package/dist/uuid.d.ts.map +1 -0
  108. package/dist/uuid.js +32 -0
  109. package/dist/uuid.js.map +1 -0
  110. package/dist/value-of-object.d.ts +25 -0
  111. package/dist/value-of-object.d.ts.map +1 -0
  112. package/dist/value-of-object.js +123 -0
  113. package/dist/value-of-object.js.map +1 -0
  114. package/dist/web-content.d.ts +54 -0
  115. package/dist/web-content.d.ts.map +1 -0
  116. package/dist/web-content.js +268 -0
  117. package/dist/web-content.js.map +1 -0
  118. package/dist/web.d.ts +36 -0
  119. package/dist/web.d.ts.map +1 -0
  120. package/dist/web.js +162 -0
  121. package/dist/web.js.map +1 -0
  122. package/package.json +68 -0
package/dist/auth.js ADDED
@@ -0,0 +1,568 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Authentication and authorization utilities including password validation, token verification, and security functions
4
+ * @copyright PrimeObjects Software Inc. (C) 2024 All Rights Reserved
5
+ * @author EncodeAgent Team.
6
+ * @copyright © 2024 PrimeObjects Software Inc. All rights reserved.
7
+ * @license Proprietary - Subject to PrimeObjects License Agreements
8
+ * @contact encode.agent@primeobjects.com
9
+ * @website https://www.encodeagent.com/
10
+ *
11
+ * This software contains proprietary and confidential information of
12
+ * PrimeObjects Software Inc. Any reproduction or distribution of this
13
+ * software, in whole or in part, without written permission of
14
+ * PrimeObjects Software Inc. is strictly prohibited.
15
+ *
16
+ * Unauthorized copying of this file, via any medium, is strictly prohibited.
17
+ * This file is proprietary and confidential.
18
+ */
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.hasRole = exports.hasAllRoles = exports.hasAnyRole = exports.hasMemberRole = exports.isOwner = exports.isMember = exports.hasPrivilege = exports.isAuthor = exports.isReader = exports.checkPrivilege = exports.checkEntityPrivilege = exports.checkPrivileges = exports.hasLicense = exports.checkLicenses = exports.recordOwnedByOrganization = exports.checkRecordPrivilege = void 0;
21
+ const lodash_1 = require("lodash");
22
+ const constants_1 = require("./constants");
23
+ const core_1 = require("./core");
24
+ const metadata_1 = require("./metadata");
25
+ const checkRecordPrivilege = (context, record, prType) => {
26
+ if (!(0, core_1.isObject)(record)) {
27
+ if ((0, core_1.appTrackIsOn)())
28
+ console.log("NO_RECORD");
29
+ return false;
30
+ }
31
+ return (0, exports.checkPrivilege)(context, undefined, undefined, record, prType);
32
+ };
33
+ exports.checkRecordPrivilege = checkRecordPrivilege;
34
+ const recordOwnedByOrganization = (user, record) => {
35
+ const recordOrganizationId = record?.organizationId;
36
+ const userOrganizationId = user?.organizationId;
37
+ return ((0, core_1.isNonEmptyString)(recordOrganizationId) &&
38
+ (0, core_1.isNonEmptyString)(userOrganizationId) &&
39
+ (0, core_1.sameGuid)(recordOrganizationId, userOrganizationId));
40
+ };
41
+ exports.recordOwnedByOrganization = recordOwnedByOrganization;
42
+ const checkLicenses = (context, featureOrEntityName) => {
43
+ const trackPrefix = "checkLicenses";
44
+ if ((0, lodash_1.isNil)(context?.solution)) {
45
+ if ((0, core_1.appTrackIsOn)())
46
+ console.log(`${trackPrefix}.solutionNotFound Skip Licenses Check`, {
47
+ context,
48
+ featureOrEntityName
49
+ });
50
+ return true;
51
+ }
52
+ if ((0, lodash_1.isNil)(context?.user)) {
53
+ if ((0, core_1.appTrackIsOn)())
54
+ console.log(`${trackPrefix}.userNotFound`, {
55
+ context,
56
+ featureOrEntityName
57
+ });
58
+ return false;
59
+ }
60
+ if ((0, exports.hasRole)(context, "SOLUTION-ADMIN"))
61
+ return true;
62
+ const { user, solution } = context;
63
+ //Root Admin has all permission
64
+ // if (isRootAdmin(context)) return true;
65
+ if (!(0, core_1.isNonEmptyString)(featureOrEntityName)) {
66
+ if ((0, core_1.appTrackIsOn)())
67
+ console.log(`${trackPrefix}.noFeatureOrEntityName`);
68
+ return false;
69
+ }
70
+ //Get solution licenses
71
+ let solutionLicenses = solution?.licenses ?? [];
72
+ if (!(0, lodash_1.isArray)(solutionLicenses))
73
+ solutionLicenses = [];
74
+ //If there's no license for the solution, we will not check the license
75
+ if ((0, lodash_1.isArray)(solutionLicenses) && solutionLicenses.length == 0)
76
+ return true;
77
+ //If user has no license for user, we will try the default license in solution
78
+ const userLicenses = (0, lodash_1.isArray)(user.licenses) ? user.licenses.slice() : [];
79
+ (0, lodash_1.each)(solutionLicenses, (solutionLicense) => {
80
+ //if there's default license, add it to userLicenses
81
+ if (solutionLicense.isDefault === true)
82
+ userLicenses.push(solutionLicense.name);
83
+ });
84
+ let pass = false;
85
+ (0, lodash_1.each)(userLicenses, (userLicense) => {
86
+ //only check if it does not pass
87
+ if (!pass) {
88
+ const solutionLicense = (0, lodash_1.find)(solutionLicenses, (l) => l.name.toLowerCase() === userLicense.toLowerCase());
89
+ if (solutionLicense) {
90
+ //pass if the user has the license and the license has feature that is featureOrEntityName
91
+ pass = (0, lodash_1.find)(solutionLicense.features, (f) => f.trim().toLowerCase() ===
92
+ featureOrEntityName.trim().toLowerCase());
93
+ }
94
+ }
95
+ });
96
+ if (!pass && (0, core_1.appTrackIsOn)())
97
+ console.log(`${trackPrefix}.noPass`, {
98
+ userLicenses,
99
+ featureOrEntityName
100
+ });
101
+ return pass;
102
+ };
103
+ exports.checkLicenses = checkLicenses;
104
+ const hasLicense = (context, name) => {
105
+ const { user, solution } = context;
106
+ const trackPrefix = "hasLicense";
107
+ if (!(0, core_1.isNonEmptyString)(name)) {
108
+ if ((0, core_1.appTrackIsOn)())
109
+ console.log(`${trackPrefix}.noName`);
110
+ return false;
111
+ }
112
+ if (!(0, core_1.isObject)(user)) {
113
+ if ((0, core_1.appTrackIsOn)())
114
+ console.log(`${trackPrefix}.noUser`);
115
+ return false;
116
+ }
117
+ if ((0, lodash_1.isNil)(solution)) {
118
+ if ((0, core_1.appTrackIsOn)())
119
+ console.log(`${trackPrefix}.noSolution`);
120
+ return false;
121
+ }
122
+ //Get solution licenses
123
+ let solutionLicenses = solution?.licenses ?? [];
124
+ if (!(0, lodash_1.isArray)(solutionLicenses))
125
+ solutionLicenses = [];
126
+ //If there's no license for the solution, we will not check the license
127
+ if ((0, lodash_1.isArray)(solutionLicenses) && solutionLicenses.length == 0)
128
+ return true;
129
+ //If user has no license for user, we will fail the user
130
+ const userLicenses = (0, lodash_1.isArray)(user.licenses) ? user.licenses : [];
131
+ if (userLicenses.length == 0)
132
+ return false;
133
+ return (0, lodash_1.find)(userLicenses, (userLicense) => {
134
+ return name.toLowerCase() === userLicense.toLowerCase();
135
+ });
136
+ };
137
+ exports.hasLicense = hasLicense;
138
+ const checkPrivileges = (context, privileges, op, checkEntityExistFunc) => {
139
+ const trackPrefix = "checkPrivileges";
140
+ const { user } = context;
141
+ if (!(0, core_1.isObject)(user)) {
142
+ if ((0, core_1.appTrackIsOn)())
143
+ console.log(`${trackPrefix}.noUser`);
144
+ return false;
145
+ }
146
+ if ((0, exports.hasRole)(context, "SOLUTION-ADMIN"))
147
+ return true;
148
+ if (!(0, lodash_1.isFunction)(checkEntityExistFunc))
149
+ checkEntityExistFunc = metadata_1.getEntity;
150
+ if (!(0, lodash_1.isArray)(privileges))
151
+ return true;
152
+ if (privileges.length == 0)
153
+ return true;
154
+ let pass = op === "and";
155
+ let check = false;
156
+ (0, lodash_1.each)(privileges, (privilege) => {
157
+ const privilegeInfo = privilege.split(".");
158
+ switch (privilegeInfo[0].toUpperCase()) {
159
+ case "USER": {
160
+ if (privilegeInfo[1] == "Current" && user)
161
+ check = true;
162
+ if (privilegeInfo[1] == "Anonymous" &&
163
+ (!user || (user && !user.id)))
164
+ check = true;
165
+ pass = op === "and" ? pass && check : pass || check;
166
+ break;
167
+ }
168
+ case "ENTITY": {
169
+ check =
170
+ checkEntityExistFunc(context, privilegeInfo[1], privilegeInfo.length > 2 ? privilegeInfo[2] : null) &&
171
+ (0, exports.checkEntityPrivilege)(context, privilegeInfo[1], privilegeInfo.length > 2 ? privilegeInfo[2] : undefined, privilegeInfo.length > 3 &&
172
+ (0, core_1.isNonEmptyString)(privilegeInfo[3])
173
+ ? privilegeInfo[3]
174
+ : "read");
175
+ pass = op === "and" ? pass && check : pass || check;
176
+ break;
177
+ }
178
+ case "ROLE": {
179
+ check = !(0, lodash_1.isNil)((0, exports.hasRole)(context, privilegeInfo[1]));
180
+ pass = op === "and" ? pass && check : pass || check;
181
+ break;
182
+ }
183
+ case "HAS_LICENSE": {
184
+ check = (0, exports.hasLicense)(context, privilegeInfo[1]);
185
+ pass = op === "and" ? pass && check : pass || check;
186
+ break;
187
+ }
188
+ case "HAS_NO_LICENSE": {
189
+ check = !(0, exports.hasLicense)(context, privilegeInfo[1]);
190
+ pass = op === "and" ? pass && check : pass || check;
191
+ break;
192
+ }
193
+ }
194
+ if (!check && (0, core_1.appTrackIsOn)()) {
195
+ console.log(`${trackPrefix}.${privilege}`, {
196
+ privilegeInfo,
197
+ context
198
+ });
199
+ }
200
+ });
201
+ if (!pass && (0, core_1.appTrackIsOn)())
202
+ console.log(`${trackPrefix}.noPass`, { privileges });
203
+ return pass;
204
+ };
205
+ exports.checkPrivileges = checkPrivileges;
206
+ const checkEntityPrivilege = (context, entityName, entityType, prType) => {
207
+ if ((0, exports.hasRole)(context, "SOLUTION-ADMIN"))
208
+ return true;
209
+ if (!(0, core_1.isNonEmptyString)(entityName))
210
+ return false;
211
+ //Root Admin has all permission
212
+ //if (isRootAdmin(context)) return true;
213
+ const trackPrefix = "checkEntityPrivilege";
214
+ prType = (0, core_1.isNonEmptyString)(prType) ? prType?.toLowerCase() : "read";
215
+ if (!(0, exports.checkLicenses)(context, (0, core_1.isNonEmptyString)(entityType)
216
+ ? `Entity.${entityName}.${entityType}`
217
+ : `Entity.${entityName}`)) {
218
+ if ((0, core_1.appTrackIsOn)())
219
+ console.log(`${trackPrefix}.${prType}.checkLicenses`, {
220
+ entityName,
221
+ entityType,
222
+ prType
223
+ });
224
+ return false;
225
+ }
226
+ else {
227
+ //if user has license and looking for read permission to an entity, it will be allowed by default
228
+ if (prType === "read")
229
+ return true;
230
+ }
231
+ return (0, exports.checkPrivilege)(context, entityName, entityType, undefined, prType);
232
+ };
233
+ exports.checkEntityPrivilege = checkEntityPrivilege;
234
+ const checkPrivilege = (context, entityName, entityType, record, prType) => {
235
+ if ((0, exports.hasRole)(context, "SOLUTION-ADMIN", record))
236
+ return true;
237
+ let { organization, user, solution } = context;
238
+ const trackPrefix = "checkPrivilege";
239
+ if (!organization?.id) {
240
+ organization = { id: context.organizationId };
241
+ }
242
+ if (!user?.id || !user?.organizationId) {
243
+ user = { id: context.userId, organizationId: organization.id };
244
+ }
245
+ if (!solution?.id) {
246
+ solution = { id: context.solutionId };
247
+ }
248
+ let result = false;
249
+ //privilege type is required, if not being provided, it is by default read
250
+ if (!prType)
251
+ prType = "read";
252
+ prType = prType.toLowerCase();
253
+ if (!record) {
254
+ record = {
255
+ id: constants_1.GUID_EMPTY,
256
+ entityName,
257
+ entityType,
258
+ organizationId: organization.id
259
+ };
260
+ }
261
+ else {
262
+ entityName = record.entityName;
263
+ entityType = record.entityType;
264
+ }
265
+ if (prType === "read" && record.isGlobal == true) {
266
+ return true;
267
+ }
268
+ //get the entity profile
269
+ const entity = (0, metadata_1.getEntity)(solution, entityName ? entityName : "", entityType) ??
270
+ !solution?.entities //if there is solution.entities provided, we will respect it.
271
+ ? {
272
+ entityName: record?.entityName,
273
+ entityType: record?.entityType,
274
+ fromRecord: true
275
+ }
276
+ : undefined;
277
+ //entity has to be valid
278
+ if (!entity?.entityName) {
279
+ if ((0, core_1.appTrackIsOn)())
280
+ console.log(`${trackPrefix}.noEntity`, {
281
+ solution,
282
+ entityName,
283
+ entityType
284
+ });
285
+ return false;
286
+ }
287
+ //respect disableDelete, disableCreate or disableUpdate
288
+ if (prType === "delete" &&
289
+ (record.disableDelete ||
290
+ entity?.disableDelete ||
291
+ ((0, core_1.isObject)(record.system) && record.system.disableDelete))) {
292
+ if ((0, core_1.appTrackIsOn)())
293
+ console.log(`${trackPrefix}.disableDelete,${trackPrefix}.system`, {
294
+ record,
295
+ entity,
296
+ user
297
+ });
298
+ return false;
299
+ }
300
+ if (prType === "update" &&
301
+ (record.disableUpdate ||
302
+ entity?.disableUpdate ||
303
+ ((0, core_1.isObject)(record.system) && record.system.disableUpdate))) {
304
+ if ((0, core_1.appTrackIsOn)())
305
+ console.log(`${trackPrefix}.disableUpdate,${trackPrefix}.system`, {
306
+ record,
307
+ entity,
308
+ user
309
+ });
310
+ return false;
311
+ }
312
+ if (prType === "create" && entity?.disableCreate) {
313
+ if ((0, core_1.appTrackIsOn)())
314
+ console.log(`${trackPrefix}.disableCreate`, { entity });
315
+ return false;
316
+ }
317
+ //Rules to special user --- START
318
+ //All in all the user has to have license to the entity
319
+ if (!(0, exports.checkLicenses)(context, `Entity.${entityName}`)) {
320
+ if ((0, core_1.appTrackIsOn)())
321
+ console.log(`${trackPrefix}.noEntityLicense`, {
322
+ context,
323
+ entityName
324
+ });
325
+ return false;
326
+ }
327
+ if ((0, core_1.isNonEmptyString)(entityType) &&
328
+ !(0, exports.checkLicenses)(context, `Entity.${entityName}.${entityType}`)) {
329
+ if ((0, core_1.appTrackIsOn)())
330
+ console.log(`${trackPrefix}.noEntityLicense`, {
331
+ context,
332
+ entityType,
333
+ entityName
334
+ });
335
+ return false;
336
+ }
337
+ //ORG-ADMIN or owner of the organization has all permissions to the records in the org
338
+ if ((0, exports.hasRole)(context, "ORG-ADMIN") &&
339
+ (!record || record.organizationId == user.organizationId)) {
340
+ return true;
341
+ }
342
+ //Rules to special user --- END
343
+ if (prType === "create")
344
+ record.organizationId = organization.id;
345
+ //can not delete or update a record that does not exist
346
+ if (prType === "delete" && ((0, core_1.isEmptyGuid)(record.id) || !record.id)) {
347
+ if ((0, core_1.appTrackIsOn)())
348
+ console.log(`${trackPrefix}.noDelete.noRecord`, { record });
349
+ return false;
350
+ }
351
+ //if it is update and without record id, it may be a upsert, we will make sure there's permission to create
352
+ if (prType === "update" && ((0, core_1.isEmptyGuid)(record.id) || !record.id)) {
353
+ return (0, exports.checkPrivilege)(context, entityName, entityType, record, "create");
354
+ }
355
+ //Owner of the record has all permission to the record.
356
+ if ((0, exports.isOwner)(user, record))
357
+ return true;
358
+ //User don't have any permission to any record outside of the current organization
359
+ if (record.id != constants_1.GUID_EMPTY && !(0, exports.recordOwnedByOrganization)(user, record)) {
360
+ if ((0, core_1.appTrackIsOn)())
361
+ console.log(`${trackPrefix}.recordOutOfOrg`, { record, user });
362
+ return false;
363
+ }
364
+ //Check privileges defined in the roles of the user
365
+ //Check whether user has permission to all privilege Types of the entity, the second all also mean to all records
366
+ result = (0, exports.hasPrivilege)(context, entityName + ".All.All");
367
+ if (result)
368
+ return true;
369
+ result = (0, exports.hasPrivilege)(context, entityName + "." + prType + ".All");
370
+ if (result)
371
+ return true;
372
+ //Check whether user has permission to all privilege Types of the entity, there's no second all, it mean to all user's own record
373
+ result = (0, exports.hasPrivilege)(context, entityName + ".All");
374
+ if ((0, core_1.isEmptyGuid)(record.id) && result)
375
+ return true;
376
+ //Check whether user has permission to the requested privilege Type of the entity
377
+ result = (0, exports.hasPrivilege)(context, entityName + "." + prType);
378
+ if ((0, core_1.isEmptyGuid)(record.id) && result)
379
+ return true;
380
+ if (prType !== "create" && (0, core_1.isEmptyGuid)(record.id)) {
381
+ if ((0, core_1.appTrackIsOn)())
382
+ console.log(`${trackPrefix}.isEmptyGuid(record.id`, { record });
383
+ return false;
384
+ }
385
+ //Start from here we check record related privilege
386
+ switch (prType) {
387
+ case "read": {
388
+ //only reader can read the record or isGlobal is true
389
+ result = (0, exports.isReader)(context, record.security) || record.isGlobal;
390
+ //TODO: Now we give pass without checking Reader
391
+ //In the future, we should use role name or depth to decision whether a user can read/update any record
392
+ result = true;
393
+ break;
394
+ }
395
+ case "change-owner": {
396
+ //Some entity can not change ownership
397
+ if (entityName == "user" || entityName == "organization")
398
+ return false;
399
+ //only owner of the record can change the record ownership
400
+ result = (0, core_1.sameGuid)(record.ownerBy, user.id);
401
+ break;
402
+ }
403
+ default: {
404
+ //Author & owner can do anything to a record,
405
+ //In the code above we have handled isOwner case
406
+ result = (0, exports.isAuthor)(context, record.security);
407
+ result = true;
408
+ break;
409
+ }
410
+ }
411
+ if (!result && (0, core_1.appTrackIsOn)())
412
+ console.log(`${trackPrefix}.final`, { entityName, entityType, record });
413
+ return result;
414
+ };
415
+ exports.checkPrivilege = checkPrivilege;
416
+ const isReader = (context, security) => {
417
+ const { user } = context;
418
+ var result = (0, lodash_1.find)(security, (s) => s == "r." + user.id ||
419
+ s == "a." + user.id ||
420
+ s == "r." + constants_1.GUID_EMPTY ||
421
+ s == "a." + constants_1.GUID_EMPTY);
422
+ if (result)
423
+ return result ? true : false;
424
+ (0, lodash_1.each)(user.teamIds, (tid) => {
425
+ if (!result)
426
+ result = (0, lodash_1.find)(security, (s) => s == "r." + tid || s == "a." + tid);
427
+ });
428
+ return result ? true : false;
429
+ };
430
+ exports.isReader = isReader;
431
+ const isAuthor = (context, security) => {
432
+ const { user } = context;
433
+ var result = (0, lodash_1.find)(security, (s) => s == "a." + user.id || s == "a." + constants_1.GUID_EMPTY);
434
+ if (result)
435
+ return result ? true : false;
436
+ (0, lodash_1.each)(user.teamIds, (tid) => {
437
+ if (!result)
438
+ result = (0, lodash_1.find)(security, (s) => s == "a." + tid);
439
+ });
440
+ return result ? true : false;
441
+ };
442
+ exports.isAuthor = isAuthor;
443
+ //Check whether the user has a certain privilege based the user roles
444
+ const hasPrivilege = (context, privilege) => {
445
+ const { organization, user, solution } = context;
446
+ if (!privilege)
447
+ return false;
448
+ let result = false;
449
+ //if the user is the organization owner, it will has full permission
450
+ if (organization && (0, core_1.sameGuid)(user.id, organization.ownedBy))
451
+ return true;
452
+ if (!(0, lodash_1.isArray)(user.roles))
453
+ return false;
454
+ //get all roles in the current solution
455
+ var solutionRoles = solution?.roles ?? [];
456
+ //get all roles of the user
457
+ var userRoles = "," + user.roles.join().toLowerCase().replace(/ /g, "") + ",";
458
+ (0, lodash_1.each)(solutionRoles, (solutionRole) => {
459
+ //check whether user has the solution role
460
+ if (!result &&
461
+ solutionRole.value &&
462
+ userRoles.indexOf("," + solutionRole.value.toLowerCase() + ",") >=
463
+ 0 &&
464
+ solutionRole.privileges) {
465
+ //get all privileges of the solution role
466
+ var privileges = "," +
467
+ solutionRole.privileges.toLowerCase().replace(/ /g, "") +
468
+ ",";
469
+ //whether the privilege is being checked included in the role that the user has
470
+ result =
471
+ privileges.indexOf("," + privilege.toLowerCase() + ",") >= 0;
472
+ }
473
+ });
474
+ return result;
475
+ };
476
+ exports.hasPrivilege = hasPrivilege;
477
+ const isMember = (user, regarding) => {
478
+ if (!((0, core_1.isObject)(user) &&
479
+ (0, core_1.isNonEmptyString)(user.id) &&
480
+ (0, core_1.isNonEmptyString)(user.organizationId)))
481
+ return false;
482
+ if (!((0, core_1.isObject)(regarding) &&
483
+ user.organizationId == regarding.organizationId &&
484
+ (0, core_1.isObject)(user.membership)))
485
+ return false;
486
+ return (0, core_1.isObject)(user.membership[regarding.id]);
487
+ };
488
+ exports.isMember = isMember;
489
+ const isOwner = (user, regarding) => {
490
+ if (!((0, core_1.isObject)(user) &&
491
+ (0, core_1.isNonEmptyString)(user.id) &&
492
+ (0, core_1.isNonEmptyString)(user.organizationId)))
493
+ return false;
494
+ if (!((0, core_1.isObject)(regarding) &&
495
+ user.organizationId == regarding.organizationId))
496
+ return false;
497
+ return (0, core_1.sameGuid)(regarding.ownedBy, user.id);
498
+ };
499
+ exports.isOwner = isOwner;
500
+ const hasMemberRole = (user, regarding, roleName) => {
501
+ if (!(0, exports.isMember)(user, regarding))
502
+ return false;
503
+ return (0, lodash_1.find)(user.membership[regarding.id].roles, (r) => r == roleName)
504
+ ? true
505
+ : false;
506
+ };
507
+ exports.hasMemberRole = hasMemberRole;
508
+ const hasAnyRole = (context, roleNames, record) => {
509
+ for (let i = 0; i < roleNames.length; i++) {
510
+ const result = (0, exports.hasRole)(context, roleNames[i], record);
511
+ if ((0, core_1.isNonEmptyString)(result))
512
+ return result;
513
+ }
514
+ return undefined;
515
+ };
516
+ exports.hasAnyRole = hasAnyRole;
517
+ const hasAllRoles = (context, roleNames, record) => {
518
+ if (roleNames.length == 0)
519
+ return false;
520
+ for (let i = 0; i < roleNames.length; i++) {
521
+ const result = (0, exports.hasRole)(context, roleNames[i], record);
522
+ if ((0, lodash_1.isNil)(result))
523
+ return false;
524
+ }
525
+ return true;
526
+ };
527
+ exports.hasAllRoles = hasAllRoles;
528
+ //check whether a user has a role
529
+ const hasRole = (context, roleName, record) => {
530
+ let { user, organizationId, organization } = context;
531
+ if (!(0, core_1.isObject)(user)) {
532
+ if ((0, core_1.appTrackIsOn)())
533
+ console.error("The context.user is not provided.");
534
+ return undefined;
535
+ }
536
+ if (user.organizationId != organizationId) {
537
+ if ((0, core_1.appTrackIsOn)())
538
+ console.error("The user.organizationId and context.organizationId does not match.");
539
+ return undefined;
540
+ }
541
+ if (!(0, core_1.isNonEmptyString)(roleName)) {
542
+ if ((0, core_1.appTrackIsOn)())
543
+ console.error("The roleName is not provided.");
544
+ return undefined;
545
+ }
546
+ if (roleName == "ORG-ADMIN") {
547
+ if (((0, core_1.isObject)(record) &&
548
+ (0, core_1.isObject)(organization) &&
549
+ (0, core_1.sameGuid)(organization.ownedBy, user.id) &&
550
+ (0, core_1.sameGuid)(organization.id, record?.organizationId)) ||
551
+ (!(0, core_1.isObject)(record) &&
552
+ (0, core_1.isObject)(organization) &&
553
+ (0, core_1.sameGuid)(organization.ownedBy, user.id))) {
554
+ return "ORG-ADMIN";
555
+ }
556
+ }
557
+ if (!(0, lodash_1.isArray)(user.roles)) {
558
+ if ((0, core_1.appTrackIsOn)())
559
+ console.error("The user.roles does not exit.");
560
+ return undefined;
561
+ }
562
+ const role = (0, lodash_1.find)(user.roles, (role) => {
563
+ return role.toLowerCase() == roleName.toLowerCase();
564
+ });
565
+ return role;
566
+ };
567
+ exports.hasRole = hasRole;
568
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}