@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
@@ -161,7 +161,11 @@ export class WorkflowRuntimeService {
161
161
  const execution = existingExecution
162
162
  ? await this.writer.startExecution(existingExecution, effectiveRequest)
163
163
  : await this.writer.createExecution(definition, effectiveRequest);
164
- const nodeCount = this.countNodes(definitionDsl.nodes);
164
+ const nodeCount = this.countNodes([
165
+ ...(definitionDsl.nodes ?? []),
166
+ ...(definitionDsl.errors ?? []),
167
+ ...(definitionDsl.finally ?? []),
168
+ ]);
165
169
  const outputs: Record<string, any> = {};
166
170
  const runtimeContext: WorkflowRuntimeContext = {
167
171
  execution,
@@ -175,26 +179,52 @@ export class WorkflowRuntimeService {
175
179
  },
176
180
  };
177
181
 
182
+ this.logger.log(
183
+ `Starting workflow execution ${execution.executionIdentifier} for ${definition.key} with ${nodeCount} node(s).`,
184
+ );
185
+ await this.writer.writeLog(execution, undefined, {
186
+ level: 'info',
187
+ eventType: 'execution.started',
188
+ message: `Workflow execution started for ${definition.key}.`,
189
+ metadata: {
190
+ executionIdentifier: execution.executionIdentifier,
191
+ workflowKey: definition.key,
192
+ triggerType: execution.triggerType,
193
+ nodeCount,
194
+ inputKeys: Object.keys(runtimeContext.input ?? {}),
195
+ variableKeys: Object.keys(runtimeContext.variables ?? {}),
196
+ },
197
+ }, this.nextLogSequence(runtimeContext));
198
+
199
+ let executionError: unknown;
200
+
178
201
  try {
179
- this.logger.log(
180
- `Starting workflow execution ${execution.executionIdentifier} for ${definition.key} with ${nodeCount} node(s).`,
181
- );
202
+ await this.runNodes(definitionDsl.nodes, runtimeContext);
203
+ } catch (error) {
204
+ executionError = error;
205
+ await this.runGlobalErrorHandlers(definitionDsl, runtimeContext, error);
206
+ }
207
+
208
+ try {
209
+ await this.runFinallyHandlers(definitionDsl, runtimeContext);
210
+ } catch (finallyError) {
182
211
  await this.writer.writeLog(execution, undefined, {
183
- level: 'info',
184
- eventType: 'execution.started',
185
- message: `Workflow execution started for ${definition.key}.`,
212
+ level: 'error',
213
+ eventType: 'finally.failed',
214
+ message: `Finally handler failed: ${this.errorMessage(finallyError)}.`,
215
+ context: this.summarizeError(finallyError),
186
216
  metadata: {
187
- executionIdentifier: execution.executionIdentifier,
188
- workflowKey: definition.key,
189
- triggerType: execution.triggerType,
190
- nodeCount,
191
- inputKeys: Object.keys(runtimeContext.input ?? {}),
192
- variableKeys: Object.keys(runtimeContext.variables ?? {}),
217
+ originalError: executionError
218
+ ? this.summarizeError(executionError)
219
+ : undefined,
193
220
  },
194
221
  }, this.nextLogSequence(runtimeContext));
222
+ if (!executionError) {
223
+ executionError = finallyError;
224
+ }
225
+ }
195
226
 
196
- await this.runNodes(definitionDsl.nodes, runtimeContext);
197
-
227
+ if (!executionError) {
198
228
  const completed = await this.writer.completeExecution(execution, outputs);
199
229
 
200
230
  this.logger.log(
@@ -212,26 +242,26 @@ export class WorkflowRuntimeService {
212
242
  }, this.nextLogSequence(runtimeContext));
213
243
 
214
244
  return this.toResponse(completed);
215
- } catch (error) {
216
- const failed = await this.writer.failExecution(execution, error);
245
+ }
217
246
 
218
- this.logger.error(
219
- `Failed workflow execution ${failed.executionIdentifier} for ${definition.key}: ${failed.errorSummary}`,
220
- error instanceof Error ? error.stack : undefined,
221
- );
222
- await this.writer.writeLog(failed, undefined, {
223
- level: 'error',
224
- eventType: 'execution.failed',
225
- message: failed.errorSummary,
226
- context: this.summarizeError(error),
227
- metadata: {
228
- executionIdentifier: failed.executionIdentifier,
229
- durationMs: failed.durationMs,
230
- },
231
- }, this.nextLogSequence(runtimeContext));
247
+ const failed = await this.writer.failExecution(execution, executionError);
232
248
 
233
- return this.toResponse(failed);
234
- }
249
+ this.logger.error(
250
+ `Failed workflow execution ${failed.executionIdentifier} for ${definition.key}: ${failed.errorSummary}`,
251
+ executionError instanceof Error ? executionError.stack : undefined,
252
+ );
253
+ await this.writer.writeLog(failed, undefined, {
254
+ level: 'error',
255
+ eventType: 'execution.failed',
256
+ message: failed.errorSummary,
257
+ context: this.summarizeError(executionError),
258
+ metadata: {
259
+ executionIdentifier: failed.executionIdentifier,
260
+ durationMs: failed.durationMs,
261
+ },
262
+ }, this.nextLogSequence(runtimeContext));
263
+
264
+ return this.toResponse(failed);
235
265
  }
236
266
 
237
267
  async getExecutionStatus(executionId: number): Promise<WorkflowExecutionResponse> {
@@ -363,17 +393,19 @@ export class WorkflowRuntimeService {
363
393
  nodes: WorkflowNodeDefinition[],
364
394
  context: WorkflowRuntimeContext,
365
395
  ): Promise<Record<string, any>> {
396
+ const nodeOutputs: Record<string, any> = {};
397
+
366
398
  for (const node of nodes ?? []) {
367
- await this.runNode(node, context);
399
+ nodeOutputs[node.id] = await this.runNode(node, context);
368
400
  }
369
401
 
370
- return context.outputs;
402
+ return nodeOutputs;
371
403
  }
372
404
 
373
405
  private async runNode(
374
406
  node: WorkflowNodeDefinition,
375
407
  context: WorkflowRuntimeContext,
376
- ): Promise<void> {
408
+ ): Promise<Record<string, any>> {
377
409
  const inputPayload = {
378
410
  configuration: node.configuration,
379
411
  input: context.input,
@@ -400,7 +432,7 @@ export class WorkflowRuntimeService {
400
432
  message: `Skipped disabled node ${node.id}.`,
401
433
  metadata: this.nodeLogMetadata(node, context, step),
402
434
  }, this.nextLogSequence(context));
403
- return;
435
+ return context.outputs[node.id];
404
436
  }
405
437
 
406
438
  try {
@@ -444,7 +476,7 @@ export class WorkflowRuntimeService {
444
476
  });
445
477
 
446
478
  const output = result.output ?? {};
447
- context.outputs[node.id] = output;
479
+ context.outputs[node.id] = this.getRuntimeContextOutput(node, output);
448
480
 
449
481
  for (const artifact of result.artifacts ?? []) {
450
482
  await this.writer.writeArtifact(context.execution, step, artifact);
@@ -472,6 +504,8 @@ export class WorkflowRuntimeService {
472
504
  artifactCount: result.artifacts?.length ?? 0,
473
505
  },
474
506
  }, this.nextLogSequence(context));
507
+
508
+ return output;
475
509
  } catch (error) {
476
510
  await this.writer.failStep(step, error);
477
511
 
@@ -486,7 +520,7 @@ export class WorkflowRuntimeService {
486
520
  context: this.summarizeError(error),
487
521
  metadata: this.nodeLogMetadata(node, context, step),
488
522
  }, this.nextLogSequence(context));
489
- return;
523
+ return context.outputs[node.id];
490
524
  }
491
525
 
492
526
  await this.writer.writeLog(context.execution, step, {
@@ -496,10 +530,158 @@ export class WorkflowRuntimeService {
496
530
  context: this.summarizeError(error),
497
531
  metadata: this.nodeLogMetadata(node, context, step),
498
532
  }, this.nextLogSequence(context));
533
+ await this.runLocalErrorHandlers(node, context, error);
499
534
  throw error;
500
535
  }
501
536
  }
502
537
 
538
+ private async runGlobalErrorHandlers(
539
+ definitionDsl: WorkflowDefinitionDsl,
540
+ context: WorkflowRuntimeContext,
541
+ error: unknown,
542
+ ): Promise<void> {
543
+ const errorNodes = definitionDsl.errors ?? [];
544
+ if (!errorNodes.length) {
545
+ return;
546
+ }
547
+
548
+ await this.runErrorHandlers(
549
+ errorNodes,
550
+ context,
551
+ error,
552
+ 'global',
553
+ undefined,
554
+ undefined,
555
+ );
556
+ }
557
+
558
+ private async runFinallyHandlers(
559
+ definitionDsl: WorkflowDefinitionDsl,
560
+ context: WorkflowRuntimeContext,
561
+ ): Promise<void> {
562
+ const finallyNodes = definitionDsl.finally ?? [];
563
+ if (!finallyNodes.length) {
564
+ return;
565
+ }
566
+
567
+ await this.writer.writeLog(context.execution, undefined, {
568
+ level: 'info',
569
+ eventType: 'finally.started',
570
+ message: 'Running workflow finally handlers.',
571
+ metadata: {
572
+ handlerNodeCount: finallyNodes.length,
573
+ },
574
+ }, this.nextLogSequence(context));
575
+
576
+ await this.runNodes(finallyNodes, context);
577
+
578
+ await this.writer.writeLog(context.execution, undefined, {
579
+ level: 'info',
580
+ eventType: 'finally.completed',
581
+ message: 'Workflow finally handlers completed.',
582
+ metadata: {
583
+ handlerNodeCount: finallyNodes.length,
584
+ },
585
+ }, this.nextLogSequence(context));
586
+ }
587
+
588
+ private async runLocalErrorHandlers(
589
+ node: WorkflowNodeDefinition,
590
+ context: WorkflowRuntimeContext,
591
+ error: unknown,
592
+ ): Promise<void> {
593
+ const errorNodes = node.errors ?? [];
594
+ if (!errorNodes.length) {
595
+ return;
596
+ }
597
+
598
+ await this.runErrorHandlers(
599
+ errorNodes,
600
+ context,
601
+ error,
602
+ 'local',
603
+ node.id,
604
+ context.stepExecution?.stepExecutionKey,
605
+ );
606
+ }
607
+
608
+ private async runErrorHandlers(
609
+ errorNodes: WorkflowNodeDefinition[],
610
+ context: WorkflowRuntimeContext,
611
+ error: unknown,
612
+ scope: 'global' | 'local',
613
+ sourceNodeId?: string,
614
+ sourceStepExecutionKey?: string,
615
+ ): Promise<void> {
616
+ const errorContext = this.buildErrorContext(error, sourceNodeId, sourceStepExecutionKey);
617
+
618
+ await this.writer.writeLog(context.execution, undefined, {
619
+ level: 'warn',
620
+ eventType: `error-handler.${scope}.started`,
621
+ message:
622
+ scope === 'global'
623
+ ? 'Running workflow-level error handlers.'
624
+ : `Running local error handlers for node ${sourceNodeId}.`,
625
+ context: errorContext,
626
+ metadata: {
627
+ sourceNodeId,
628
+ sourceStepExecutionKey,
629
+ handlerNodeCount: errorNodes.length,
630
+ },
631
+ }, this.nextLogSequence(context));
632
+
633
+ try {
634
+ await this.runNodes(errorNodes, {
635
+ ...context,
636
+ error: errorContext,
637
+ parentNodeId: sourceNodeId ?? context.parentNodeId,
638
+ parentStepExecutionKey:
639
+ sourceStepExecutionKey ?? context.parentStepExecutionKey,
640
+ });
641
+ } catch (handlerError) {
642
+ await this.writer.writeLog(context.execution, undefined, {
643
+ level: 'error',
644
+ eventType: `error-handler.${scope}.failed`,
645
+ message: `Error handler failed: ${this.errorMessage(handlerError)}.`,
646
+ context: this.summarizeError(handlerError),
647
+ metadata: {
648
+ originalError: errorContext,
649
+ sourceNodeId,
650
+ sourceStepExecutionKey,
651
+ },
652
+ }, this.nextLogSequence(context));
653
+ return;
654
+ }
655
+
656
+ await this.writer.writeLog(context.execution, undefined, {
657
+ level: 'info',
658
+ eventType: `error-handler.${scope}.completed`,
659
+ message:
660
+ scope === 'global'
661
+ ? 'Workflow-level error handlers completed.'
662
+ : `Local error handlers completed for node ${sourceNodeId}.`,
663
+ context: errorContext,
664
+ metadata: {
665
+ sourceNodeId,
666
+ sourceStepExecutionKey,
667
+ },
668
+ }, this.nextLogSequence(context));
669
+ }
670
+
671
+ private buildErrorContext(
672
+ error: unknown,
673
+ nodeId?: string,
674
+ stepExecutionKey?: string,
675
+ ): Record<string, any> {
676
+ const summary = this.summarizeError(error);
677
+ return {
678
+ ...summary,
679
+ message: this.errorMessage(error),
680
+ nodeId,
681
+ stepExecutionKey,
682
+ };
683
+ }
684
+
503
685
  private assertDefinitionYaml(value: any): WorkflowDefinitionDsl {
504
686
  if (!value || typeof value !== 'string') {
505
687
  throw new BadRequestException(
@@ -627,6 +809,7 @@ export class WorkflowRuntimeService {
627
809
  ...(node.then ?? []),
628
810
  ...(node.else ?? []),
629
811
  ...(node.defaults ?? []),
812
+ ...(node.errors ?? []),
630
813
  ...Object.values(node.cases ?? {}).flat(),
631
814
  ];
632
815
 
@@ -660,6 +843,58 @@ export class WorkflowRuntimeService {
660
843
  };
661
844
  }
662
845
 
846
+ private getRuntimeContextOutput(
847
+ node: WorkflowNodeDefinition,
848
+ output: Record<string, any>,
849
+ ): Record<string, any> {
850
+ const hiddenOutputPaths =
851
+ this.registry
852
+ .getMetadata(node.type)
853
+ .authoring?.outputs?.filter(
854
+ (definition) => definition.includeInRuntimeContext === false,
855
+ )
856
+ .map((definition) => definition.path ?? definition.key)
857
+ .filter(Boolean) ?? [];
858
+
859
+ if (!hiddenOutputPaths.length || !output || typeof output !== 'object') {
860
+ return output;
861
+ }
862
+
863
+ const runtimeOutput = this.cloneOutput(output);
864
+ hiddenOutputPaths.forEach((path) => {
865
+ this.deletePath(runtimeOutput, path);
866
+ });
867
+
868
+ return runtimeOutput;
869
+ }
870
+
871
+ private cloneOutput(output: Record<string, any>): Record<string, any> {
872
+ if (typeof structuredClone === 'function') {
873
+ return structuredClone(output);
874
+ }
875
+
876
+ return JSON.parse(JSON.stringify(output));
877
+ }
878
+
879
+ private deletePath(target: Record<string, any>, path: string) {
880
+ const parts = path.split('.').filter(Boolean);
881
+ if (!parts.length) {
882
+ return;
883
+ }
884
+
885
+ let cursor: any = target;
886
+ for (let index = 0; index < parts.length - 1; index += 1) {
887
+ cursor = cursor?.[parts[index]];
888
+ if (!cursor || typeof cursor !== 'object') {
889
+ return;
890
+ }
891
+ }
892
+
893
+ if (cursor && typeof cursor === 'object') {
894
+ delete cursor[parts[parts.length - 1]];
895
+ }
896
+ }
897
+
663
898
  private summarizeValue(value: any): any {
664
899
  if (Array.isArray(value)) {
665
900
  return {
@@ -1,6 +1,5 @@
1
1
  import "multer";
2
- import { Global, MiddlewareConsumer, Module, NestModule } from "@nestjs/common";
3
- import * as express from "express";
2
+ import { Global, Module } from "@nestjs/common";
4
3
  import { ConfigModule, ConfigService } from "@nestjs/config";
5
4
  import {
6
5
  APP_FILTER,
@@ -38,6 +37,8 @@ import { MqDashboardQueueNameVariableOptionsProvider } from "./services/selectio
38
37
  import { PseudoForeignKeySelectionProvider } from "./services/selection-providers/pseudo-foreign-key-selection-provider.service";
39
38
  import { ModuleMetadataSeederService } from "./seeders/module-metadata-seeder.service";
40
39
  import { ModuleTestDataService } from "./seeders/module-test-data.service";
40
+ import { DraftPublishHelperService } from "./services/draft-publish-helper.service";
41
+ import { InternationalisationHelperService } from "./services/internationalisation-helper.service";
41
42
  import { CrudHelperService } from "./services/crud-helper.service";
42
43
  import { DatasourceManagementService } from "./services/datasource-management.service";
43
44
  import { DatasourceIntrospectionService } from "./services/datasource-introspection.service";
@@ -56,10 +57,10 @@ import { ModulePackageService } from "./services/module-package.service";
56
57
  import { SolidIntrospectService } from "./services/solid-introspect.service";
57
58
  // import { ListOfComputedFieldProvider } from './providers/list-of-computed-field-provider.service';
58
59
  import { ServeStaticModule } from "@nestjs/serve-static";
59
- import { extname, join } from "path";
60
+ import { basename, join } from "path";
60
61
  import { RefreshModelCommand } from "./commands/refresh-model.command";
61
62
  import { MediaController } from "./controllers/media.controller";
62
- import { INLINE_SAFE_EXTENSIONS } from "./constants/media-file-types";
63
+ import { getLowercaseFileExtension, INLINE_SAFE_EXTENSIONS } from "./constants/media-file-types";
63
64
 
64
65
  import { RefreshModuleCommand } from "./commands/refresh-module.command";
65
66
  import { ModelMetadataSubscriber } from "./subscribers/model-metadata.subscriber";
@@ -96,6 +97,7 @@ import { GoogleAuthenticationController } from "./controllers/google-authenticat
96
97
  import { MenuItemMetadataController } from "./controllers/menu-item-metadata.controller";
97
98
  import { MqMessageQueueController } from "./controllers/mq-message-queue.controller";
98
99
  import { MqMessageController } from "./controllers/mq-message.controller";
100
+ import { MpinAuthenticationController } from "./controllers/mpin-authentication.controller";
99
101
  import { OTPAuthenticationController } from "./controllers/otp-authentication.controller";
100
102
  import { ServiceController } from "./controllers/service.controller";
101
103
  import { SmsTemplateController } from "./controllers/sms-template.controller";
@@ -165,8 +167,10 @@ import { TwilioSmsQueueSubscriberRedis } from "./jobs/redis/twilio-sms-subscribe
165
167
  import { UserRegistrationListener } from "./listeners/user-registration.listener";
166
168
  import { GoogleOauthStrategy } from "./passport-strategies/google-oauth.strategy";
167
169
  import { ApiKeyService } from "./services/api-key.service";
170
+ import { MpinService } from "./services/mpin.service";
168
171
  import { ActiveSessionStorageService } from "./services/active-session-storage.service";
169
172
  import { AuthenticationService } from "./services/authentication.service";
173
+ import { MetadataValidationService } from "./services/metadata-validation.service";
170
174
  import { BcryptService } from "./services/bcrypt.service";
171
175
  import { UuidExternalIdEntityComputedFieldProvider } from "./services/computed-fields/entity/uuid-externalid-entity-computed-field-provider.service";
172
176
  import { UuidExternalIdComputedFieldProvider } from "./services/computed-fields/uuid-external-id-computed-field-provider.service";
@@ -244,6 +248,7 @@ import { Setting } from './entities/setting.entity';
244
248
  import { UserActivityHistory } from './entities/user-activity-history.entity';
245
249
  import { UserViewMetadata } from './entities/user-view-metadata.entity';
246
250
  import { UserApiKey } from './entities/user-api-key.entity';
251
+ import { UserDeviceCredential } from './entities/user-device-credential.entity';
247
252
  import { User } from './entities/user.entity';
248
253
  import { HttpExceptionFilter } from './filters/http-exception.filter';
249
254
  import { ModelMetadataHelperService } from './helpers/model-metadata-helper.service';
@@ -316,6 +321,7 @@ import { SmsTemplateRepository } from './repository/sms-template.repository';
316
321
  import { UserActivityHistoryRepository } from './repository/user-activity-history.repository';
317
322
  import { UserViewMetadataRepository } from './repository/user-view-metadata.repository';
318
323
  import { UserApiKeyRepository } from './repository/user-api-key.repository';
324
+ import { UserDeviceCredentialRepository } from './repository/user-device-credential.repository';
319
325
  import { UserRepository } from './repository/user.repository';
320
326
  import { ViewMetadataRepository } from './repository/view-metadata.repository';
321
327
  import { PermissionMetadataSeederService } from './seeders/permission-metadata-seeder.service';
@@ -441,10 +447,12 @@ import { WorkflowInvocationService } from './services/workflow/workflow-invocati
441
447
  import { WorkflowNodeRegistryService } from './services/workflow/workflow-node-registry.service';
442
448
  import { WorkflowRuntimeService } from './services/workflow/workflow-runtime.service';
443
449
  import { WorkflowScheduledTriggerJobService } from './services/workflow/workflow-scheduled-trigger.job';
450
+ import { ExecutionFailNode } from './services/workflow/nodes/execution-fail.node';
444
451
  import { ForEachNode } from './services/workflow/nodes/for-each.node';
445
452
  import { HttpRequestNode } from './services/workflow/nodes/http-request.node';
446
453
  import { IfNode } from './services/workflow/nodes/if.node';
447
454
  import { LogWriteNode } from './services/workflow/nodes/log-write.node';
455
+ import { LoopUntilNode } from './services/workflow/nodes/loop-until.node';
448
456
  import { ParallelNode } from './services/workflow/nodes/parallel.node';
449
457
  import { RuntimePythonNode } from './services/workflow/nodes/runtime-python.node';
450
458
  import { SequentialNode } from './services/workflow/nodes/sequential.node';
@@ -496,6 +504,7 @@ import { SwitchNode } from './services/workflow/nodes/switch.node';
496
504
  SmsTemplate,
497
505
  User,
498
506
  UserApiKey,
507
+ UserDeviceCredential,
499
508
  UserActivityHistory,
500
509
  UserViewMetadata,
501
510
  ViewMetadata,
@@ -533,7 +542,11 @@ import { SwitchNode } from './services/workflow/nodes/switch.node';
533
542
  // else (including svg, html, and any other uploaded file) is forced to download
534
543
  // rather than be displayed/executed by the browser, regardless of what mimetype or
535
544
  // extension it was uploaded with.
536
- if (!INLINE_SAFE_EXTENSIONS.has(extname(path).toLowerCase().replace(/^\./, ''))) {
545
+ // basename first: getLowercaseFileExtension takes a file name, not a path, so a
546
+ // directory containing a dot must not be mistaken for the extension. An
547
+ // extensionless file yields undefined, which is not inline-safe - so it correctly
548
+ // falls through to the forced-download branch.
549
+ if (!INLINE_SAFE_EXTENSIONS.has(getLowercaseFileExtension(basename(path)) ?? '')) {
537
550
  res.setHeader("Content-Type", "application/octet-stream");
538
551
  res.setHeader("Content-Disposition", "attachment");
539
552
  }
@@ -544,6 +557,19 @@ import { SwitchNode } from './services/workflow/nodes/switch.node';
544
557
  imports: [ConfigModule],
545
558
  useFactory: async (configService: ConfigService) => ({
546
559
  dest: process.env.AB_MEDIA_UPLOAD_DIR ?? "media-uploads",
560
+ // A global floor under whatever per-field mediaMaxSizeKb restrictions apply, not a
561
+ // replacement for them - some upload paths (e.g. chatter attachments) had no size cap
562
+ // enforced anywhere before this. Must stay >= the largest legitimate per-field limit
563
+ // already configured (chatter's messageAttachments is 102400 KB / 100MB), since Multer
564
+ // enforces this before any of our own field-level checks ever run. Mirrored (read-only,
565
+ // for visibility only - see comment there for why) as the "maxMediaFileSizeMb" setting
566
+ // in default-settings-provider.service.ts; keep both parsing expressions in sync.
567
+ limits: {
568
+ fileSize: (() => {
569
+ const parsedMb = Number(process.env.AB_MEDIA_MAX_FILE_SIZE_MB);
570
+ return (Number.isFinite(parsedMb) && parsedMb > 0 ? parsedMb : 100) * 1024 * 1024;
571
+ })(),
572
+ },
547
573
  }),
548
574
  inject: [ConfigService],
549
575
  }),
@@ -587,6 +613,7 @@ import { SwitchNode } from './services/workflow/nodes/switch.node';
587
613
  GupshupWebhookController,
588
614
  MetaCloudWhatsappWebhookController,
589
615
  OTPAuthenticationController,
616
+ MpinAuthenticationController,
590
617
  PermissionMetadataController,
591
618
  RoleMetadataController,
592
619
  SavedFiltersController,
@@ -642,6 +669,7 @@ import { SwitchNode } from './services/workflow/nodes/switch.node';
642
669
  ModuleMetadataExplorerService,
643
670
  ModuleMetadataHelperService,
644
671
  ModulePackageService,
672
+ MetadataValidationService,
645
673
  ModelMetadataService,
646
674
  ModelMetadataHelperService,
647
675
  FieldMetadataService,
@@ -654,6 +682,8 @@ import { SwitchNode } from './services/workflow/nodes/switch.node';
654
682
  InfoService,
655
683
  SolidIntrospectService,
656
684
  DiscoveryService,
685
+ DraftPublishHelperService,
686
+ InternationalisationHelperService,
657
687
  CrudHelperService,
658
688
  CRUDService,
659
689
  Reflector,
@@ -749,6 +779,7 @@ import { SwitchNode } from './services/workflow/nodes/switch.node';
749
779
  ApiKeyGuard,
750
780
  MediaSignedUrlGuard,
751
781
  ApiKeyService,
782
+ MpinService,
752
783
  ActiveSessionStorageService,
753
784
  AuthenticationService,
754
785
  GoogleAuthenticationController,
@@ -818,6 +849,7 @@ import { SwitchNode } from './services/workflow/nodes/switch.node';
818
849
  PermissionMetadataSeederService,
819
850
  UserService,
820
851
  UserApiKeyRepository,
852
+ UserDeviceCredentialRepository,
821
853
  UserRepository,
822
854
  SettingService,
823
855
  ConcatComputedFieldProvider,
@@ -947,10 +979,12 @@ import { SwitchNode } from './services/workflow/nodes/switch.node';
947
979
  WorkflowDefinitionValidatorService,
948
980
  WorkflowNodeRegistryService,
949
981
  WorkflowScheduledTriggerJobService,
982
+ ExecutionFailNode,
950
983
  LogWriteNode,
951
984
  HttpRequestNode,
952
985
  IfNode,
953
986
  ForEachNode,
987
+ LoopUntilNode,
954
988
  ParallelNode,
955
989
  RuntimePythonNode,
956
990
  SequentialNode,
@@ -972,6 +1006,8 @@ import { SwitchNode } from './services/workflow/nodes/switch.node';
972
1006
  ChatterMessageRepository,
973
1007
  ChatterMessageService,
974
1008
  ConfigModule,
1009
+ DraftPublishHelperService,
1010
+ InternationalisationHelperService,
975
1011
  CrudHelperService,
976
1012
  CRUDService,
977
1013
  CsvService,
@@ -994,6 +1030,7 @@ import { SwitchNode } from './services/workflow/nodes/switch.node';
994
1030
  SmsFactory,
995
1031
  MediaService,
996
1032
  MediaStorageProviderMetadataService,
1033
+ MetadataValidationService,
997
1034
  ModelMetadataHelperService,
998
1035
  ModelMetadataService,
999
1036
  ModuleMetadataService,
@@ -1033,13 +1070,7 @@ import { SwitchNode } from './services/workflow/nodes/switch.node';
1033
1070
  WorkflowExpressionService,
1034
1071
  ],
1035
1072
  })
1036
- export class SolidCoreModule implements NestModule {
1037
- configure(consumer: MiddlewareConsumer) {
1038
- consumer
1039
- .apply(
1040
- express.json({ limit: "10mb" }),
1041
- express.urlencoded({ limit: "10mb", extended: true }),
1042
- )
1043
- .forRoutes("*");
1044
- }
1045
- }
1073
+ // Body-size limits live in bootstrapSolidApp (see SolidBootstrapOptions.bodyLimit).
1074
+ // They cannot be applied here: module middleware is registered in registerRouter(),
1075
+ // which runs after Nest's own parser middleware, so anything set here never takes effect.
1076
+ export class SolidCoreModule {}