@solidxai/core 0.1.12 → 0.1.13-beta.10

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 (687) hide show
  1. package/CHANGELOG.md +3786 -0
  2. package/dist/commands/run-tests.command.d.ts +7 -1
  3. package/dist/commands/run-tests.command.d.ts.map +1 -1
  4. package/dist/commands/run-tests.command.js +49 -3
  5. package/dist/commands/run-tests.command.js.map +1 -1
  6. package/dist/commands/seed.command.d.ts +2 -0
  7. package/dist/commands/seed.command.d.ts.map +1 -1
  8. package/dist/commands/seed.command.js +21 -0
  9. package/dist/commands/seed.command.js.map +1 -1
  10. package/dist/constants/chatter-message.constants.d.ts +1 -0
  11. package/dist/constants/chatter-message.constants.d.ts.map +1 -1
  12. package/dist/constants/chatter-message.constants.js +3 -1
  13. package/dist/constants/chatter-message.constants.js.map +1 -1
  14. package/dist/constants/draft-publish-fields.d.ts +2 -0
  15. package/dist/constants/draft-publish-fields.d.ts.map +1 -0
  16. package/dist/constants/draft-publish-fields.js +5 -0
  17. package/dist/constants/draft-publish-fields.js.map +1 -0
  18. package/dist/constants/media-file-types.d.ts +9 -0
  19. package/dist/constants/media-file-types.d.ts.map +1 -1
  20. package/dist/constants/media-file-types.js +27 -1
  21. package/dist/constants/media-file-types.js.map +1 -1
  22. package/dist/constants/user.constants.d.ts +2 -0
  23. package/dist/constants/user.constants.d.ts.map +1 -0
  24. package/dist/constants/user.constants.js +5 -0
  25. package/dist/constants/user.constants.js.map +1 -0
  26. package/dist/controllers/action-metadata.controller.d.ts +1 -1
  27. package/dist/controllers/action-metadata.controller.js +1 -1
  28. package/dist/controllers/agent-event.controller.d.ts +1 -1
  29. package/dist/controllers/agent-event.controller.js +1 -1
  30. package/dist/controllers/agent-session.controller.d.ts +1 -1
  31. package/dist/controllers/agent-session.controller.js +1 -1
  32. package/dist/controllers/chatter-message.controller.d.ts +5 -0
  33. package/dist/controllers/chatter-message.controller.d.ts.map +1 -1
  34. package/dist/controllers/chatter-message.controller.js +14 -0
  35. package/dist/controllers/chatter-message.controller.js.map +1 -1
  36. package/dist/controllers/dashboard-user-layout.controller.d.ts +1 -1
  37. package/dist/controllers/dashboard-user-layout.controller.js +1 -1
  38. package/dist/controllers/email-template.controller.d.ts +1 -1
  39. package/dist/controllers/email-template.controller.js +1 -1
  40. package/dist/controllers/export-template.controller.d.ts +1 -1
  41. package/dist/controllers/export-template.controller.d.ts.map +1 -1
  42. package/dist/controllers/export-template.controller.js +6 -4
  43. package/dist/controllers/export-template.controller.js.map +1 -1
  44. package/dist/controllers/export-transaction.controller.d.ts +1 -1
  45. package/dist/controllers/export-transaction.controller.js +1 -1
  46. package/dist/controllers/import-transaction-error-log.controller.d.ts +1 -1
  47. package/dist/controllers/import-transaction-error-log.controller.js +1 -1
  48. package/dist/controllers/import-transaction.controller.d.ts +1 -1
  49. package/dist/controllers/import-transaction.controller.d.ts.map +1 -1
  50. package/dist/controllers/import-transaction.controller.js +7 -7
  51. package/dist/controllers/import-transaction.controller.js.map +1 -1
  52. package/dist/controllers/list-of-values.controller.d.ts +1 -1
  53. package/dist/controllers/list-of-values.controller.js +1 -1
  54. package/dist/controllers/locale.controller.d.ts +1 -1
  55. package/dist/controllers/locale.controller.js +1 -1
  56. package/dist/controllers/mcp-audit-log.controller.d.ts +1 -1
  57. package/dist/controllers/mcp-audit-log.controller.js +1 -1
  58. package/dist/controllers/media.controller.d.ts +2 -2
  59. package/dist/controllers/media.controller.d.ts.map +1 -1
  60. package/dist/controllers/media.controller.js +13 -8
  61. package/dist/controllers/media.controller.js.map +1 -1
  62. package/dist/controllers/menu-item-metadata.controller.d.ts +1 -1
  63. package/dist/controllers/menu-item-metadata.controller.js +1 -1
  64. package/dist/controllers/model-sequence.controller.d.ts +1 -1
  65. package/dist/controllers/model-sequence.controller.js +1 -1
  66. package/dist/controllers/module-package.controller.d.ts.map +1 -1
  67. package/dist/controllers/module-package.controller.js +2 -3
  68. package/dist/controllers/module-package.controller.js.map +1 -1
  69. package/dist/controllers/mq-message-queue.controller.d.ts +1 -1
  70. package/dist/controllers/mq-message-queue.controller.js +1 -1
  71. package/dist/controllers/mq-message.controller.d.ts +1 -1
  72. package/dist/controllers/mq-message.controller.js +1 -1
  73. package/dist/controllers/permission-metadata.controller.d.ts +1 -1
  74. package/dist/controllers/permission-metadata.controller.js +1 -1
  75. package/dist/controllers/role-metadata.controller.d.ts +1 -1
  76. package/dist/controllers/role-metadata.controller.js +1 -1
  77. package/dist/controllers/saved-filters.controller.d.ts +1 -1
  78. package/dist/controllers/saved-filters.controller.js +1 -1
  79. package/dist/controllers/scheduled-job.controller.d.ts +1 -1
  80. package/dist/controllers/scheduled-job.controller.js +1 -1
  81. package/dist/controllers/security-rule.controller.d.ts +1 -1
  82. package/dist/controllers/security-rule.controller.js +1 -1
  83. package/dist/controllers/sms-template.controller.d.ts +1 -1
  84. package/dist/controllers/sms-template.controller.js +1 -1
  85. package/dist/controllers/user-activity-history.controller.d.ts +1 -1
  86. package/dist/controllers/user-activity-history.controller.js +1 -1
  87. package/dist/controllers/user-view-metadata.controller.d.ts +1 -1
  88. package/dist/controllers/user-view-metadata.controller.js +1 -1
  89. package/dist/controllers/user.controller.d.ts +2 -2
  90. package/dist/controllers/user.controller.js +2 -2
  91. package/dist/controllers/view-metadata.controller.d.ts +3 -3
  92. package/dist/controllers/view-metadata.controller.js +1 -1
  93. package/dist/controllers/workflow-definition.controller.d.ts +38 -0
  94. package/dist/controllers/workflow-definition.controller.d.ts.map +1 -0
  95. package/dist/controllers/workflow-definition.controller.js +272 -0
  96. package/dist/controllers/workflow-definition.controller.js.map +1 -0
  97. package/dist/controllers/workflow-execution-artifact.controller.d.ts +24 -0
  98. package/dist/controllers/workflow-execution-artifact.controller.d.ts.map +1 -0
  99. package/dist/controllers/workflow-execution-artifact.controller.js +179 -0
  100. package/dist/controllers/workflow-execution-artifact.controller.js.map +1 -0
  101. package/dist/controllers/workflow-execution-log.controller.d.ts +24 -0
  102. package/dist/controllers/workflow-execution-log.controller.d.ts.map +1 -0
  103. package/dist/controllers/workflow-execution-log.controller.js +179 -0
  104. package/dist/controllers/workflow-execution-log.controller.js.map +1 -0
  105. package/dist/controllers/workflow-execution.controller.d.ts +29 -0
  106. package/dist/controllers/workflow-execution.controller.d.ts.map +1 -0
  107. package/dist/controllers/workflow-execution.controller.js +227 -0
  108. package/dist/controllers/workflow-execution.controller.js.map +1 -0
  109. package/dist/controllers/workflow-secret.controller.d.ts +24 -0
  110. package/dist/controllers/workflow-secret.controller.d.ts.map +1 -0
  111. package/dist/controllers/workflow-secret.controller.js +179 -0
  112. package/dist/controllers/workflow-secret.controller.js.map +1 -0
  113. package/dist/controllers/workflow-step-execution.controller.d.ts +24 -0
  114. package/dist/controllers/workflow-step-execution.controller.d.ts.map +1 -0
  115. package/dist/controllers/workflow-step-execution.controller.js +179 -0
  116. package/dist/controllers/workflow-step-execution.controller.js.map +1 -0
  117. package/dist/controllers/workflow-trigger-execution.controller.d.ts +24 -0
  118. package/dist/controllers/workflow-trigger-execution.controller.d.ts.map +1 -0
  119. package/dist/controllers/workflow-trigger-execution.controller.js +179 -0
  120. package/dist/controllers/workflow-trigger-execution.controller.js.map +1 -0
  121. package/dist/decorators/workflow-field-data-provider.decorator.d.ts +3 -0
  122. package/dist/decorators/workflow-field-data-provider.decorator.d.ts.map +1 -0
  123. package/dist/decorators/workflow-field-data-provider.decorator.js +11 -0
  124. package/dist/decorators/workflow-field-data-provider.decorator.js.map +1 -0
  125. package/dist/decorators/workflow-node-provider.decorator.d.ts +4 -0
  126. package/dist/decorators/workflow-node-provider.decorator.d.ts.map +1 -0
  127. package/dist/decorators/workflow-node-provider.decorator.js +13 -0
  128. package/dist/decorators/workflow-node-provider.decorator.js.map +1 -0
  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/create-workflow-definition.dto.d.ts +14 -0
  134. package/dist/dtos/create-workflow-definition.dto.d.ts.map +1 -0
  135. package/dist/dtos/create-workflow-definition.dto.js +92 -0
  136. package/dist/dtos/create-workflow-definition.dto.js.map +1 -0
  137. package/dist/dtos/create-workflow-execution-artifact.dto.d.ts +22 -0
  138. package/dist/dtos/create-workflow-execution-artifact.dto.d.ts.map +1 -0
  139. package/dist/dtos/create-workflow-execution-artifact.dto.js +139 -0
  140. package/dist/dtos/create-workflow-execution-artifact.dto.js.map +1 -0
  141. package/dist/dtos/create-workflow-execution-log.dto.d.ts +18 -0
  142. package/dist/dtos/create-workflow-execution-log.dto.d.ts.map +1 -0
  143. package/dist/dtos/create-workflow-execution-log.dto.js +116 -0
  144. package/dist/dtos/create-workflow-execution-log.dto.js.map +1 -0
  145. package/dist/dtos/create-workflow-execution.dto.d.ts +33 -0
  146. package/dist/dtos/create-workflow-execution.dto.d.ts.map +1 -0
  147. package/dist/dtos/create-workflow-execution.dto.js +186 -0
  148. package/dist/dtos/create-workflow-execution.dto.js.map +1 -0
  149. package/dist/dtos/create-workflow-secret.dto.d.ts +11 -0
  150. package/dist/dtos/create-workflow-secret.dto.d.ts.map +1 -0
  151. package/dist/dtos/create-workflow-secret.dto.js +74 -0
  152. package/dist/dtos/create-workflow-secret.dto.js.map +1 -0
  153. package/dist/dtos/create-workflow-step-execution.dto.d.ts +27 -0
  154. package/dist/dtos/create-workflow-step-execution.dto.d.ts.map +1 -0
  155. package/dist/dtos/create-workflow-step-execution.dto.js +171 -0
  156. package/dist/dtos/create-workflow-step-execution.dto.js.map +1 -0
  157. package/dist/dtos/create-workflow-trigger-execution.dto.d.ts +25 -0
  158. package/dist/dtos/create-workflow-trigger-execution.dto.d.ts.map +1 -0
  159. package/dist/dtos/create-workflow-trigger-execution.dto.js +158 -0
  160. package/dist/dtos/create-workflow-trigger-execution.dto.js.map +1 -0
  161. package/dist/dtos/execute-workflow.dto.d.ts +7 -0
  162. package/dist/dtos/execute-workflow.dto.d.ts.map +1 -0
  163. package/dist/dtos/execute-workflow.dto.js +11 -0
  164. package/dist/dtos/execute-workflow.dto.js.map +1 -0
  165. package/dist/dtos/update-workflow-definition.dto.d.ts +15 -0
  166. package/dist/dtos/update-workflow-definition.dto.d.ts.map +1 -0
  167. package/dist/dtos/update-workflow-definition.dto.js +97 -0
  168. package/dist/dtos/update-workflow-definition.dto.js.map +1 -0
  169. package/dist/dtos/update-workflow-execution-artifact.dto.d.ts +23 -0
  170. package/dist/dtos/update-workflow-execution-artifact.dto.d.ts.map +1 -0
  171. package/dist/dtos/update-workflow-execution-artifact.dto.js +143 -0
  172. package/dist/dtos/update-workflow-execution-artifact.dto.js.map +1 -0
  173. package/dist/dtos/update-workflow-execution-log.dto.d.ts +19 -0
  174. package/dist/dtos/update-workflow-execution-log.dto.d.ts.map +1 -0
  175. package/dist/dtos/update-workflow-execution-log.dto.js +121 -0
  176. package/dist/dtos/update-workflow-execution-log.dto.js.map +1 -0
  177. package/dist/dtos/update-workflow-execution.dto.d.ts +34 -0
  178. package/dist/dtos/update-workflow-execution.dto.d.ts.map +1 -0
  179. package/dist/dtos/update-workflow-execution.dto.js +190 -0
  180. package/dist/dtos/update-workflow-execution.dto.js.map +1 -0
  181. package/dist/dtos/update-workflow-secret.dto.d.ts +12 -0
  182. package/dist/dtos/update-workflow-secret.dto.d.ts.map +1 -0
  183. package/dist/dtos/update-workflow-secret.dto.js +80 -0
  184. package/dist/dtos/update-workflow-secret.dto.js.map +1 -0
  185. package/dist/dtos/update-workflow-step-execution.dto.d.ts +28 -0
  186. package/dist/dtos/update-workflow-step-execution.dto.d.ts.map +1 -0
  187. package/dist/dtos/update-workflow-step-execution.dto.js +175 -0
  188. package/dist/dtos/update-workflow-step-execution.dto.js.map +1 -0
  189. package/dist/dtos/update-workflow-trigger-execution.dto.d.ts +26 -0
  190. package/dist/dtos/update-workflow-trigger-execution.dto.d.ts.map +1 -0
  191. package/dist/dtos/update-workflow-trigger-execution.dto.js +163 -0
  192. package/dist/dtos/update-workflow-trigger-execution.dto.js.map +1 -0
  193. package/dist/dtos/validate-workflow-definition.dto.d.ts +4 -0
  194. package/dist/dtos/validate-workflow-definition.dto.d.ts.map +1 -0
  195. package/dist/dtos/validate-workflow-definition.dto.js +11 -0
  196. package/dist/dtos/validate-workflow-definition.dto.js.map +1 -0
  197. package/dist/entities/common.entity.d.ts +4 -0
  198. package/dist/entities/common.entity.d.ts.map +1 -1
  199. package/dist/entities/common.entity.js +25 -1
  200. package/dist/entities/common.entity.js.map +1 -1
  201. package/dist/entities/user.entity.d.ts.map +1 -1
  202. package/dist/entities/user.entity.js +36 -0
  203. package/dist/entities/user.entity.js.map +1 -1
  204. package/dist/entities/workflow-definition.entity.d.ts +15 -0
  205. package/dist/entities/workflow-definition.entity.d.ts.map +1 -0
  206. package/dist/entities/workflow-definition.entity.js +77 -0
  207. package/dist/entities/workflow-definition.entity.js.map +1 -0
  208. package/dist/entities/workflow-execution-artifact.entity.d.ts +23 -0
  209. package/dist/entities/workflow-execution-artifact.entity.d.ts.map +1 -0
  210. package/dist/entities/workflow-execution-artifact.entity.js +113 -0
  211. package/dist/entities/workflow-execution-artifact.entity.js.map +1 -0
  212. package/dist/entities/workflow-execution-log.entity.d.ts +19 -0
  213. package/dist/entities/workflow-execution-log.entity.d.ts.map +1 -0
  214. package/dist/entities/workflow-execution-log.entity.js +95 -0
  215. package/dist/entities/workflow-execution-log.entity.js.map +1 -0
  216. package/dist/entities/workflow-execution.entity.d.ts +28 -0
  217. package/dist/entities/workflow-execution.entity.d.ts.map +1 -0
  218. package/dist/entities/workflow-execution.entity.js +124 -0
  219. package/dist/entities/workflow-execution.entity.js.map +1 -0
  220. package/dist/entities/workflow-secret.entity.d.ts +12 -0
  221. package/dist/entities/workflow-secret.entity.d.ts.map +1 -0
  222. package/dist/entities/workflow-secret.entity.js +66 -0
  223. package/dist/entities/workflow-secret.entity.js.map +1 -0
  224. package/dist/entities/workflow-step-execution.entity.d.ts +28 -0
  225. package/dist/entities/workflow-step-execution.entity.d.ts.map +1 -0
  226. package/dist/entities/workflow-step-execution.entity.js +138 -0
  227. package/dist/entities/workflow-step-execution.entity.js.map +1 -0
  228. package/dist/entities/workflow-trigger-execution.entity.d.ts +26 -0
  229. package/dist/entities/workflow-trigger-execution.entity.d.ts.map +1 -0
  230. package/dist/entities/workflow-trigger-execution.entity.js +127 -0
  231. package/dist/entities/workflow-trigger-execution.entity.js.map +1 -0
  232. package/dist/factories/mail.factory.d.ts.map +1 -1
  233. package/dist/factories/mail.factory.js +4 -0
  234. package/dist/factories/mail.factory.js.map +1 -1
  235. package/dist/factories/sms.factory.d.ts.map +1 -1
  236. package/dist/factories/sms.factory.js +4 -1
  237. package/dist/factories/sms.factory.js.map +1 -1
  238. package/dist/helpers/field-crud-managers/MediaFieldCrudManager.d.ts +1 -0
  239. package/dist/helpers/field-crud-managers/MediaFieldCrudManager.d.ts.map +1 -1
  240. package/dist/helpers/field-crud-managers/MediaFieldCrudManager.js +18 -11
  241. package/dist/helpers/field-crud-managers/MediaFieldCrudManager.js.map +1 -1
  242. package/dist/helpers/file-download.helper.d.ts +9 -0
  243. package/dist/helpers/file-download.helper.d.ts.map +1 -0
  244. package/dist/helpers/file-download.helper.js +14 -0
  245. package/dist/helpers/file-download.helper.js.map +1 -0
  246. package/dist/helpers/model-metadata-helper.service.d.ts.map +1 -1
  247. package/dist/helpers/model-metadata-helper.service.js +30 -1
  248. package/dist/helpers/model-metadata-helper.service.js.map +1 -1
  249. package/dist/helpers/solid-registry.d.ts +5 -1
  250. package/dist/helpers/solid-registry.d.ts.map +1 -1
  251. package/dist/helpers/solid-registry.js +18 -1
  252. package/dist/helpers/solid-registry.js.map +1 -1
  253. package/dist/index.d.ts +59 -0
  254. package/dist/index.d.ts.map +1 -1
  255. package/dist/index.js +59 -0
  256. package/dist/index.js.map +1 -1
  257. package/dist/interfaces/workflow-node-handler.interface.d.ts +5 -0
  258. package/dist/interfaces/workflow-node-handler.interface.d.ts.map +1 -0
  259. package/dist/interfaces/workflow-node-handler.interface.js +3 -0
  260. package/dist/interfaces/workflow-node-handler.interface.js.map +1 -0
  261. package/dist/interfaces.d.ts +25 -0
  262. package/dist/interfaces.d.ts.map +1 -1
  263. package/dist/interfaces.js.map +1 -1
  264. package/dist/jobs/database/workflow-execution-publisher-database.service.d.ts +12 -0
  265. package/dist/jobs/database/workflow-execution-publisher-database.service.d.ts.map +1 -0
  266. package/dist/jobs/database/workflow-execution-publisher-database.service.js +39 -0
  267. package/dist/jobs/database/workflow-execution-publisher-database.service.js.map +1 -0
  268. package/dist/jobs/database/workflow-execution-queue-options-database.d.ts +8 -0
  269. package/dist/jobs/database/workflow-execution-queue-options-database.d.ts.map +1 -0
  270. package/dist/jobs/database/workflow-execution-queue-options-database.js +10 -0
  271. package/dist/jobs/database/workflow-execution-queue-options-database.js.map +1 -0
  272. package/dist/jobs/database/workflow-execution-subscriber-database.service.d.ts +19 -0
  273. package/dist/jobs/database/workflow-execution-subscriber-database.service.d.ts.map +1 -0
  274. package/dist/jobs/database/workflow-execution-subscriber-database.service.js +55 -0
  275. package/dist/jobs/database/workflow-execution-subscriber-database.service.js.map +1 -0
  276. package/dist/jobs/rabbitmq/workflow-execution-publisher.service.d.ts +12 -0
  277. package/dist/jobs/rabbitmq/workflow-execution-publisher.service.d.ts.map +1 -0
  278. package/dist/jobs/rabbitmq/workflow-execution-publisher.service.js +39 -0
  279. package/dist/jobs/rabbitmq/workflow-execution-publisher.service.js.map +1 -0
  280. package/dist/jobs/rabbitmq/workflow-execution-queue-options.d.ts +8 -0
  281. package/dist/jobs/rabbitmq/workflow-execution-queue-options.d.ts.map +1 -0
  282. package/dist/jobs/rabbitmq/workflow-execution-queue-options.js +10 -0
  283. package/dist/jobs/rabbitmq/workflow-execution-queue-options.js.map +1 -0
  284. package/dist/jobs/rabbitmq/workflow-execution-subscriber.service.d.ts +17 -0
  285. package/dist/jobs/rabbitmq/workflow-execution-subscriber.service.d.ts.map +1 -0
  286. package/dist/jobs/rabbitmq/workflow-execution-subscriber.service.js +52 -0
  287. package/dist/jobs/rabbitmq/workflow-execution-subscriber.service.js.map +1 -0
  288. package/dist/jobs/redis/workflow-execution-publisher-redis.service.d.ts +12 -0
  289. package/dist/jobs/redis/workflow-execution-publisher-redis.service.d.ts.map +1 -0
  290. package/dist/jobs/redis/workflow-execution-publisher-redis.service.js +39 -0
  291. package/dist/jobs/redis/workflow-execution-publisher-redis.service.js.map +1 -0
  292. package/dist/jobs/redis/workflow-execution-queue-options-redis.d.ts +8 -0
  293. package/dist/jobs/redis/workflow-execution-queue-options-redis.d.ts.map +1 -0
  294. package/dist/jobs/redis/workflow-execution-queue-options-redis.js +10 -0
  295. package/dist/jobs/redis/workflow-execution-queue-options-redis.js.map +1 -0
  296. package/dist/jobs/redis/workflow-execution-subscriber-redis.service.d.ts +17 -0
  297. package/dist/jobs/redis/workflow-execution-subscriber-redis.service.d.ts.map +1 -0
  298. package/dist/jobs/redis/workflow-execution-subscriber-redis.service.js +52 -0
  299. package/dist/jobs/redis/workflow-execution-subscriber-redis.service.js.map +1 -0
  300. package/dist/repository/security-rule.repository.d.ts +1 -0
  301. package/dist/repository/security-rule.repository.d.ts.map +1 -1
  302. package/dist/repository/security-rule.repository.js +28 -7
  303. package/dist/repository/security-rule.repository.js.map +1 -1
  304. package/dist/repository/workflow-definition.repository.d.ts +12 -0
  305. package/dist/repository/workflow-definition.repository.d.ts.map +1 -0
  306. package/dist/repository/workflow-definition.repository.js +39 -0
  307. package/dist/repository/workflow-definition.repository.js.map +1 -0
  308. package/dist/repository/workflow-execution-artifact.repository.d.ts +12 -0
  309. package/dist/repository/workflow-execution-artifact.repository.d.ts.map +1 -0
  310. package/dist/repository/workflow-execution-artifact.repository.js +39 -0
  311. package/dist/repository/workflow-execution-artifact.repository.js.map +1 -0
  312. package/dist/repository/workflow-execution-log.repository.d.ts +12 -0
  313. package/dist/repository/workflow-execution-log.repository.d.ts.map +1 -0
  314. package/dist/repository/workflow-execution-log.repository.js +39 -0
  315. package/dist/repository/workflow-execution-log.repository.js.map +1 -0
  316. package/dist/repository/workflow-execution.repository.d.ts +12 -0
  317. package/dist/repository/workflow-execution.repository.d.ts.map +1 -0
  318. package/dist/repository/workflow-execution.repository.js +39 -0
  319. package/dist/repository/workflow-execution.repository.js.map +1 -0
  320. package/dist/repository/workflow-secret.repository.d.ts +12 -0
  321. package/dist/repository/workflow-secret.repository.d.ts.map +1 -0
  322. package/dist/repository/workflow-secret.repository.js +39 -0
  323. package/dist/repository/workflow-secret.repository.js.map +1 -0
  324. package/dist/repository/workflow-step-execution.repository.d.ts +12 -0
  325. package/dist/repository/workflow-step-execution.repository.d.ts.map +1 -0
  326. package/dist/repository/workflow-step-execution.repository.js +39 -0
  327. package/dist/repository/workflow-step-execution.repository.js.map +1 -0
  328. package/dist/repository/workflow-trigger-execution.repository.d.ts +12 -0
  329. package/dist/repository/workflow-trigger-execution.repository.d.ts.map +1 -0
  330. package/dist/repository/workflow-trigger-execution.repository.js +39 -0
  331. package/dist/repository/workflow-trigger-execution.repository.js.map +1 -0
  332. package/dist/seeders/module-metadata-seeder.service.d.ts +6 -0
  333. package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
  334. package/dist/seeders/module-metadata-seeder.service.js +185 -27
  335. package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
  336. package/dist/seeders/module-test-data.service.d.ts +3 -1
  337. package/dist/seeders/module-test-data.service.d.ts.map +1 -1
  338. package/dist/seeders/module-test-data.service.js +8 -2
  339. package/dist/seeders/module-test-data.service.js.map +1 -1
  340. package/dist/seeders/seed-data/solid-core-metadata.json +11494 -5570
  341. package/dist/services/authentication.service.d.ts +4 -1
  342. package/dist/services/authentication.service.d.ts.map +1 -1
  343. package/dist/services/authentication.service.js +52 -4
  344. package/dist/services/authentication.service.js.map +1 -1
  345. package/dist/services/chatter-message.service.d.ts +11 -0
  346. package/dist/services/chatter-message.service.d.ts.map +1 -1
  347. package/dist/services/chatter-message.service.js +53 -4
  348. package/dist/services/chatter-message.service.js.map +1 -1
  349. package/dist/services/crud-helper.service.d.ts +21 -3
  350. package/dist/services/crud-helper.service.d.ts.map +1 -1
  351. package/dist/services/crud-helper.service.js +129 -54
  352. package/dist/services/crud-helper.service.js.map +1 -1
  353. package/dist/services/crud.service.d.ts +14 -1
  354. package/dist/services/crud.service.d.ts.map +1 -1
  355. package/dist/services/crud.service.js +107 -67
  356. package/dist/services/crud.service.js.map +1 -1
  357. package/dist/services/datasource-introspection.service.d.ts.map +1 -1
  358. package/dist/services/datasource-introspection.service.js.map +1 -1
  359. package/dist/services/draft-publish-helper.service.d.ts +52 -0
  360. package/dist/services/draft-publish-helper.service.d.ts.map +1 -0
  361. package/dist/services/draft-publish-helper.service.js +368 -0
  362. package/dist/services/draft-publish-helper.service.js.map +1 -0
  363. package/dist/services/internationalisation-helper.service.d.ts +19 -0
  364. package/dist/services/internationalisation-helper.service.d.ts.map +1 -0
  365. package/dist/services/internationalisation-helper.service.js +107 -0
  366. package/dist/services/internationalisation-helper.service.js.map +1 -0
  367. package/dist/services/locale.service.d.ts +1 -1
  368. package/dist/services/media.service.d.ts +3 -2
  369. package/dist/services/media.service.d.ts.map +1 -1
  370. package/dist/services/media.service.js +44 -29
  371. package/dist/services/media.service.js.map +1 -1
  372. package/dist/services/metadata-validation.service.d.ts +7 -0
  373. package/dist/services/metadata-validation.service.d.ts.map +1 -0
  374. package/dist/services/metadata-validation.service.js +42 -0
  375. package/dist/services/metadata-validation.service.js.map +1 -0
  376. package/dist/services/model-metadata.service.d.ts.map +1 -1
  377. package/dist/services/model-metadata.service.js +2 -1
  378. package/dist/services/model-metadata.service.js.map +1 -1
  379. package/dist/services/object.utils.d.ts +2 -0
  380. package/dist/services/object.utils.d.ts.map +1 -0
  381. package/dist/services/object.utils.js +11 -0
  382. package/dist/services/object.utils.js.map +1 -0
  383. package/dist/services/settings/default-settings-provider.service.d.ts +46 -6
  384. package/dist/services/settings/default-settings-provider.service.d.ts.map +1 -1
  385. package/dist/services/settings/default-settings-provider.service.js +29 -3
  386. package/dist/services/settings/default-settings-provider.service.js.map +1 -1
  387. package/dist/services/solid-introspect.service.d.ts +1 -0
  388. package/dist/services/solid-introspect.service.d.ts.map +1 -1
  389. package/dist/services/solid-introspect.service.js +12 -0
  390. package/dist/services/solid-introspect.service.js.map +1 -1
  391. package/dist/services/user.service.d.ts +2 -2
  392. package/dist/services/user.service.d.ts.map +1 -1
  393. package/dist/services/user.service.js +9 -3
  394. package/dist/services/user.service.js.map +1 -1
  395. package/dist/services/view-metadata.service.d.ts +6 -3
  396. package/dist/services/view-metadata.service.d.ts.map +1 -1
  397. package/dist/services/view-metadata.service.js +60 -63
  398. package/dist/services/view-metadata.service.js.map +1 -1
  399. package/dist/services/workflow/nodes/execution-fail.node.d.ts +6 -0
  400. package/dist/services/workflow/nodes/execution-fail.node.d.ts.map +1 -0
  401. package/dist/services/workflow/nodes/execution-fail.node.js +81 -0
  402. package/dist/services/workflow/nodes/execution-fail.node.js.map +1 -0
  403. package/dist/services/workflow/nodes/for-each.node.d.ts +8 -0
  404. package/dist/services/workflow/nodes/for-each.node.d.ts.map +1 -0
  405. package/dist/services/workflow/nodes/for-each.node.js +204 -0
  406. package/dist/services/workflow/nodes/for-each.node.js.map +1 -0
  407. package/dist/services/workflow/nodes/http-request.node.d.ts +13 -0
  408. package/dist/services/workflow/nodes/http-request.node.d.ts.map +1 -0
  409. package/dist/services/workflow/nodes/http-request.node.js +549 -0
  410. package/dist/services/workflow/nodes/http-request.node.js.map +1 -0
  411. package/dist/services/workflow/nodes/if.node.d.ts +6 -0
  412. package/dist/services/workflow/nodes/if.node.d.ts.map +1 -0
  413. package/dist/services/workflow/nodes/if.node.js +100 -0
  414. package/dist/services/workflow/nodes/if.node.js.map +1 -0
  415. package/dist/services/workflow/nodes/log-write.node.d.ts +6 -0
  416. package/dist/services/workflow/nodes/log-write.node.d.ts.map +1 -0
  417. package/dist/services/workflow/nodes/log-write.node.js +231 -0
  418. package/dist/services/workflow/nodes/log-write.node.js.map +1 -0
  419. package/dist/services/workflow/nodes/loop-until.node.d.ts +12 -0
  420. package/dist/services/workflow/nodes/loop-until.node.d.ts.map +1 -0
  421. package/dist/services/workflow/nodes/loop-until.node.js +281 -0
  422. package/dist/services/workflow/nodes/loop-until.node.js.map +1 -0
  423. package/dist/services/workflow/nodes/parallel.node.d.ts +6 -0
  424. package/dist/services/workflow/nodes/parallel.node.d.ts.map +1 -0
  425. package/dist/services/workflow/nodes/parallel.node.js +83 -0
  426. package/dist/services/workflow/nodes/parallel.node.js.map +1 -0
  427. package/dist/services/workflow/nodes/runtime-python.node.d.ts +13 -0
  428. package/dist/services/workflow/nodes/runtime-python.node.d.ts.map +1 -0
  429. package/dist/services/workflow/nodes/runtime-python.node.js +522 -0
  430. package/dist/services/workflow/nodes/runtime-python.node.js.map +1 -0
  431. package/dist/services/workflow/nodes/sequential.node.d.ts +6 -0
  432. package/dist/services/workflow/nodes/sequential.node.d.ts.map +1 -0
  433. package/dist/services/workflow/nodes/sequential.node.js +68 -0
  434. package/dist/services/workflow/nodes/sequential.node.js.map +1 -0
  435. package/dist/services/workflow/nodes/solidx-api.helpers.d.ts +25 -0
  436. package/dist/services/workflow/nodes/solidx-api.helpers.d.ts.map +1 -0
  437. package/dist/services/workflow/nodes/solidx-api.helpers.js +143 -0
  438. package/dist/services/workflow/nodes/solidx-api.helpers.js.map +1 -0
  439. package/dist/services/workflow/nodes/solidx-crud.nodes.d.ts +48 -0
  440. package/dist/services/workflow/nodes/solidx-crud.nodes.d.ts.map +1 -0
  441. package/dist/services/workflow/nodes/solidx-crud.nodes.js +475 -0
  442. package/dist/services/workflow/nodes/solidx-crud.nodes.js.map +1 -0
  443. package/dist/services/workflow/nodes/solidx-login.node.d.ts +6 -0
  444. package/dist/services/workflow/nodes/solidx-login.node.d.ts.map +1 -0
  445. package/dist/services/workflow/nodes/solidx-login.node.js +208 -0
  446. package/dist/services/workflow/nodes/solidx-login.node.js.map +1 -0
  447. package/dist/services/workflow/nodes/solidx-send-email.node.d.ts +11 -0
  448. package/dist/services/workflow/nodes/solidx-send-email.node.d.ts.map +1 -0
  449. package/dist/services/workflow/nodes/solidx-send-email.node.js +437 -0
  450. package/dist/services/workflow/nodes/solidx-send-email.node.js.map +1 -0
  451. package/dist/services/workflow/nodes/solidx-send-sms.node.d.ts +10 -0
  452. package/dist/services/workflow/nodes/solidx-send-sms.node.d.ts.map +1 -0
  453. package/dist/services/workflow/nodes/solidx-send-sms.node.js +347 -0
  454. package/dist/services/workflow/nodes/solidx-send-sms.node.js.map +1 -0
  455. package/dist/services/workflow/nodes/switch.node.d.ts +7 -0
  456. package/dist/services/workflow/nodes/switch.node.d.ts.map +1 -0
  457. package/dist/services/workflow/nodes/switch.node.js +120 -0
  458. package/dist/services/workflow/nodes/switch.node.js.map +1 -0
  459. package/dist/services/workflow/workflow-definition-metadata-sync.service.d.ts +19 -0
  460. package/dist/services/workflow/workflow-definition-metadata-sync.service.d.ts.map +1 -0
  461. package/dist/services/workflow/workflow-definition-metadata-sync.service.js +187 -0
  462. package/dist/services/workflow/workflow-definition-metadata-sync.service.js.map +1 -0
  463. package/dist/services/workflow/workflow-definition-validator.service.d.ts +13 -0
  464. package/dist/services/workflow/workflow-definition-validator.service.d.ts.map +1 -0
  465. package/dist/services/workflow/workflow-definition-validator.service.js +166 -0
  466. package/dist/services/workflow/workflow-definition-validator.service.js.map +1 -0
  467. package/dist/services/workflow/workflow-execution-writer.service.d.ts +26 -0
  468. package/dist/services/workflow/workflow-execution-writer.service.d.ts.map +1 -0
  469. package/dist/services/workflow/workflow-execution-writer.service.js +191 -0
  470. package/dist/services/workflow/workflow-execution-writer.service.js.map +1 -0
  471. package/dist/services/workflow/workflow-expression.service.d.ts +14 -0
  472. package/dist/services/workflow/workflow-expression.service.d.ts.map +1 -0
  473. package/dist/services/workflow/workflow-expression.service.js +157 -0
  474. package/dist/services/workflow/workflow-expression.service.js.map +1 -0
  475. package/dist/services/workflow/workflow-invocation.service.d.ts +11 -0
  476. package/dist/services/workflow/workflow-invocation.service.d.ts.map +1 -0
  477. package/dist/services/workflow/workflow-invocation.service.js +37 -0
  478. package/dist/services/workflow/workflow-invocation.service.js.map +1 -0
  479. package/dist/services/workflow/workflow-node-registry.service.d.ts +19 -0
  480. package/dist/services/workflow/workflow-node-registry.service.d.ts.map +1 -0
  481. package/dist/services/workflow/workflow-node-registry.service.js +117 -0
  482. package/dist/services/workflow/workflow-node-registry.service.js.map +1 -0
  483. package/dist/services/workflow/workflow-runtime.service.d.ts +61 -0
  484. package/dist/services/workflow/workflow-runtime.service.d.ts.map +1 -0
  485. package/dist/services/workflow/workflow-runtime.service.js +706 -0
  486. package/dist/services/workflow/workflow-runtime.service.js.map +1 -0
  487. package/dist/services/workflow/workflow-scheduled-trigger.job.d.ts +10 -0
  488. package/dist/services/workflow/workflow-scheduled-trigger.job.d.ts.map +1 -0
  489. package/dist/services/workflow/workflow-scheduled-trigger.job.js +37 -0
  490. package/dist/services/workflow/workflow-scheduled-trigger.job.js.map +1 -0
  491. package/dist/services/workflow-definition.service.d.ts +52 -0
  492. package/dist/services/workflow-definition.service.d.ts.map +1 -0
  493. package/dist/services/workflow-definition.service.js +251 -0
  494. package/dist/services/workflow-definition.service.js.map +1 -0
  495. package/dist/services/workflow-execution-artifact.service.d.ts +12 -0
  496. package/dist/services/workflow-execution-artifact.service.d.ts.map +1 -0
  497. package/dist/services/workflow-execution-artifact.service.js +38 -0
  498. package/dist/services/workflow-execution-artifact.service.js.map +1 -0
  499. package/dist/services/workflow-execution-log.service.d.ts +12 -0
  500. package/dist/services/workflow-execution-log.service.d.ts.map +1 -0
  501. package/dist/services/workflow-execution-log.service.js +38 -0
  502. package/dist/services/workflow-execution-log.service.js.map +1 -0
  503. package/dist/services/workflow-execution.service.d.ts +12 -0
  504. package/dist/services/workflow-execution.service.d.ts.map +1 -0
  505. package/dist/services/workflow-execution.service.js +38 -0
  506. package/dist/services/workflow-execution.service.js.map +1 -0
  507. package/dist/services/workflow-secret.service.d.ts +25 -0
  508. package/dist/services/workflow-secret.service.d.ts.map +1 -0
  509. package/dist/services/workflow-secret.service.js +152 -0
  510. package/dist/services/workflow-secret.service.js.map +1 -0
  511. package/dist/services/workflow-step-execution.service.d.ts +12 -0
  512. package/dist/services/workflow-step-execution.service.d.ts.map +1 -0
  513. package/dist/services/workflow-step-execution.service.js +38 -0
  514. package/dist/services/workflow-step-execution.service.js.map +1 -0
  515. package/dist/services/workflow-trigger-execution.service.d.ts +12 -0
  516. package/dist/services/workflow-trigger-execution.service.d.ts.map +1 -0
  517. package/dist/services/workflow-trigger-execution.service.js +38 -0
  518. package/dist/services/workflow-trigger-execution.service.js.map +1 -0
  519. package/dist/solid-core.module.d.ts.map +1 -1
  520. package/dist/solid-core.module.js +131 -1
  521. package/dist/solid-core.module.js.map +1 -1
  522. package/dist/testing/adapters/ui/playwright-adapter.d.ts +5 -0
  523. package/dist/testing/adapters/ui/playwright-adapter.d.ts.map +1 -1
  524. package/dist/testing/adapters/ui/playwright-adapter.js +17 -1
  525. package/dist/testing/adapters/ui/playwright-adapter.js.map +1 -1
  526. package/dist/testing/adapters/ui/ui.types.d.ts +2 -0
  527. package/dist/testing/adapters/ui/ui.types.d.ts.map +1 -1
  528. package/dist/testing/adapters/ui/ui.types.js.map +1 -1
  529. package/dist/testing/steps/ui/actions.step.d.ts.map +1 -1
  530. package/dist/testing/steps/ui/actions.step.js +6 -2
  531. package/dist/testing/steps/ui/actions.step.js.map +1 -1
  532. package/dist/testing/steps/ui/assertions.step.d.ts.map +1 -1
  533. package/dist/testing/steps/ui/assertions.step.js +11 -3
  534. package/dist/testing/steps/ui/assertions.step.js.map +1 -1
  535. package/dist/testing/steps/ui/form.step.d.ts.map +1 -1
  536. package/dist/testing/steps/ui/form.step.js +9 -3
  537. package/dist/testing/steps/ui/form.step.js.map +1 -1
  538. package/dist/testing/steps/ui/manual.step.js +1 -1
  539. package/dist/testing/steps/ui/manual.step.js.map +1 -1
  540. package/dist/testing/steps/ui/navigation.step.d.ts.map +1 -1
  541. package/dist/testing/steps/ui/navigation.step.js +3 -1
  542. package/dist/testing/steps/ui/navigation.step.js.map +1 -1
  543. package/dist/transformers/empty-string-to-null-transformer.d.ts +4 -0
  544. package/dist/transformers/empty-string-to-null-transformer.d.ts.map +1 -0
  545. package/dist/transformers/empty-string-to-null-transformer.js +12 -0
  546. package/dist/transformers/empty-string-to-null-transformer.js.map +1 -0
  547. package/dist/types/workflow-dsl.types.d.ts +291 -0
  548. package/dist/types/workflow-dsl.types.d.ts.map +1 -0
  549. package/dist/types/workflow-dsl.types.js +3 -0
  550. package/dist/types/workflow-dsl.types.js.map +1 -0
  551. package/dist/types/workflow-execution-queue.types.d.ts +4 -0
  552. package/dist/types/workflow-execution-queue.types.d.ts.map +1 -0
  553. package/dist/types/workflow-execution-queue.types.js +3 -0
  554. package/dist/types/workflow-execution-queue.types.js.map +1 -0
  555. package/package.json +3 -2
  556. package/src/commands/run-tests.command.ts +47 -1
  557. package/src/commands/seed.command.ts +19 -0
  558. package/src/constants/chatter-message.constants.ts +12 -0
  559. package/src/constants/draft-publish-fields.ts +5 -0
  560. package/src/constants/media-file-types.ts +50 -0
  561. package/src/constants/user.constants.ts +13 -0
  562. package/src/controllers/chatter-message.controller.ts +8 -0
  563. package/src/controllers/export-template.controller.ts +5 -3
  564. package/src/controllers/import-transaction.controller.ts +6 -6
  565. package/src/controllers/media.controller.ts +17 -6
  566. package/src/controllers/module-package.controller.ts +2 -3
  567. package/src/controllers/workflow-definition.controller.ts +141 -0
  568. package/src/controllers/workflow-execution-artifact.controller.ts +93 -0
  569. package/src/controllers/workflow-execution-log.controller.ts +93 -0
  570. package/src/controllers/workflow-execution.controller.ts +126 -0
  571. package/src/controllers/workflow-secret.controller.ts +90 -0
  572. package/src/controllers/workflow-step-execution.controller.ts +93 -0
  573. package/src/controllers/workflow-trigger-execution.controller.ts +93 -0
  574. package/src/decorators/workflow-field-data-provider.decorator.ts +7 -0
  575. package/src/decorators/workflow-node-provider.decorator.ts +14 -0
  576. package/src/dtos/basic-filters.dto.ts +0 -4
  577. package/src/dtos/create-workflow-definition.dto.ts +60 -0
  578. package/src/dtos/create-workflow-execution-artifact.dto.ts +99 -0
  579. package/src/dtos/create-workflow-execution-log.dto.ts +80 -0
  580. package/src/dtos/create-workflow-execution.dto.ts +137 -0
  581. package/src/dtos/create-workflow-secret.dto.ts +44 -0
  582. package/src/dtos/create-workflow-step-execution.dto.ts +123 -0
  583. package/src/dtos/create-workflow-trigger-execution.dto.ts +114 -0
  584. package/src/dtos/execute-workflow.dto.ts +6 -0
  585. package/src/dtos/update-workflow-definition.dto.ts +67 -0
  586. package/src/dtos/update-workflow-execution-artifact.dto.ts +105 -0
  587. package/src/dtos/update-workflow-execution-log.dto.ts +87 -0
  588. package/src/dtos/update-workflow-execution.dto.ts +144 -0
  589. package/src/dtos/update-workflow-secret.dto.ts +53 -0
  590. package/src/dtos/update-workflow-step-execution.dto.ts +132 -0
  591. package/src/dtos/update-workflow-trigger-execution.dto.ts +122 -0
  592. package/src/dtos/validate-workflow-definition.dto.ts +3 -0
  593. package/src/entities/common.entity.ts +24 -0
  594. package/src/entities/user.entity.ts +53 -36
  595. package/src/entities/workflow-definition.entity.ts +43 -0
  596. package/src/entities/workflow-execution-artifact.entity.ts +72 -0
  597. package/src/entities/workflow-execution-log.entity.ts +58 -0
  598. package/src/entities/workflow-execution.entity.ts +82 -0
  599. package/src/entities/workflow-secret.entity.ts +33 -0
  600. package/src/entities/workflow-step-execution.entity.ts +88 -0
  601. package/src/entities/workflow-trigger-execution.entity.ts +82 -0
  602. package/src/factories/mail.factory.ts +7 -1
  603. package/src/factories/sms.factory.ts +4 -1
  604. package/src/helpers/field-crud-managers/MediaFieldCrudManager.ts +26 -12
  605. package/src/helpers/file-download.helper.ts +31 -0
  606. package/src/helpers/model-metadata-helper.service.ts +32 -1
  607. package/src/helpers/solid-registry.ts +22 -2
  608. package/src/index.ts +59 -0
  609. package/src/interfaces/workflow-node-handler.interface.ts +10 -0
  610. package/src/interfaces.ts +30 -0
  611. package/src/jobs/database/workflow-execution-publisher-database.service.ts +24 -0
  612. package/src/jobs/database/workflow-execution-queue-options-database.ts +9 -0
  613. package/src/jobs/database/workflow-execution-subscriber-database.service.ts +44 -0
  614. package/src/jobs/rabbitmq/workflow-execution-publisher.service.ts +24 -0
  615. package/src/jobs/rabbitmq/workflow-execution-queue-options.ts +9 -0
  616. package/src/jobs/rabbitmq/workflow-execution-subscriber.service.ts +42 -0
  617. package/src/jobs/redis/workflow-execution-publisher-redis.service.ts +24 -0
  618. package/src/jobs/redis/workflow-execution-queue-options-redis.ts +9 -0
  619. package/src/jobs/redis/workflow-execution-subscriber-redis.service.ts +42 -0
  620. package/src/repository/security-rule.repository.ts +52 -10
  621. package/src/repository/workflow-definition.repository.ts +19 -0
  622. package/src/repository/workflow-execution-artifact.repository.ts +19 -0
  623. package/src/repository/workflow-execution-log.repository.ts +19 -0
  624. package/src/repository/workflow-execution.repository.ts +19 -0
  625. package/src/repository/workflow-secret.repository.ts +19 -0
  626. package/src/repository/workflow-step-execution.repository.ts +19 -0
  627. package/src/repository/workflow-trigger-execution.repository.ts +19 -0
  628. package/src/seeders/module-metadata-seeder.service.ts +216 -40
  629. package/src/seeders/module-test-data.service.ts +6 -0
  630. package/src/seeders/seed-data/solid-core-metadata.json +11494 -5570
  631. package/src/services/authentication.service.ts +76 -5
  632. package/src/services/chatter-message.service.ts +107 -5
  633. package/src/services/crud-helper.service.ts +236 -56
  634. package/src/services/crud.service.ts +159 -104
  635. package/src/services/datasource-introspection.service.ts +5 -0
  636. package/src/services/draft-publish-helper.service.ts +529 -0
  637. package/src/services/internationalisation-helper.service.ts +148 -0
  638. package/src/services/media.service.ts +67 -36
  639. package/src/services/metadata-validation.service.ts +39 -0
  640. package/src/services/model-metadata.service.ts +4 -1
  641. package/src/services/object.utils.ts +10 -0
  642. package/src/services/settings/default-settings-provider.service.ts +35 -3
  643. package/src/services/solid-introspect.service.ts +19 -0
  644. package/src/services/user.service.ts +18 -3
  645. package/src/services/view-metadata.service.ts +80 -154
  646. package/src/services/workflow/nodes/execution-fail.node.ts +82 -0
  647. package/src/services/workflow/nodes/for-each.node.ts +231 -0
  648. package/src/services/workflow/nodes/http-request.node.ts +624 -0
  649. package/src/services/workflow/nodes/if.node.ts +100 -0
  650. package/src/services/workflow/nodes/log-write.node.ts +234 -0
  651. package/src/services/workflow/nodes/loop-until.node.ts +343 -0
  652. package/src/services/workflow/nodes/parallel.node.ts +88 -0
  653. package/src/services/workflow/nodes/runtime-python.node.ts +571 -0
  654. package/src/services/workflow/nodes/sequential.node.ts +65 -0
  655. package/src/services/workflow/nodes/solidx-api.helpers.ts +205 -0
  656. package/src/services/workflow/nodes/solidx-crud.nodes.ts +511 -0
  657. package/src/services/workflow/nodes/solidx-login.node.ts +222 -0
  658. package/src/services/workflow/nodes/solidx-send-email.node.ts +489 -0
  659. package/src/services/workflow/nodes/solidx-send-sms.node.ts +377 -0
  660. package/src/services/workflow/nodes/switch.node.ts +132 -0
  661. package/src/services/workflow/workflow-definition-metadata-sync.service.ts +196 -0
  662. package/src/services/workflow/workflow-definition-validator.service.ts +226 -0
  663. package/src/services/workflow/workflow-execution-writer.service.ts +244 -0
  664. package/src/services/workflow/workflow-expression.service.ts +180 -0
  665. package/src/services/workflow/workflow-invocation.service.ts +39 -0
  666. package/src/services/workflow/workflow-node-registry.service.ts +152 -0
  667. package/src/services/workflow/workflow-runtime.service.ts +934 -0
  668. package/src/services/workflow/workflow-scheduled-trigger.job.ts +33 -0
  669. package/src/services/workflow-definition.service.ts +293 -0
  670. package/src/services/workflow-execution-artifact.service.ts +20 -0
  671. package/src/services/workflow-execution-log.service.ts +20 -0
  672. package/src/services/workflow-execution.service.ts +20 -0
  673. package/src/services/workflow-secret.service.ts +161 -0
  674. package/src/services/workflow-step-execution.service.ts +20 -0
  675. package/src/services/workflow-trigger-execution.service.ts +20 -0
  676. package/src/solid-core.module.ts +144 -3
  677. package/src/testing/README.md +73 -2
  678. package/src/testing/adapters/ui/playwright-adapter.ts +25 -0
  679. package/src/testing/adapters/ui/ui.types.ts +2 -0
  680. package/src/testing/steps/ui/actions.step.ts +8 -4
  681. package/src/testing/steps/ui/assertions.step.ts +18 -5
  682. package/src/testing/steps/ui/form.step.ts +16 -6
  683. package/src/testing/steps/ui/manual.step.ts +1 -1
  684. package/src/testing/steps/ui/navigation.step.ts +4 -2
  685. package/src/transformers/empty-string-to-null-transformer.ts +11 -0
  686. package/src/types/workflow-dsl.types.ts +1030 -0
  687. package/src/types/workflow-execution-queue.types.ts +3 -0
@@ -1 +1 @@
1
- {"version":3,"file":"view-metadata.service.js","sourceRoot":"","sources":["../../src/services/view-metadata.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { BadRequestException, forwardRef, Inject, Injectable, Logger } from '@nestjs/common';\nimport { ModuleRef } from \"@nestjs/core\";\nimport { InjectEntityManager } from '@nestjs/typeorm';\nimport { CRUDService } from 'src/services/crud.service';\nimport { EntityManager } from 'typeorm';\n\nimport { classify } from '../helpers/string.helper';\nimport { Locale } from 'src/entities/locale.entity';\nimport { ModelMetadataHelperService } from 'src/helpers/model-metadata-helper.service';\nimport { SolidRegistry } from 'src/helpers/solid-registry';\nimport { ModelMetadataRepository } from 'src/repository/model-metadata.repository';\nimport { ViewMetadataRepository } from 'src/repository/view-metadata.repository';\nimport { UpdateViewMetadataDto } from '../dtos/update-view-metadata.dto';\nimport { FieldMetadata } from '../entities/field-metadata.entity';\nimport { ViewMetadata } from '../entities/view-metadata.entity';\nimport { ActionMetadataService } from './action-metadata.service';\nimport { MenuItemMetadataService } from './menu-item-metadata.service';\nimport { SolidIntrospectService } from './solid-introspect.service';\nimport { UserViewMetadataService } from './user-view-metadata.service';\nimport { MenuItemMetadata } from 'src/entities/menu-item-metadata.entity';\n\n@Injectable()\nexport class ViewMetadataService extends CRUDService<ViewMetadata> {\n private readonly comparableFields = [\n 'name',\n 'displayName',\n 'type',\n 'context',\n 'layout',\n 'module',\n 'model',\n ] as const;\n private readonly relationCompareFields = new Set(['module', 'model']);\n private readonly jsonCompareFields = new Set(['layout', 'context']);\n\n private normalizeJsonFieldValue(value: any): any {\n if (typeof value === 'string') {\n const trimmedValue = value.trim();\n if (\n (trimmedValue.startsWith('{') && trimmedValue.endsWith('}')) ||\n (trimmedValue.startsWith('[') && trimmedValue.endsWith(']'))\n ) {\n try {\n return this.normalizeJsonFieldValue(JSON.parse(trimmedValue));\n } catch {\n return value;\n }\n }\n return value;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => this.normalizeJsonFieldValue(item));\n }\n\n if (value && typeof value === 'object') {\n return Object.keys(value)\n .sort()\n .reduce((result, key) => {\n result[key] = this.normalizeJsonFieldValue(value[key]);\n return result;\n }, {} as Record<string, any>);\n }\n\n return value;\n }\n\n private getCanonicalJsonFieldString(value: any): string {\n return JSON.stringify(this.normalizeJsonFieldValue(value) ?? null);\n }\n\n private hasChanges(existingSolidView: ViewMetadata, updateSolidViewDto: UpdateViewMetadataDto): boolean {\n return this.comparableFields.some((key) => {\n const value = (updateSolidViewDto as any)[key];\n if (typeof value === 'undefined') {\n return false;\n }\n\n if (this.relationCompareFields.has(key)) {\n const relationValue = value as any;\n return (existingSolidView as any)[key]?.id !== relationValue?.id;\n }\n\n if (this.jsonCompareFields.has(key)) {\n return this.getCanonicalJsonFieldString((existingSolidView as any)[key]) !== this.getCanonicalJsonFieldString(value);\n }\n\n return (existingSolidView as any)[key] !== value;\n });\n }\n\n constructor(\n readonly actionMetadataService: ActionMetadataService,\n readonly menuItemMetadataService: MenuItemMetadataService,\n readonly introspectService: SolidIntrospectService,\n readonly userViewMetadataService: UserViewMetadataService,\n @InjectEntityManager()\n readonly entityManager: EntityManager,\n // @InjectRepository(ViewMetadata, 'default')\n readonly repo: ViewMetadataRepository,\n // @InjectRepository(FieldMetadata)\n // private readonly fieldMetadataRepo: Repository<FieldMetadata>,\n // @InjectRepository(ModelMetadata)\n // private readonly modelMetadataRepo: Repository<ModelMetadata>,\n @Inject(forwardRef(() => ModelMetadataRepository))\n private readonly modelMetadataRepo: ModelMetadataRepository,\n private readonly modelMetadataHelperService: ModelMetadataHelperService,\n readonly moduleRef: ModuleRef\n ) {\n super(entityManager, repo, 'viewMetadata', 'solid-core', moduleRef);\n }\n\n private readonly logger = new Logger(ViewMetadataService.name);\n\n //for locales \n private async getEntityRecordsInAllLocales(\n modelName: string,\n id: string,\n defaultEntityLocaleIdFromQuery?: string\n ): Promise<{ records: any[], defaultEntityLocaleId: string | null }> {\n const solidRegistry = await this.moduleRef.get(SolidRegistry, { strict: false });\n // const currentEntityTarget = solidRegistry.getEntityTarget(this.entityManager, classify(modelName));\n const currentEntityRepository = this.entityManager.getRepository(classify(modelName));\n\n // Case 1: Creating a new record with no defaultEntityLocaleId to clone\n if (id === 'new' && !defaultEntityLocaleIdFromQuery) {\n this.logger.debug(`Creating new record without cloning from any defaultEntityLocaleId.`);\n return { records: [], defaultEntityLocaleId: null };\n }\n\n // Case 2: Creating a new record and cloning from an existing defaultEntityLocaleId\n if (id === 'new' && defaultEntityLocaleIdFromQuery) {\n this.logger.debug(`Creating new record by cloning translations from defaultEntityLocaleId: ${defaultEntityLocaleIdFromQuery}`);\n\n const records = await currentEntityRepository.find({\n where: [\n { defaultEntityLocaleId: defaultEntityLocaleIdFromQuery },\n { id: defaultEntityLocaleIdFromQuery }\n ]\n });\n\n this.logger.debug(`Found ${records.length} cloned records for new entity.`);\n return { records, defaultEntityLocaleId: defaultEntityLocaleIdFromQuery };\n }\n\n // Case 3: Editing an existing entity\n const entityRecord = await currentEntityRepository.findOne({ where: { id } });\n\n if (!entityRecord) {\n this.logger.warn(`No entity found for id ${id}`);\n return { records: [], defaultEntityLocaleId: null };\n }\n\n const defaultEntityLocaleId = entityRecord.defaultEntityLocaleId || entityRecord.id;\n if (entityRecord.defaultEntityLocaleId) {\n this.logger.debug(`Editing translated locale record. Translation root id: ${defaultEntityLocaleId}`);\n } else {\n this.logger.debug(`Editing translation root record with id ${defaultEntityLocaleId}`);\n }\n\n const records = await currentEntityRepository.find({\n where: [\n { defaultEntityLocaleId: defaultEntityLocaleId },\n { id: defaultEntityLocaleId }\n ]\n });\n\n this.logger.debug(`Found ${records.length} records in all locales for existing entity.`);\n\n return { records, defaultEntityLocaleId };\n }\n\n // START: Custom Service Methods\n async getLayout(query, activeUser) {\n let { modelName, moduleName, viewType, id, populate, menuItemId, menuItemName, actionId, actionName } = query;\n\n // 1. Fetch the action based on actionId.\n const solidRequestContext = {\n activeUser: activeUser\n }\n const actionQuery = {\n populate: [\"view\"]\n }\n let action = null;\n if (actionId) {\n action = await this.actionMetadataService.findOne(actionId, actionQuery, solidRequestContext);\n }\n\n // 2. Fetch the menu based on menuItemId.\n const menuItemQuery = {\n populate: ['action', 'action.model', 'module']\n }\n let menuItem: MenuItemMetadata = null;\n if (menuItemId) {\n menuItem = await this.menuItemMetadataService.findOne(menuItemId, menuItemQuery, solidRequestContext);\n }\n\n let viewModes = [];\n const menuItemModelId = menuItem?.action?.model?.id;\n const menuItemModuleId = menuItem?.module?.id;\n const collectionViewTypes = ['card', 'list', 'kanban', 'tree'];\n if (menuItemModelId && menuItemModuleId) {\n const actionQb = await this.actionMetadataService.repo.createSecurityRuleAwareQueryBuilder('action');\n const actionsForViewModes = await actionQb\n .leftJoinAndSelect('action.model', 'model')\n .leftJoinAndSelect('action.module', 'module')\n .leftJoinAndSelect('action.view', 'view')\n .where('model.id = :modelId', { modelId: menuItemModelId })\n .andWhere('module.id = :moduleId', { moduleId: menuItemModuleId })\n .andWhere('view.type IN (:...viewTypes)', { viewTypes: collectionViewTypes })\n .getMany();\n\n const canonicalActionsByViewType = new Map();\n for (const actionItem of actionsForViewModes) {\n const resolvedViewType = actionItem.view?.type;\n if (!resolvedViewType || canonicalActionsByViewType.has(resolvedViewType)) {\n continue;\n }\n canonicalActionsByViewType.set(resolvedViewType, actionItem);\n }\n\n if (action?.view?.type && collectionViewTypes.includes(action.view.type) && action?.id) {\n canonicalActionsByViewType.set(action.view.type, action);\n }\n\n viewModes = collectionViewTypes\n .map((resolvedViewType) => canonicalActionsByViewType.get(resolvedViewType))\n .filter(Boolean)\n .map(actionItem => ({\n type: actionItem.view?.type ?? '',\n menuItemId: menuItem.id,\n menuItemName: menuItem.displayName,\n actionId: actionItem.id ?? '',\n actionName: actionItem.displayName ?? '',\n }));\n }\n\n const viewId = action?.view?.id\n // 3. Fetch the view based on module, model & view name.\n const entity = await this.repo.findOne({\n where: {\n model: { singularName: modelName },\n module: { name: moduleName },\n ...(actionId && viewId ? { id: action.view.id } : { type: viewType })\n },\n relations: {\n model: {\n userKeyField: true,\n },\n module: true,\n }\n });\n\n if (!entity) {\n throw new BadRequestException(`Unable to identify view for module: ${moduleName}, model: ${modelName} and viewType: ${viewType}`);\n }\n if (!activeUser?.sub) {\n throw new BadRequestException(`Unable to identify user for module: ${moduleName}, model: ${modelName} and viewType: ${viewType}`);\n }\n\n // 4. add action and menuItem to Entity which is our solid View\n if (actionId) {\n delete action.view;\n entity['action'] = action\n }\n if (menuItemId) {\n entity['menu'] = menuItem\n }\n\n // 5. See if we have a user specific layout for this view.\n const userLayout = await this.userViewMetadataService.repo.findOne({\n where: {\n user: { id: activeUser?.sub },\n viewMetadata: { id: entity.id },\n },\n });\n // Based on where we found the layout we are converting it from string to json.\n if (userLayout) {\n entity.layout = JSON.parse(userLayout.layout);\n } else {\n entity.layout = JSON.parse(entity.layout);\n }\n\n // 6. We are resolving the create & edit actions if specified in the layout.\n if (entity?.layout?.attrs?.createAction) {\n const actionName: string = entity.layout.attrs.createAction;\n entity.layout.attrs.createAction = await this.actionMetadataService.findOneByUserKey(actionName)\n }\n if (entity?.layout?.attrs?.editAction) {\n const actionName: string = entity.layout.attrs.editAction;\n entity.layout.attrs.editAction = await this.actionMetadataService.findOneByUserKey(actionName)\n }\n\n // 7. For form views we need to fetch the workflow field metadata if specified.\n let workflowFieldName = null;\n let workflowField = null;\n if (viewType === 'form') {\n workflowFieldName = entity.layout?.attrs?.workflowField;\n }\n\n // 8. Create an easy to use map of field metadata, rather than sending an array of fields it becomes easier to use in the frontend.\n const fields = await this.modelMetadataHelperService.loadFieldHierarchy(modelName);\n const fieldsMap = new Map<string, FieldMetadata>();\n for (let i = 0; i < fields.length; i++) {\n const field = fields[i];\n\n // We need to identify the workflowField metadata if specified. \n if (workflowFieldName && field.name === workflowFieldName) {\n workflowField = field;\n }\n\n // For fields of type relation & relationType many-to-one\n // We fetch metadata regarding the relationCoModelSingularName\n if (field.type === 'relation') {\n const relationModel = await this.modelMetadataRepo.find({\n where: {\n singularName: field.relationCoModelSingularName\n },\n relations: {\n userKeyField: true\n }\n });\n\n if (relationModel) {\n field['relationModel'] = relationModel[0];\n }\n }\n if (!fieldsMap.has(field.name)) {\n fieldsMap.set(field.name, field);\n }\n }\n\n // 9. Use the resolved workflowField to populate workflow specific metadata.\n // Check if we were able to resolve an actual workflowField.\n let solidFormViewWorkflowData = [];\n if (viewType === 'form' && workflowField) {\n // check for type of workflow field. \n // for workflowFields of type selectionStatic we simply return the key/values from field metadata AS-IS\n if (workflowField.type === 'selectionStatic') {\n solidFormViewWorkflowData = workflowField.selectionStaticValues.map(item => {\n const [value, label] = item.split(\":\");\n return { label, value };\n });\n }\n // for workflowFields of type relation.many-to-one we need to query the co-model, and return data in key/value format.\n if (workflowField.type === 'relation' && workflowField.relationType === 'many-to-one') {\n const comodelCrudService = this.introspectService.getCRUDService(workflowField.relationCoModelSingularName);\n const data = await comodelCrudService.find({ limit: 100, offset: 0, });\n const records = data.records ?? [];\n const workflowFieldMetadata = fieldsMap.get(workflowFieldName);\n const workflowFielUserkey = workflowFieldMetadata['relationModel']['userKeyField']['name'];\n\n // iterate over the comodel records extracting the label & value. \n solidFormViewWorkflowData = records.map(item => ({ 'label': item[workflowFielUserkey], 'value': item['id'] }))\n }\n }\n\n // 10. If this model supports internationalisation, we need to load the locales applicable with the id of an actual record for each locale if present.\n // This is the shape of locales that will be returned \n /**\n * [\n * {locale: 'en', displayName: 'English', isDefault: 'yes', defaultEntityLocaleId: '', entityId: '1'}, \n * {locale: 'en-IN', displayName: 'English (India)', isDefault: 'no', defaultEntityLocaleId: '1', entityId: '2'}, \n * {locale: 'en-SG', displayName: 'English (Singapore)', isDefault: 'no', defaultEntityLocaleId: '', entityId: '3'}, \n * {locale: 'fr', displayName: 'French', isDefault: 'no', defaultEntityLocaleId: '', entityId: ''}\n * ]\n */\n\n const applicableLocales: any = []\n // if (entity.model.internationalisation) {\n // const allLocales = await this.entityManager.getRepository(Locale).find({});\n\n // if (id === 'new') {\n // allLocales.forEach(locale => {\n // applicableLocales.push({\n // locale: locale.locale,\n // displayName: locale.displayName,\n // isDefault: locale.isDefault ? 'yes' : 'no',\n // defaultEntityLocaleId: null,\n // entityId: null\n // });\n // });\n // }\n // else {\n // const defaultLocale = allLocales.find(locale => locale.isDefault);\n // this.logger.debug(`Default locale is: ${defaultLocale.locale}`);\n\n // // Get hold of the repository for the current model\n // const solidRegistry = await this.moduleRef.get(SolidRegistry, { strict: false });\n // const currentEntityTarget = solidRegistry.getEntityTarget(this.entityManager, classify(modelName));\n // const currentEntityRepository = this.entityManager.getRepository(currentEntityTarget);\n\n // // We are in edit mode, the id that is being edited could be a record tagged with the default locale or it could be tagged with a non-default locale.\n // const entityRecord = await currentEntityRepository.findOne({\n // where: {\n // id: id,\n // }\n // });\n // if(entityRecord){\n // // Resolve the default entity locale id....\n // let defaultEntityLocaleId = null;\n // if (entityRecord.localeName === defaultLocale.locale) {\n // defaultEntityLocaleId = entityRecord.id;\n // this.logger.debug(`You are editing a record tagged with the default locale: ${entityRecord.localeName}.`);\n // }\n // else {\n // defaultEntityLocaleId = entityRecord.defaultEntityLocaleId;\n // this.logger.debug(`You are editing a record tagged with the non-default locale: ${entityRecord.localeName}. `);\n // }\n // this.logger.debug(`Identified default Entity Locale Id: ${defaultEntityLocaleId}`);\n\n // // Now we query for all records in the same model matching the defaultEntityLocaleId\n // // Get all records mathcing the defaultEntityLocaleId or where the id is same as the defaultEntityLocaleId\n // const entityRecordsInAllLocales = await currentEntityRepository.find({\n // where: [\n // { defaultEntityLocaleId: defaultEntityLocaleId },\n // { id: defaultEntityLocaleId }\n // ],\n // });\n // this.logger.debug(`Found ${entityRecordsInAllLocales.length} records in all locales for the defaultEntityLocaleId: ${defaultEntityLocaleId}`);\n\n // // Loop over all locales and populate the applicableLocales array\n // for (const locale of allLocales) {\n // // Find the record in the entityRecordsInAllLocales that matches the current locale\n // const matchingRecord = entityRecordsInAllLocales.find(record => record.localeName === locale.locale);\n\n // applicableLocales.push({\n // locale: locale.locale,\n // displayName: locale.displayName,\n // isDefault: locale.isDefault ? 'yes' : 'no',\n // defaultEntityLocaleId: defaultEntityLocaleId,\n // entityId: (matchingRecord ? matchingRecord.id : null)\n // });\n // }\n // }else{\n // this.logger.warn(`No record found for id: ${id} in model: ${modelName}. Cannot determine applicable locales.`);\n // }\n // }\n // }\n if (entity.model.internationalisation) {\n const defaultEntityLocaleIdFromQuery = query?.defaultEntityLocaleId;\n const { records: entityRecordsInAllLocales, defaultEntityLocaleId } =\n await this.getEntityRecordsInAllLocales(modelName, id, defaultEntityLocaleIdFromQuery);\n const allLocales = await this.entityManager.getRepository(Locale).find({});\n for (const locale of allLocales) {\n const matchingRecord = entityRecordsInAllLocales.find(record => record.localeName === locale.locale);\n applicableLocales.push({\n locale: locale.locale,\n displayName: locale.displayName,\n isDefault: locale.isDefault ? 'yes' : 'no',\n defaultEntityLocaleId: defaultEntityLocaleId,\n entityId: matchingRecord ? matchingRecord.id : null\n });\n }\n }\n\n const r = {\n 'solidView': entity,\n 'solidFieldsMetadata': Object.fromEntries(fieldsMap),\n 'solidFormViewWorkflowData': solidFormViewWorkflowData,\n 'applicableLocales': applicableLocales,\n 'viewModes': viewModes\n }\n\n return r;\n }\n\n private async loadFieldHierarchy(modelName: any) {\n const model = await this.modelMetadataRepo.findOne({\n where: {\n singularName: modelName,\n },\n relations: {\n fields: true,\n parentModel: {\n fields: true,\n }\n }\n });\n const fields = [];\n if (model) {\n // Add the fields of the current model\n fields.push(...model.fields);\n\n // Add the fields of the parent model\n if (model.parentModel) {\n fields.push(...model.parentModel.fields);\n }\n }\n return fields;\n }\n\n async findOneByUserKey(name: string, relations = {}) {\n const entity = await this.repo.findOne({\n where: {\n name: name,\n },\n relations: relations,\n });\n return entity;\n }\n\n async upsert(updateSolidViewDto: UpdateViewMetadataDto) {\n // First check if module already exists using name\n const existingSolidView = await this.findOneByUserKey(updateSolidViewDto.name, {\n module: true,\n model: true,\n });\n\n // if found\n if (existingSolidView) {\n const hasChanges = this.hasChanges(existingSolidView, updateSolidViewDto);\n\n if (!hasChanges) {\n this.logger.debug(`Skipping view upsert for ${updateSolidViewDto.name}; no changes detected.`);\n return existingSolidView;\n }\n\n const updatedSolidViewDto = { ...existingSolidView, ...updateSolidViewDto };\n return this.repo.save(updatedSolidViewDto);\n }\n // if not found - create new \n else {\n const viewData = this.repo.create(updateSolidViewDto);\n return this.repo.save(viewData);\n }\n }\n\n async createIfNotPresent(updateSolidViewDto: UpdateViewMetadataDto) {\n // First check if module already exists using name\n const existingSolidView = await this.findOneByUserKey(updateSolidViewDto.name);\n\n // if found\n if (existingSolidView) {\n }\n // if not found - create new \n else {\n const viewData = this.repo.create(updateSolidViewDto);\n return this.repo.save(viewData);\n }\n }\n\n // END: Custom Service Methods\n\n}\n"]}
1
+ {"version":3,"file":"view-metadata.service.js","sourceRoot":"","sources":["../../src/services/view-metadata.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { BadRequestException, forwardRef, Inject, Injectable, Logger } from '@nestjs/common';\nimport { ModuleRef } from \"@nestjs/core\";\nimport { InjectEntityManager } from '@nestjs/typeorm';\nimport { CRUDService } from 'src/services/crud.service';\nimport { EntityManager } from 'typeorm';\n\nimport { ModelMetadataHelperService } from 'src/helpers/model-metadata-helper.service';\nimport { SolidRegistry } from 'src/helpers/solid-registry';\nimport { ModelMetadataRepository } from 'src/repository/model-metadata.repository';\nimport { ViewMetadataRepository } from 'src/repository/view-metadata.repository';\nimport { UpdateViewMetadataDto } from '../dtos/update-view-metadata.dto';\nimport { FieldMetadata } from '../entities/field-metadata.entity';\nimport { ViewMetadata } from '../entities/view-metadata.entity';\nimport { ActionMetadataService } from './action-metadata.service';\nimport { MenuItemMetadataService } from './menu-item-metadata.service';\nimport { SolidIntrospectService } from './solid-introspect.service';\nimport { UserViewMetadataService } from './user-view-metadata.service';\nimport { MenuItemMetadata } from 'src/entities/menu-item-metadata.entity';\nimport { IWorkflowFieldDataProviderValues } from 'src/interfaces';\n\n@Injectable()\nexport class ViewMetadataService extends CRUDService<ViewMetadata> {\n private readonly comparableFields = [\n 'name',\n 'displayName',\n 'type',\n 'context',\n 'layout',\n 'module',\n 'model',\n ] as const;\n private readonly relationCompareFields = new Set(['module', 'model']);\n private readonly jsonCompareFields = new Set(['layout', 'context']);\n\n private normalizeJsonFieldValue(value: any): any {\n if (typeof value === 'string') {\n const trimmedValue = value.trim();\n if (\n (trimmedValue.startsWith('{') && trimmedValue.endsWith('}')) ||\n (trimmedValue.startsWith('[') && trimmedValue.endsWith(']'))\n ) {\n try {\n return this.normalizeJsonFieldValue(JSON.parse(trimmedValue));\n } catch {\n return value;\n }\n }\n return value;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => this.normalizeJsonFieldValue(item));\n }\n\n if (value && typeof value === 'object') {\n return Object.keys(value)\n .sort()\n .reduce((result, key) => {\n result[key] = this.normalizeJsonFieldValue(value[key]);\n return result;\n }, {} as Record<string, any>);\n }\n\n return value;\n }\n\n private getCanonicalJsonFieldString(value: any): string {\n return JSON.stringify(this.normalizeJsonFieldValue(value) ?? null);\n }\n\n private hasChanges(existingSolidView: ViewMetadata, updateSolidViewDto: UpdateViewMetadataDto): boolean {\n return this.comparableFields.some((key) => {\n const value = (updateSolidViewDto as any)[key];\n if (typeof value === 'undefined') {\n return false;\n }\n\n if (this.relationCompareFields.has(key)) {\n const relationValue = value as any;\n return (existingSolidView as any)[key]?.id !== relationValue?.id;\n }\n\n if (this.jsonCompareFields.has(key)) {\n return this.getCanonicalJsonFieldString((existingSolidView as any)[key]) !== this.getCanonicalJsonFieldString(value);\n }\n\n return (existingSolidView as any)[key] !== value;\n });\n }\n\n constructor(\n readonly actionMetadataService: ActionMetadataService,\n readonly menuItemMetadataService: MenuItemMetadataService,\n readonly introspectService: SolidIntrospectService,\n readonly userViewMetadataService: UserViewMetadataService,\n @InjectEntityManager()\n readonly entityManager: EntityManager,\n // @InjectRepository(ViewMetadata, 'default')\n readonly repo: ViewMetadataRepository,\n // @InjectRepository(FieldMetadata)\n // private readonly fieldMetadataRepo: Repository<FieldMetadata>,\n // @InjectRepository(ModelMetadata)\n // private readonly modelMetadataRepo: Repository<ModelMetadata>,\n @Inject(forwardRef(() => ModelMetadataRepository))\n private readonly modelMetadataRepo: ModelMetadataRepository,\n private readonly modelMetadataHelperService: ModelMetadataHelperService,\n readonly moduleRef: ModuleRef\n ) {\n super(entityManager, repo, 'viewMetadata', 'solid-core', moduleRef);\n }\n\n private readonly logger = new Logger(ViewMetadataService.name);\n\n private parseJsonObject(value: any): Record<string, any> {\n if (!value) {\n return {};\n }\n\n if (typeof value === 'object') {\n return value;\n }\n\n if (typeof value === 'string') {\n try {\n return JSON.parse(value);\n } catch (error: any) {\n this.logger.warn(`Unable to parse workflow field provider context: ${error?.message ?? error}`);\n }\n }\n\n return {};\n }\n\n private async getDefaultWorkflowFieldData(\n workflowField: FieldMetadata,\n workflowFieldName: string,\n fieldsMap: Map<string, FieldMetadata>,\n ): Promise<IWorkflowFieldDataProviderValues[]> {\n if (workflowField.type === 'selectionStatic') {\n return workflowField.selectionStaticValues.map(item => {\n const [value, label] = item.split(\":\");\n return { label, value };\n });\n }\n\n if (workflowField.type === 'relation' && workflowField.relationType === 'many-to-one') {\n const comodelCrudService = this.introspectService.getCRUDService(workflowField.relationCoModelSingularName);\n const data = await comodelCrudService.find({ limit: 100, offset: 0, });\n const records = data.records ?? [];\n const workflowFieldMetadata = fieldsMap.get(workflowFieldName);\n const workflowFieldUserKey = (workflowFieldMetadata as any)?.relationModel?.userKeyField?.name;\n\n if (!workflowFieldUserKey) {\n this.logger.warn(`Unable to identify relation user key for workflow field: ${workflowFieldName}`);\n return [];\n }\n\n return records.map(item => ({ label: item[workflowFieldUserKey], value: item['id'] }));\n }\n\n return [];\n }\n\n private async getWorkflowFieldData(\n entity: ViewMetadata,\n workflowField: FieldMetadata,\n workflowFieldName: string,\n fieldsMap: Map<string, FieldMetadata>,\n query: Record<string, any>,\n activeUser: any,\n ): Promise<readonly IWorkflowFieldDataProviderValues[]> {\n const workflowFieldDataProviderName = entity.layout?.attrs?.workflowFieldDataProvider;\n if (workflowFieldDataProviderName) {\n const solidRegistry = await this.moduleRef.get(SolidRegistry, { strict: false });\n const provider = solidRegistry.getWorkflowFieldDataProviderInstance(workflowFieldDataProviderName);\n if (!provider) {\n throw new BadRequestException(`Workflow field data provider ${workflowFieldDataProviderName} not found`);\n }\n\n return provider.values({\n entityId: query?.id,\n modelName: entity.model?.singularName ?? query?.modelName,\n moduleName: entity.module?.name ?? query?.moduleName,\n workflowFieldName,\n workflowField,\n solidModel: entity.model,\n solidView: entity,\n solidFieldsMetadata: Object.fromEntries(fieldsMap),\n query,\n providerContext: this.parseJsonObject(entity.layout?.attrs?.workflowFieldDataProviderCtxt),\n activeUser,\n });\n }\n\n return this.getDefaultWorkflowFieldData(workflowField, workflowFieldName, fieldsMap);\n }\n\n // START: Custom Service Methods\n async getLayout(query, activeUser) {\n let { modelName, moduleName, viewType, id, populate, menuItemId, menuItemName, actionId, actionName } = query;\n\n // 1. Fetch the action based on actionId.\n const solidRequestContext = {\n activeUser: activeUser\n }\n const actionQuery = {\n populate: [\"view\"]\n }\n let action = null;\n if (actionId) {\n action = await this.actionMetadataService.findOne(actionId, actionQuery, solidRequestContext);\n }\n\n // 2. Fetch the menu based on menuItemId.\n const menuItemQuery = {\n populate: ['action', 'action.model', 'module']\n }\n let menuItem: MenuItemMetadata = null;\n if (menuItemId) {\n menuItem = await this.menuItemMetadataService.findOne(menuItemId, menuItemQuery, solidRequestContext);\n }\n\n let viewModes = [];\n const menuItemModelId = menuItem?.action?.model?.id;\n const menuItemModuleId = menuItem?.module?.id;\n const collectionViewTypes = ['card', 'list', 'kanban', 'tree'];\n if (menuItemModelId && menuItemModuleId) {\n const actionQb = await this.actionMetadataService.repo.createSecurityRuleAwareQueryBuilder('action');\n const actionsForViewModes = await actionQb\n .leftJoinAndSelect('action.model', 'model')\n .leftJoinAndSelect('action.module', 'module')\n .leftJoinAndSelect('action.view', 'view')\n .where('model.id = :modelId', { modelId: menuItemModelId })\n .andWhere('module.id = :moduleId', { moduleId: menuItemModuleId })\n .andWhere('view.type IN (:...viewTypes)', { viewTypes: collectionViewTypes })\n .getMany();\n\n const canonicalActionsByViewType = new Map();\n for (const actionItem of actionsForViewModes) {\n const resolvedViewType = actionItem.view?.type;\n if (!resolvedViewType || canonicalActionsByViewType.has(resolvedViewType)) {\n continue;\n }\n canonicalActionsByViewType.set(resolvedViewType, actionItem);\n }\n\n if (action?.view?.type && collectionViewTypes.includes(action.view.type) && action?.id) {\n canonicalActionsByViewType.set(action.view.type, action);\n }\n\n viewModes = collectionViewTypes\n .map((resolvedViewType) => canonicalActionsByViewType.get(resolvedViewType))\n .filter(Boolean)\n .map(actionItem => ({\n type: actionItem.view?.type ?? '',\n menuItemId: menuItem.id,\n menuItemName: menuItem.displayName,\n actionId: actionItem.id ?? '',\n actionName: actionItem.displayName ?? '',\n }));\n }\n\n const viewId = action?.view?.id\n // 3. Fetch the view based on module, model & view name.\n const entity = await this.repo.findOne({\n where: {\n model: { singularName: modelName },\n module: { name: moduleName },\n ...(actionId && viewId ? { id: action.view.id } : { type: viewType })\n },\n relations: {\n model: {\n userKeyField: true,\n },\n module: true,\n }\n });\n\n if (!entity) {\n throw new BadRequestException(`Unable to identify view for module: ${moduleName}, model: ${modelName} and viewType: ${viewType}`);\n }\n if (!activeUser?.sub) {\n throw new BadRequestException(`Unable to identify user for module: ${moduleName}, model: ${modelName} and viewType: ${viewType}`);\n }\n\n // 4. add action and menuItem to Entity which is our solid View\n if (actionId) {\n delete action.view;\n entity['action'] = action\n }\n if (menuItemId) {\n entity['menu'] = menuItem\n }\n\n // 5. See if we have a user specific layout for this view.\n const userLayout = await this.userViewMetadataService.repo.findOne({\n where: {\n user: { id: activeUser?.sub },\n viewMetadata: { id: entity.id },\n },\n });\n // Based on where we found the layout we are converting it from string to json.\n if (userLayout) {\n entity.layout = JSON.parse(userLayout.layout);\n } else {\n entity.layout = JSON.parse(entity.layout);\n }\n\n // 6. We are resolving the create & edit actions if specified in the layout.\n if (entity?.layout?.attrs?.createAction) {\n const actionName: string = entity.layout.attrs.createAction;\n entity.layout.attrs.createAction = await this.actionMetadataService.findOneByUserKey(actionName)\n }\n if (entity?.layout?.attrs?.editAction) {\n const actionName: string = entity.layout.attrs.editAction;\n entity.layout.attrs.editAction = await this.actionMetadataService.findOneByUserKey(actionName)\n }\n\n // 7. For form views we need to fetch the workflow field metadata if specified.\n let workflowFieldName = null;\n let workflowField = null;\n if (viewType === 'form') {\n workflowFieldName = entity.layout?.attrs?.workflowField;\n }\n\n // 8. Create an easy to use map of field metadata, rather than sending an array of fields it becomes easier to use in the frontend.\n const fields = await this.modelMetadataHelperService.loadFieldHierarchy(modelName);\n const fieldsMap = new Map<string, FieldMetadata>();\n for (let i = 0; i < fields.length; i++) {\n const field = fields[i];\n\n // We need to identify the workflowField metadata if specified. \n if (workflowFieldName && field.name === workflowFieldName) {\n workflowField = field;\n }\n\n // For fields of type relation & relationType many-to-one\n // We fetch metadata regarding the relationCoModelSingularName\n if (field.type === 'relation') {\n const relationModel = await this.modelMetadataRepo.find({\n where: {\n singularName: field.relationCoModelSingularName\n },\n relations: {\n userKeyField: true\n }\n });\n\n if (relationModel) {\n field['relationModel'] = relationModel[0];\n }\n }\n if (!fieldsMap.has(field.name)) {\n fieldsMap.set(field.name, field);\n }\n }\n\n // 9. Use the resolved workflowField to populate workflow specific metadata.\n let solidFormViewWorkflowData: readonly IWorkflowFieldDataProviderValues[] = [];\n if (viewType === 'form' && workflowField) {\n solidFormViewWorkflowData = await this.getWorkflowFieldData(entity, workflowField, workflowFieldName, fieldsMap, query, activeUser);\n }\n\n // 10. If this model supports internationalisation, we need to load the locales applicable with the id of an actual record for each locale if present.\n // This is the shape of locales that will be returned \n /**\n * [\n * {locale: 'en', displayName: 'English', isDefault: 'yes', defaultEntityLocaleId: '', entityId: '1'}, \n * {locale: 'en-IN', displayName: 'English (India)', isDefault: 'no', defaultEntityLocaleId: '1', entityId: '2'}, \n * {locale: 'en-SG', displayName: 'English (Singapore)', isDefault: 'no', defaultEntityLocaleId: '', entityId: '3'}, \n * {locale: 'fr', displayName: 'French', isDefault: 'no', defaultEntityLocaleId: '', entityId: ''}\n * ]\n */\n\n let applicableLocales: any[] = [];\n if (entity.model.internationalisation) {\n const draftPublishEnabled = entity.model.draftPublishWorkflow === true;\n applicableLocales = await this.internationalisationHelperService.buildApplicableLocales(\n this.entityManager, modelName, id, query?.defaultEntityLocaleId, draftPublishEnabled,\n );\n }\n\n const r = {\n 'solidView': entity,\n 'solidFieldsMetadata': Object.fromEntries(fieldsMap),\n 'solidFormViewWorkflowData': solidFormViewWorkflowData,\n 'applicableLocales': applicableLocales,\n 'viewModes': viewModes\n }\n\n return r;\n }\n\n private async loadFieldHierarchy(modelName: any) {\n const model = await this.modelMetadataRepo.findOne({\n where: {\n singularName: modelName,\n },\n relations: {\n fields: true,\n parentModel: {\n fields: true,\n }\n }\n });\n const fields = [];\n if (model) {\n // Add the fields of the current model\n fields.push(...model.fields);\n\n // Add the fields of the parent model\n if (model.parentModel) {\n fields.push(...model.parentModel.fields);\n }\n }\n return fields;\n }\n\n async findOneByUserKey(name: string, relations = {}) {\n const entity = await this.repo.findOne({\n where: {\n name: name,\n },\n relations: relations,\n });\n return entity;\n }\n\n async upsert(updateSolidViewDto: UpdateViewMetadataDto) {\n // First check if module already exists using name\n const existingSolidView = await this.findOneByUserKey(updateSolidViewDto.name, {\n module: true,\n model: true,\n });\n\n // if found\n if (existingSolidView) {\n const hasChanges = this.hasChanges(existingSolidView, updateSolidViewDto);\n\n if (!hasChanges) {\n this.logger.debug(`Skipping view upsert for ${updateSolidViewDto.name}; no changes detected.`);\n return existingSolidView;\n }\n\n const updatedSolidViewDto = { ...existingSolidView, ...updateSolidViewDto };\n return this.repo.save(updatedSolidViewDto);\n }\n // if not found - create new \n else {\n const viewData = this.repo.create(updateSolidViewDto);\n return this.repo.save(viewData);\n }\n }\n\n async createIfNotPresent(updateSolidViewDto: UpdateViewMetadataDto) {\n // First check if module already exists using name\n const existingSolidView = await this.findOneByUserKey(updateSolidViewDto.name);\n\n // if found\n if (existingSolidView) {\n }\n // if not found - create new \n else {\n const viewData = this.repo.create(updateSolidViewDto);\n return this.repo.save(viewData);\n }\n }\n\n // END: Custom Service Methods\n\n}\n"]}
@@ -0,0 +1,6 @@
1
+ import { WorkflowNodeHandler } from '../../../interfaces/workflow-node-handler.interface';
2
+ import { WorkflowNodeExecutionContext, WorkflowNodeHandlerResult } from '../../../types/workflow-dsl.types';
3
+ export declare class ExecutionFailNode implements WorkflowNodeHandler {
4
+ execute(context: WorkflowNodeExecutionContext): Promise<WorkflowNodeHandlerResult>;
5
+ }
6
+ //# sourceMappingURL=execution-fail.node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-fail.node.d.ts","sourceRoot":"","sources":["../../../../src/services/workflow/nodes/execution-fail.node.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qDAAqD,CAAC;AAC1F,OAAO,EACL,4BAA4B,EAC5B,yBAAyB,EAC1B,MAAM,mCAAmC,CAAC;AAE3C,qBA6Da,iBAAkB,YAAW,mBAAmB;IACrD,OAAO,CACX,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,yBAAyB,CAAC;CAStC"}
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.ExecutionFailNode = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const workflow_node_provider_decorator_1 = require("../../../decorators/workflow-node-provider.decorator");
12
+ let ExecutionFailNode = class ExecutionFailNode {
13
+ async execute(context) {
14
+ const configuration = context.expression.interpolate(context.node.configuration ?? {}, context);
15
+ throw new common_1.BadRequestException(configuration.message ?? 'Execution failed intentionally.');
16
+ }
17
+ };
18
+ exports.ExecutionFailNode = ExecutionFailNode;
19
+ exports.ExecutionFailNode = ExecutionFailNode = __decorate([
20
+ (0, workflow_node_provider_decorator_1.WorkflowNodeProvider)({
21
+ type: 'execution.fail',
22
+ kind: 'task',
23
+ version: '1.0.0',
24
+ category: 'core',
25
+ subcategory: 'execution',
26
+ label: 'Fail Execution',
27
+ description: 'Fails intentionally with a configured message.',
28
+ tags: ['failure', 'error', 'testing'],
29
+ aliases: ['fail'],
30
+ configSchema: {
31
+ type: 'object',
32
+ properties: {
33
+ message: {
34
+ type: 'string',
35
+ default: 'Execution failed intentionally.',
36
+ },
37
+ },
38
+ },
39
+ authoring: {
40
+ defaultConfiguration: {
41
+ message: 'Execution failed intentionally.',
42
+ },
43
+ configurationFields: [
44
+ {
45
+ key: 'message',
46
+ label: 'Message',
47
+ description: 'Failure message. Expressions are allowed.',
48
+ valueType: 'string',
49
+ expressionAllowed: true,
50
+ group: 'General',
51
+ },
52
+ ],
53
+ supportsExpressions: true,
54
+ supportsDisableToggle: true,
55
+ supportsName: true,
56
+ supportsDescription: true,
57
+ searchableText: ['fail', 'failure', 'error', 'testing'],
58
+ },
59
+ runtime: {
60
+ emitsLogs: false,
61
+ emitsArtifacts: false,
62
+ deterministicOutputs: true,
63
+ executionMode: 'task',
64
+ successStatuses: [],
65
+ },
66
+ documentation: {
67
+ summary: 'Use this node in reference workflows and tests to intentionally exercise failure paths and error handlers.',
68
+ },
69
+ ui: {
70
+ icon: 'si-x-circle',
71
+ iconColor: '#dc2626',
72
+ iconBackgroundColor: '#fee2e2',
73
+ iconBorderColor: '#fecaca',
74
+ modalSize: 'lg',
75
+ layoutHints: {
76
+ groupOrder: ['General'],
77
+ },
78
+ },
79
+ })
80
+ ], ExecutionFailNode);
81
+ //# sourceMappingURL=execution-fail.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-fail.node.js","sourceRoot":"","sources":["../../../../src/services/workflow/nodes/execution-fail.node.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAqD;AACrD,2GAA4F;AAoErF,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAC5B,KAAK,CAAC,OAAO,CACX,OAAqC;QAErC,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,WAAW,CAClD,OAAO,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,EAChC,OAAO,CACR,CAAC;QACF,MAAM,IAAI,4BAAmB,CAC3B,aAAa,CAAC,OAAO,IAAI,iCAAiC,CAC3D,CAAC;IACJ,CAAC;CACF,CAAA;AAZY,8CAAiB;4BAAjB,iBAAiB;IA7D7B,IAAA,uDAAoB,EAAC;QACpB,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,OAAO;QAChB,QAAQ,EAAE,MAAM;QAChB,WAAW,EAAE,WAAW;QACxB,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,gDAAgD;QAC7D,IAAI,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC;QACrC,OAAO,EAAE,CAAC,MAAM,CAAC;QACjB,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,iCAAiC;iBAC3C;aACF;SACF;QACD,SAAS,EAAE;YACT,oBAAoB,EAAE;gBACpB,OAAO,EAAE,iCAAiC;aAC3C;YACD,mBAAmB,EAAE;gBACnB;oBACE,GAAG,EAAE,SAAS;oBACd,KAAK,EAAE,SAAS;oBAChB,WAAW,EAAE,2CAA2C;oBACxD,SAAS,EAAE,QAAQ;oBACnB,iBAAiB,EAAE,IAAI;oBACvB,KAAK,EAAE,SAAS;iBACjB;aACF;YACD,mBAAmB,EAAE,IAAI;YACzB,qBAAqB,EAAE,IAAI;YAC3B,YAAY,EAAE,IAAI;YAClB,mBAAmB,EAAE,IAAI;YACzB,cAAc,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC;SACxD;QACD,OAAO,EAAE;YACP,SAAS,EAAE,KAAK;YAChB,cAAc,EAAE,KAAK;YACrB,oBAAoB,EAAE,IAAI;YAC1B,aAAa,EAAE,MAAM;YACrB,eAAe,EAAE,EAAE;SACpB;QACD,aAAa,EAAE;YACb,OAAO,EACL,4GAA4G;SAC/G;QACD,EAAE,EAAE;YACF,IAAI,EAAE,aAAa;YACnB,SAAS,EAAE,SAAS;YACpB,mBAAmB,EAAE,SAAS;YAC9B,eAAe,EAAE,SAAS;YAC1B,SAAS,EAAE,IAAI;YACf,WAAW,EAAE;gBACX,UAAU,EAAE,CAAC,SAAS,CAAC;aACxB;SACF;KACF,CAAC;GACW,iBAAiB,CAY7B","sourcesContent":["import { BadRequestException } from '@nestjs/common';\nimport { WorkflowNodeProvider } from '../../../decorators/workflow-node-provider.decorator';\nimport { WorkflowNodeHandler } from '../../../interfaces/workflow-node-handler.interface';\nimport {\n WorkflowNodeExecutionContext,\n WorkflowNodeHandlerResult,\n} from '../../../types/workflow-dsl.types';\n\n@WorkflowNodeProvider({\n type: 'execution.fail',\n kind: 'task',\n version: '1.0.0',\n category: 'core',\n subcategory: 'execution',\n label: 'Fail Execution',\n description: 'Fails intentionally with a configured message.',\n tags: ['failure', 'error', 'testing'],\n aliases: ['fail'],\n configSchema: {\n type: 'object',\n properties: {\n message: {\n type: 'string',\n default: 'Execution failed intentionally.',\n },\n },\n },\n authoring: {\n defaultConfiguration: {\n message: 'Execution failed intentionally.',\n },\n configurationFields: [\n {\n key: 'message',\n label: 'Message',\n description: 'Failure message. Expressions are allowed.',\n valueType: 'string',\n expressionAllowed: true,\n group: 'General',\n },\n ],\n supportsExpressions: true,\n supportsDisableToggle: true,\n supportsName: true,\n supportsDescription: true,\n searchableText: ['fail', 'failure', 'error', 'testing'],\n },\n runtime: {\n emitsLogs: false,\n emitsArtifacts: false,\n deterministicOutputs: true,\n executionMode: 'task',\n successStatuses: [],\n },\n documentation: {\n summary:\n 'Use this node in reference workflows and tests to intentionally exercise failure paths and error handlers.',\n },\n ui: {\n icon: 'si-x-circle',\n iconColor: '#dc2626',\n iconBackgroundColor: '#fee2e2',\n iconBorderColor: '#fecaca',\n modalSize: 'lg',\n layoutHints: {\n groupOrder: ['General'],\n },\n },\n})\nexport class ExecutionFailNode implements WorkflowNodeHandler {\n async execute(\n context: WorkflowNodeExecutionContext,\n ): Promise<WorkflowNodeHandlerResult> {\n const configuration = context.expression.interpolate(\n context.node.configuration ?? {},\n context,\n );\n throw new BadRequestException(\n configuration.message ?? 'Execution failed intentionally.',\n );\n }\n}\n"]}
@@ -0,0 +1,8 @@
1
+ import { WorkflowNodeHandler } from '../../../interfaces/workflow-node-handler.interface';
2
+ import { WorkflowNodeExecutionContext, WorkflowNodeHandlerResult } from '../../../types/workflow-dsl.types';
3
+ export declare class ForEachNode implements WorkflowNodeHandler {
4
+ execute(context: WorkflowNodeExecutionContext): Promise<WorkflowNodeHandlerResult>;
5
+ private resolveConcurrencyLimit;
6
+ private runIterations;
7
+ }
8
+ //# sourceMappingURL=for-each.node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"for-each.node.d.ts","sourceRoot":"","sources":["../../../../src/services/workflow/nodes/for-each.node.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qDAAqD,CAAC;AAC1F,OAAO,EACL,4BAA4B,EAC5B,yBAAyB,EAC1B,MAAM,mCAAmC,CAAC;AAE3C,qBA4Fa,WAAY,YAAW,mBAAmB;IAC/C,OAAO,CACX,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,yBAAyB,CAAC;IAwFrC,OAAO,CAAC,uBAAuB;YAWjB,aAAa;CA4B5B"}
@@ -0,0 +1,204 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.ForEachNode = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const workflow_node_provider_decorator_1 = require("../../../decorators/workflow-node-provider.decorator");
12
+ let ForEachNode = class ForEachNode {
13
+ async execute(context) {
14
+ const configuration = context.node.configuration ?? {};
15
+ const items = context.expression.interpolate(configuration.items ?? [], context);
16
+ const concurrencyLimit = this.resolveConcurrencyLimit(context.expression.interpolate(configuration.concurrencyLimit ?? 1, context));
17
+ const aggregateOutputs = Boolean(context.expression.interpolate(configuration.aggregateOutputs ?? false, context));
18
+ if (!Array.isArray(items)) {
19
+ throw new common_1.BadRequestException('forEach requires configuration.items array.');
20
+ }
21
+ const childNodes = context.node.tasks ?? [];
22
+ const iterationsByIndex = {};
23
+ const iterationsByKey = {};
24
+ const shouldAggregateByKey = aggregateOutputs && configuration.outputKey !== undefined && configuration.outputKey !== null;
25
+ await this.runIterations(items, concurrencyLimit, async (item, index) => {
26
+ const inheritedOutputs = context.outputs ?? {};
27
+ const iterationOutputs = { ...inheritedOutputs };
28
+ const parentLoops = context.loops ?? [];
29
+ const currentLoop = {
30
+ item,
31
+ index,
32
+ nodeId: context.node.id,
33
+ stepExecutionKey: context.stepExecution.stepExecutionKey,
34
+ };
35
+ const loopContext = {
36
+ item,
37
+ index,
38
+ parent: parentLoops[parentLoops.length - 1],
39
+ parents: [...parentLoops].reverse(),
40
+ loops: [...parentLoops, currentLoop],
41
+ };
42
+ const outputKey = shouldAggregateByKey
43
+ ? String(context.expression.interpolate(configuration.outputKey, {
44
+ ...context,
45
+ ...loopContext,
46
+ outputs: iterationOutputs,
47
+ }))
48
+ : undefined;
49
+ const childOutputs = await context.runNodes(childNodes, {
50
+ ...loopContext,
51
+ outputs: iterationOutputs,
52
+ });
53
+ if (aggregateOutputs) {
54
+ const iterationResult = {
55
+ item,
56
+ index,
57
+ outputs: childOutputs,
58
+ };
59
+ iterationsByIndex[index] = iterationResult;
60
+ if (outputKey !== undefined) {
61
+ iterationsByKey[outputKey] = iterationResult;
62
+ }
63
+ }
64
+ });
65
+ return {
66
+ output: {
67
+ count: items.length,
68
+ childNodeIds: childNodes.map((childNode) => childNode.id),
69
+ concurrencyLimit,
70
+ iterationOutputsStoredOnSteps: !aggregateOutputs,
71
+ ...(aggregateOutputs
72
+ ? {
73
+ iterations: {
74
+ byIndex: iterationsByIndex,
75
+ ...(shouldAggregateByKey
76
+ ? {
77
+ byKey: iterationsByKey,
78
+ }
79
+ : {}),
80
+ },
81
+ }
82
+ : {}),
83
+ },
84
+ };
85
+ }
86
+ resolveConcurrencyLimit(value) {
87
+ const parsed = Number(value === '' || value === null || value === undefined ? 1 : value);
88
+ if (!Number.isFinite(parsed) || parsed < 0) {
89
+ throw new common_1.BadRequestException('forEach configuration.concurrencyLimit must be 0 or a positive number.');
90
+ }
91
+ return Math.floor(parsed);
92
+ }
93
+ async runIterations(items, concurrencyLimit, handler) {
94
+ if (concurrencyLimit === 1 || items.length <= 1) {
95
+ for (let index = 0; index < items.length; index++) {
96
+ await handler(items[index], index);
97
+ }
98
+ return;
99
+ }
100
+ const limit = concurrencyLimit === 0 ? items.length : concurrencyLimit;
101
+ let nextIndex = 0;
102
+ const workers = Array.from({ length: Math.min(limit, items.length) }, async () => {
103
+ while (nextIndex < items.length) {
104
+ const index = nextIndex;
105
+ nextIndex += 1;
106
+ await handler(items[index], index);
107
+ }
108
+ });
109
+ await Promise.all(workers);
110
+ }
111
+ };
112
+ exports.ForEachNode = ForEachNode;
113
+ exports.ForEachNode = ForEachNode = __decorate([
114
+ (0, workflow_node_provider_decorator_1.WorkflowNodeProvider)({
115
+ type: 'forEach',
116
+ kind: 'control',
117
+ category: 'control-flow',
118
+ label: 'For Each',
119
+ description: 'Runs child nodes once for every item in an array.',
120
+ tags: ['loop', 'iteration'],
121
+ authoring: {
122
+ defaultConfiguration: {
123
+ items: '',
124
+ concurrencyLimit: 1,
125
+ aggregateOutputs: false,
126
+ },
127
+ configurationFields: [
128
+ {
129
+ key: 'items',
130
+ label: 'Items',
131
+ description: 'Array or expression resolving to an array to iterate over.',
132
+ valueType: 'string',
133
+ required: true,
134
+ expressionAllowed: true,
135
+ group: 'General',
136
+ uiSchema: {
137
+ layout: {
138
+ width: 'full',
139
+ },
140
+ },
141
+ },
142
+ {
143
+ key: 'concurrencyLimit',
144
+ label: 'Concurrency Limit',
145
+ description: 'Maximum number of loop iterations to run at once. Use 1 for sequential execution and 0 for unlimited concurrency.',
146
+ valueType: 'number',
147
+ defaultValue: 1,
148
+ expressionAllowed: true,
149
+ group: 'General',
150
+ },
151
+ {
152
+ key: 'aggregateOutputs',
153
+ label: 'Aggregate Outputs',
154
+ description: 'Adds per-iteration child outputs to this forEach node output for downstream expressions.',
155
+ valueType: 'boolean',
156
+ defaultValue: false,
157
+ expressionAllowed: true,
158
+ group: 'General',
159
+ },
160
+ {
161
+ key: 'outputKey',
162
+ label: 'Output Key',
163
+ description: 'Optional expression used as the per-iteration key when aggregate outputs is enabled.',
164
+ valueType: 'string',
165
+ expressionAllowed: true,
166
+ group: 'General',
167
+ },
168
+ ],
169
+ childSlots: [
170
+ {
171
+ key: 'tasks',
172
+ label: 'Loop Body',
173
+ description: 'Nodes that run once for each item.',
174
+ kind: 'sequence',
175
+ layout: 'sequential',
176
+ required: true,
177
+ },
178
+ {
179
+ key: 'errors',
180
+ label: 'Errors',
181
+ description: 'Nodes that run sequentially if this loop fails.',
182
+ kind: 'sequence',
183
+ layout: 'sequential',
184
+ },
185
+ ],
186
+ supportsDescription: true,
187
+ supportsName: true,
188
+ },
189
+ documentation: {
190
+ summary: 'Iterates over an array and runs the loop body once for each item.',
191
+ },
192
+ ui: {
193
+ icon: 'si-refresh',
194
+ iconColor: '#7c3aed',
195
+ iconBackgroundColor: '#f3e8ff',
196
+ iconBorderColor: '#d8b4fe',
197
+ modalSize: 'lg',
198
+ layoutHints: {
199
+ groupOrder: ['General'],
200
+ },
201
+ },
202
+ })
203
+ ], ForEachNode);
204
+ //# sourceMappingURL=for-each.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"for-each.node.js","sourceRoot":"","sources":["../../../../src/services/workflow/nodes/for-each.node.ts"],"names":[],"mappings":"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","sourcesContent":["import { BadRequestException } from '@nestjs/common';\nimport { WorkflowNodeProvider } from '../../../decorators/workflow-node-provider.decorator';\nimport { WorkflowNodeHandler } from '../../../interfaces/workflow-node-handler.interface';\nimport {\n WorkflowNodeExecutionContext,\n WorkflowNodeHandlerResult,\n} from '../../../types/workflow-dsl.types';\n\n@WorkflowNodeProvider({\n type: 'forEach',\n kind: 'control',\n category: 'control-flow',\n label: 'For Each',\n description: 'Runs child nodes once for every item in an array.',\n tags: ['loop', 'iteration'],\n authoring: {\n defaultConfiguration: {\n items: '',\n concurrencyLimit: 1,\n aggregateOutputs: false,\n },\n configurationFields: [\n {\n key: 'items',\n label: 'Items',\n description: 'Array or expression resolving to an array to iterate over.',\n valueType: 'string',\n required: true,\n expressionAllowed: true,\n group: 'General',\n uiSchema: {\n layout: {\n width: 'full',\n },\n },\n },\n {\n key: 'concurrencyLimit',\n label: 'Concurrency Limit',\n description:\n 'Maximum number of loop iterations to run at once. Use 1 for sequential execution and 0 for unlimited concurrency.',\n valueType: 'number',\n defaultValue: 1,\n expressionAllowed: true,\n group: 'General',\n },\n {\n key: 'aggregateOutputs',\n label: 'Aggregate Outputs',\n description:\n 'Adds per-iteration child outputs to this forEach node output for downstream expressions.',\n valueType: 'boolean',\n defaultValue: false,\n expressionAllowed: true,\n group: 'General',\n },\n {\n key: 'outputKey',\n label: 'Output Key',\n description:\n 'Optional expression used as the per-iteration key when aggregate outputs is enabled.',\n valueType: 'string',\n expressionAllowed: true,\n group: 'General',\n },\n ],\n childSlots: [\n {\n key: 'tasks',\n label: 'Loop Body',\n description: 'Nodes that run once for each item.',\n kind: 'sequence',\n layout: 'sequential',\n required: true,\n },\n {\n key: 'errors',\n label: 'Errors',\n description: 'Nodes that run sequentially if this loop fails.',\n kind: 'sequence',\n layout: 'sequential',\n },\n ],\n supportsDescription: true,\n supportsName: true,\n },\n documentation: {\n summary: 'Iterates over an array and runs the loop body once for each item.',\n },\n ui: {\n icon: 'si-refresh',\n iconColor: '#7c3aed',\n iconBackgroundColor: '#f3e8ff',\n iconBorderColor: '#d8b4fe',\n modalSize: 'lg',\n layoutHints: {\n groupOrder: ['General'],\n },\n },\n})\nexport class ForEachNode implements WorkflowNodeHandler {\n async execute(\n context: WorkflowNodeExecutionContext,\n ): Promise<WorkflowNodeHandlerResult> {\n const configuration = context.node.configuration ?? {};\n const items = context.expression.interpolate(configuration.items ?? [], context);\n const concurrencyLimit = this.resolveConcurrencyLimit(\n context.expression.interpolate(configuration.concurrencyLimit ?? 1, context),\n );\n const aggregateOutputs = Boolean(\n context.expression.interpolate(configuration.aggregateOutputs ?? false, context),\n );\n\n if (!Array.isArray(items)) {\n throw new BadRequestException('forEach requires configuration.items array.');\n }\n\n const childNodes = context.node.tasks ?? [];\n const iterationsByIndex: Record<number, any> = {};\n const iterationsByKey: Record<string, any> = {};\n const shouldAggregateByKey =\n aggregateOutputs && configuration.outputKey !== undefined && configuration.outputKey !== null;\n\n await this.runIterations(items, concurrencyLimit, async (item, index) => {\n const inheritedOutputs = context.outputs ?? {};\n const iterationOutputs = { ...inheritedOutputs };\n const parentLoops = context.loops ?? [];\n const currentLoop = {\n item,\n index,\n nodeId: context.node.id,\n stepExecutionKey: context.stepExecution.stepExecutionKey,\n };\n const loopContext = {\n item,\n index,\n parent: parentLoops[parentLoops.length - 1],\n parents: [...parentLoops].reverse(),\n loops: [...parentLoops, currentLoop],\n };\n const outputKey = shouldAggregateByKey\n ? String(context.expression.interpolate(configuration.outputKey, {\n ...context,\n ...loopContext,\n outputs: iterationOutputs,\n }))\n : undefined;\n\n const childOutputs = await context.runNodes(childNodes, {\n ...loopContext,\n outputs: iterationOutputs,\n });\n\n if (aggregateOutputs) {\n const iterationResult = {\n item,\n index,\n outputs: childOutputs,\n };\n\n iterationsByIndex[index] = iterationResult;\n if (outputKey !== undefined) {\n iterationsByKey[outputKey] = iterationResult;\n }\n }\n });\n\n return {\n output: {\n count: items.length,\n childNodeIds: childNodes.map((childNode) => childNode.id),\n concurrencyLimit,\n // Keep the control-node output intentionally small. Per-iteration\n // outputs are already stored on the child workflowStepExecution rows.\n iterationOutputsStoredOnSteps: !aggregateOutputs,\n ...(aggregateOutputs\n ? {\n iterations: {\n byIndex: iterationsByIndex,\n ...(shouldAggregateByKey\n ? {\n byKey: iterationsByKey,\n }\n : {}),\n },\n }\n : {}),\n },\n };\n }\n\n private resolveConcurrencyLimit(value: any): number {\n const parsed = Number(value === '' || value === null || value === undefined ? 1 : value);\n if (!Number.isFinite(parsed) || parsed < 0) {\n throw new BadRequestException(\n 'forEach configuration.concurrencyLimit must be 0 or a positive number.',\n );\n }\n\n return Math.floor(parsed);\n }\n\n private async runIterations<T>(\n items: T[],\n concurrencyLimit: number,\n handler: (item: T, index: number) => Promise<void>,\n ): Promise<void> {\n if (concurrencyLimit === 1 || items.length <= 1) {\n for (let index = 0; index < items.length; index++) {\n await handler(items[index], index);\n }\n return;\n }\n\n const limit = concurrencyLimit === 0 ? items.length : concurrencyLimit;\n let nextIndex = 0;\n\n const workers = Array.from(\n { length: Math.min(limit, items.length) },\n async () => {\n while (nextIndex < items.length) {\n const index = nextIndex;\n nextIndex += 1;\n await handler(items[index], index);\n }\n },\n );\n\n await Promise.all(workers);\n }\n}\n"]}
@@ -0,0 +1,13 @@
1
+ import { WorkflowNodeHandler } from '../../../interfaces/workflow-node-handler.interface';
2
+ import { WorkflowNodeExecutionContext, WorkflowNodeHandlerResult } from '../../../types/workflow-dsl.types';
3
+ export declare class HttpRequestNode implements WorkflowNodeHandler {
4
+ execute(context: WorkflowNodeExecutionContext): Promise<WorkflowNodeHandlerResult>;
5
+ private buildUri;
6
+ private resolveRequestBody;
7
+ private buildFormData;
8
+ private normalizeHeaders;
9
+ private setHeaderIfMissing;
10
+ private deleteHeader;
11
+ private parseBody;
12
+ }
13
+ //# sourceMappingURL=http-request.node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-request.node.d.ts","sourceRoot":"","sources":["../../../../src/services/workflow/nodes/http-request.node.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qDAAqD,CAAC;AAC1F,OAAO,EACL,4BAA4B,EAC5B,yBAAyB,EAC1B,MAAM,mCAAmC,CAAC;AAQ3C,qBA6Wa,eAAgB,YAAW,mBAAmB;IACnD,OAAO,CACX,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,yBAAyB,CAAC;IAwErC,OAAO,CAAC,QAAQ;IAgChB,OAAO,CAAC,kBAAkB;IA4C1B,OAAO,CAAC,aAAa;IA2CrB,OAAO,CAAC,gBAAgB;IAiBxB,OAAO,CAAC,kBAAkB;IAa1B,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,SAAS;CAWlB"}