@solidxai/core 0.1.9-beta.7 → 0.1.9

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 (165) hide show
  1. package/LICENSE +89 -0
  2. package/README.md +3 -1
  3. package/dist/constants/chatter-message.constants.d.ts +6 -0
  4. package/dist/constants/chatter-message.constants.d.ts.map +1 -1
  5. package/dist/constants/chatter-message.constants.js +7 -1
  6. package/dist/constants/chatter-message.constants.js.map +1 -1
  7. package/dist/controllers/authentication.controller.d.ts +12 -0
  8. package/dist/controllers/authentication.controller.d.ts.map +1 -1
  9. package/dist/controllers/authentication.controller.js +13 -0
  10. package/dist/controllers/authentication.controller.js.map +1 -1
  11. package/dist/controllers/chatter-message.controller.d.ts +1 -0
  12. package/dist/controllers/chatter-message.controller.d.ts.map +1 -1
  13. package/dist/controllers/chatter-message.controller.js +12 -0
  14. package/dist/controllers/chatter-message.controller.js.map +1 -1
  15. package/dist/controllers/facebook-authentication.controller.d.ts +27 -0
  16. package/dist/controllers/facebook-authentication.controller.d.ts.map +1 -0
  17. package/dist/controllers/facebook-authentication.controller.js +117 -0
  18. package/dist/controllers/facebook-authentication.controller.js.map +1 -0
  19. package/dist/controllers/menu-item-metadata.controller.d.ts +1 -0
  20. package/dist/controllers/menu-item-metadata.controller.d.ts.map +1 -1
  21. package/dist/controllers/menu-item-metadata.controller.js +15 -0
  22. package/dist/controllers/menu-item-metadata.controller.js.map +1 -1
  23. package/dist/controllers/microsoft-authentication.controller.d.ts +27 -0
  24. package/dist/controllers/microsoft-authentication.controller.d.ts.map +1 -0
  25. package/dist/controllers/microsoft-authentication.controller.js +118 -0
  26. package/dist/controllers/microsoft-authentication.controller.js.map +1 -0
  27. package/dist/controllers/setting.controller.d.ts +2 -2
  28. package/dist/controllers/setting.controller.js +2 -2
  29. package/dist/decorators/auth.decorator.d.ts.map +1 -1
  30. package/dist/decorators/computed-field-provider.decorator.d.ts.map +1 -1
  31. package/dist/decorators/dashboard-question-data-provider.decorator.d.ts.map +1 -1
  32. package/dist/decorators/dashboard-selection-provider.decorator.d.ts.map +1 -1
  33. package/dist/decorators/disallow-in-production.decorator.d.ts.map +1 -1
  34. package/dist/decorators/error-codes-provider.decorator.d.ts.map +1 -1
  35. package/dist/decorators/extension-user-creation-provider.decorator.d.ts.map +1 -1
  36. package/dist/decorators/is-not-in-enum.decorator.d.ts.map +1 -1
  37. package/dist/decorators/mail-provider.decorator.d.ts.map +1 -1
  38. package/dist/decorators/roles.decorator.d.ts.map +1 -1
  39. package/dist/decorators/scheduled-job-provider.decorator.d.ts.map +1 -1
  40. package/dist/decorators/security-rule-config-provider.decorator.d.ts.map +1 -1
  41. package/dist/decorators/selection-provider.decorator.d.ts.map +1 -1
  42. package/dist/decorators/sms-provider.decorator.d.ts.map +1 -1
  43. package/dist/decorators/solid-database-module.decorator.d.ts.map +1 -1
  44. package/dist/decorators/whatsapp-provider.decorator.d.ts.map +1 -1
  45. package/dist/dtos/create-chatter-message.dto.d.ts +1 -0
  46. package/dist/dtos/create-chatter-message.dto.d.ts.map +1 -1
  47. package/dist/dtos/create-chatter-message.dto.js +7 -1
  48. package/dist/dtos/create-chatter-message.dto.js.map +1 -1
  49. package/dist/dtos/post-chatter-message.dto.d.ts +1 -0
  50. package/dist/dtos/post-chatter-message.dto.d.ts.map +1 -1
  51. package/dist/dtos/post-chatter-message.dto.js +6 -1
  52. package/dist/dtos/post-chatter-message.dto.js.map +1 -1
  53. package/dist/dtos/update-chatter-message.dto.d.ts +1 -0
  54. package/dist/dtos/update-chatter-message.dto.d.ts.map +1 -1
  55. package/dist/dtos/update-chatter-message.dto.js +7 -1
  56. package/dist/dtos/update-chatter-message.dto.js.map +1 -1
  57. package/dist/entities/chatter-message.entity.d.ts +1 -0
  58. package/dist/entities/chatter-message.entity.d.ts.map +1 -1
  59. package/dist/entities/chatter-message.entity.js +5 -1
  60. package/dist/entities/chatter-message.entity.js.map +1 -1
  61. package/dist/entities/user.entity.d.ts +8 -0
  62. package/dist/entities/user.entity.d.ts.map +1 -1
  63. package/dist/entities/user.entity.js +33 -1
  64. package/dist/entities/user.entity.js.map +1 -1
  65. package/dist/helpers/cors.helper.js +1 -1
  66. package/dist/helpers/cors.helper.js.map +1 -1
  67. package/dist/helpers/facebook-oauth.helper.d.ts +8 -0
  68. package/dist/helpers/facebook-oauth.helper.d.ts.map +1 -0
  69. package/dist/helpers/facebook-oauth.helper.js +11 -0
  70. package/dist/helpers/facebook-oauth.helper.js.map +1 -0
  71. package/dist/helpers/microsoft-oauth.helper.d.ts +9 -0
  72. package/dist/helpers/microsoft-oauth.helper.d.ts.map +1 -0
  73. package/dist/helpers/microsoft-oauth.helper.js +12 -0
  74. package/dist/helpers/microsoft-oauth.helper.js.map +1 -0
  75. package/dist/helpers/security.helper.d.ts.map +1 -1
  76. package/dist/helpers/string.helper.d.ts.map +1 -1
  77. package/dist/helpers/user-helper.d.ts.map +1 -1
  78. package/dist/helpers/user-helper.js +4 -0
  79. package/dist/helpers/user-helper.js.map +1 -1
  80. package/dist/index.d.ts +2 -0
  81. package/dist/index.d.ts.map +1 -1
  82. package/dist/index.js +2 -0
  83. package/dist/index.js.map +1 -1
  84. package/dist/interfaces.d.ts +19 -0
  85. package/dist/interfaces.d.ts.map +1 -1
  86. package/dist/interfaces.js.map +1 -1
  87. package/dist/passport-strategies/facebook-oauth.strategy.d.ts +16 -0
  88. package/dist/passport-strategies/facebook-oauth.strategy.d.ts.map +1 -0
  89. package/dist/passport-strategies/facebook-oauth.strategy.js +96 -0
  90. package/dist/passport-strategies/facebook-oauth.strategy.js.map +1 -0
  91. package/dist/passport-strategies/microsoft-oauth.strategy.d.ts +14 -0
  92. package/dist/passport-strategies/microsoft-oauth.strategy.d.ts.map +1 -0
  93. package/dist/passport-strategies/microsoft-oauth.strategy.js +77 -0
  94. package/dist/passport-strategies/microsoft-oauth.strategy.js.map +1 -0
  95. package/dist/seeders/seed-data/solid-core-metadata.json +27 -58
  96. package/dist/services/api-key.service.d.ts +17 -1
  97. package/dist/services/api-key.service.d.ts.map +1 -1
  98. package/dist/services/api-key.service.js +38 -2
  99. package/dist/services/api-key.service.js.map +1 -1
  100. package/dist/services/authentication.service.d.ts +61 -27
  101. package/dist/services/authentication.service.d.ts.map +1 -1
  102. package/dist/services/authentication.service.js +356 -164
  103. package/dist/services/authentication.service.js.map +1 -1
  104. package/dist/services/chatter-message.service.d.ts +1 -0
  105. package/dist/services/chatter-message.service.d.ts.map +1 -1
  106. package/dist/services/chatter-message.service.js +24 -7
  107. package/dist/services/chatter-message.service.js.map +1 -1
  108. package/dist/services/crud-helper.service.d.ts.map +1 -1
  109. package/dist/services/model-metadata.service.js +1 -1
  110. package/dist/services/model-metadata.service.js.map +1 -1
  111. package/dist/services/setting.service.d.ts +5 -2
  112. package/dist/services/setting.service.d.ts.map +1 -1
  113. package/dist/services/setting.service.js +51 -6
  114. package/dist/services/setting.service.js.map +1 -1
  115. package/dist/services/settings/default-settings-provider.service.d.ts +846 -0
  116. package/dist/services/settings/default-settings-provider.service.d.ts.map +1 -1
  117. package/dist/services/settings/default-settings-provider.service.js +1096 -117
  118. package/dist/services/settings/default-settings-provider.service.js.map +1 -1
  119. package/dist/services/user.service.d.ts +12 -8
  120. package/dist/services/user.service.d.ts.map +1 -1
  121. package/dist/services/user.service.js +143 -32
  122. package/dist/services/user.service.js.map +1 -1
  123. package/dist/solid-core.module.d.ts.map +1 -1
  124. package/dist/solid-core.module.js +11 -3
  125. package/dist/solid-core.module.js.map +1 -1
  126. package/dist/transformers/array-transformer.d.ts.map +1 -1
  127. package/dist/transformers/boolean-transformer.d.ts.map +1 -1
  128. package/dist/transformers/datetime-transformer.d.ts.map +1 -1
  129. package/dist/transformers/integer-transformer.d.ts.map +1 -1
  130. package/dist/validators/is-parsable-int.d.ts.map +1 -1
  131. package/nest +0 -0
  132. package/package.json +8 -2
  133. package/src/constants/chatter-message.constants.ts +7 -0
  134. package/src/controllers/authentication.controller.ts +8 -1
  135. package/src/controllers/chatter-message.controller.ts +6 -0
  136. package/src/controllers/facebook-authentication.controller.ts +113 -0
  137. package/src/controllers/menu-item-metadata.controller.ts +21 -15
  138. package/src/controllers/microsoft-authentication.controller.ts +116 -0
  139. package/src/dtos/create-chatter-message.dto.ts +11 -0
  140. package/src/dtos/post-chatter-message.dto.ts +4 -0
  141. package/src/dtos/update-chatter-message.dto.ts +13 -1
  142. package/src/entities/chatter-message.entity.ts +4 -1
  143. package/src/entities/user.entity.ts +32 -0
  144. package/src/helpers/cors.helper.ts +1 -1
  145. package/src/helpers/facebook-oauth.helper.ts +17 -0
  146. package/src/helpers/microsoft-oauth.helper.ts +19 -0
  147. package/src/helpers/user-helper.ts +4 -0
  148. package/src/index.ts +2 -0
  149. package/src/interfaces.ts +32 -1
  150. package/src/passport-strategies/facebook-oauth.strategy.ts +115 -0
  151. package/src/passport-strategies/microsoft-oauth.strategy.ts +70 -0
  152. package/src/seeders/seed-data/solid-core-metadata.json +27 -58
  153. package/src/services/api-key.service.ts +77 -35
  154. package/src/services/authentication.service.ts +1947 -1432
  155. package/src/services/chatter-message.service.ts +23 -3
  156. package/src/services/model-metadata.service.ts +1 -1
  157. package/src/services/setting.service.ts +64 -8
  158. package/src/services/settings/default-settings-provider.service.ts +1168 -156
  159. package/src/services/user.service.ts +220 -61
  160. package/src/solid-core.module.ts +25 -8
  161. package/dev-grooming-docs/ozzy-prompts.txt +0 -70
  162. package/docs/grouping-enhancements.md +0 -89
  163. package/docs/seed-changes.md +0 -65
  164. package/docs/test-data-workflow.md +0 -200
  165. package/docs/type-declaration-import-issue.md +0 -24
@@ -1,11 +1,12 @@
1
1
  import { LocalDateTimeTransformer, serializeDate } from 'src/transformers/typeorm/local-date-time-transformer';
2
- import { forwardRef, Inject, Injectable } from '@nestjs/common';
2
+ import { BadRequestException, forwardRef, Inject, Injectable, NotFoundException } from '@nestjs/common';
3
3
  import { ModuleRef } from "@nestjs/core";
4
4
  import { InjectEntityManager } from '@nestjs/typeorm';
5
5
  import { Brackets, EntityManager, EntityMetadata } from 'typeorm';
6
6
 
7
- import { classify } from '../helpers/string.helper';
8
- import { CHATTER_MESSAGE_SUBTYPE, CHATTER_MESSAGE_TYPE } from 'src/constants/chatter-message.constants';
7
+ import { classify } from '@angular-devkit/core/src/utils/strings';
8
+ import { CHATTER_MESSAGE_STATUS, CHATTER_MESSAGE_SUBTYPE, CHATTER_MESSAGE_TYPE } from 'src/constants/chatter-message.constants';
9
+ import { ERROR_MESSAGES } from 'src/constants/error-messages';
9
10
  import { PostChatterMessageDto } from 'src/dtos/post-chatter-message.dto';
10
11
  import { ModelMetadataHelperService } from 'src/helpers/model-metadata-helper.service';
11
12
  import { lowerFirst } from 'src/helpers/string.helper';
@@ -46,10 +47,26 @@ export class ChatterMessageService extends CRUDService<ChatterMessage> {
46
47
  super(entityManager, repo, 'chatterMessage', 'solid-core', moduleRef);
47
48
  }
48
49
 
50
+ async markCompleted(id: number) {
51
+ const activeUser = this.requestContextService.getActiveUser();
52
+ if (!activeUser) {
53
+ throw new BadRequestException(ERROR_MESSAGES.FORBIDDEN);
54
+ }
55
+
56
+ const message = await this.repo.findOne({ where: { id } });
57
+ if (!message) {
58
+ throw new NotFoundException(`Entity [solid-core.chatterMessage] with id ${id} not found`);
59
+ }
60
+
61
+ message.status = CHATTER_MESSAGE_STATUS.COMPLETED;
62
+ return this.repo.save(message);
63
+ }
64
+
49
65
  async postMessage(postDto: PostChatterMessageDto, files: Express.Multer.File[] = []) {
50
66
  const chatterMessage = new ChatterMessage();
51
67
  chatterMessage.messageType = CHATTER_MESSAGE_TYPE.CUSTOM;
52
68
  chatterMessage.messageSubType = postDto.messageSubType || CHATTER_MESSAGE_SUBTYPE.CUSTOM;
69
+ chatterMessage.status = postDto.status ?? CHATTER_MESSAGE_STATUS.PENDING;
53
70
  chatterMessage.messageBody = postDto.messageBody;
54
71
  chatterMessage.coModelEntityId = postDto.coModelEntityId;
55
72
  chatterMessage.coModelName = postDto.coModelName;
@@ -127,6 +144,7 @@ export class ChatterMessageService extends CRUDService<ChatterMessage> {
127
144
  const chatterMessage = new ChatterMessage();
128
145
  chatterMessage.messageType = CHATTER_MESSAGE_TYPE.AUDIT;
129
146
  chatterMessage.messageSubType = CHATTER_MESSAGE_SUBTYPE.AUDIT_INSERT;
147
+ chatterMessage.status = CHATTER_MESSAGE_STATUS.PENDING;
130
148
  chatterMessage.coModelEntityId = entity.id;
131
149
  chatterMessage.coModelName = model?.singularName;
132
150
  chatterMessage.modelDisplayName = model?.displayName;
@@ -246,6 +264,7 @@ export class ChatterMessageService extends CRUDService<ChatterMessage> {
246
264
  const chatterMessage = new ChatterMessage();
247
265
  chatterMessage.messageType = CHATTER_MESSAGE_TYPE.AUDIT;
248
266
  chatterMessage.messageSubType = CHATTER_MESSAGE_SUBTYPE.AUDIT_UPDATE;
267
+ chatterMessage.status = CHATTER_MESSAGE_STATUS.PENDING;
249
268
  chatterMessage.coModelEntityId = entity?.id;
250
269
  chatterMessage.coModelName = model?.singularName;
251
270
  chatterMessage.modelDisplayName = model.displayName;
@@ -309,6 +328,7 @@ export class ChatterMessageService extends CRUDService<ChatterMessage> {
309
328
  const chatterMessage = new ChatterMessage();
310
329
  chatterMessage.messageType = CHATTER_MESSAGE_TYPE.AUDIT;
311
330
  chatterMessage.messageSubType = CHATTER_MESSAGE_SUBTYPE.AUDIT_DELETE;
331
+ chatterMessage.status = CHATTER_MESSAGE_STATUS.PENDING;
312
332
  chatterMessage.coModelEntityId = databaseEntity?.id;
313
333
  chatterMessage.coModelName = model?.singularName;
314
334
  chatterMessage.modelDisplayName = model?.displayName;
@@ -837,7 +837,7 @@ export class ModelMetadataService {
837
837
  }
838
838
  }
839
839
  const actionName = `${model.singularName}-list-action`;
840
- const treeViewActionName = `${model.singularName}-tree-view-action`;
840
+ const treeViewActionName = `${model.singularName}-tree-action`;
841
841
  const listViewName = `${model.singularName}-list-view`;
842
842
  const treeViewName = `${model.singularName}-tree-view`;
843
843
  const formViewName = `${model.singularName}-form-view`;
@@ -11,7 +11,7 @@ import { FILE_SERVICE, IFileService, FILE_STORAGE_PATH_BUILDER, IStoragePathBuil
11
11
  import { Setting } from '../entities/setting.entity';
12
12
  import { RequestContextService } from './request-context.service';
13
13
  import { SolidRegistry } from 'src/helpers/solid-registry';
14
- import { ISettingsProvider, NoInfer, SettingDefinition, SettingLevel } from '../interfaces';
14
+ import { AdminSettingDefinition, AdminSettingsResponse, ISettingsProvider, NoInfer, SettingControlType, SettingDefinition, SettingLevel } from '../interfaces';
15
15
  import { ModuleMetadataRepository } from 'src/repository/module-metadata.repository';
16
16
  import type { SolidCoreSetting } from './settings/default-settings-provider.service';
17
17
  import { Logger } from '@nestjs/common';
@@ -68,6 +68,44 @@ export class SettingService {
68
68
  }
69
69
  }
70
70
 
71
+ private buildSettingLabel(key: string): string {
72
+ return key
73
+ .replace(/([a-z0-9])([A-Z])/g, '$1 $2')
74
+ .replace(/[-_]+/g, ' ')
75
+ .replace(/\s+/g, ' ')
76
+ .trim()
77
+ .replace(/\b\w/g, (match) => match.toUpperCase());
78
+ }
79
+
80
+ private inferControlType(setting: SettingDefinition): SettingControlType {
81
+ if (setting.controlType) {
82
+ return setting.controlType;
83
+ }
84
+
85
+ if (setting.options?.length) {
86
+ return 'selectionStatic';
87
+ }
88
+
89
+ if (typeof setting.value === 'boolean') {
90
+ return 'boolean';
91
+ }
92
+
93
+ if (typeof setting.value === 'number') {
94
+ return 'numeric';
95
+ }
96
+
97
+ return 'shortText';
98
+ }
99
+
100
+ private toAdminSettingDefinition(setting: SettingDefinition): AdminSettingDefinition {
101
+ return {
102
+ ...setting,
103
+ label: setting.label ?? this.buildSettingLabel(setting.key),
104
+ controlType: this.inferControlType(setting),
105
+ editable: setting.level === SettingLevel.SystemAdminEditable,
106
+ };
107
+ }
108
+
71
109
  /**
72
110
  * Reads all registered providers and gathers settings from across the running platform.
73
111
  * This is the superset of all possible settings.
@@ -216,13 +254,31 @@ export class SettingService {
216
254
  *
217
255
  * @returns
218
256
  */
219
- async getNonEncryptedSystemAdminReadonlyAndAboveSettings(): Promise<Record<any, any>> {
220
- const finalSettings: Record<any, any> = {};
221
- const systemAdminReadonlyAndAboveSettings = this.settings.filter(i => i.level !== "system-env" && !i.encrypted);
222
- for (const setting of systemAdminReadonlyAndAboveSettings) {
223
- finalSettings[setting.key] = setting.value;
224
- }
225
- return finalSettings;
257
+ async getNonEncryptedSystemAdminReadonlyAndAboveSettings(): Promise<AdminSettingsResponse> {
258
+ const activeUser = this.requestContextService.getActiveUser();
259
+ const hasViewEncryptedPermission = !!activeUser?.permissions?.includes('settings:view_encrypted');
260
+
261
+ const data = this.settings
262
+ .filter(i => i.level !== "system-env")
263
+ .filter(i => hasViewEncryptedPermission || !i.encrypted)
264
+ .filter((setting) => [SettingLevel.SystemAdminReadonly, SettingLevel.SystemAdminEditable].includes(setting.level))
265
+ .map((setting) => this.toAdminSettingDefinition(setting))
266
+ .sort((left, right) => {
267
+ const groupCompare = (left.group ?? '').localeCompare(right.group ?? '');
268
+ if (groupCompare !== 0) {
269
+ return groupCompare;
270
+ }
271
+
272
+ const leftSort = left.sortOrder ?? Number.MAX_SAFE_INTEGER;
273
+ const rightSort = right.sortOrder ?? Number.MAX_SAFE_INTEGER;
274
+ if (leftSort !== rightSort) {
275
+ return leftSort - rightSort;
276
+ }
277
+
278
+ return left.label!.localeCompare(right.label!);
279
+ });
280
+
281
+ return { data };
226
282
  }
227
283
 
228
284
  /**