@solidxai/core 0.1.13-beta.2 → 0.1.13-beta.21

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 (517) hide show
  1. package/CHANGELOG.md +10107 -0
  2. package/CLAUDE.md +5 -6
  3. package/README.md +19 -0
  4. package/dist/commands/run-tests.command.d.ts +9 -1
  5. package/dist/commands/run-tests.command.d.ts.map +1 -1
  6. package/dist/commands/run-tests.command.js +69 -6
  7. package/dist/commands/run-tests.command.js.map +1 -1
  8. package/dist/commands/seed.command.d.ts +2 -0
  9. package/dist/commands/seed.command.d.ts.map +1 -1
  10. package/dist/commands/seed.command.js +21 -0
  11. package/dist/commands/seed.command.js.map +1 -1
  12. package/dist/config/cache.options.d.ts.map +1 -1
  13. package/dist/config/cache.options.js +2 -2
  14. package/dist/config/cache.options.js.map +1 -1
  15. package/dist/constants/chatter-message.constants.d.ts +1 -0
  16. package/dist/constants/chatter-message.constants.d.ts.map +1 -1
  17. package/dist/constants/chatter-message.constants.js +3 -1
  18. package/dist/constants/chatter-message.constants.js.map +1 -1
  19. package/dist/constants/draft-publish-fields.d.ts +2 -0
  20. package/dist/constants/draft-publish-fields.d.ts.map +1 -0
  21. package/dist/constants/draft-publish-fields.js +5 -0
  22. package/dist/constants/draft-publish-fields.js.map +1 -0
  23. package/dist/constants/error-messages.d.ts +7 -0
  24. package/dist/constants/error-messages.d.ts.map +1 -1
  25. package/dist/constants/error-messages.js +7 -0
  26. package/dist/constants/error-messages.js.map +1 -1
  27. package/dist/constants/media-file-types.d.ts +12 -0
  28. package/dist/constants/media-file-types.d.ts.map +1 -1
  29. package/dist/constants/media-file-types.js +66 -1
  30. package/dist/constants/media-file-types.js.map +1 -1
  31. package/dist/constants/success-messages.d.ts +3 -0
  32. package/dist/constants/success-messages.d.ts.map +1 -1
  33. package/dist/constants/success-messages.js +3 -0
  34. package/dist/constants/success-messages.js.map +1 -1
  35. package/dist/constants/user.constants.d.ts +2 -0
  36. package/dist/constants/user.constants.d.ts.map +1 -0
  37. package/dist/constants/user.constants.js +5 -0
  38. package/dist/constants/user.constants.js.map +1 -0
  39. package/dist/controllers/action-metadata.controller.d.ts +1 -1
  40. package/dist/controllers/action-metadata.controller.js +1 -1
  41. package/dist/controllers/agent-event.controller.d.ts +1 -1
  42. package/dist/controllers/agent-event.controller.js +1 -1
  43. package/dist/controllers/agent-session.controller.d.ts +1 -1
  44. package/dist/controllers/agent-session.controller.js +1 -1
  45. package/dist/controllers/authentication.controller.d.ts +1 -1
  46. package/dist/controllers/authentication.controller.d.ts.map +1 -1
  47. package/dist/controllers/authentication.controller.js +4 -3
  48. package/dist/controllers/authentication.controller.js.map +1 -1
  49. package/dist/controllers/chatter-message.controller.d.ts +5 -0
  50. package/dist/controllers/chatter-message.controller.d.ts.map +1 -1
  51. package/dist/controllers/chatter-message.controller.js +14 -0
  52. package/dist/controllers/chatter-message.controller.js.map +1 -1
  53. package/dist/controllers/dashboard-user-layout.controller.d.ts +1 -1
  54. package/dist/controllers/dashboard-user-layout.controller.js +1 -1
  55. package/dist/controllers/email-template.controller.d.ts +1 -1
  56. package/dist/controllers/email-template.controller.js +1 -1
  57. package/dist/controllers/export-template.controller.d.ts +1 -1
  58. package/dist/controllers/export-template.controller.d.ts.map +1 -1
  59. package/dist/controllers/export-template.controller.js +6 -4
  60. package/dist/controllers/export-template.controller.js.map +1 -1
  61. package/dist/controllers/export-transaction.controller.d.ts +1 -1
  62. package/dist/controllers/export-transaction.controller.js +1 -1
  63. package/dist/controllers/field-metadata.controller.d.ts +2 -2
  64. package/dist/controllers/import-transaction-error-log.controller.d.ts +1 -1
  65. package/dist/controllers/import-transaction-error-log.controller.js +1 -1
  66. package/dist/controllers/import-transaction.controller.d.ts +1 -1
  67. package/dist/controllers/import-transaction.controller.d.ts.map +1 -1
  68. package/dist/controllers/import-transaction.controller.js +7 -7
  69. package/dist/controllers/import-transaction.controller.js.map +1 -1
  70. package/dist/controllers/list-of-values.controller.d.ts +1 -1
  71. package/dist/controllers/list-of-values.controller.js +1 -1
  72. package/dist/controllers/locale.controller.d.ts +1 -1
  73. package/dist/controllers/locale.controller.js +1 -1
  74. package/dist/controllers/mcp-audit-log.controller.d.ts +1 -1
  75. package/dist/controllers/mcp-audit-log.controller.js +1 -1
  76. package/dist/controllers/media.controller.d.ts +2 -2
  77. package/dist/controllers/media.controller.d.ts.map +1 -1
  78. package/dist/controllers/media.controller.js +13 -8
  79. package/dist/controllers/media.controller.js.map +1 -1
  80. package/dist/controllers/menu-item-metadata.controller.d.ts +1 -1
  81. package/dist/controllers/menu-item-metadata.controller.js +1 -1
  82. package/dist/controllers/model-sequence.controller.d.ts +1 -1
  83. package/dist/controllers/model-sequence.controller.js +1 -1
  84. package/dist/controllers/module-package.controller.d.ts.map +1 -1
  85. package/dist/controllers/module-package.controller.js +2 -3
  86. package/dist/controllers/module-package.controller.js.map +1 -1
  87. package/dist/controllers/mpin-authentication.controller.d.ts +44 -0
  88. package/dist/controllers/mpin-authentication.controller.d.ts.map +1 -0
  89. package/dist/controllers/mpin-authentication.controller.js +102 -0
  90. package/dist/controllers/mpin-authentication.controller.js.map +1 -0
  91. package/dist/controllers/mq-message-queue.controller.d.ts +1 -1
  92. package/dist/controllers/mq-message-queue.controller.js +1 -1
  93. package/dist/controllers/mq-message.controller.d.ts +1 -1
  94. package/dist/controllers/mq-message.controller.js +1 -1
  95. package/dist/controllers/permission-metadata.controller.d.ts +1 -1
  96. package/dist/controllers/permission-metadata.controller.js +1 -1
  97. package/dist/controllers/role-metadata.controller.d.ts +1 -1
  98. package/dist/controllers/role-metadata.controller.js +1 -1
  99. package/dist/controllers/saved-filters.controller.d.ts +1 -1
  100. package/dist/controllers/saved-filters.controller.js +1 -1
  101. package/dist/controllers/scheduled-job.controller.d.ts +1 -1
  102. package/dist/controllers/scheduled-job.controller.js +1 -1
  103. package/dist/controllers/security-rule.controller.d.ts +1 -1
  104. package/dist/controllers/security-rule.controller.js +1 -1
  105. package/dist/controllers/sms-template.controller.d.ts +1 -1
  106. package/dist/controllers/sms-template.controller.js +1 -1
  107. package/dist/controllers/user-activity-history.controller.d.ts +1 -1
  108. package/dist/controllers/user-activity-history.controller.js +1 -1
  109. package/dist/controllers/user-view-metadata.controller.d.ts +1 -1
  110. package/dist/controllers/user-view-metadata.controller.js +1 -1
  111. package/dist/controllers/user.controller.d.ts +2 -2
  112. package/dist/controllers/user.controller.js +2 -2
  113. package/dist/controllers/view-metadata.controller.d.ts +2 -2
  114. package/dist/controllers/view-metadata.controller.js +1 -1
  115. package/dist/controllers/workflow-definition.controller.d.ts +1 -1
  116. package/dist/controllers/workflow-definition.controller.js +1 -1
  117. package/dist/controllers/workflow-execution-artifact.controller.d.ts +1 -1
  118. package/dist/controllers/workflow-execution-artifact.controller.js +1 -1
  119. package/dist/controllers/workflow-execution-log.controller.d.ts +1 -1
  120. package/dist/controllers/workflow-execution-log.controller.js +1 -1
  121. package/dist/controllers/workflow-execution.controller.d.ts +1 -1
  122. package/dist/controllers/workflow-execution.controller.js +1 -1
  123. package/dist/controllers/workflow-secret.controller.d.ts +1 -1
  124. package/dist/controllers/workflow-secret.controller.js +1 -1
  125. package/dist/controllers/workflow-step-execution.controller.d.ts +1 -1
  126. package/dist/controllers/workflow-step-execution.controller.js +1 -1
  127. package/dist/controllers/workflow-trigger-execution.controller.d.ts +1 -1
  128. package/dist/controllers/workflow-trigger-execution.controller.js +1 -1
  129. package/dist/dtos/basic-filters.dto.d.ts +0 -1
  130. package/dist/dtos/basic-filters.dto.d.ts.map +1 -1
  131. package/dist/dtos/basic-filters.dto.js +1 -6
  132. package/dist/dtos/basic-filters.dto.js.map +1 -1
  133. package/dist/dtos/change-mpin.dto.d.ts +6 -0
  134. package/dist/dtos/change-mpin.dto.d.ts.map +1 -0
  135. package/dist/dtos/change-mpin.dto.js +39 -0
  136. package/dist/dtos/change-mpin.dto.js.map +1 -0
  137. package/dist/dtos/create-field-metadata.dto.d.ts +3 -6
  138. package/dist/dtos/create-field-metadata.dto.d.ts.map +1 -1
  139. package/dist/dtos/create-field-metadata.dto.js +15 -10
  140. package/dist/dtos/create-field-metadata.dto.js.map +1 -1
  141. package/dist/dtos/create-model-sequence.dto.d.ts +1 -1
  142. package/dist/dtos/create-model-sequence.dto.d.ts.map +1 -1
  143. package/dist/dtos/create-model-sequence.dto.js +1 -1
  144. package/dist/dtos/create-model-sequence.dto.js.map +1 -1
  145. package/dist/dtos/mpin-login.dto.d.ts +5 -0
  146. package/dist/dtos/mpin-login.dto.d.ts.map +1 -0
  147. package/dist/dtos/mpin-login.dto.js +33 -0
  148. package/dist/dtos/mpin-login.dto.js.map +1 -0
  149. package/dist/dtos/setup-mpin.dto.d.ts +7 -0
  150. package/dist/dtos/setup-mpin.dto.d.ts.map +1 -0
  151. package/dist/dtos/setup-mpin.dto.js +47 -0
  152. package/dist/dtos/setup-mpin.dto.js.map +1 -0
  153. package/dist/entities/common.entity.d.ts +4 -0
  154. package/dist/entities/common.entity.d.ts.map +1 -1
  155. package/dist/entities/common.entity.js +25 -1
  156. package/dist/entities/common.entity.js.map +1 -1
  157. package/dist/entities/dashboard-user-layout.entity.js +2 -2
  158. package/dist/entities/dashboard-user-layout.entity.js.map +1 -1
  159. package/dist/entities/field-metadata.entity.d.ts +1 -0
  160. package/dist/entities/field-metadata.entity.d.ts.map +1 -1
  161. package/dist/entities/field-metadata.entity.js +5 -1
  162. package/dist/entities/field-metadata.entity.js.map +1 -1
  163. package/dist/entities/saved-filters.entity.js +3 -3
  164. package/dist/entities/saved-filters.entity.js.map +1 -1
  165. package/dist/entities/user-device-credential.entity.d.ts +18 -0
  166. package/dist/entities/user-device-credential.entity.d.ts.map +1 -0
  167. package/dist/entities/user-device-credential.entity.js +91 -0
  168. package/dist/entities/user-device-credential.entity.js.map +1 -0
  169. package/dist/entities/user.entity.d.ts.map +1 -1
  170. package/dist/entities/user.entity.js +36 -0
  171. package/dist/entities/user.entity.js.map +1 -1
  172. package/dist/entities/view-metadata.entity.js.map +1 -1
  173. package/dist/entities/workflow-execution-artifact.entity.d.ts.map +1 -1
  174. package/dist/entities/workflow-execution-artifact.entity.js +4 -3
  175. package/dist/entities/workflow-execution-artifact.entity.js.map +1 -1
  176. package/dist/entities/workflow-execution-log.entity.d.ts.map +1 -1
  177. package/dist/entities/workflow-execution-log.entity.js +4 -3
  178. package/dist/entities/workflow-execution-log.entity.js.map +1 -1
  179. package/dist/entities/workflow-execution.entity.d.ts.map +1 -1
  180. package/dist/entities/workflow-execution.entity.js +3 -2
  181. package/dist/entities/workflow-execution.entity.js.map +1 -1
  182. package/dist/entities/workflow-secret.entity.d.ts.map +1 -1
  183. package/dist/entities/workflow-secret.entity.js +3 -2
  184. package/dist/entities/workflow-secret.entity.js.map +1 -1
  185. package/dist/entities/workflow-step-execution.entity.d.ts.map +1 -1
  186. package/dist/entities/workflow-step-execution.entity.js +3 -2
  187. package/dist/entities/workflow-step-execution.entity.js.map +1 -1
  188. package/dist/entities/workflow-trigger-execution.entity.d.ts.map +1 -1
  189. package/dist/entities/workflow-trigger-execution.entity.js +7 -6
  190. package/dist/entities/workflow-trigger-execution.entity.js.map +1 -1
  191. package/dist/factories/mail.factory.d.ts.map +1 -1
  192. package/dist/factories/mail.factory.js +4 -0
  193. package/dist/factories/mail.factory.js.map +1 -1
  194. package/dist/filters/http-exception.filter.d.ts.map +1 -1
  195. package/dist/filters/http-exception.filter.js +5 -1
  196. package/dist/filters/http-exception.filter.js.map +1 -1
  197. package/dist/helpers/bootstrap.helper.d.ts +5 -2
  198. package/dist/helpers/bootstrap.helper.d.ts.map +1 -1
  199. package/dist/helpers/bootstrap.helper.js +7 -3
  200. package/dist/helpers/bootstrap.helper.js.map +1 -1
  201. package/dist/helpers/field-crud-managers/MediaFieldCrudManager.d.ts +7 -0
  202. package/dist/helpers/field-crud-managers/MediaFieldCrudManager.d.ts.map +1 -1
  203. package/dist/helpers/field-crud-managers/MediaFieldCrudManager.js +66 -32
  204. package/dist/helpers/field-crud-managers/MediaFieldCrudManager.js.map +1 -1
  205. package/dist/helpers/file-download.helper.d.ts +9 -0
  206. package/dist/helpers/file-download.helper.d.ts.map +1 -0
  207. package/dist/helpers/file-download.helper.js +19 -0
  208. package/dist/helpers/file-download.helper.js.map +1 -0
  209. package/dist/helpers/model-metadata-helper.service.d.ts.map +1 -1
  210. package/dist/helpers/model-metadata-helper.service.js +30 -1
  211. package/dist/helpers/model-metadata-helper.service.js.map +1 -1
  212. package/dist/helpers/security.helper.d.ts +5 -1
  213. package/dist/helpers/security.helper.d.ts.map +1 -1
  214. package/dist/helpers/security.helper.js +15 -4
  215. package/dist/helpers/security.helper.js.map +1 -1
  216. package/dist/helpers/solid-core-error-codes-provider.service.d.ts.map +1 -1
  217. package/dist/helpers/solid-core-error-codes-provider.service.js +45 -0
  218. package/dist/helpers/solid-core-error-codes-provider.service.js.map +1 -1
  219. package/dist/helpers/solid-microservice-adapter.service.d.ts.map +1 -1
  220. package/dist/helpers/solid-microservice-adapter.service.js +1 -1
  221. package/dist/helpers/solid-microservice-adapter.service.js.map +1 -1
  222. package/dist/helpers/solid-registry.js +1 -1
  223. package/dist/helpers/solid-registry.js.map +1 -1
  224. package/dist/helpers/typeorm-db-helper.d.ts.map +1 -1
  225. package/dist/helpers/typeorm-db-helper.js +9 -0
  226. package/dist/helpers/typeorm-db-helper.js.map +1 -1
  227. package/dist/index.d.ts +10 -0
  228. package/dist/index.d.ts.map +1 -1
  229. package/dist/index.js +10 -0
  230. package/dist/index.js.map +1 -1
  231. package/dist/interfaces/active-user-data.interface.d.ts +1 -0
  232. package/dist/interfaces/active-user-data.interface.d.ts.map +1 -1
  233. package/dist/interfaces/active-user-data.interface.js.map +1 -1
  234. package/dist/interfaces.d.ts +1 -0
  235. package/dist/interfaces.d.ts.map +1 -1
  236. package/dist/interfaces.js.map +1 -1
  237. package/dist/repository/user-device-credential.repository.d.ts +12 -0
  238. package/dist/repository/user-device-credential.repository.d.ts.map +1 -0
  239. package/dist/repository/user-device-credential.repository.js +34 -0
  240. package/dist/repository/user-device-credential.repository.js.map +1 -0
  241. package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
  242. package/dist/seeders/module-metadata-seeder.service.js +51 -30
  243. package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
  244. package/dist/seeders/module-test-data.service.d.ts +3 -1
  245. package/dist/seeders/module-test-data.service.d.ts.map +1 -1
  246. package/dist/seeders/module-test-data.service.js +8 -2
  247. package/dist/seeders/module-test-data.service.js.map +1 -1
  248. package/dist/seeders/seed-data/solid-core-metadata.json +290 -78
  249. package/dist/services/api-key.service.d.ts.map +1 -1
  250. package/dist/services/api-key.service.js +1 -1
  251. package/dist/services/api-key.service.js.map +1 -1
  252. package/dist/services/authentication.service.d.ts +9 -5
  253. package/dist/services/authentication.service.d.ts.map +1 -1
  254. package/dist/services/authentication.service.js +102 -23
  255. package/dist/services/authentication.service.js.map +1 -1
  256. package/dist/services/chatter-message.service.d.ts +16 -1
  257. package/dist/services/chatter-message.service.d.ts.map +1 -1
  258. package/dist/services/chatter-message.service.js +100 -16
  259. package/dist/services/chatter-message.service.js.map +1 -1
  260. package/dist/services/crud-helper.service.d.ts +6 -4
  261. package/dist/services/crud-helper.service.d.ts.map +1 -1
  262. package/dist/services/crud-helper.service.js +32 -48
  263. package/dist/services/crud-helper.service.js.map +1 -1
  264. package/dist/services/crud.service.d.ts +13 -1
  265. package/dist/services/crud.service.d.ts.map +1 -1
  266. package/dist/services/crud.service.js +94 -68
  267. package/dist/services/crud.service.js.map +1 -1
  268. package/dist/services/datasource-introspection.service.d.ts.map +1 -1
  269. package/dist/services/datasource-introspection.service.js.map +1 -1
  270. package/dist/services/draft-publish-helper.service.d.ts +53 -0
  271. package/dist/services/draft-publish-helper.service.d.ts.map +1 -0
  272. package/dist/services/draft-publish-helper.service.js +402 -0
  273. package/dist/services/draft-publish-helper.service.js.map +1 -0
  274. package/dist/services/field-metadata.service.d.ts +2 -2
  275. package/dist/services/field-metadata.service.d.ts.map +1 -1
  276. package/dist/services/field-metadata.service.js +4 -1
  277. package/dist/services/field-metadata.service.js.map +1 -1
  278. package/dist/services/internationalisation-helper.service.d.ts +19 -0
  279. package/dist/services/internationalisation-helper.service.d.ts.map +1 -0
  280. package/dist/services/internationalisation-helper.service.js +107 -0
  281. package/dist/services/internationalisation-helper.service.js.map +1 -0
  282. package/dist/services/locale.service.d.ts +1 -1
  283. package/dist/services/media-storage.utils.d.ts +1 -0
  284. package/dist/services/media-storage.utils.d.ts.map +1 -1
  285. package/dist/services/media-storage.utils.js +12 -1
  286. package/dist/services/media-storage.utils.js.map +1 -1
  287. package/dist/services/media.service.d.ts +3 -2
  288. package/dist/services/media.service.d.ts.map +1 -1
  289. package/dist/services/media.service.js +45 -29
  290. package/dist/services/media.service.js.map +1 -1
  291. package/dist/services/metadata-validation.service.d.ts +7 -0
  292. package/dist/services/metadata-validation.service.d.ts.map +1 -0
  293. package/dist/services/metadata-validation.service.js +42 -0
  294. package/dist/services/metadata-validation.service.js.map +1 -0
  295. package/dist/services/model-metadata.service.d.ts.map +1 -1
  296. package/dist/services/model-metadata.service.js +2 -1
  297. package/dist/services/model-metadata.service.js.map +1 -1
  298. package/dist/services/module-metadata.service.d.ts.map +1 -1
  299. package/dist/services/module-metadata.service.js +9 -1
  300. package/dist/services/module-metadata.service.js.map +1 -1
  301. package/dist/services/mpin.service.d.ts +67 -0
  302. package/dist/services/mpin.service.d.ts.map +1 -0
  303. package/dist/services/mpin.service.js +282 -0
  304. package/dist/services/mpin.service.js.map +1 -0
  305. package/dist/services/object.utils.d.ts +2 -0
  306. package/dist/services/object.utils.d.ts.map +1 -0
  307. package/dist/services/object.utils.js +11 -0
  308. package/dist/services/object.utils.js.map +1 -0
  309. package/dist/services/refresh-token-ids-storage.service.d.ts +25 -6
  310. package/dist/services/refresh-token-ids-storage.service.d.ts.map +1 -1
  311. package/dist/services/refresh-token-ids-storage.service.js +80 -42
  312. package/dist/services/refresh-token-ids-storage.service.js.map +1 -1
  313. package/dist/services/setting.service.d.ts.map +1 -1
  314. package/dist/services/setting.service.js +6 -1
  315. package/dist/services/setting.service.js.map +1 -1
  316. package/dist/services/settings/default-settings-provider.service.d.ts +248 -12
  317. package/dist/services/settings/default-settings-provider.service.d.ts.map +1 -1
  318. package/dist/services/settings/default-settings-provider.service.js +143 -6
  319. package/dist/services/settings/default-settings-provider.service.js.map +1 -1
  320. package/dist/services/user.service.d.ts +2 -2
  321. package/dist/services/user.service.d.ts.map +1 -1
  322. package/dist/services/user.service.js +9 -3
  323. package/dist/services/user.service.js.map +1 -1
  324. package/dist/services/view-metadata.service.d.ts +1 -2
  325. package/dist/services/view-metadata.service.d.ts.map +1 -1
  326. package/dist/services/view-metadata.service.js +3 -55
  327. package/dist/services/view-metadata.service.js.map +1 -1
  328. package/dist/services/workflow/nodes/execution-fail.node.d.ts +6 -0
  329. package/dist/services/workflow/nodes/execution-fail.node.d.ts.map +1 -0
  330. package/dist/services/workflow/nodes/execution-fail.node.js +81 -0
  331. package/dist/services/workflow/nodes/execution-fail.node.js.map +1 -0
  332. package/dist/services/workflow/nodes/for-each.node.d.ts +2 -0
  333. package/dist/services/workflow/nodes/for-each.node.d.ts.map +1 -1
  334. package/dist/services/workflow/nodes/for-each.node.js +114 -5
  335. package/dist/services/workflow/nodes/for-each.node.js.map +1 -1
  336. package/dist/services/workflow/nodes/if.node.d.ts.map +1 -1
  337. package/dist/services/workflow/nodes/if.node.js +7 -0
  338. package/dist/services/workflow/nodes/if.node.js.map +1 -1
  339. package/dist/services/workflow/nodes/log-write.node.d.ts.map +1 -1
  340. package/dist/services/workflow/nodes/log-write.node.js +2 -0
  341. package/dist/services/workflow/nodes/log-write.node.js.map +1 -1
  342. package/dist/services/workflow/nodes/loop-until.node.d.ts +12 -0
  343. package/dist/services/workflow/nodes/loop-until.node.d.ts.map +1 -0
  344. package/dist/services/workflow/nodes/loop-until.node.js +281 -0
  345. package/dist/services/workflow/nodes/loop-until.node.js.map +1 -0
  346. package/dist/services/workflow/nodes/parallel.node.d.ts.map +1 -1
  347. package/dist/services/workflow/nodes/parallel.node.js +7 -0
  348. package/dist/services/workflow/nodes/parallel.node.js.map +1 -1
  349. package/dist/services/workflow/nodes/sequential.node.d.ts.map +1 -1
  350. package/dist/services/workflow/nodes/sequential.node.js +7 -0
  351. package/dist/services/workflow/nodes/sequential.node.js.map +1 -1
  352. package/dist/services/workflow/nodes/switch.node.d.ts.map +1 -1
  353. package/dist/services/workflow/nodes/switch.node.js +7 -0
  354. package/dist/services/workflow/nodes/switch.node.js.map +1 -1
  355. package/dist/services/workflow/workflow-definition-validator.service.d.ts.map +1 -1
  356. package/dist/services/workflow/workflow-definition-validator.service.js +5 -2
  357. package/dist/services/workflow/workflow-definition-validator.service.js.map +1 -1
  358. package/dist/services/workflow/workflow-expression.service.d.ts.map +1 -1
  359. package/dist/services/workflow/workflow-expression.service.js +5 -0
  360. package/dist/services/workflow/workflow-expression.service.js.map +1 -1
  361. package/dist/services/workflow/workflow-node-registry.service.d.ts +2 -1
  362. package/dist/services/workflow/workflow-node-registry.service.d.ts.map +1 -1
  363. package/dist/services/workflow/workflow-node-registry.service.js +7 -0
  364. package/dist/services/workflow/workflow-node-registry.service.js.map +1 -1
  365. package/dist/services/workflow/workflow-runtime.service.d.ts +8 -0
  366. package/dist/services/workflow/workflow-runtime.service.d.ts.map +1 -1
  367. package/dist/services/workflow/workflow-runtime.service.js +197 -32
  368. package/dist/services/workflow/workflow-runtime.service.js.map +1 -1
  369. package/dist/services/workflow-definition.service.d.ts +1 -1
  370. package/dist/solid-core.module.d.ts +1 -3
  371. package/dist/solid-core.module.d.ts.map +1 -1
  372. package/dist/solid-core.module.js +28 -40
  373. package/dist/solid-core.module.js.map +1 -1
  374. package/dist/testing/adapters/ui/playwright-adapter.d.ts +5 -0
  375. package/dist/testing/adapters/ui/playwright-adapter.d.ts.map +1 -1
  376. package/dist/testing/adapters/ui/playwright-adapter.js +17 -1
  377. package/dist/testing/adapters/ui/playwright-adapter.js.map +1 -1
  378. package/dist/testing/adapters/ui/ui.types.d.ts +2 -0
  379. package/dist/testing/adapters/ui/ui.types.d.ts.map +1 -1
  380. package/dist/testing/adapters/ui/ui.types.js.map +1 -1
  381. package/dist/testing/reporter/console-reporter.d.ts +3 -0
  382. package/dist/testing/reporter/console-reporter.d.ts.map +1 -1
  383. package/dist/testing/reporter/console-reporter.js +2 -0
  384. package/dist/testing/reporter/console-reporter.js.map +1 -1
  385. package/dist/testing/reporter/progress-reporter.d.ts +64 -0
  386. package/dist/testing/reporter/progress-reporter.d.ts.map +1 -0
  387. package/dist/testing/reporter/progress-reporter.js +224 -0
  388. package/dist/testing/reporter/progress-reporter.js.map +1 -0
  389. package/dist/testing/reporter/reporter.types.d.ts +3 -0
  390. package/dist/testing/reporter/reporter.types.d.ts.map +1 -1
  391. package/dist/testing/reporter/reporter.types.js.map +1 -1
  392. package/dist/testing/runner/run-from-metadata.d.ts.map +1 -1
  393. package/dist/testing/runner/run-from-metadata.js +1 -0
  394. package/dist/testing/runner/run-from-metadata.js.map +1 -1
  395. package/dist/testing/steps/ui/actions.step.d.ts.map +1 -1
  396. package/dist/testing/steps/ui/actions.step.js +6 -2
  397. package/dist/testing/steps/ui/actions.step.js.map +1 -1
  398. package/dist/testing/steps/ui/assertions.step.d.ts.map +1 -1
  399. package/dist/testing/steps/ui/assertions.step.js +11 -3
  400. package/dist/testing/steps/ui/assertions.step.js.map +1 -1
  401. package/dist/testing/steps/ui/form.step.d.ts.map +1 -1
  402. package/dist/testing/steps/ui/form.step.js +9 -3
  403. package/dist/testing/steps/ui/form.step.js.map +1 -1
  404. package/dist/testing/steps/ui/manual.step.js +1 -1
  405. package/dist/testing/steps/ui/manual.step.js.map +1 -1
  406. package/dist/testing/steps/ui/navigation.step.d.ts.map +1 -1
  407. package/dist/testing/steps/ui/navigation.step.js +3 -1
  408. package/dist/testing/steps/ui/navigation.step.js.map +1 -1
  409. package/dist/theme/theme-registry.d.ts +14 -0
  410. package/dist/theme/theme-registry.d.ts.map +1 -0
  411. package/dist/theme/theme-registry.js +147 -0
  412. package/dist/theme/theme-registry.js.map +1 -0
  413. package/dist/types/workflow-dsl.types.d.ts +14 -0
  414. package/dist/types/workflow-dsl.types.d.ts.map +1 -1
  415. package/dist/types/workflow-dsl.types.js.map +1 -1
  416. package/package.json +2 -2
  417. package/src/commands/run-tests.command.ts +64 -4
  418. package/src/commands/seed.command.ts +19 -0
  419. package/src/config/cache.options.ts +9 -1
  420. package/src/constants/chatter-message.constants.ts +12 -0
  421. package/src/constants/draft-publish-fields.ts +5 -0
  422. package/src/constants/error-messages.ts +14 -0
  423. package/src/constants/media-file-types.ts +128 -0
  424. package/src/constants/success-messages.ts +5 -0
  425. package/src/constants/user.constants.ts +13 -0
  426. package/src/controllers/authentication.controller.ts +5 -2
  427. package/src/controllers/chatter-message.controller.ts +8 -0
  428. package/src/controllers/export-template.controller.ts +5 -3
  429. package/src/controllers/import-transaction.controller.ts +6 -6
  430. package/src/controllers/media.controller.ts +17 -6
  431. package/src/controllers/module-package.controller.ts +2 -3
  432. package/src/controllers/mpin-authentication.controller.ts +67 -0
  433. package/src/dtos/basic-filters.dto.ts +0 -4
  434. package/src/dtos/change-mpin.dto.ts +18 -0
  435. package/src/dtos/create-field-metadata.dto.ts +17 -9
  436. package/src/dtos/create-model-sequence.dto.ts +1 -1
  437. package/src/dtos/mpin-login.dto.ts +24 -0
  438. package/src/dtos/setup-mpin.dto.ts +51 -0
  439. package/src/entities/common.entity.ts +24 -0
  440. package/src/entities/dashboard-user-layout.entity.ts +2 -2
  441. package/src/entities/field-metadata.entity.ts +3 -0
  442. package/src/entities/saved-filters.entity.ts +3 -3
  443. package/src/entities/user-device-credential.entity.ts +130 -0
  444. package/src/entities/user.entity.ts +53 -36
  445. package/src/entities/view-metadata.entity.ts +2 -2
  446. package/src/entities/workflow-execution-artifact.entity.ts +4 -3
  447. package/src/entities/workflow-execution-log.entity.ts +4 -3
  448. package/src/entities/workflow-execution.entity.ts +3 -2
  449. package/src/entities/workflow-secret.entity.ts +3 -2
  450. package/src/entities/workflow-step-execution.entity.ts +3 -2
  451. package/src/entities/workflow-trigger-execution.entity.ts +7 -6
  452. package/src/factories/mail.factory.ts +7 -1
  453. package/src/filters/http-exception.filter.ts +11 -1
  454. package/src/helpers/bootstrap.helper.ts +43 -6
  455. package/src/helpers/field-crud-managers/MediaFieldCrudManager.ts +90 -37
  456. package/src/helpers/file-download.helper.ts +45 -0
  457. package/src/helpers/model-metadata-helper.service.ts +32 -1
  458. package/src/helpers/security.helper.ts +35 -8
  459. package/src/helpers/solid-core-error-codes-provider.service.ts +53 -0
  460. package/src/helpers/solid-microservice-adapter.service.ts +6 -1
  461. package/src/helpers/solid-registry.ts +1 -1
  462. package/src/helpers/typeorm-db-helper.ts +12 -1
  463. package/src/index.ts +10 -0
  464. package/src/interfaces/active-user-data.interface.ts +9 -0
  465. package/src/interfaces.ts +1 -0
  466. package/src/repository/user-device-credential.repository.ts +17 -0
  467. package/src/seeders/module-metadata-seeder.service.ts +61 -39
  468. package/src/seeders/module-test-data.service.ts +6 -0
  469. package/src/seeders/seed-data/solid-core-metadata.json +290 -78
  470. package/src/services/api-key.service.ts +13 -1
  471. package/src/services/authentication.service.ts +203 -41
  472. package/src/services/chatter-message.service.ts +180 -19
  473. package/src/services/crud-helper.service.ts +35 -50
  474. package/src/services/crud.service.ts +132 -105
  475. package/src/services/datasource-introspection.service.ts +5 -0
  476. package/src/services/draft-publish-helper.service.ts +581 -0
  477. package/src/services/field-metadata.service.ts +5 -2
  478. package/src/services/internationalisation-helper.service.ts +148 -0
  479. package/src/services/media-storage.utils.ts +26 -1
  480. package/src/services/media.service.ts +68 -36
  481. package/src/services/metadata-validation.service.ts +39 -0
  482. package/src/services/model-metadata.service.ts +4 -1
  483. package/src/services/module-metadata.service.ts +10 -1
  484. package/src/services/mpin.service.ts +447 -0
  485. package/src/services/object.utils.ts +10 -0
  486. package/src/services/refresh-token-ids-storage.service.ts +229 -90
  487. package/src/services/setting.service.ts +8 -1
  488. package/src/services/settings/default-settings-provider.service.ts +154 -6
  489. package/src/services/user.service.ts +18 -3
  490. package/src/services/view-metadata.service.ts +5 -145
  491. package/src/services/workflow/nodes/execution-fail.node.ts +82 -0
  492. package/src/services/workflow/nodes/for-each.node.ts +140 -6
  493. package/src/services/workflow/nodes/if.node.ts +7 -0
  494. package/src/services/workflow/nodes/log-write.node.ts +2 -0
  495. package/src/services/workflow/nodes/loop-until.node.ts +343 -0
  496. package/src/services/workflow/nodes/parallel.node.ts +7 -0
  497. package/src/services/workflow/nodes/sequential.node.ts +7 -0
  498. package/src/services/workflow/nodes/switch.node.ts +7 -0
  499. package/src/services/workflow/workflow-definition-validator.service.ts +5 -2
  500. package/src/services/workflow/workflow-expression.service.ts +5 -0
  501. package/src/services/workflow/workflow-node-registry.service.ts +11 -0
  502. package/src/services/workflow/workflow-runtime.service.ts +274 -39
  503. package/src/solid-core.module.ts +46 -15
  504. package/src/testing/README.md +75 -3
  505. package/src/testing/adapters/ui/playwright-adapter.ts +25 -0
  506. package/src/testing/adapters/ui/ui.types.ts +2 -0
  507. package/src/testing/reporter/console-reporter.ts +4 -0
  508. package/src/testing/reporter/progress-reporter.ts +251 -0
  509. package/src/testing/reporter/reporter.types.ts +3 -0
  510. package/src/testing/runner/run-from-metadata.ts +1 -0
  511. package/src/testing/steps/ui/actions.step.ts +8 -4
  512. package/src/testing/steps/ui/assertions.step.ts +18 -5
  513. package/src/testing/steps/ui/form.step.ts +16 -6
  514. package/src/testing/steps/ui/manual.step.ts +1 -1
  515. package/src/testing/steps/ui/navigation.step.ts +4 -2
  516. package/src/theme/theme-registry.ts +181 -0
  517. package/src/types/workflow-dsl.types.ts +43 -0
@@ -5,6 +5,23 @@ import { UserViewMetadata } from 'src/entities/user-view-metadata.entity'
5
5
  import { UserApiKey } from 'src/entities/user-api-key.entity'
6
6
  import { Exclude, Expose } from "class-transformer";
7
7
 
8
+ /**
9
+ * Serialization is locked down twice over, and both halves are load-bearing:
10
+ *
11
+ * - The class-level `@Exclude()` below makes User itself an allowlist: only `@Expose()`d
12
+ * properties are serialized.
13
+ * - Every other property additionally carries its own `@Exclude()`. That looks redundant
14
+ * here, and for `User` it is - but class-transformer resolves the *class-level* strategy
15
+ * with a direct lookup on the exact constructor (MetadataStorage.getStrategy), so a
16
+ * subclass inherits nothing and falls back to `exposeAll`. Since this entity is a
17
+ * `@TableInheritance` root that consuming projects extend (see
18
+ * IExtensionUserCreationProvider), an extension user that forgets its own `@Exclude()`
19
+ * would otherwise serialize the password hash and every OAuth/verification token.
20
+ * Property-level metadata *is* walked up the prototype chain, so the per-property
21
+ * decorators are what actually protect subclasses.
22
+ *
23
+ * Keep both. Adding a new column? Give it `@Expose()` or `@Exclude()` - never neither.
24
+ */
8
25
  @Entity("ss_user")
9
26
  @TableInheritance({ column: { type: "varchar", name: "type", default: "User" } })
10
27
  @Exclude()
@@ -30,7 +47,7 @@ export class User extends CommonEntity {
30
47
  mobile: string;
31
48
 
32
49
  @Column({ type: "varchar", nullable: true })
33
- // don't send to client
50
+ @Exclude()
34
51
  password: string;
35
52
 
36
53
  @Column({ nullable: true, default: true })
@@ -38,67 +55,67 @@ export class User extends CommonEntity {
38
55
  forcePasswordChange: boolean = true;
39
56
 
40
57
  @Column({ type: "varchar", default: "local" })
41
- // don't send to client
58
+ @Exclude()
42
59
  lastLoginProvider: string = "local";
43
60
 
44
61
  @Column({ type: "varchar", nullable: true })
45
- // don't send to client (test)
62
+ @Exclude()
46
63
  accessCode: string;
47
64
 
48
65
  @Column({ type: "varchar", nullable: true })
49
- // don't send to client
66
+ @Exclude()
50
67
  googleAccessToken: string;
51
68
 
52
69
  @Column({ type: "varchar", nullable: true })
53
- // don't send to client
70
+ @Exclude()
54
71
  googleId: string;
55
72
 
56
73
  @Column({ type: "varchar", nullable: true })
57
- // don't send to client
74
+ @Exclude()
58
75
  googleProfilePicture: string;
59
76
 
60
77
  @Column({ type: "varchar", nullable: true })
61
- // don't send to client
78
+ @Exclude()
62
79
  facebookId: string;
63
80
 
64
81
  @Column({ type: "varchar", nullable: true })
65
- // don't send to client
82
+ @Exclude()
66
83
  facebookAccessToken: string;
67
84
 
68
85
  @Column({ type: "varchar", nullable: true })
69
- // don't send to client
86
+ @Exclude()
70
87
  facebookProfilePicture: string;
71
88
 
72
89
  @Column({ type: "varchar", nullable: true })
73
- // don't send to client
90
+ @Exclude()
74
91
  appleId: string;
75
92
 
76
93
  @Column({ type: "varchar", nullable: true })
77
- // don't send to client
94
+ @Exclude()
78
95
  appleAccessToken: string;
79
96
 
80
97
  @Column({ type: "varchar", nullable: true })
81
- // don't send to client
98
+ @Exclude()
82
99
  microsoftId: string;
83
100
 
84
101
  @Column({ type: "varchar", nullable: true })
85
- // don't send to client
102
+ @Exclude()
86
103
  microsoftAccessToken: string;
87
104
 
88
105
  @Column({ type: "varchar", nullable: true })
89
- // don't send to client
106
+ @Exclude()
90
107
  microsoftProfilePicture: string;
91
108
 
92
109
  @Column({ type: "varchar", nullable: true })
93
- // don't send to client
110
+ @Exclude()
94
111
  microsoftActiveDirectoryId: string;
95
112
 
96
113
  @Column({ type: "varchar", nullable: true })
97
- // don't send to client
114
+ @Exclude()
98
115
  microsoftActiveDirectoryAccessToken: string;
99
116
 
100
117
  @Column({ type: "varchar", nullable: true })
101
- // don't send to client
118
+ @Exclude()
102
119
  microsoftActiveDirectoryProfilePicture: string;
103
120
 
104
121
  @Index()
@@ -107,63 +124,63 @@ export class User extends CommonEntity {
107
124
  active: boolean = true;
108
125
 
109
126
  @Column({ nullable: true })
110
- // don't send to client
127
+ @Exclude()
111
128
  forgotPasswordConfirmedAt: Date;
112
129
 
113
130
  @Column({ type: "varchar", nullable: true })
114
- // don't send to client
131
+ @Exclude()
115
132
  verificationTokenOnForgotPassword: string;
116
133
 
117
134
  @Column({ nullable: true })
118
- // don't send to client
135
+ @Exclude()
119
136
  verificationTokenOnForgotPasswordExpiresAt: Date;
120
137
 
121
138
  @Column({ nullable: true })
122
- // don't send to client
139
+ @Exclude()
123
140
  emailVerifiedOnRegistrationAt: Date;
124
141
 
125
142
  @Column({ type: "varchar", nullable: true })
126
- // don't send to client
143
+ @Exclude()
127
144
  emailVerificationTokenOnRegistration: string;
128
145
 
129
146
  @Column({ nullable: true })
130
- // don't send to client
147
+ @Exclude()
131
148
  emailVerificationTokenOnRegistrationExpiresAt: Date;
132
149
 
133
150
  @Column({ nullable: true })
134
- // don't send to client
151
+ @Exclude()
135
152
  mobileVerifiedOnRegistrationAt: Date;
136
153
 
137
154
  @Column({ type: "varchar", nullable: true })
138
- // don't send to client
155
+ @Exclude()
139
156
  mobileVerificationTokenOnRegistration: string;
140
157
 
141
158
  @Column({ nullable: true })
142
- // don't send to client
159
+ @Exclude()
143
160
  mobileVerificationTokenOnRegistrationExpiresAt: Date;
144
161
 
145
162
  @Column({ nullable: true })
146
- // don't send to client
163
+ @Exclude()
147
164
  emailVerifiedOnLoginAt: Date;
148
165
 
149
166
  @Column({ type: "varchar", nullable: true })
150
- // don't send to client
167
+ @Exclude()
151
168
  emailVerificationTokenOnLogin: string;
152
169
 
153
170
  @Column({ nullable: true })
154
- // don't send to client
171
+ @Exclude()
155
172
  emailVerificationTokenOnLoginExpiresAt: Date;
156
173
 
157
174
  @Column({ nullable: true })
158
- // don't send to client
175
+ @Exclude()
159
176
  mobileVerifiedOnLoginAt: Date;
160
177
 
161
178
  @Column({ type: "varchar", nullable: true })
162
- // don't send to client
179
+ @Exclude()
163
180
  mobileVerificationTokenOnLogin: string;
164
181
 
165
182
  @Column({ nullable: true })
166
- // don't send to client
183
+ @Exclude()
167
184
  mobileVerificationTokenOnLoginExpiresAt: Date;
168
185
 
169
186
  @Column({ type: "varchar", nullable: true })
@@ -176,18 +193,18 @@ export class User extends CommonEntity {
176
193
  roles: RoleMetadata[];
177
194
 
178
195
  @OneToMany(() => UserViewMetadata, userViewMetadata => userViewMetadata.user, { cascade: true })
179
- // don't send to client
196
+ @Exclude()
180
197
  userViewMetadata: UserViewMetadata[];
181
198
 
182
- // dont send to client
199
+ @Exclude()
183
200
  @Column({ type: "varchar", default: "bcrypt" })
184
201
  passwordScheme: string;
185
202
 
186
- // dont send to client
203
+ @Exclude()
187
204
  @Column({ type: "int", default: 1 })
188
205
  passwordSchemeVersion: number;
189
206
 
190
- // dont send to client
207
+ @Exclude()
191
208
  @Column({ nullable: true })
192
209
  rehashedAt: Date;
193
210
 
@@ -19,11 +19,11 @@ export class ViewMetadata extends CommonEntity {
19
19
  @Column({ name: "type", type: "varchar" })
20
20
  type: string;
21
21
 
22
- //TODO: To make this truly cross db compatible, we should avoid setting a db type
22
+ // TODO: To make this truly cross db compatible, we should avoid setting a db type
23
23
  @Column({ name: "context", type: "text" })
24
24
  context: any = "{}";
25
25
 
26
- //TODO: To make this truly cross db compatible, we should avoid setting a db type
26
+ // TODO: To make this truly cross db compatible, we should avoid setting a db type
27
27
  @Column({ name: "layout", type: "text" })
28
28
  layout: any;
29
29
 
@@ -2,6 +2,7 @@ import { CommonEntity } from 'src/entities/common.entity';
2
2
  import { Entity, Column, Index, JoinColumn, ManyToOne } from 'typeorm';
3
3
  import { WorkflowExecution } from './workflow-execution.entity';
4
4
  import { WorkflowStepExecution } from './workflow-step-execution.entity'
5
+ import { getColumnType } from 'src/helpers/typeorm-db-helper';
5
6
 
6
7
  @Entity('ss_workflow_execution_artifact')
7
8
  export class WorkflowExecutionArtifact extends CommonEntity {
@@ -10,12 +11,12 @@ export class WorkflowExecutionArtifact extends CommonEntity {
10
11
  artifactKey: string;
11
12
 
12
13
  @Index()
13
- @ManyToOne(() => WorkflowExecution, { onDelete: "CASCADE", nullable: false })
14
+ @ManyToOne(() => WorkflowExecution, { nullable: false })
14
15
  @JoinColumn()
15
16
  workflowExecution: WorkflowExecution;
16
17
 
17
18
  @Index()
18
- @ManyToOne(() => WorkflowStepExecution, { onDelete: "CASCADE", nullable: true })
19
+ @ManyToOne(() => WorkflowStepExecution, { nullable: true })
19
20
  @JoinColumn()
20
21
  workflowStepExecution: WorkflowStepExecution;
21
22
 
@@ -61,7 +62,7 @@ export class WorkflowExecutionArtifact extends CommonEntity {
61
62
  checksum: string;
62
63
 
63
64
  @Index()
64
- @Column({ type: "timestamp", nullable: true })
65
+ @Column({ nullable: true, ...getColumnType('datetime') })
65
66
  producedAt: Date;
66
67
 
67
68
  @Column({ type: "simple-json", nullable: true })
@@ -2,6 +2,7 @@ import { CommonEntity } from 'src/entities/common.entity';
2
2
  import { Entity, Column, Index, JoinColumn, ManyToOne } from 'typeorm';
3
3
  import { WorkflowExecution } from './workflow-execution.entity';
4
4
  import { WorkflowStepExecution } from './workflow-step-execution.entity'
5
+ import { getColumnType } from 'src/helpers/typeorm-db-helper';
5
6
 
6
7
  @Entity('ss_workflow_execution_log')
7
8
  export class WorkflowExecutionLog extends CommonEntity {
@@ -10,12 +11,12 @@ export class WorkflowExecutionLog extends CommonEntity {
10
11
  logKey: string;
11
12
 
12
13
  @Index()
13
- @ManyToOne(() => WorkflowExecution, { onDelete: "CASCADE", nullable: false })
14
+ @ManyToOne(() => WorkflowExecution, { nullable: false })
14
15
  @JoinColumn()
15
16
  workflowExecution: WorkflowExecution;
16
17
 
17
18
  @Index()
18
- @ManyToOne(() => WorkflowStepExecution, { onDelete: "CASCADE", nullable: true })
19
+ @ManyToOne(() => WorkflowStepExecution, { nullable: true })
19
20
  @JoinColumn()
20
21
  workflowStepExecution: WorkflowStepExecution;
21
22
 
@@ -47,7 +48,7 @@ export class WorkflowExecutionLog extends CommonEntity {
47
48
  sequenceNumber: number;
48
49
 
49
50
  @Index()
50
- @Column({ type: "timestamp" })
51
+ @Column({ ...getColumnType('datetime') })
51
52
  occurredAt: Date;
52
53
 
53
54
  @Column({ type: "simple-json", nullable: true })
@@ -4,6 +4,7 @@ import { WorkflowDefinition } from './workflow-definition.entity'
4
4
  import { WorkflowStepExecution } from './workflow-step-execution.entity';
5
5
  import { WorkflowExecutionLog } from './workflow-execution-log.entity';
6
6
  import { WorkflowExecutionArtifact } from './workflow-execution-artifact.entity';
7
+ import { getColumnType } from 'src/helpers/typeorm-db-helper';
7
8
 
8
9
  @Entity('ss_workflow_execution')
9
10
  export class WorkflowExecution extends CommonEntity {
@@ -32,11 +33,11 @@ export class WorkflowExecution extends CommonEntity {
32
33
  triggerType: string = "manual";
33
34
 
34
35
  @Index()
35
- @Column({ type: "timestamp", nullable: true })
36
+ @Column({ nullable: true, ...getColumnType('datetime') })
36
37
  startedAt: Date;
37
38
 
38
39
  @Index()
39
- @Column({ type: "timestamp", nullable: true })
40
+ @Column({ nullable: true, ...getColumnType('datetime') })
40
41
  finishedAt: Date;
41
42
 
42
43
  @Column({ type: "bigint", nullable: true })
@@ -1,5 +1,6 @@
1
1
  import { CommonEntity } from 'src/entities/common.entity';
2
2
  import { Entity, Column, Index } from 'typeorm';
3
+ import { getColumnType } from 'src/helpers/typeorm-db-helper';
3
4
 
4
5
  @Entity('ss_workflow_secret')
5
6
  export class WorkflowSecret extends CommonEntity {
@@ -25,9 +26,9 @@ export class WorkflowSecret extends CommonEntity {
25
26
  @Column({ type: "varchar", default: "active" })
26
27
  status: string = "active";
27
28
 
28
- @Column({ type: "timestamp", nullable: true })
29
+ @Column({ nullable: true, ...getColumnType('datetime') })
29
30
  lastRotatedAt: Date;
30
31
 
31
- @Column({ type: "timestamp", nullable: true })
32
+ @Column({ nullable: true, ...getColumnType('datetime') })
32
33
  lastAccessedAt: Date;
33
34
  }
@@ -1,6 +1,7 @@
1
1
  import { CommonEntity } from 'src/entities/common.entity';
2
2
  import { Entity, Column, Index, JoinColumn, ManyToOne } from 'typeorm';
3
3
  import { WorkflowExecution } from './workflow-execution.entity'
4
+ import { getColumnType } from 'src/helpers/typeorm-db-helper';
4
5
 
5
6
  @Entity('ss_workflow_step_execution')
6
7
  export class WorkflowStepExecution extends CommonEntity {
@@ -55,11 +56,11 @@ export class WorkflowStepExecution extends CommonEntity {
55
56
  sequenceNumber: number;
56
57
 
57
58
  @Index()
58
- @Column({ type: "timestamp", nullable: true })
59
+ @Column({ nullable: true, ...getColumnType('datetime') })
59
60
  startedAt: Date;
60
61
 
61
62
  @Index()
62
- @Column({ type: "timestamp", nullable: true })
63
+ @Column({ nullable: true, ...getColumnType('datetime') })
63
64
  finishedAt: Date;
64
65
 
65
66
  @Column({ type: "bigint", nullable: true })
@@ -2,6 +2,7 @@ import { CommonEntity } from 'src/entities/common.entity';
2
2
  import { Entity, Column, Index, JoinColumn, ManyToOne } from 'typeorm';
3
3
  import { WorkflowDefinition } from './workflow-definition.entity';
4
4
  import { WorkflowExecution } from './workflow-execution.entity'
5
+ import { getColumnType } from 'src/helpers/typeorm-db-helper';
5
6
 
6
7
  @Entity('ss_workflow_trigger_execution')
7
8
  export class WorkflowTriggerExecution extends CommonEntity {
@@ -10,12 +11,12 @@ export class WorkflowTriggerExecution extends CommonEntity {
10
11
  triggerExecutionKey: string;
11
12
 
12
13
  @Index()
13
- @ManyToOne(() => WorkflowDefinition, { onDelete: "CASCADE", nullable: false })
14
+ @ManyToOne(() => WorkflowDefinition, { nullable: false })
14
15
  @JoinColumn()
15
16
  workflowDefinition: WorkflowDefinition;
16
17
 
17
18
  @Index()
18
- @ManyToOne(() => WorkflowExecution, { onDelete: "CASCADE", nullable: true })
19
+ @ManyToOne(() => WorkflowExecution, { nullable: true })
19
20
  @JoinColumn()
20
21
  workflowExecution: WorkflowExecution;
21
22
 
@@ -35,19 +36,19 @@ export class WorkflowTriggerExecution extends CommonEntity {
35
36
  status: string = "received";
36
37
 
37
38
  @Index()
38
- @Column({ type: "boolean", nullable: true, default: false })
39
+ @Column({ nullable: true, default: false })
39
40
  matched: boolean = false;
40
41
 
41
42
  @Index()
42
- @Column({ type: "timestamp" })
43
+ @Column({ ...getColumnType('datetime') })
43
44
  firedAt: Date;
44
45
 
45
46
  @Index()
46
- @Column({ type: "timestamp", nullable: true })
47
+ @Column({ nullable: true, ...getColumnType('datetime') })
47
48
  startedAt: Date;
48
49
 
49
50
  @Index()
50
- @Column({ type: "timestamp", nullable: true })
51
+ @Column({ nullable: true, ...getColumnType('datetime') })
51
52
  finishedAt: Date;
52
53
 
53
54
  @Column({ type: "bigint", nullable: true })
@@ -30,8 +30,14 @@ export class MailFactory {
30
30
  }
31
31
 
32
32
  const mailServiceProvider = mailProviders.find(provider => provider.name === mailServiceName);
33
+ if (!mailServiceProvider?.instance) {
34
+ const registeredProviders = mailProviders.map((provider) => provider?.name).filter(Boolean).join(", ");
35
+ throw new Error(
36
+ `Mail provider "${mailServiceName}" is not registered. Registered providers: ${registeredProviders || "none"}`,
37
+ );
38
+ }
33
39
 
34
40
  return mailServiceProvider.instance as IMail;
35
41
  }
36
42
 
37
- }
43
+ }
@@ -30,12 +30,22 @@ export class HttpExceptionFilter implements ExceptionFilter {
30
30
  const isHttp = exception instanceof HttpException;
31
31
  const explicitStatus = isHttp ? exception.getStatus() : undefined;
32
32
 
33
+ // Errors from http-errors-style libraries (e.g. body-parser's PayloadTooLargeError)
34
+ // are plain Errors carrying their own status. Honour it rather than collapsing to 500.
35
+ const rawStatus = exception?.status ?? exception?.statusCode;
36
+ const derivedStatus =
37
+ typeof rawStatus === 'number' && rawStatus >= 400 && rawStatus < 600
38
+ ? rawStatus
39
+ : undefined;
40
+
33
41
  // Canonical code + static message
34
42
  const code: ErrorCode = this.errorMapper.mapException(exception);
35
43
  const defaultStatus = this.errorMapper.getHttpStatus(code);
36
44
  const message = code === 'solidx-unknown-error' ? `${exception?.message}` : this.errorMapper.getMessage(code);
37
45
 
38
- const status = explicitStatus ?? defaultStatus ?? 500;
46
+ // derivedStatus must precede defaultStatus: getHttpStatus() returns a hard 500
47
+ // for unmatched codes, so it is never undefined and would always win otherwise.
48
+ const status = explicitStatus ?? derivedStatus ?? defaultStatus ?? 500;
39
49
 
40
50
  // Logging
41
51
  this.logger.error(
@@ -1,5 +1,6 @@
1
1
  import { ClassSerializerInterceptor, ValidationPipe } from '@nestjs/common';
2
2
  import { NestFactory, Reflector } from '@nestjs/core';
3
+ import { NestExpressApplication } from '@nestjs/platform-express';
3
4
  import { WsAdapter } from '@nestjs/platform-ws';
4
5
  import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
5
6
  import { NextFunction, Request, Response } from 'express';
@@ -12,7 +13,12 @@ import { CommandFactory } from 'nest-commander';
12
13
  import { createWinstonLoggerConfig } from '../winston.logger';
13
14
  import { WrapResponseInterceptor } from '../interceptors/wrap-response.interceptor';
14
15
  import { buildDefaultCorsOptions } from './cors.helper';
15
- import { buildDefaultSecurityHeaderOptions, buildPermissionsPolicyHeader, PermissionsPolicyConfig } from './security.helper';
16
+ import {
17
+ buildDefaultSecurityHeaderOptions,
18
+ buildPermissionsPolicyHeader,
19
+ PermissionsPolicyConfig,
20
+ SolidSecurityOptions,
21
+ } from './security.helper';
16
22
  import { parseBooleanEnv } from './environment.helper';
17
23
 
18
24
  // ---- Shared process handlers ----
@@ -50,8 +56,20 @@ export interface SolidBootstrapOptions {
50
56
  swagger?: SolidSwaggerOptions | false;
51
57
  /** Permissions-Policy header overrides (merged with defaults). */
52
58
  permissionsPolicyOverrides?: Partial<PermissionsPolicyConfig>;
59
+ /** Security header overrides, including iframe frame-ancestor allowlists. */
60
+ security?: SolidSecurityOptions;
53
61
  /** Show full NestJS init logs during bootstrap (route mapping, module deps, pollers). Defaults to false. */
54
62
  verboseBootstrap?: boolean;
63
+ /**
64
+ * Max request body size for JSON and urlencoded payloads, as a `bytes`-compatible
65
+ * string (e.g. '10mb', '512kb'). Defaults to '10mb'.
66
+ *
67
+ * Does NOT apply to multipart/form-data uploads: body-parser matches on Content-Type,
68
+ * so multipart requests skip these parsers entirely and are handled by Multer. Raise
69
+ * this only for large structured JSON (e.g. /bulk arrays), bearing in mind the parsed
70
+ * object graph can retain several times the raw byte size.
71
+ */
72
+ bodyLimit?: string;
55
73
  }
56
74
 
57
75
  /**
@@ -64,19 +82,30 @@ export interface SolidBootstrapOptions {
64
82
  * // main.ts
65
83
  * bootstrapSolidApp(() => AppModule.forRoot(), {
66
84
  * swagger: { title: 'My API', description: 'My API description' },
85
+ * security: { frameAncestors: ["'self'", 'https://portal.example.com'] },
67
86
  * });
68
87
  */
69
88
  export async function bootstrapSolidApp(
70
89
  appModuleFactory: () => Promise<any>,
71
90
  options: SolidBootstrapOptions = {},
72
- ): Promise<void> {
91
+ ): Promise<NestExpressApplication> {
73
92
  registerGlobalProcessHandlers();
74
93
 
75
- const { globalPrefix = 'api', swagger = {}, permissionsPolicyOverrides = {}, verboseBootstrap = false } = options;
94
+ const {
95
+ globalPrefix = 'api',
96
+ swagger = {},
97
+ permissionsPolicyOverrides = {},
98
+ security = {},
99
+ verboseBootstrap = false,
100
+ bodyLimit = '10mb',
101
+ } = options;
76
102
 
77
103
  const startTime = Date.now();
78
104
  const appModule = await appModuleFactory();
79
- const app = await NestFactory.create(appModule, {
105
+ const app = await NestFactory.create<NestExpressApplication>(appModule, {
106
+ // Nest's default parsers are registered during init() with a 100kb limit, ahead of
107
+ // any module middleware. Disable them so the parsers below own the limit outright.
108
+ bodyParser: false,
80
109
  logger: WinstonModule.createLogger({ ...createWinstonLoggerConfig(), level: verboseBootstrap ? 'debug' : 'error' }),
81
110
  });
82
111
 
@@ -87,7 +116,7 @@ export async function bootstrapSolidApp(
87
116
  app
88
117
  .get(WINSTON_MODULE_NEST_PROVIDER)
89
118
  .log('API server disabled via API_ENABLED=false. Skipping HTTP listen.', 'Bootstrap');
90
- return;
119
+ return app;
91
120
  }
92
121
 
93
122
  // Health check at root path
@@ -95,7 +124,7 @@ export async function bootstrapSolidApp(
95
124
  server.get('/', (_req, res) => res.status(200).send('SOLID OK'));
96
125
 
97
126
  // Security headers
98
- app.use(helmet(buildDefaultSecurityHeaderOptions()));
127
+ app.use(helmet(buildDefaultSecurityHeaderOptions(security)));
99
128
 
100
129
  // Nest's Swagger UI HTML injects inline styles; keep CSP strict elsewhere.
101
130
  const isSwaggerPath = (path: string) =>
@@ -136,6 +165,12 @@ export async function bootstrapSolidApp(
136
165
  next();
137
166
  });
138
167
 
168
+ // Body parsers — replaces Nest's default 100kb parsers (disabled via bodyParser: false).
169
+ // Registered here so the middleware order Nest applied by default is preserved:
170
+ // helmet -> CSP -> Permissions-Policy -> qs -> body parsers -> routes.
171
+ app.useBodyParser('json', { limit: bodyLimit });
172
+ app.useBodyParser('urlencoded', { limit: bodyLimit, extended: true });
173
+
139
174
  // Global ValidationPipe
140
175
  app.useGlobalPipes(
141
176
  new ValidationPipe({
@@ -195,6 +230,8 @@ export async function bootstrapSolidApp(
195
230
 
196
231
  const elapsed = ((Date.now() - startTime) / 1000).toFixed(2);
197
232
  process.stdout.write(`\x1b[32mServer started on port ${port} in ${elapsed}s\x1b[0m\n`);
233
+
234
+ return app;
198
235
  }
199
236
 
200
237
  // ---- CLI bootstrap ----