@solidxai/core 0.1.9-beta.6 → 0.1.9-beta.8

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 (254) hide show
  1. package/dist/constants/chatter-message.constants.d.ts +6 -0
  2. package/dist/constants/chatter-message.constants.d.ts.map +1 -1
  3. package/dist/constants/chatter-message.constants.js +7 -1
  4. package/dist/constants/chatter-message.constants.js.map +1 -1
  5. package/dist/controllers/authentication.controller.d.ts +12 -0
  6. package/dist/controllers/authentication.controller.d.ts.map +1 -1
  7. package/dist/controllers/authentication.controller.js +13 -0
  8. package/dist/controllers/authentication.controller.js.map +1 -1
  9. package/dist/controllers/chatter-message.controller.d.ts +1 -0
  10. package/dist/controllers/chatter-message.controller.d.ts.map +1 -1
  11. package/dist/controllers/chatter-message.controller.js +12 -0
  12. package/dist/controllers/chatter-message.controller.js.map +1 -1
  13. package/dist/controllers/facebook-authentication.controller.d.ts +27 -0
  14. package/dist/controllers/facebook-authentication.controller.d.ts.map +1 -0
  15. package/dist/controllers/facebook-authentication.controller.js +117 -0
  16. package/dist/controllers/facebook-authentication.controller.js.map +1 -0
  17. package/dist/controllers/menu-item-metadata.controller.d.ts +1 -0
  18. package/dist/controllers/menu-item-metadata.controller.d.ts.map +1 -1
  19. package/dist/controllers/menu-item-metadata.controller.js +15 -0
  20. package/dist/controllers/menu-item-metadata.controller.js.map +1 -1
  21. package/dist/controllers/microsoft-authentication.controller.d.ts +27 -0
  22. package/dist/controllers/microsoft-authentication.controller.d.ts.map +1 -0
  23. package/dist/controllers/microsoft-authentication.controller.js +118 -0
  24. package/dist/controllers/microsoft-authentication.controller.js.map +1 -0
  25. package/dist/controllers/setting.controller.d.ts +2 -2
  26. package/dist/controllers/setting.controller.js +2 -2
  27. package/dist/decorators/auth.decorator.d.ts.map +1 -1
  28. package/dist/decorators/computed-field-provider.decorator.d.ts.map +1 -1
  29. package/dist/decorators/dashboard-question-data-provider.decorator.d.ts.map +1 -1
  30. package/dist/decorators/dashboard-selection-provider.decorator.d.ts.map +1 -1
  31. package/dist/decorators/disallow-in-production.decorator.d.ts.map +1 -1
  32. package/dist/decorators/error-codes-provider.decorator.d.ts.map +1 -1
  33. package/dist/decorators/extension-user-creation-provider.decorator.d.ts.map +1 -1
  34. package/dist/decorators/is-not-in-enum.decorator.d.ts.map +1 -1
  35. package/dist/decorators/mail-provider.decorator.d.ts.map +1 -1
  36. package/dist/decorators/roles.decorator.d.ts.map +1 -1
  37. package/dist/decorators/scheduled-job-provider.decorator.d.ts.map +1 -1
  38. package/dist/decorators/security-rule-config-provider.decorator.d.ts.map +1 -1
  39. package/dist/decorators/selection-provider.decorator.d.ts.map +1 -1
  40. package/dist/decorators/sms-provider.decorator.d.ts.map +1 -1
  41. package/dist/decorators/solid-database-module.decorator.d.ts.map +1 -1
  42. package/dist/decorators/whatsapp-provider.decorator.d.ts.map +1 -1
  43. package/dist/dtos/create-chatter-message.dto.d.ts +1 -0
  44. package/dist/dtos/create-chatter-message.dto.d.ts.map +1 -1
  45. package/dist/dtos/create-chatter-message.dto.js +7 -1
  46. package/dist/dtos/create-chatter-message.dto.js.map +1 -1
  47. package/dist/dtos/post-chatter-message.dto.d.ts +1 -0
  48. package/dist/dtos/post-chatter-message.dto.d.ts.map +1 -1
  49. package/dist/dtos/post-chatter-message.dto.js +6 -1
  50. package/dist/dtos/post-chatter-message.dto.js.map +1 -1
  51. package/dist/dtos/update-chatter-message.dto.d.ts +1 -0
  52. package/dist/dtos/update-chatter-message.dto.d.ts.map +1 -1
  53. package/dist/dtos/update-chatter-message.dto.js +7 -1
  54. package/dist/dtos/update-chatter-message.dto.js.map +1 -1
  55. package/dist/entities/chatter-message.entity.d.ts +1 -0
  56. package/dist/entities/chatter-message.entity.d.ts.map +1 -1
  57. package/dist/entities/chatter-message.entity.js +5 -1
  58. package/dist/entities/chatter-message.entity.js.map +1 -1
  59. package/dist/entities/user.entity.d.ts +8 -0
  60. package/dist/entities/user.entity.d.ts.map +1 -1
  61. package/dist/entities/user.entity.js +33 -1
  62. package/dist/entities/user.entity.js.map +1 -1
  63. package/dist/helpers/cors.helper.js +1 -1
  64. package/dist/helpers/cors.helper.js.map +1 -1
  65. package/dist/helpers/facebook-oauth.helper.d.ts +8 -0
  66. package/dist/helpers/facebook-oauth.helper.d.ts.map +1 -0
  67. package/dist/helpers/facebook-oauth.helper.js +11 -0
  68. package/dist/helpers/facebook-oauth.helper.js.map +1 -0
  69. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.js +5 -5
  70. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.js.map +1 -1
  71. package/dist/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.d.ts.map +1 -1
  72. package/dist/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.js +2 -2
  73. package/dist/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.js.map +1 -1
  74. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.js +5 -5
  75. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.js.map +1 -1
  76. package/dist/helpers/microsoft-oauth.helper.d.ts +9 -0
  77. package/dist/helpers/microsoft-oauth.helper.d.ts.map +1 -0
  78. package/dist/helpers/microsoft-oauth.helper.js +12 -0
  79. package/dist/helpers/microsoft-oauth.helper.js.map +1 -0
  80. package/dist/helpers/module-metadata-helper.service.js +3 -3
  81. package/dist/helpers/module-metadata-helper.service.js.map +1 -1
  82. package/dist/helpers/security.helper.d.ts.map +1 -1
  83. package/dist/helpers/string.helper.d.ts +1 -0
  84. package/dist/helpers/string.helper.d.ts.map +1 -1
  85. package/dist/helpers/string.helper.js +4 -1
  86. package/dist/helpers/string.helper.js.map +1 -1
  87. package/dist/helpers/user-helper.d.ts.map +1 -1
  88. package/dist/helpers/user-helper.js +4 -0
  89. package/dist/helpers/user-helper.js.map +1 -1
  90. package/dist/index.d.ts +2 -0
  91. package/dist/index.d.ts.map +1 -1
  92. package/dist/index.js +2 -0
  93. package/dist/index.js.map +1 -1
  94. package/dist/interfaces.d.ts +19 -0
  95. package/dist/interfaces.d.ts.map +1 -1
  96. package/dist/interfaces.js.map +1 -1
  97. package/dist/passport-strategies/facebook-oauth.strategy.d.ts +14 -0
  98. package/dist/passport-strategies/facebook-oauth.strategy.d.ts.map +1 -0
  99. package/dist/passport-strategies/facebook-oauth.strategy.js +73 -0
  100. package/dist/passport-strategies/facebook-oauth.strategy.js.map +1 -0
  101. package/dist/passport-strategies/microsoft-oauth.strategy.d.ts +14 -0
  102. package/dist/passport-strategies/microsoft-oauth.strategy.d.ts.map +1 -0
  103. package/dist/passport-strategies/microsoft-oauth.strategy.js +77 -0
  104. package/dist/passport-strategies/microsoft-oauth.strategy.js.map +1 -0
  105. package/dist/repository/chatter-message-details.repository.d.ts.map +1 -1
  106. package/dist/repository/chatter-message-details.repository.js +7 -6
  107. package/dist/repository/chatter-message-details.repository.js.map +1 -1
  108. package/dist/repository/chatter-message.repository.d.ts.map +1 -1
  109. package/dist/repository/chatter-message.repository.js +4 -4
  110. package/dist/repository/chatter-message.repository.js.map +1 -1
  111. package/dist/repository/solid-base.repository.js +2 -2
  112. package/dist/repository/solid-base.repository.js.map +1 -1
  113. package/dist/seeders/module-test-data.service.js +4 -4
  114. package/dist/seeders/module-test-data.service.js.map +1 -1
  115. package/dist/seeders/seed-data/solid-core-metadata.json +27 -58
  116. package/dist/services/api-key.service.d.ts +17 -1
  117. package/dist/services/api-key.service.d.ts.map +1 -1
  118. package/dist/services/api-key.service.js +38 -2
  119. package/dist/services/api-key.service.js.map +1 -1
  120. package/dist/services/authentication.service.d.ts +51 -16
  121. package/dist/services/authentication.service.d.ts.map +1 -1
  122. package/dist/services/authentication.service.js +318 -150
  123. package/dist/services/authentication.service.js.map +1 -1
  124. package/dist/services/chatter-message.service.d.ts +1 -0
  125. package/dist/services/chatter-message.service.d.ts.map +1 -1
  126. package/dist/services/chatter-message.service.js +17 -0
  127. package/dist/services/chatter-message.service.js.map +1 -1
  128. package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.d.ts.map +1 -1
  129. package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.js +2 -2
  130. package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.js.map +1 -1
  131. package/dist/services/crud-helper.service.d.ts.map +1 -1
  132. package/dist/services/crud-helper.service.js +9 -9
  133. package/dist/services/crud-helper.service.js.map +1 -1
  134. package/dist/services/export-transaction.service.d.ts.map +1 -1
  135. package/dist/services/export-transaction.service.js +4 -3
  136. package/dist/services/export-transaction.service.js.map +1 -1
  137. package/dist/services/field-metadata.service.d.ts.map +1 -1
  138. package/dist/services/field-metadata.service.js +7 -7
  139. package/dist/services/field-metadata.service.js.map +1 -1
  140. package/dist/services/fixtures.service.js +2 -2
  141. package/dist/services/fixtures.service.js.map +1 -1
  142. package/dist/services/genai/mcp-handlers/mcp-handler-factory.service.d.ts.map +1 -1
  143. package/dist/services/genai/mcp-handlers/mcp-handler-factory.service.js +2 -2
  144. package/dist/services/genai/mcp-handlers/mcp-handler-factory.service.js.map +1 -1
  145. package/dist/services/import-transaction.service.d.ts.map +1 -1
  146. package/dist/services/import-transaction.service.js +2 -2
  147. package/dist/services/import-transaction.service.js.map +1 -1
  148. package/dist/services/menu-item-metadata.service.js +2 -2
  149. package/dist/services/menu-item-metadata.service.js.map +1 -1
  150. package/dist/services/model-metadata.service.d.ts.map +1 -1
  151. package/dist/services/model-metadata.service.js +12 -11
  152. package/dist/services/model-metadata.service.js.map +1 -1
  153. package/dist/services/module-metadata.service.d.ts.map +1 -1
  154. package/dist/services/module-metadata.service.js +2 -2
  155. package/dist/services/module-metadata.service.js.map +1 -1
  156. package/dist/services/queues/publisher-factory.service.d.ts.map +1 -1
  157. package/dist/services/queues/publisher-factory.service.js +2 -2
  158. package/dist/services/queues/publisher-factory.service.js.map +1 -1
  159. package/dist/services/selection-providers/pseudo-foreign-key-selection-provider.service.js +3 -3
  160. package/dist/services/selection-providers/pseudo-foreign-key-selection-provider.service.js.map +1 -1
  161. package/dist/services/setting.service.d.ts +5 -2
  162. package/dist/services/setting.service.d.ts.map +1 -1
  163. package/dist/services/setting.service.js +51 -6
  164. package/dist/services/setting.service.js.map +1 -1
  165. package/dist/services/settings/default-settings-provider.service.d.ts +830 -0
  166. package/dist/services/settings/default-settings-provider.service.d.ts.map +1 -1
  167. package/dist/services/settings/default-settings-provider.service.js +1033 -117
  168. package/dist/services/settings/default-settings-provider.service.js.map +1 -1
  169. package/dist/services/solid-introspect.service.js +2 -2
  170. package/dist/services/solid-introspect.service.js.map +1 -1
  171. package/dist/services/user.service.d.ts +2 -0
  172. package/dist/services/user.service.d.ts.map +1 -1
  173. package/dist/services/user.service.js +72 -0
  174. package/dist/services/user.service.js.map +1 -1
  175. package/dist/services/view-metadata.service.d.ts.map +1 -1
  176. package/dist/services/view-metadata.service.js +2 -2
  177. package/dist/services/view-metadata.service.js.map +1 -1
  178. package/dist/solid-core.module.d.ts.map +1 -1
  179. package/dist/solid-core.module.js +11 -3
  180. package/dist/solid-core.module.js.map +1 -1
  181. package/dist/subscribers/computed-entity-field.subscriber.js +6 -6
  182. package/dist/subscribers/computed-entity-field.subscriber.js.map +1 -1
  183. package/dist/transformers/array-transformer.d.ts.map +1 -1
  184. package/dist/transformers/boolean-transformer.d.ts.map +1 -1
  185. package/dist/transformers/datetime-transformer.d.ts.map +1 -1
  186. package/dist/transformers/integer-transformer.d.ts.map +1 -1
  187. package/dist/validators/is-parsable-int.d.ts.map +1 -1
  188. package/dist-tests/api/authenticate.spec.js +119 -0
  189. package/dist-tests/api/authenticate.spec.js.map +1 -0
  190. package/dist-tests/api/crud-service.findOne.cityMaster.spec.js +97 -0
  191. package/dist-tests/api/crud-service.findOne.cityMaster.spec.js.map +1 -0
  192. package/dist-tests/api/ping.spec.js +21 -0
  193. package/dist-tests/api/ping.spec.js.map +1 -0
  194. package/dist-tests/helpers/auth.js +41 -0
  195. package/dist-tests/helpers/auth.js.map +1 -0
  196. package/dist-tests/helpers/env.js +11 -0
  197. package/dist-tests/helpers/env.js.map +1 -0
  198. package/docs/java-spring/README.md +3 -0
  199. package/docs/java-spring/solid-core-module-deep-dive-report.md +1317 -0
  200. package/nest +0 -0
  201. package/package.json +7 -2
  202. package/src/constants/chatter-message.constants.ts +7 -0
  203. package/src/controllers/authentication.controller.ts +8 -1
  204. package/src/controllers/chatter-message.controller.ts +6 -0
  205. package/src/controllers/facebook-authentication.controller.ts +113 -0
  206. package/src/controllers/menu-item-metadata.controller.ts +21 -15
  207. package/src/controllers/microsoft-authentication.controller.ts +116 -0
  208. package/src/dtos/create-chatter-message.dto.ts +11 -0
  209. package/src/dtos/post-chatter-message.dto.ts +4 -0
  210. package/src/dtos/update-chatter-message.dto.ts +13 -1
  211. package/src/entities/chatter-message.entity.ts +4 -1
  212. package/src/entities/user.entity.ts +32 -0
  213. package/src/helpers/cors.helper.ts +1 -1
  214. package/src/helpers/facebook-oauth.helper.ts +17 -0
  215. package/src/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.ts +1 -1
  216. package/src/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.ts +1 -2
  217. package/src/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.ts +1 -1
  218. package/src/helpers/microsoft-oauth.helper.ts +19 -0
  219. package/src/helpers/module-metadata-helper.service.ts +3 -3
  220. package/src/helpers/string.helper.ts +3 -0
  221. package/src/helpers/user-helper.ts +4 -0
  222. package/src/index.ts +2 -0
  223. package/src/interfaces.ts +32 -1
  224. package/src/passport-strategies/facebook-oauth.strategy.ts +64 -0
  225. package/src/passport-strategies/microsoft-oauth.strategy.ts +70 -0
  226. package/src/repository/chatter-message-details.repository.ts +4 -3
  227. package/src/repository/chatter-message.repository.ts +4 -4
  228. package/src/repository/solid-base.repository.ts +2 -2
  229. package/src/seeders/module-test-data.service.ts +1 -1
  230. package/src/seeders/seed-data/solid-core-metadata.json +27 -58
  231. package/src/services/api-key.service.ts +77 -35
  232. package/src/services/authentication.service.ts +1717 -1278
  233. package/src/services/chatter-message.service.ts +22 -4
  234. package/src/services/computed-fields/entity/sequence-num-computed-field-provider.ts +1 -2
  235. package/src/services/crud-helper.service.ts +1 -4
  236. package/src/services/export-transaction.service.ts +3 -4
  237. package/src/services/field-metadata.service.ts +1 -4
  238. package/src/services/fixtures.service.ts +1 -1
  239. package/src/services/genai/mcp-handlers/mcp-handler-factory.service.ts +1 -2
  240. package/src/services/import-transaction.service.ts +1 -1
  241. package/src/services/menu-item-metadata.service.ts +2 -2
  242. package/src/services/model-metadata.service.ts +11 -13
  243. package/src/services/module-metadata.service.ts +1 -2
  244. package/src/services/queues/publisher-factory.service.ts +1 -2
  245. package/src/services/selection-providers/pseudo-foreign-key-selection-provider.service.ts +1 -1
  246. package/src/services/setting.service.ts +64 -8
  247. package/src/services/settings/default-settings-provider.service.ts +1104 -155
  248. package/src/services/solid-introspect.service.ts +1 -1
  249. package/src/services/user.service.ts +87 -0
  250. package/src/services/view-metadata.service.ts +1 -5
  251. package/src/solid-core.module.ts +25 -8
  252. package/src/subscribers/computed-entity-field.subscriber.ts +6 -6
  253. package/.claude/settings.local.json +0 -15
  254. package/src/services/1.js +0 -6
@@ -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
7
  import { classify } from '@angular-devkit/core/src/utils/strings';
8
- import { CHATTER_MESSAGE_SUBTYPE, CHATTER_MESSAGE_TYPE } from 'src/constants/chatter-message.constants';
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;
@@ -228,7 +246,6 @@ export class ChatterMessageService extends CRUDService<ChatterMessage> {
228
246
  }
229
247
  }
230
248
 
231
-
232
249
  const allChangedFields = [
233
250
  ...changedNonRelationFields.map(field => ({
234
251
  field,
@@ -247,6 +264,7 @@ export class ChatterMessageService extends CRUDService<ChatterMessage> {
247
264
  const chatterMessage = new ChatterMessage();
248
265
  chatterMessage.messageType = CHATTER_MESSAGE_TYPE.AUDIT;
249
266
  chatterMessage.messageSubType = CHATTER_MESSAGE_SUBTYPE.AUDIT_UPDATE;
267
+ chatterMessage.status = CHATTER_MESSAGE_STATUS.PENDING;
250
268
  chatterMessage.coModelEntityId = entity?.id;
251
269
  chatterMessage.coModelName = model?.singularName;
252
270
  chatterMessage.modelDisplayName = model.displayName;
@@ -310,6 +328,7 @@ export class ChatterMessageService extends CRUDService<ChatterMessage> {
310
328
  const chatterMessage = new ChatterMessage();
311
329
  chatterMessage.messageType = CHATTER_MESSAGE_TYPE.AUDIT;
312
330
  chatterMessage.messageSubType = CHATTER_MESSAGE_SUBTYPE.AUDIT_DELETE;
331
+ chatterMessage.status = CHATTER_MESSAGE_STATUS.PENDING;
313
332
  chatterMessage.coModelEntityId = databaseEntity?.id;
314
333
  chatterMessage.coModelName = model?.singularName;
315
334
  chatterMessage.modelDisplayName = model?.displayName;
@@ -413,7 +432,6 @@ export class ChatterMessageService extends CRUDService<ChatterMessage> {
413
432
  }
414
433
  }
415
434
 
416
-
417
435
  return value.toString();
418
436
  }
419
437
 
@@ -1,4 +1,4 @@
1
- import { classify } from "@angular-devkit/core/src/utils/strings";
1
+ import { classify } from '../../../helpers/string.helper';
2
2
  import { Injectable } from "@nestjs/common";
3
3
  import { InjectDataSource } from "@nestjs/typeorm";
4
4
  import { ComputedFieldTriggerOperation } from "src/dtos/create-field-metadata.dto";
@@ -9,7 +9,6 @@ import { ComputedFieldMetadata } from "src/helpers/solid-registry";
9
9
  import { IEntityPostComputeFieldProvider } from "src/interfaces";
10
10
  import { DataSource, EntityManager } from "typeorm";
11
11
 
12
-
13
12
  export interface SequenceNumComputedFieldContext {
14
13
  sequenceName: string;
15
14
  /**
@@ -1,6 +1,6 @@
1
1
  import { Brackets, SelectQueryBuilder, WhereExpressionBuilder } from "typeorm";
2
2
  import { BasicFilterDto } from "../dtos/basic-filters.dto";
3
- import { classify } from "@angular-devkit/core/src/utils/strings";
3
+ import { classify } from '../helpers/string.helper';
4
4
  import { ActiveUserData } from "src/interfaces/active-user-data.interface";
5
5
  import { SolidRegistry } from "src/helpers/solid-registry";
6
6
  import { BadRequestException, Logger } from "@nestjs/common";
@@ -287,7 +287,6 @@ export class CrudHelperService {
287
287
  }
288
288
  }
289
289
 
290
-
291
290
  if (showSoftDeleted === 'inclusive') {
292
291
  qb.withDeleted();
293
292
  }
@@ -744,6 +743,4 @@ export class CrudHelperService {
744
743
  return matchingPermssions.length > 0
745
744
  }
746
745
 
747
-
748
-
749
746
  }
@@ -5,8 +5,8 @@ import { EntityManager } from 'typeorm';
5
5
 
6
6
  import { CRUDService } from 'src/services/crud.service';
7
7
 
8
-
9
- import { classify, dasherize } from '@angular-devkit/core/src/utils/strings';
8
+ import { kebabCase } from 'lodash';
9
+ import { classify } from '../helpers/string.helper';
10
10
  import { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper';
11
11
  import { validate } from 'class-validator';
12
12
  import { BasicFilterDto } from 'src/dtos/basic-filters.dto';
@@ -196,7 +196,7 @@ export class ExportTransactionService extends CRUDService<ExportTransaction> {
196
196
 
197
197
  private getFileName(templateName: string, exportTransactionUUID: string, fileFormat: string): string {
198
198
  const extension = (fileFormat === ExportFormat.EXCEL) ? 'xlsx' : 'csv';
199
- return `${dasherize(templateName)}-${exportTransactionUUID}.${extension}`;
199
+ return `${kebabCase(templateName)}-${exportTransactionUUID}.${extension}`;
200
200
  }
201
201
 
202
202
  private getMimeType(fileFormat: string): string {
@@ -237,7 +237,6 @@ export class ExportTransactionService extends CRUDService<ExportTransaction> {
237
237
  }
238
238
  }
239
239
 
240
-
241
240
  return async (chunkIndex: number, chunkSize: number) => {
242
241
  const offset = chunkIndex * chunkSize;
243
242
  const recordFilterDto: BasicFilterDto = {
@@ -1,4 +1,4 @@
1
- import { classify } from '@angular-devkit/core/src/utils/strings';
1
+ import { classify } from '../helpers/string.helper';
2
2
  import { Injectable, Logger, NotFoundException, OnApplicationBootstrap } from '@nestjs/common';
3
3
  import { InjectDataSource } from '@nestjs/typeorm';
4
4
  import * as fs from 'fs/promises'; // Use the Promise-based version of fs for async/await
@@ -21,7 +21,6 @@ import { MediaStorageProviderMetadataRepository } from 'src/repository/media-sto
21
21
  import { S3FileService } from './file';
22
22
  import { MediaStorageProviderMetadata } from 'src/entities/media-storage-provider-metadata.entity';
23
23
 
24
-
25
24
  @Injectable()
26
25
  export class FieldMetadataService implements OnApplicationBootstrap {
27
26
  constructor(
@@ -806,7 +805,6 @@ export class FieldMetadataService implements OnApplicationBootstrap {
806
805
  "columnName"
807
806
  ];
808
807
 
809
-
810
808
  case SolidFieldType.json:
811
809
  return [
812
810
  "name",
@@ -1194,7 +1192,6 @@ export class FieldMetadataService implements OnApplicationBootstrap {
1194
1192
  const parsedFormValues = typeof formValues === 'string' ? qs.parse(formValues, { allowDots: true }) : formValues;
1195
1193
  selectionDynamicProviderCtxt['formValues'] = parsedFormValues;
1196
1194
 
1197
-
1198
1195
  // 3. get hold of the provider instance from the SolidRegistry
1199
1196
  const selectionProviderInstance = this.solidRegistry.getSelectionProviderInstance(selectionDynamicProvider);
1200
1197
  if (!selectionProviderInstance) {
@@ -1,7 +1,7 @@
1
1
  import { Injectable, Logger } from "@nestjs/common";
2
2
  import { SolidIntrospectService } from "./solid-introspect.service";
3
3
  import { ModuleMetadataHelperService } from "src/helpers/module-metadata-helper.service";
4
- import { classify } from "@angular-devkit/core/src/utils/strings";
4
+ import { classify } from '../helpers/string.helper';
5
5
 
6
6
  interface ScenarioFixture {
7
7
  name: string;
@@ -1,10 +1,9 @@
1
1
  import { Injectable, Logger } from '@nestjs/common';
2
2
 
3
- import { classify } from '@angular-devkit/core/src/utils/strings';
3
+ import { classify } from '../../../helpers/string.helper';
4
4
  import { IMcpToolResponseHandler } from 'src/interfaces';
5
5
  import { SolidIntrospectService } from '../../solid-introspect.service';
6
6
 
7
-
8
7
  @Injectable()
9
8
  export class McpHandlerFactory {
10
9
  private readonly logger = new Logger(McpHandlerFactory.name);
@@ -6,7 +6,6 @@ import { EntityManager } from 'typeorm';
6
6
  import { CRUDService } from 'src/services/crud.service';
7
7
 
8
8
 
9
- import { classify } from '@angular-devkit/core/src/utils/strings';
10
9
  import { HttpService } from '@nestjs/axios';
11
10
  import { ERROR_MESSAGES } from 'src/constants/error-messages';
12
11
  import { RelationFieldsCommand, RelationType, SolidFieldType } from 'src/dtos/create-field-metadata.dto';
@@ -27,6 +26,7 @@ import { ModelMetadataHelperService } from 'src/helpers/model-metadata-helper.se
27
26
  import { getUserExcludedFields } from 'src/helpers/user-helper';
28
27
  import { ActiveUserData } from 'src/interfaces/active-user-data.interface';
29
28
  import {upperFirst, camelCase} from 'lodash';
29
+ import { classify } from '../helpers/string.helper';
30
30
 
31
31
  interface ImportTemplateFileInfo {
32
32
  stream: NodeJS.ReadableStream;
@@ -9,7 +9,7 @@ import { MenuItemMetadata } from '../entities/menu-item-metadata.entity';
9
9
  import { UpdateMenuItemMetadataDto } from '../dtos/update-menu-item-metadata.dto';
10
10
  import { ActiveUserData } from 'src/interfaces/active-user-data.interface';
11
11
  import { ModuleMetadata } from '../entities/module-metadata.entity';
12
- import { dasherize } from '@angular-devkit/core/src/utils/strings';
12
+ import { kebabCase } from 'lodash';
13
13
  import { MenuItemMetadataRepository } from 'src/repository/menu-item-metadata.repository';
14
14
  import { SavedFiltersRepository } from 'src/repository/saved-filters.repository';
15
15
 
@@ -191,7 +191,7 @@ export class MenuItemMetadataService extends CRUDService<MenuItemMetadata> {
191
191
  // TODO: Here we are assuming that we will always take the user to collection view of a model.
192
192
  // We can make provision to take them other views also in the future.
193
193
  // path = `/admin/core/${rootItem.module.name}/${rootItem.action.model.singularName}/${rootItem.action.view.name}`;
194
- path = `/admin/core/${rootItem.module.name}/${dasherize(rootItem.action?.model?.singularName ?? 'unknown')}/${rootItem.action?.view?.type ?? 'list'}?menuItemId=${menuItemId}&menuItemName=${menuItemName}&actionId=${actionId}&actionName=${actionName}${savedFilterId ? `&savedQuery=${savedFilterId}` : ''}`;
194
+ path = `/admin/core/${rootItem.module.name}/${kebabCase(rootItem.action?.model?.singularName ?? 'unknown')}/${rootItem.action?.view?.type ?? 'list'}?menuItemId=${menuItemId}&menuItemName=${menuItemName}&actionId=${actionId}&actionName=${actionName}${savedFilterId ? `&savedQuery=${savedFilterId}` : ''}`;
195
195
 
196
196
  }
197
197
  }
@@ -7,7 +7,8 @@ import { CreateModelMetadataDto } from '../dtos/create-model-metadata.dto';
7
7
  import { ModelMetadata } from '../entities/model-metadata.entity';
8
8
  import { ModuleMetadata } from '../entities/module-metadata.entity';
9
9
 
10
- import { classify, dasherize } from '@angular-devkit/core/src/utils/strings';
10
+ import { kebabCase } from 'lodash';
11
+ import { classify } from '../helpers/string.helper';
11
12
  import { ERROR_MESSAGES } from 'src/constants/error-messages';
12
13
  import { DisallowInProduction } from 'src/decorators/disallow-in-production.decorator';
13
14
  import { SolidFieldType } from 'src/dtos/create-field-metadata.dto';
@@ -586,32 +587,32 @@ export class ModelMetadataService {
586
587
 
587
588
  const filesToDelete = [];
588
589
  // <singularName>.entity.ts | The TypeORM model that needs to be deleted. | Automatic
589
- const entityFilePath = `${modulePath}/entities/${dasherize(modelEntity.singularName)}.entity.ts`;
590
+ const entityFilePath = `${modulePath}/entities/${kebabCase(modelEntity.singularName)}.entity.ts`;
590
591
  filesToDelete.push(entityFilePath);
591
592
  this.logger.log(`About to delete entity file path: ${entityFilePath}`);
592
593
 
593
594
  // <singularName>.create.dto.ts | The TypeORM model that needs to be deleted. | Automatic
594
- const createDtoFilePath = `${modulePath}/dtos/create-${dasherize(modelEntity.singularName)}.dto.ts`;
595
+ const createDtoFilePath = `${modulePath}/dtos/create-${kebabCase(modelEntity.singularName)}.dto.ts`;
595
596
  filesToDelete.push(createDtoFilePath);
596
597
  this.logger.log(`About to delete create DTO file path: ${createDtoFilePath}`);
597
598
 
598
599
  // <singularName>.update.dto.ts | The TypeORM model that needs to be deleted. | Automatic
599
- const updateDtoFilePath = `${modulePath}/dtos/update-${dasherize(modelEntity.singularName)}.dto.ts`;
600
+ const updateDtoFilePath = `${modulePath}/dtos/update-${kebabCase(modelEntity.singularName)}.dto.ts`;
600
601
  filesToDelete.push(updateDtoFilePath);
601
602
  this.logger.log(`About to delete update DTO file path: ${updateDtoFilePath}`);
602
603
 
603
604
  // <singularName>.repository.ts | The TypeORM model that needs to be deleted. | Automatic
604
- const repositoryFilePath = `${modulePath}/repositories/${dasherize(modelEntity.singularName)}.repository.ts`;
605
+ const repositoryFilePath = `${modulePath}/repositories/${kebabCase(modelEntity.singularName)}.repository.ts`;
605
606
  filesToDelete.push(repositoryFilePath);
606
607
  this.logger.log(`About to delete repository file path: ${repositoryFilePath}`);
607
608
 
608
609
  // <singularName>.service.ts | The TypeORM model that needs to be deleted. | Automatic
609
- const serviceFilePath = `${modulePath}/services/${dasherize(modelEntity.singularName)}.service.ts`;
610
+ const serviceFilePath = `${modulePath}/services/${kebabCase(modelEntity.singularName)}.service.ts`;
610
611
  filesToDelete.push(serviceFilePath);
611
612
  this.logger.log(`About to delete service file path: ${serviceFilePath}`);
612
613
 
613
614
  // <singularName>.controller.ts | The TypeORM model that needs to be deleted. | Automatic
614
- const controllerFilePath = `${modulePath}/controllers/${dasherize(modelEntity.singularName)}.controller.ts`;
615
+ const controllerFilePath = `${modulePath}/controllers/${kebabCase(modelEntity.singularName)}.controller.ts`;
615
616
  filesToDelete.push(controllerFilePath);
616
617
  this.logger.log(`About to delete controller file path: ${controllerFilePath}`);
617
618
 
@@ -713,11 +714,11 @@ export class ModelMetadataService {
713
714
 
714
715
  // <moduleName>.module.ts | Remove all references and imports of the deleted model files. | Automatic
715
716
  if (modulePath) {
716
- const moduleFilePath = path.resolve(modulePath, `${dasherize(modelEntity.module?.name)}.module.ts`);
717
+ const moduleFilePath = path.resolve(modulePath, `${kebabCase(modelEntity.module?.name)}.module.ts`);
717
718
  this.logger.log(`Removing model '${modelEntity.singularName}' references from module file: ${moduleFilePath}`);
718
719
  try {
719
720
  this.solidTsMorphService.begin();
720
- const modelPathSegment = `/${dasherize(modelEntity.singularName)}.`;
721
+ const modelPathSegment = `/${kebabCase(modelEntity.singularName)}.`;
721
722
  const { removedIdentifiers } = this.solidTsMorphService.removeImports(
722
723
  moduleFilePath,
723
724
  spec => spec.includes(modelPathSegment)
@@ -836,7 +837,7 @@ export class ModelMetadataService {
836
837
  }
837
838
  }
838
839
  const actionName = `${model.singularName}-list-action`;
839
- const treeViewActionName = `${model.singularName}-tree-view-action`;
840
+ const treeViewActionName = `${model.singularName}-tree-action`;
840
841
  const listViewName = `${model.singularName}-list-view`;
841
842
  const treeViewName = `${model.singularName}-tree-view`;
842
843
  const formViewName = `${model.singularName}-form-view`;
@@ -930,7 +931,6 @@ export class ModelMetadataService {
930
931
  }
931
932
  };
932
933
 
933
-
934
934
  const modelFormView = {
935
935
  name: formViewName,
936
936
  displayName: `${model.displayName}`,
@@ -1415,7 +1415,6 @@ export class ModelMetadataService {
1415
1415
  const currentOffset = (meta.currentPage - 1) * meta.perPage;
1416
1416
  const currentIndexGlobal = currentOffset + index + 1;
1417
1417
 
1418
-
1419
1418
  let prev: { record: any; offset: number; limit: number } | null = null;
1420
1419
  let next: { record: any; offset: number; limit: number } | null = null;
1421
1420
 
@@ -1517,5 +1516,4 @@ export class ModelMetadataService {
1517
1516
  };
1518
1517
  }
1519
1518
 
1520
-
1521
1519
  }
@@ -6,7 +6,7 @@ import { DataSource, EntityManager, SelectQueryBuilder } from 'typeorm';
6
6
  import { CreateModuleMetadataDto } from '../dtos/create-module-metadata.dto';
7
7
  import { ModuleMetadata } from '../entities/module-metadata.entity';
8
8
 
9
- import { classify } from '@angular-devkit/core/src/utils/strings';
9
+ import { classify } from '../helpers/string.helper';
10
10
  import { ConfigService } from '@nestjs/config';
11
11
  import * as fs from 'fs/promises'; // Use the Promise-based version of fs for async/await
12
12
  import * as path from 'path'; // To handle file paths
@@ -278,7 +278,6 @@ export class ModuleMetadataService {
278
278
  };
279
279
  }
280
280
 
281
-
282
281
  metaData.moduleMetadata.name = module?.name;
283
282
  metaData.moduleMetadata.displayName = module?.displayName;
284
283
  metaData.moduleMetadata.description = module?.description;
@@ -2,10 +2,9 @@ import { forwardRef, Inject, Logger } from '@nestjs/common';
2
2
  import { Injectable } from '@nestjs/common';
3
3
 
4
4
  import { QueueMessage, QueuePublisher } from 'src/interfaces/mq';
5
- import { classify } from '@angular-devkit/core/src/utils/strings';
5
+ import { classify } from '../../helpers/string.helper';
6
6
  import { SolidIntrospectService } from '../solid-introspect.service';
7
7
 
8
-
9
8
  @Injectable()
10
9
  export class PublisherFactory<T> {
11
10
  private readonly logger = new Logger(PublisherFactory.name);
@@ -4,7 +4,7 @@ import { BadRequestException, Injectable } from "@nestjs/common";
4
4
  import { ISelectionProvider, ISelectionProviderContext, ISelectionProviderValues } from "../../interfaces";
5
5
  import { BasicFilterDto } from "src/dtos/basic-filters.dto";
6
6
  import { SolidIntrospectService } from "../solid-introspect.service";
7
- import { classify } from "@angular-devkit/core/src/utils/strings";
7
+ import { classify } from '../../helpers/string.helper';
8
8
  import { CRUDService } from "../crud.service";
9
9
 
10
10
  interface PseudoForeignKeySelectionProviderContext extends ISelectionProviderContext {
@@ -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
  /**