@solidxai/core 0.1.12 → 0.1.13-beta.2

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 (463) hide show
  1. package/dist/controllers/view-metadata.controller.d.ts +1 -1
  2. package/dist/controllers/workflow-definition.controller.d.ts +38 -0
  3. package/dist/controllers/workflow-definition.controller.d.ts.map +1 -0
  4. package/dist/controllers/workflow-definition.controller.js +272 -0
  5. package/dist/controllers/workflow-definition.controller.js.map +1 -0
  6. package/dist/controllers/workflow-execution-artifact.controller.d.ts +24 -0
  7. package/dist/controllers/workflow-execution-artifact.controller.d.ts.map +1 -0
  8. package/dist/controllers/workflow-execution-artifact.controller.js +179 -0
  9. package/dist/controllers/workflow-execution-artifact.controller.js.map +1 -0
  10. package/dist/controllers/workflow-execution-log.controller.d.ts +24 -0
  11. package/dist/controllers/workflow-execution-log.controller.d.ts.map +1 -0
  12. package/dist/controllers/workflow-execution-log.controller.js +179 -0
  13. package/dist/controllers/workflow-execution-log.controller.js.map +1 -0
  14. package/dist/controllers/workflow-execution.controller.d.ts +29 -0
  15. package/dist/controllers/workflow-execution.controller.d.ts.map +1 -0
  16. package/dist/controllers/workflow-execution.controller.js +227 -0
  17. package/dist/controllers/workflow-execution.controller.js.map +1 -0
  18. package/dist/controllers/workflow-secret.controller.d.ts +24 -0
  19. package/dist/controllers/workflow-secret.controller.d.ts.map +1 -0
  20. package/dist/controllers/workflow-secret.controller.js +179 -0
  21. package/dist/controllers/workflow-secret.controller.js.map +1 -0
  22. package/dist/controllers/workflow-step-execution.controller.d.ts +24 -0
  23. package/dist/controllers/workflow-step-execution.controller.d.ts.map +1 -0
  24. package/dist/controllers/workflow-step-execution.controller.js +179 -0
  25. package/dist/controllers/workflow-step-execution.controller.js.map +1 -0
  26. package/dist/controllers/workflow-trigger-execution.controller.d.ts +24 -0
  27. package/dist/controllers/workflow-trigger-execution.controller.d.ts.map +1 -0
  28. package/dist/controllers/workflow-trigger-execution.controller.js +179 -0
  29. package/dist/controllers/workflow-trigger-execution.controller.js.map +1 -0
  30. package/dist/decorators/workflow-field-data-provider.decorator.d.ts +3 -0
  31. package/dist/decorators/workflow-field-data-provider.decorator.d.ts.map +1 -0
  32. package/dist/decorators/workflow-field-data-provider.decorator.js +11 -0
  33. package/dist/decorators/workflow-field-data-provider.decorator.js.map +1 -0
  34. package/dist/decorators/workflow-node-provider.decorator.d.ts +4 -0
  35. package/dist/decorators/workflow-node-provider.decorator.d.ts.map +1 -0
  36. package/dist/decorators/workflow-node-provider.decorator.js +13 -0
  37. package/dist/decorators/workflow-node-provider.decorator.js.map +1 -0
  38. package/dist/dtos/create-workflow-definition.dto.d.ts +14 -0
  39. package/dist/dtos/create-workflow-definition.dto.d.ts.map +1 -0
  40. package/dist/dtos/create-workflow-definition.dto.js +92 -0
  41. package/dist/dtos/create-workflow-definition.dto.js.map +1 -0
  42. package/dist/dtos/create-workflow-execution-artifact.dto.d.ts +22 -0
  43. package/dist/dtos/create-workflow-execution-artifact.dto.d.ts.map +1 -0
  44. package/dist/dtos/create-workflow-execution-artifact.dto.js +139 -0
  45. package/dist/dtos/create-workflow-execution-artifact.dto.js.map +1 -0
  46. package/dist/dtos/create-workflow-execution-log.dto.d.ts +18 -0
  47. package/dist/dtos/create-workflow-execution-log.dto.d.ts.map +1 -0
  48. package/dist/dtos/create-workflow-execution-log.dto.js +116 -0
  49. package/dist/dtos/create-workflow-execution-log.dto.js.map +1 -0
  50. package/dist/dtos/create-workflow-execution.dto.d.ts +33 -0
  51. package/dist/dtos/create-workflow-execution.dto.d.ts.map +1 -0
  52. package/dist/dtos/create-workflow-execution.dto.js +186 -0
  53. package/dist/dtos/create-workflow-execution.dto.js.map +1 -0
  54. package/dist/dtos/create-workflow-secret.dto.d.ts +11 -0
  55. package/dist/dtos/create-workflow-secret.dto.d.ts.map +1 -0
  56. package/dist/dtos/create-workflow-secret.dto.js +74 -0
  57. package/dist/dtos/create-workflow-secret.dto.js.map +1 -0
  58. package/dist/dtos/create-workflow-step-execution.dto.d.ts +27 -0
  59. package/dist/dtos/create-workflow-step-execution.dto.d.ts.map +1 -0
  60. package/dist/dtos/create-workflow-step-execution.dto.js +171 -0
  61. package/dist/dtos/create-workflow-step-execution.dto.js.map +1 -0
  62. package/dist/dtos/create-workflow-trigger-execution.dto.d.ts +25 -0
  63. package/dist/dtos/create-workflow-trigger-execution.dto.d.ts.map +1 -0
  64. package/dist/dtos/create-workflow-trigger-execution.dto.js +158 -0
  65. package/dist/dtos/create-workflow-trigger-execution.dto.js.map +1 -0
  66. package/dist/dtos/execute-workflow.dto.d.ts +7 -0
  67. package/dist/dtos/execute-workflow.dto.d.ts.map +1 -0
  68. package/dist/dtos/execute-workflow.dto.js +11 -0
  69. package/dist/dtos/execute-workflow.dto.js.map +1 -0
  70. package/dist/dtos/update-workflow-definition.dto.d.ts +15 -0
  71. package/dist/dtos/update-workflow-definition.dto.d.ts.map +1 -0
  72. package/dist/dtos/update-workflow-definition.dto.js +97 -0
  73. package/dist/dtos/update-workflow-definition.dto.js.map +1 -0
  74. package/dist/dtos/update-workflow-execution-artifact.dto.d.ts +23 -0
  75. package/dist/dtos/update-workflow-execution-artifact.dto.d.ts.map +1 -0
  76. package/dist/dtos/update-workflow-execution-artifact.dto.js +143 -0
  77. package/dist/dtos/update-workflow-execution-artifact.dto.js.map +1 -0
  78. package/dist/dtos/update-workflow-execution-log.dto.d.ts +19 -0
  79. package/dist/dtos/update-workflow-execution-log.dto.d.ts.map +1 -0
  80. package/dist/dtos/update-workflow-execution-log.dto.js +121 -0
  81. package/dist/dtos/update-workflow-execution-log.dto.js.map +1 -0
  82. package/dist/dtos/update-workflow-execution.dto.d.ts +34 -0
  83. package/dist/dtos/update-workflow-execution.dto.d.ts.map +1 -0
  84. package/dist/dtos/update-workflow-execution.dto.js +190 -0
  85. package/dist/dtos/update-workflow-execution.dto.js.map +1 -0
  86. package/dist/dtos/update-workflow-secret.dto.d.ts +12 -0
  87. package/dist/dtos/update-workflow-secret.dto.d.ts.map +1 -0
  88. package/dist/dtos/update-workflow-secret.dto.js +80 -0
  89. package/dist/dtos/update-workflow-secret.dto.js.map +1 -0
  90. package/dist/dtos/update-workflow-step-execution.dto.d.ts +28 -0
  91. package/dist/dtos/update-workflow-step-execution.dto.d.ts.map +1 -0
  92. package/dist/dtos/update-workflow-step-execution.dto.js +175 -0
  93. package/dist/dtos/update-workflow-step-execution.dto.js.map +1 -0
  94. package/dist/dtos/update-workflow-trigger-execution.dto.d.ts +26 -0
  95. package/dist/dtos/update-workflow-trigger-execution.dto.d.ts.map +1 -0
  96. package/dist/dtos/update-workflow-trigger-execution.dto.js +163 -0
  97. package/dist/dtos/update-workflow-trigger-execution.dto.js.map +1 -0
  98. package/dist/dtos/validate-workflow-definition.dto.d.ts +4 -0
  99. package/dist/dtos/validate-workflow-definition.dto.d.ts.map +1 -0
  100. package/dist/dtos/validate-workflow-definition.dto.js +11 -0
  101. package/dist/dtos/validate-workflow-definition.dto.js.map +1 -0
  102. package/dist/entities/saved-filters.entity.js +3 -3
  103. package/dist/entities/saved-filters.entity.js.map +1 -1
  104. package/dist/entities/workflow-definition.entity.d.ts +15 -0
  105. package/dist/entities/workflow-definition.entity.d.ts.map +1 -0
  106. package/dist/entities/workflow-definition.entity.js +77 -0
  107. package/dist/entities/workflow-definition.entity.js.map +1 -0
  108. package/dist/entities/workflow-execution-artifact.entity.d.ts +23 -0
  109. package/dist/entities/workflow-execution-artifact.entity.d.ts.map +1 -0
  110. package/dist/entities/workflow-execution-artifact.entity.js +113 -0
  111. package/dist/entities/workflow-execution-artifact.entity.js.map +1 -0
  112. package/dist/entities/workflow-execution-log.entity.d.ts +19 -0
  113. package/dist/entities/workflow-execution-log.entity.d.ts.map +1 -0
  114. package/dist/entities/workflow-execution-log.entity.js +95 -0
  115. package/dist/entities/workflow-execution-log.entity.js.map +1 -0
  116. package/dist/entities/workflow-execution.entity.d.ts +28 -0
  117. package/dist/entities/workflow-execution.entity.d.ts.map +1 -0
  118. package/dist/entities/workflow-execution.entity.js +124 -0
  119. package/dist/entities/workflow-execution.entity.js.map +1 -0
  120. package/dist/entities/workflow-secret.entity.d.ts +12 -0
  121. package/dist/entities/workflow-secret.entity.d.ts.map +1 -0
  122. package/dist/entities/workflow-secret.entity.js +66 -0
  123. package/dist/entities/workflow-secret.entity.js.map +1 -0
  124. package/dist/entities/workflow-step-execution.entity.d.ts +28 -0
  125. package/dist/entities/workflow-step-execution.entity.d.ts.map +1 -0
  126. package/dist/entities/workflow-step-execution.entity.js +138 -0
  127. package/dist/entities/workflow-step-execution.entity.js.map +1 -0
  128. package/dist/entities/workflow-trigger-execution.entity.d.ts +26 -0
  129. package/dist/entities/workflow-trigger-execution.entity.d.ts.map +1 -0
  130. package/dist/entities/workflow-trigger-execution.entity.js +127 -0
  131. package/dist/entities/workflow-trigger-execution.entity.js.map +1 -0
  132. package/dist/factories/sms.factory.d.ts.map +1 -1
  133. package/dist/factories/sms.factory.js +4 -1
  134. package/dist/factories/sms.factory.js.map +1 -1
  135. package/dist/helpers/solid-registry.d.ts +5 -1
  136. package/dist/helpers/solid-registry.d.ts.map +1 -1
  137. package/dist/helpers/solid-registry.js +17 -0
  138. package/dist/helpers/solid-registry.js.map +1 -1
  139. package/dist/index.d.ts +55 -0
  140. package/dist/index.d.ts.map +1 -1
  141. package/dist/index.js +55 -0
  142. package/dist/index.js.map +1 -1
  143. package/dist/interfaces/workflow-node-handler.interface.d.ts +5 -0
  144. package/dist/interfaces/workflow-node-handler.interface.d.ts.map +1 -0
  145. package/dist/interfaces/workflow-node-handler.interface.js +3 -0
  146. package/dist/interfaces/workflow-node-handler.interface.js.map +1 -0
  147. package/dist/interfaces.d.ts +24 -0
  148. package/dist/interfaces.d.ts.map +1 -1
  149. package/dist/interfaces.js.map +1 -1
  150. package/dist/jobs/database/workflow-execution-publisher-database.service.d.ts +12 -0
  151. package/dist/jobs/database/workflow-execution-publisher-database.service.d.ts.map +1 -0
  152. package/dist/jobs/database/workflow-execution-publisher-database.service.js +39 -0
  153. package/dist/jobs/database/workflow-execution-publisher-database.service.js.map +1 -0
  154. package/dist/jobs/database/workflow-execution-queue-options-database.d.ts +8 -0
  155. package/dist/jobs/database/workflow-execution-queue-options-database.d.ts.map +1 -0
  156. package/dist/jobs/database/workflow-execution-queue-options-database.js +10 -0
  157. package/dist/jobs/database/workflow-execution-queue-options-database.js.map +1 -0
  158. package/dist/jobs/database/workflow-execution-subscriber-database.service.d.ts +19 -0
  159. package/dist/jobs/database/workflow-execution-subscriber-database.service.d.ts.map +1 -0
  160. package/dist/jobs/database/workflow-execution-subscriber-database.service.js +55 -0
  161. package/dist/jobs/database/workflow-execution-subscriber-database.service.js.map +1 -0
  162. package/dist/jobs/rabbitmq/workflow-execution-publisher.service.d.ts +12 -0
  163. package/dist/jobs/rabbitmq/workflow-execution-publisher.service.d.ts.map +1 -0
  164. package/dist/jobs/rabbitmq/workflow-execution-publisher.service.js +39 -0
  165. package/dist/jobs/rabbitmq/workflow-execution-publisher.service.js.map +1 -0
  166. package/dist/jobs/rabbitmq/workflow-execution-queue-options.d.ts +8 -0
  167. package/dist/jobs/rabbitmq/workflow-execution-queue-options.d.ts.map +1 -0
  168. package/dist/jobs/rabbitmq/workflow-execution-queue-options.js +10 -0
  169. package/dist/jobs/rabbitmq/workflow-execution-queue-options.js.map +1 -0
  170. package/dist/jobs/rabbitmq/workflow-execution-subscriber.service.d.ts +17 -0
  171. package/dist/jobs/rabbitmq/workflow-execution-subscriber.service.d.ts.map +1 -0
  172. package/dist/jobs/rabbitmq/workflow-execution-subscriber.service.js +52 -0
  173. package/dist/jobs/rabbitmq/workflow-execution-subscriber.service.js.map +1 -0
  174. package/dist/jobs/redis/workflow-execution-publisher-redis.service.d.ts +12 -0
  175. package/dist/jobs/redis/workflow-execution-publisher-redis.service.d.ts.map +1 -0
  176. package/dist/jobs/redis/workflow-execution-publisher-redis.service.js +39 -0
  177. package/dist/jobs/redis/workflow-execution-publisher-redis.service.js.map +1 -0
  178. package/dist/jobs/redis/workflow-execution-queue-options-redis.d.ts +8 -0
  179. package/dist/jobs/redis/workflow-execution-queue-options-redis.d.ts.map +1 -0
  180. package/dist/jobs/redis/workflow-execution-queue-options-redis.js +10 -0
  181. package/dist/jobs/redis/workflow-execution-queue-options-redis.js.map +1 -0
  182. package/dist/jobs/redis/workflow-execution-subscriber-redis.service.d.ts +17 -0
  183. package/dist/jobs/redis/workflow-execution-subscriber-redis.service.d.ts.map +1 -0
  184. package/dist/jobs/redis/workflow-execution-subscriber-redis.service.js +52 -0
  185. package/dist/jobs/redis/workflow-execution-subscriber-redis.service.js.map +1 -0
  186. package/dist/repository/security-rule.repository.d.ts +1 -0
  187. package/dist/repository/security-rule.repository.d.ts.map +1 -1
  188. package/dist/repository/security-rule.repository.js +28 -7
  189. package/dist/repository/security-rule.repository.js.map +1 -1
  190. package/dist/repository/workflow-definition.repository.d.ts +12 -0
  191. package/dist/repository/workflow-definition.repository.d.ts.map +1 -0
  192. package/dist/repository/workflow-definition.repository.js +39 -0
  193. package/dist/repository/workflow-definition.repository.js.map +1 -0
  194. package/dist/repository/workflow-execution-artifact.repository.d.ts +12 -0
  195. package/dist/repository/workflow-execution-artifact.repository.d.ts.map +1 -0
  196. package/dist/repository/workflow-execution-artifact.repository.js +39 -0
  197. package/dist/repository/workflow-execution-artifact.repository.js.map +1 -0
  198. package/dist/repository/workflow-execution-log.repository.d.ts +12 -0
  199. package/dist/repository/workflow-execution-log.repository.d.ts.map +1 -0
  200. package/dist/repository/workflow-execution-log.repository.js +39 -0
  201. package/dist/repository/workflow-execution-log.repository.js.map +1 -0
  202. package/dist/repository/workflow-execution.repository.d.ts +12 -0
  203. package/dist/repository/workflow-execution.repository.d.ts.map +1 -0
  204. package/dist/repository/workflow-execution.repository.js +39 -0
  205. package/dist/repository/workflow-execution.repository.js.map +1 -0
  206. package/dist/repository/workflow-secret.repository.d.ts +12 -0
  207. package/dist/repository/workflow-secret.repository.d.ts.map +1 -0
  208. package/dist/repository/workflow-secret.repository.js +39 -0
  209. package/dist/repository/workflow-secret.repository.js.map +1 -0
  210. package/dist/repository/workflow-step-execution.repository.d.ts +12 -0
  211. package/dist/repository/workflow-step-execution.repository.d.ts.map +1 -0
  212. package/dist/repository/workflow-step-execution.repository.js +39 -0
  213. package/dist/repository/workflow-step-execution.repository.js.map +1 -0
  214. package/dist/repository/workflow-trigger-execution.repository.d.ts +12 -0
  215. package/dist/repository/workflow-trigger-execution.repository.d.ts.map +1 -0
  216. package/dist/repository/workflow-trigger-execution.repository.js +39 -0
  217. package/dist/repository/workflow-trigger-execution.repository.js.map +1 -0
  218. package/dist/seeders/module-metadata-seeder.service.d.ts +6 -0
  219. package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
  220. package/dist/seeders/module-metadata-seeder.service.js +141 -0
  221. package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
  222. package/dist/seeders/seed-data/solid-core-metadata.json +11437 -5567
  223. package/dist/services/chatter-message.service.d.ts.map +1 -1
  224. package/dist/services/chatter-message.service.js +1 -1
  225. package/dist/services/chatter-message.service.js.map +1 -1
  226. package/dist/services/crud-helper.service.d.ts +16 -1
  227. package/dist/services/crud-helper.service.d.ts.map +1 -1
  228. package/dist/services/crud-helper.service.js +99 -22
  229. package/dist/services/crud-helper.service.js.map +1 -1
  230. package/dist/services/crud.service.d.ts +1 -0
  231. package/dist/services/crud.service.d.ts.map +1 -1
  232. package/dist/services/crud.service.js +15 -0
  233. package/dist/services/crud.service.js.map +1 -1
  234. package/dist/services/solid-introspect.service.d.ts +1 -0
  235. package/dist/services/solid-introspect.service.d.ts.map +1 -1
  236. package/dist/services/solid-introspect.service.js +12 -0
  237. package/dist/services/solid-introspect.service.js.map +1 -1
  238. package/dist/services/view-metadata.service.d.ts +5 -1
  239. package/dist/services/view-metadata.service.d.ts.map +1 -1
  240. package/dist/services/view-metadata.service.js +63 -14
  241. package/dist/services/view-metadata.service.js.map +1 -1
  242. package/dist/services/workflow/nodes/for-each.node.d.ts +6 -0
  243. package/dist/services/workflow/nodes/for-each.node.d.ts.map +1 -0
  244. package/dist/services/workflow/nodes/for-each.node.js +95 -0
  245. package/dist/services/workflow/nodes/for-each.node.js.map +1 -0
  246. package/dist/services/workflow/nodes/http-request.node.d.ts +13 -0
  247. package/dist/services/workflow/nodes/http-request.node.d.ts.map +1 -0
  248. package/dist/services/workflow/nodes/http-request.node.js +549 -0
  249. package/dist/services/workflow/nodes/http-request.node.js.map +1 -0
  250. package/dist/services/workflow/nodes/if.node.d.ts +6 -0
  251. package/dist/services/workflow/nodes/if.node.d.ts.map +1 -0
  252. package/dist/services/workflow/nodes/if.node.js +93 -0
  253. package/dist/services/workflow/nodes/if.node.js.map +1 -0
  254. package/dist/services/workflow/nodes/log-write.node.d.ts +6 -0
  255. package/dist/services/workflow/nodes/log-write.node.d.ts.map +1 -0
  256. package/dist/services/workflow/nodes/log-write.node.js +229 -0
  257. package/dist/services/workflow/nodes/log-write.node.js.map +1 -0
  258. package/dist/services/workflow/nodes/parallel.node.d.ts +6 -0
  259. package/dist/services/workflow/nodes/parallel.node.d.ts.map +1 -0
  260. package/dist/services/workflow/nodes/parallel.node.js +76 -0
  261. package/dist/services/workflow/nodes/parallel.node.js.map +1 -0
  262. package/dist/services/workflow/nodes/runtime-python.node.d.ts +13 -0
  263. package/dist/services/workflow/nodes/runtime-python.node.d.ts.map +1 -0
  264. package/dist/services/workflow/nodes/runtime-python.node.js +522 -0
  265. package/dist/services/workflow/nodes/runtime-python.node.js.map +1 -0
  266. package/dist/services/workflow/nodes/sequential.node.d.ts +6 -0
  267. package/dist/services/workflow/nodes/sequential.node.d.ts.map +1 -0
  268. package/dist/services/workflow/nodes/sequential.node.js +61 -0
  269. package/dist/services/workflow/nodes/sequential.node.js.map +1 -0
  270. package/dist/services/workflow/nodes/solidx-api.helpers.d.ts +25 -0
  271. package/dist/services/workflow/nodes/solidx-api.helpers.d.ts.map +1 -0
  272. package/dist/services/workflow/nodes/solidx-api.helpers.js +143 -0
  273. package/dist/services/workflow/nodes/solidx-api.helpers.js.map +1 -0
  274. package/dist/services/workflow/nodes/solidx-crud.nodes.d.ts +48 -0
  275. package/dist/services/workflow/nodes/solidx-crud.nodes.d.ts.map +1 -0
  276. package/dist/services/workflow/nodes/solidx-crud.nodes.js +475 -0
  277. package/dist/services/workflow/nodes/solidx-crud.nodes.js.map +1 -0
  278. package/dist/services/workflow/nodes/solidx-login.node.d.ts +6 -0
  279. package/dist/services/workflow/nodes/solidx-login.node.d.ts.map +1 -0
  280. package/dist/services/workflow/nodes/solidx-login.node.js +208 -0
  281. package/dist/services/workflow/nodes/solidx-login.node.js.map +1 -0
  282. package/dist/services/workflow/nodes/solidx-send-email.node.d.ts +11 -0
  283. package/dist/services/workflow/nodes/solidx-send-email.node.d.ts.map +1 -0
  284. package/dist/services/workflow/nodes/solidx-send-email.node.js +437 -0
  285. package/dist/services/workflow/nodes/solidx-send-email.node.js.map +1 -0
  286. package/dist/services/workflow/nodes/solidx-send-sms.node.d.ts +10 -0
  287. package/dist/services/workflow/nodes/solidx-send-sms.node.d.ts.map +1 -0
  288. package/dist/services/workflow/nodes/solidx-send-sms.node.js +347 -0
  289. package/dist/services/workflow/nodes/solidx-send-sms.node.js.map +1 -0
  290. package/dist/services/workflow/nodes/switch.node.d.ts +7 -0
  291. package/dist/services/workflow/nodes/switch.node.d.ts.map +1 -0
  292. package/dist/services/workflow/nodes/switch.node.js +113 -0
  293. package/dist/services/workflow/nodes/switch.node.js.map +1 -0
  294. package/dist/services/workflow/workflow-definition-metadata-sync.service.d.ts +19 -0
  295. package/dist/services/workflow/workflow-definition-metadata-sync.service.d.ts.map +1 -0
  296. package/dist/services/workflow/workflow-definition-metadata-sync.service.js +187 -0
  297. package/dist/services/workflow/workflow-definition-metadata-sync.service.js.map +1 -0
  298. package/dist/services/workflow/workflow-definition-validator.service.d.ts +13 -0
  299. package/dist/services/workflow/workflow-definition-validator.service.d.ts.map +1 -0
  300. package/dist/services/workflow/workflow-definition-validator.service.js +163 -0
  301. package/dist/services/workflow/workflow-definition-validator.service.js.map +1 -0
  302. package/dist/services/workflow/workflow-execution-writer.service.d.ts +26 -0
  303. package/dist/services/workflow/workflow-execution-writer.service.d.ts.map +1 -0
  304. package/dist/services/workflow/workflow-execution-writer.service.js +191 -0
  305. package/dist/services/workflow/workflow-execution-writer.service.js.map +1 -0
  306. package/dist/services/workflow/workflow-expression.service.d.ts +14 -0
  307. package/dist/services/workflow/workflow-expression.service.d.ts.map +1 -0
  308. package/dist/services/workflow/workflow-expression.service.js +152 -0
  309. package/dist/services/workflow/workflow-expression.service.js.map +1 -0
  310. package/dist/services/workflow/workflow-invocation.service.d.ts +11 -0
  311. package/dist/services/workflow/workflow-invocation.service.d.ts.map +1 -0
  312. package/dist/services/workflow/workflow-invocation.service.js +37 -0
  313. package/dist/services/workflow/workflow-invocation.service.js.map +1 -0
  314. package/dist/services/workflow/workflow-node-registry.service.d.ts +18 -0
  315. package/dist/services/workflow/workflow-node-registry.service.d.ts.map +1 -0
  316. package/dist/services/workflow/workflow-node-registry.service.js +110 -0
  317. package/dist/services/workflow/workflow-node-registry.service.js.map +1 -0
  318. package/dist/services/workflow/workflow-runtime.service.d.ts +53 -0
  319. package/dist/services/workflow/workflow-runtime.service.d.ts.map +1 -0
  320. package/dist/services/workflow/workflow-runtime.service.js +541 -0
  321. package/dist/services/workflow/workflow-runtime.service.js.map +1 -0
  322. package/dist/services/workflow/workflow-scheduled-trigger.job.d.ts +10 -0
  323. package/dist/services/workflow/workflow-scheduled-trigger.job.d.ts.map +1 -0
  324. package/dist/services/workflow/workflow-scheduled-trigger.job.js +37 -0
  325. package/dist/services/workflow/workflow-scheduled-trigger.job.js.map +1 -0
  326. package/dist/services/workflow-definition.service.d.ts +52 -0
  327. package/dist/services/workflow-definition.service.d.ts.map +1 -0
  328. package/dist/services/workflow-definition.service.js +251 -0
  329. package/dist/services/workflow-definition.service.js.map +1 -0
  330. package/dist/services/workflow-execution-artifact.service.d.ts +12 -0
  331. package/dist/services/workflow-execution-artifact.service.d.ts.map +1 -0
  332. package/dist/services/workflow-execution-artifact.service.js +38 -0
  333. package/dist/services/workflow-execution-artifact.service.js.map +1 -0
  334. package/dist/services/workflow-execution-log.service.d.ts +12 -0
  335. package/dist/services/workflow-execution-log.service.d.ts.map +1 -0
  336. package/dist/services/workflow-execution-log.service.js +38 -0
  337. package/dist/services/workflow-execution-log.service.js.map +1 -0
  338. package/dist/services/workflow-execution.service.d.ts +12 -0
  339. package/dist/services/workflow-execution.service.d.ts.map +1 -0
  340. package/dist/services/workflow-execution.service.js +38 -0
  341. package/dist/services/workflow-execution.service.js.map +1 -0
  342. package/dist/services/workflow-secret.service.d.ts +25 -0
  343. package/dist/services/workflow-secret.service.d.ts.map +1 -0
  344. package/dist/services/workflow-secret.service.js +152 -0
  345. package/dist/services/workflow-secret.service.js.map +1 -0
  346. package/dist/services/workflow-step-execution.service.d.ts +12 -0
  347. package/dist/services/workflow-step-execution.service.d.ts.map +1 -0
  348. package/dist/services/workflow-step-execution.service.js +38 -0
  349. package/dist/services/workflow-step-execution.service.js.map +1 -0
  350. package/dist/services/workflow-trigger-execution.service.d.ts +12 -0
  351. package/dist/services/workflow-trigger-execution.service.d.ts.map +1 -0
  352. package/dist/services/workflow-trigger-execution.service.js +38 -0
  353. package/dist/services/workflow-trigger-execution.service.js.map +1 -0
  354. package/dist/solid-core.module.d.ts.map +1 -1
  355. package/dist/solid-core.module.js +117 -0
  356. package/dist/solid-core.module.js.map +1 -1
  357. package/dist/transformers/empty-string-to-null-transformer.d.ts +4 -0
  358. package/dist/transformers/empty-string-to-null-transformer.d.ts.map +1 -0
  359. package/dist/transformers/empty-string-to-null-transformer.js +12 -0
  360. package/dist/transformers/empty-string-to-null-transformer.js.map +1 -0
  361. package/dist/types/workflow-dsl.types.d.ts +277 -0
  362. package/dist/types/workflow-dsl.types.d.ts.map +1 -0
  363. package/dist/types/workflow-dsl.types.js +3 -0
  364. package/dist/types/workflow-dsl.types.js.map +1 -0
  365. package/dist/types/workflow-execution-queue.types.d.ts +4 -0
  366. package/dist/types/workflow-execution-queue.types.d.ts.map +1 -0
  367. package/dist/types/workflow-execution-queue.types.js +3 -0
  368. package/dist/types/workflow-execution-queue.types.js.map +1 -0
  369. package/package.json +3 -2
  370. package/src/controllers/workflow-definition.controller.ts +141 -0
  371. package/src/controllers/workflow-execution-artifact.controller.ts +93 -0
  372. package/src/controllers/workflow-execution-log.controller.ts +93 -0
  373. package/src/controllers/workflow-execution.controller.ts +126 -0
  374. package/src/controllers/workflow-secret.controller.ts +90 -0
  375. package/src/controllers/workflow-step-execution.controller.ts +93 -0
  376. package/src/controllers/workflow-trigger-execution.controller.ts +93 -0
  377. package/src/decorators/workflow-field-data-provider.decorator.ts +7 -0
  378. package/src/decorators/workflow-node-provider.decorator.ts +14 -0
  379. package/src/dtos/create-workflow-definition.dto.ts +60 -0
  380. package/src/dtos/create-workflow-execution-artifact.dto.ts +99 -0
  381. package/src/dtos/create-workflow-execution-log.dto.ts +80 -0
  382. package/src/dtos/create-workflow-execution.dto.ts +137 -0
  383. package/src/dtos/create-workflow-secret.dto.ts +44 -0
  384. package/src/dtos/create-workflow-step-execution.dto.ts +123 -0
  385. package/src/dtos/create-workflow-trigger-execution.dto.ts +114 -0
  386. package/src/dtos/execute-workflow.dto.ts +6 -0
  387. package/src/dtos/update-workflow-definition.dto.ts +67 -0
  388. package/src/dtos/update-workflow-execution-artifact.dto.ts +105 -0
  389. package/src/dtos/update-workflow-execution-log.dto.ts +87 -0
  390. package/src/dtos/update-workflow-execution.dto.ts +144 -0
  391. package/src/dtos/update-workflow-secret.dto.ts +53 -0
  392. package/src/dtos/update-workflow-step-execution.dto.ts +132 -0
  393. package/src/dtos/update-workflow-trigger-execution.dto.ts +122 -0
  394. package/src/dtos/validate-workflow-definition.dto.ts +3 -0
  395. package/src/entities/saved-filters.entity.ts +3 -3
  396. package/src/entities/workflow-definition.entity.ts +43 -0
  397. package/src/entities/workflow-execution-artifact.entity.ts +72 -0
  398. package/src/entities/workflow-execution-log.entity.ts +58 -0
  399. package/src/entities/workflow-execution.entity.ts +82 -0
  400. package/src/entities/workflow-secret.entity.ts +33 -0
  401. package/src/entities/workflow-step-execution.entity.ts +88 -0
  402. package/src/entities/workflow-trigger-execution.entity.ts +82 -0
  403. package/src/factories/sms.factory.ts +4 -1
  404. package/src/helpers/solid-registry.ts +21 -1
  405. package/src/index.ts +55 -0
  406. package/src/interfaces/workflow-node-handler.interface.ts +10 -0
  407. package/src/interfaces.ts +29 -0
  408. package/src/jobs/database/workflow-execution-publisher-database.service.ts +24 -0
  409. package/src/jobs/database/workflow-execution-queue-options-database.ts +9 -0
  410. package/src/jobs/database/workflow-execution-subscriber-database.service.ts +44 -0
  411. package/src/jobs/rabbitmq/workflow-execution-publisher.service.ts +24 -0
  412. package/src/jobs/rabbitmq/workflow-execution-queue-options.ts +9 -0
  413. package/src/jobs/rabbitmq/workflow-execution-subscriber.service.ts +42 -0
  414. package/src/jobs/redis/workflow-execution-publisher-redis.service.ts +24 -0
  415. package/src/jobs/redis/workflow-execution-queue-options-redis.ts +9 -0
  416. package/src/jobs/redis/workflow-execution-subscriber-redis.service.ts +42 -0
  417. package/src/repository/security-rule.repository.ts +52 -10
  418. package/src/repository/workflow-definition.repository.ts +19 -0
  419. package/src/repository/workflow-execution-artifact.repository.ts +19 -0
  420. package/src/repository/workflow-execution-log.repository.ts +19 -0
  421. package/src/repository/workflow-execution.repository.ts +19 -0
  422. package/src/repository/workflow-secret.repository.ts +19 -0
  423. package/src/repository/workflow-step-execution.repository.ts +19 -0
  424. package/src/repository/workflow-trigger-execution.repository.ts +19 -0
  425. package/src/seeders/module-metadata-seeder.service.ts +166 -4
  426. package/src/seeders/seed-data/solid-core-metadata.json +11437 -5567
  427. package/src/services/chatter-message.service.ts +5 -1
  428. package/src/services/crud-helper.service.ts +220 -22
  429. package/src/services/crud.service.ts +30 -0
  430. package/src/services/solid-introspect.service.ts +19 -0
  431. package/src/services/view-metadata.service.ts +87 -21
  432. package/src/services/workflow/nodes/for-each.node.ts +97 -0
  433. package/src/services/workflow/nodes/http-request.node.ts +624 -0
  434. package/src/services/workflow/nodes/if.node.ts +93 -0
  435. package/src/services/workflow/nodes/log-write.node.ts +232 -0
  436. package/src/services/workflow/nodes/parallel.node.ts +81 -0
  437. package/src/services/workflow/nodes/runtime-python.node.ts +571 -0
  438. package/src/services/workflow/nodes/sequential.node.ts +58 -0
  439. package/src/services/workflow/nodes/solidx-api.helpers.ts +205 -0
  440. package/src/services/workflow/nodes/solidx-crud.nodes.ts +511 -0
  441. package/src/services/workflow/nodes/solidx-login.node.ts +222 -0
  442. package/src/services/workflow/nodes/solidx-send-email.node.ts +489 -0
  443. package/src/services/workflow/nodes/solidx-send-sms.node.ts +377 -0
  444. package/src/services/workflow/nodes/switch.node.ts +125 -0
  445. package/src/services/workflow/workflow-definition-metadata-sync.service.ts +196 -0
  446. package/src/services/workflow/workflow-definition-validator.service.ts +223 -0
  447. package/src/services/workflow/workflow-execution-writer.service.ts +244 -0
  448. package/src/services/workflow/workflow-expression.service.ts +175 -0
  449. package/src/services/workflow/workflow-invocation.service.ts +39 -0
  450. package/src/services/workflow/workflow-node-registry.service.ts +141 -0
  451. package/src/services/workflow/workflow-runtime.service.ts +699 -0
  452. package/src/services/workflow/workflow-scheduled-trigger.job.ts +33 -0
  453. package/src/services/workflow-definition.service.ts +293 -0
  454. package/src/services/workflow-execution-artifact.service.ts +20 -0
  455. package/src/services/workflow-execution-log.service.ts +20 -0
  456. package/src/services/workflow-execution.service.ts +20 -0
  457. package/src/services/workflow-secret.service.ts +161 -0
  458. package/src/services/workflow-step-execution.service.ts +20 -0
  459. package/src/services/workflow-trigger-execution.service.ts +20 -0
  460. package/src/solid-core.module.ts +124 -0
  461. package/src/transformers/empty-string-to-null-transformer.ts +11 -0
  462. package/src/types/workflow-dsl.types.ts +987 -0
  463. package/src/types/workflow-execution-queue.types.ts +3 -0
@@ -0,0 +1,24 @@
1
+ import { Injectable } from '@nestjs/common';
2
+
3
+ import { QueuesModuleOptions } from '../../interfaces';
4
+ import { WorkflowExecutionQueuePayload } from '../../types/workflow-execution-queue.types';
5
+ import { MqMessageQueueService } from '../../services/mq-message-queue.service';
6
+ import { MqMessageService } from '../../services/mq-message.service';
7
+ import { RabbitMqPublisher } from '../../services/queues/rabbitmq-publisher.service';
8
+ import workflowExecutionQueueOptions from './workflow-execution-queue-options';
9
+
10
+ @Injectable()
11
+ export class WorkflowExecutionPublisherRabbitmq extends RabbitMqPublisher<WorkflowExecutionQueuePayload> {
12
+ constructor(
13
+ protected readonly mqMessageService: MqMessageService,
14
+ protected readonly mqMessageQueueService: MqMessageQueueService,
15
+ ) {
16
+ super(mqMessageService, mqMessageQueueService);
17
+ }
18
+
19
+ options(): QueuesModuleOptions {
20
+ return {
21
+ ...workflowExecutionQueueOptions,
22
+ };
23
+ }
24
+ }
@@ -0,0 +1,9 @@
1
+ import { BrokerType } from '../../interfaces';
2
+
3
+ const QUEUE_NAME = 'solid_workflow_execution_queue_rabbitmq';
4
+
5
+ export default {
6
+ name: QUEUE_NAME,
7
+ type: BrokerType.RabbitMQ,
8
+ queueName: QUEUE_NAME,
9
+ };
@@ -0,0 +1,42 @@
1
+ import { Injectable, Logger } from '@nestjs/common';
2
+
3
+ import { QueueMessage } from '../../interfaces/mq';
4
+ import { QueuesModuleOptions } from '../../interfaces';
5
+ import { WorkflowExecutionQueuePayload } from '../../types/workflow-execution-queue.types';
6
+ import { MqMessageQueueService } from '../../services/mq-message-queue.service';
7
+ import { MqMessageService } from '../../services/mq-message.service';
8
+ import { RabbitMqSubscriber } from '../../services/queues/rabbitmq-subscriber.service';
9
+ import { WorkflowRuntimeService } from '../../services/workflow/workflow-runtime.service';
10
+ import workflowExecutionQueueOptions from './workflow-execution-queue-options';
11
+
12
+ @Injectable()
13
+ export class WorkflowExecutionSubscriberRabbitmq extends RabbitMqSubscriber<WorkflowExecutionQueuePayload> {
14
+ private readonly workflowExecutionLogger = new Logger(WorkflowExecutionSubscriberRabbitmq.name);
15
+
16
+ constructor(
17
+ readonly mqMessageService: MqMessageService,
18
+ readonly mqMessageQueueService: MqMessageQueueService,
19
+ private readonly workflowRuntimeService: WorkflowRuntimeService,
20
+ ) {
21
+ super(mqMessageService, mqMessageQueueService);
22
+ }
23
+
24
+ options(): QueuesModuleOptions {
25
+ return {
26
+ ...workflowExecutionQueueOptions,
27
+ };
28
+ }
29
+
30
+ async subscribe(message: QueueMessage<WorkflowExecutionQueuePayload>) {
31
+ const payload = message.payload;
32
+ this.workflowExecutionLogger.log(
33
+ `Processing queued workflow execution message ${message.messageId ?? '<unknown>'}.`,
34
+ );
35
+
36
+ if (payload.executionId !== undefined && payload.executionId !== null) {
37
+ return this.workflowRuntimeService.executeEnqueuedExecution(payload.executionId);
38
+ }
39
+
40
+ throw new Error('Workflow execution queue payload must include executionId.');
41
+ }
42
+ }
@@ -0,0 +1,24 @@
1
+ import { Injectable } from '@nestjs/common';
2
+
3
+ import { QueuesModuleOptions } from '../../interfaces';
4
+ import { WorkflowExecutionQueuePayload } from '../../types/workflow-execution-queue.types';
5
+ import { MqMessageQueueService } from '../../services/mq-message-queue.service';
6
+ import { MqMessageService } from '../../services/mq-message.service';
7
+ import { RedisPublisher } from '../../services/queues/redis-publisher.service';
8
+ import workflowExecutionQueueOptions from './workflow-execution-queue-options-redis';
9
+
10
+ @Injectable()
11
+ export class WorkflowExecutionPublisherRedis extends RedisPublisher<WorkflowExecutionQueuePayload> {
12
+ constructor(
13
+ protected readonly mqMessageService: MqMessageService,
14
+ protected readonly mqMessageQueueService: MqMessageQueueService,
15
+ ) {
16
+ super(mqMessageService, mqMessageQueueService);
17
+ }
18
+
19
+ options(): QueuesModuleOptions {
20
+ return {
21
+ ...workflowExecutionQueueOptions,
22
+ };
23
+ }
24
+ }
@@ -0,0 +1,9 @@
1
+ import { BrokerType } from '../../interfaces';
2
+
3
+ const QUEUE_NAME = 'solid_workflow_execution_queue_redis';
4
+
5
+ export default {
6
+ name: QUEUE_NAME,
7
+ type: BrokerType.Redis,
8
+ queueName: QUEUE_NAME,
9
+ };
@@ -0,0 +1,42 @@
1
+ import { Injectable, Logger } from '@nestjs/common';
2
+
3
+ import { QueueMessage } from '../../interfaces/mq';
4
+ import { QueuesModuleOptions } from '../../interfaces';
5
+ import { WorkflowExecutionQueuePayload } from '../../types/workflow-execution-queue.types';
6
+ import { MqMessageQueueService } from '../../services/mq-message-queue.service';
7
+ import { MqMessageService } from '../../services/mq-message.service';
8
+ import { RedisSubscriber } from '../../services/queues/redis-subscriber.service';
9
+ import { WorkflowRuntimeService } from '../../services/workflow/workflow-runtime.service';
10
+ import workflowExecutionQueueOptions from './workflow-execution-queue-options-redis';
11
+
12
+ @Injectable()
13
+ export class WorkflowExecutionSubscriberRedis extends RedisSubscriber<WorkflowExecutionQueuePayload> {
14
+ private readonly workflowExecutionLogger = new Logger(WorkflowExecutionSubscriberRedis.name);
15
+
16
+ constructor(
17
+ readonly mqMessageService: MqMessageService,
18
+ readonly mqMessageQueueService: MqMessageQueueService,
19
+ private readonly workflowRuntimeService: WorkflowRuntimeService,
20
+ ) {
21
+ super(mqMessageService, mqMessageQueueService);
22
+ }
23
+
24
+ options(): QueuesModuleOptions {
25
+ return {
26
+ ...workflowExecutionQueueOptions,
27
+ };
28
+ }
29
+
30
+ async subscribe(message: QueueMessage<WorkflowExecutionQueuePayload>) {
31
+ const payload = message.payload;
32
+ this.workflowExecutionLogger.log(
33
+ `Processing queued workflow execution message ${message.messageId ?? '<unknown>'}.`,
34
+ );
35
+
36
+ if (payload.executionId !== undefined && payload.executionId !== null) {
37
+ return this.workflowRuntimeService.executeEnqueuedExecution(payload.executionId);
38
+ }
39
+
40
+ throw new Error('Workflow execution queue payload must include executionId.');
41
+ }
42
+ }
@@ -1,4 +1,4 @@
1
- import { Injectable } from '@nestjs/common';
1
+ import { Injectable, InternalServerErrorException } from '@nestjs/common';
2
2
  import { CreateSecurityRuleDto } from 'src/dtos/create-security-rule.dto';
3
3
  import { SecurityRuleConfig } from 'src/dtos/security-rule-config.dto';
4
4
  import { UpdateSecurityRuleDto } from 'src/dtos/update-security-rule.dto';
@@ -64,16 +64,37 @@ export class SecurityRuleRepository extends SolidBaseRepository<SecurityRule> {
64
64
  }
65
65
 
66
66
 
67
+ // A rule whose filters contribute no conditions is dangerous here: TypeORM renders an empty
68
+ // Brackets as "1=1" (always true), so such a rule would be OR'd in as "match everything" and
69
+ // silently void the entire security filter. Test emptiness explicitly -- {} and [] are both
70
+ // truthy, so the previous `if (evaluatedRule.filters)` check let them through.
71
+ const applicableRules = evaluatedRules.filter(rule => rule && this.hasFilterConditions(rule.filters));
72
+
73
+ if (!applicableRules.length) {
74
+ // We only reach here when security rules exist for this model/role (there is an early
75
+ // return above otherwise), so a restriction WAS intended. Fail closed and be loud:
76
+ // denying silently would surface as a mysteriously empty list, and allowing would be a
77
+ // full row-level-security bypass.
78
+ const message = `Security rules for model '${modelSingularName}' produced no filter conditions. `
79
+ + `Check the securityRuleConfig / securityRuleConfigProvider for rules with empty filters. `
80
+ + `Denying access rather than returning unrestricted results.`;
81
+ this.logger.error(message);
82
+ throw new InternalServerErrorException(message);
83
+ }
84
+
67
85
  // Apply each security rule to the query builder. The rules are combined with OR logic at the top level.
68
- qb.andWhere(new Brackets(async (outerQb) => {
69
- for (const evaluatedRule of evaluatedRules) {
70
- if (evaluatedRule && evaluatedRule.filters) {
71
- outerQb.orWhere( // combine each rule-group with OR at the outer level
72
- new Brackets((innerQb) => {
73
- this.crudHelperService.applyFilters(innerQb, evaluatedRule.filters, securityRuleAlias, qb); // AND within a rule
74
- })
75
- );
76
- }
86
+ qb.andWhere(new Brackets((outerQb) => {
87
+ for (const evaluatedRule of applicableRules) {
88
+ outerQb.orWhere( // combine each rule-group with OR at the outer level
89
+ new Brackets((innerQb) => {
90
+ // NOTE: do NOT wrap this in try/catch. Field validation inside applyFilters
91
+ // throws on an invalid rule field, and letting it propagate aborts the
92
+ // request with no rows -- i.e. it fails closed. Swallowing it would leave
93
+ // this Brackets empty, which TypeORM renders as "1=1", turning the rule into
94
+ // "match everything" and voiding row-level security entirely.
95
+ this.crudHelperService.applyFilters(innerQb, evaluatedRule.filters, securityRuleAlias, qb); // AND within a rule
96
+ })
97
+ );
77
98
  }
78
99
  }));
79
100
 
@@ -84,6 +105,27 @@ export class SecurityRuleRepository extends SolidBaseRepository<SecurityRule> {
84
105
  return configString.replace('$activeUserId', activeUser.sub.toString());
85
106
  }
86
107
 
108
+ /**
109
+ * Does this filter object actually produce at least one WHERE condition?
110
+ *
111
+ * Truthiness is not enough: `{}` and `[]` are truthy but contribute nothing, and an empty
112
+ * Brackets is rendered by TypeORM as "1=1" -- which inside the security rules' OR chain means
113
+ * "match every row". Recurses through $and/$or so `{ $and: [] }` is treated as empty too.
114
+ */
115
+ private hasFilterConditions(filters: any): boolean {
116
+ if (filters === null || filters === undefined) return false;
117
+ if (Array.isArray(filters)) return filters.some(filter => this.hasFilterConditions(filter));
118
+ if (typeof filters !== 'object') return false;
119
+
120
+ return Object.keys(filters).some(key => {
121
+ const normalizedKey = key.replace(/^\[(.*)\]$/, '$1');
122
+ if (normalizedKey === '$and' || normalizedKey === '$or') {
123
+ return this.hasFilterConditions(filters[key]);
124
+ }
125
+ return true; // any other key is a field condition
126
+ });
127
+ }
128
+
87
129
  async toDto(securityRule: SecurityRule): Promise<UpdateSecurityRuleDto> {
88
130
  // load the role and model relations for the security rule
89
131
  let populatedSecurityRule: SecurityRule = securityRule;
@@ -0,0 +1,19 @@
1
+ import { Injectable } from '@nestjs/common';
2
+ import { SecurityRuleRepository } from './security-rule.repository';
3
+ import { SolidBaseRepository } from './solid-base.repository';
4
+ import { RequestContextService } from 'src/services/request-context.service';
5
+ import { DataSource } from 'typeorm';
6
+ import { InjectDataSource } from '@nestjs/typeorm';
7
+ import { WorkflowDefinition } from '../entities/workflow-definition.entity';
8
+
9
+ @Injectable()
10
+ export class WorkflowDefinitionRepository extends SolidBaseRepository<WorkflowDefinition> {
11
+ constructor(
12
+ @InjectDataSource("default")
13
+ readonly dataSource: DataSource,
14
+ readonly requestContextService: RequestContextService,
15
+ readonly securityRuleRepository: SecurityRuleRepository,
16
+ ) {
17
+ super(WorkflowDefinition, dataSource, requestContextService, securityRuleRepository);
18
+ }
19
+ }
@@ -0,0 +1,19 @@
1
+ import { Injectable } from '@nestjs/common';
2
+ import { SecurityRuleRepository } from './security-rule.repository';
3
+ import { SolidBaseRepository } from './solid-base.repository';
4
+ import { RequestContextService } from 'src/services/request-context.service';
5
+ import { DataSource } from 'typeorm';
6
+ import { InjectDataSource } from '@nestjs/typeorm';
7
+ import { WorkflowExecutionArtifact } from '../entities/workflow-execution-artifact.entity';
8
+
9
+ @Injectable()
10
+ export class WorkflowExecutionArtifactRepository extends SolidBaseRepository<WorkflowExecutionArtifact> {
11
+ constructor(
12
+ @InjectDataSource("default")
13
+ readonly dataSource: DataSource,
14
+ readonly requestContextService: RequestContextService,
15
+ readonly securityRuleRepository: SecurityRuleRepository,
16
+ ) {
17
+ super(WorkflowExecutionArtifact, dataSource, requestContextService, securityRuleRepository);
18
+ }
19
+ }
@@ -0,0 +1,19 @@
1
+ import { Injectable } from '@nestjs/common';
2
+ import { SecurityRuleRepository } from './security-rule.repository';
3
+ import { SolidBaseRepository } from './solid-base.repository';
4
+ import { RequestContextService } from 'src/services/request-context.service';
5
+ import { DataSource } from 'typeorm';
6
+ import { InjectDataSource } from '@nestjs/typeorm';
7
+ import { WorkflowExecutionLog } from '../entities/workflow-execution-log.entity';
8
+
9
+ @Injectable()
10
+ export class WorkflowExecutionLogRepository extends SolidBaseRepository<WorkflowExecutionLog> {
11
+ constructor(
12
+ @InjectDataSource("default")
13
+ readonly dataSource: DataSource,
14
+ readonly requestContextService: RequestContextService,
15
+ readonly securityRuleRepository: SecurityRuleRepository,
16
+ ) {
17
+ super(WorkflowExecutionLog, dataSource, requestContextService, securityRuleRepository);
18
+ }
19
+ }
@@ -0,0 +1,19 @@
1
+ import { Injectable } from '@nestjs/common';
2
+ import { SecurityRuleRepository } from './security-rule.repository';
3
+ import { SolidBaseRepository } from './solid-base.repository';
4
+ import { RequestContextService } from 'src/services/request-context.service';
5
+ import { DataSource } from 'typeorm';
6
+ import { InjectDataSource } from '@nestjs/typeorm';
7
+ import { WorkflowExecution } from '../entities/workflow-execution.entity';
8
+
9
+ @Injectable()
10
+ export class WorkflowExecutionRepository extends SolidBaseRepository<WorkflowExecution> {
11
+ constructor(
12
+ @InjectDataSource("default")
13
+ readonly dataSource: DataSource,
14
+ readonly requestContextService: RequestContextService,
15
+ readonly securityRuleRepository: SecurityRuleRepository,
16
+ ) {
17
+ super(WorkflowExecution, dataSource, requestContextService, securityRuleRepository);
18
+ }
19
+ }
@@ -0,0 +1,19 @@
1
+ import { Injectable } from '@nestjs/common';
2
+ import { SecurityRuleRepository } from './security-rule.repository';
3
+ import { SolidBaseRepository } from './solid-base.repository';
4
+ import { RequestContextService } from 'src/services/request-context.service';
5
+ import { DataSource } from 'typeorm';
6
+ import { InjectDataSource } from '@nestjs/typeorm';
7
+ import { WorkflowSecret } from '../entities/workflow-secret.entity';
8
+
9
+ @Injectable()
10
+ export class WorkflowSecretRepository extends SolidBaseRepository<WorkflowSecret> {
11
+ constructor(
12
+ @InjectDataSource("default")
13
+ readonly dataSource: DataSource,
14
+ readonly requestContextService: RequestContextService,
15
+ readonly securityRuleRepository: SecurityRuleRepository,
16
+ ) {
17
+ super(WorkflowSecret, dataSource, requestContextService, securityRuleRepository);
18
+ }
19
+ }
@@ -0,0 +1,19 @@
1
+ import { Injectable } from '@nestjs/common';
2
+ import { SecurityRuleRepository } from './security-rule.repository';
3
+ import { SolidBaseRepository } from './solid-base.repository';
4
+ import { RequestContextService } from 'src/services/request-context.service';
5
+ import { DataSource } from 'typeorm';
6
+ import { InjectDataSource } from '@nestjs/typeorm';
7
+ import { WorkflowStepExecution } from '../entities/workflow-step-execution.entity';
8
+
9
+ @Injectable()
10
+ export class WorkflowStepExecutionRepository extends SolidBaseRepository<WorkflowStepExecution> {
11
+ constructor(
12
+ @InjectDataSource("default")
13
+ readonly dataSource: DataSource,
14
+ readonly requestContextService: RequestContextService,
15
+ readonly securityRuleRepository: SecurityRuleRepository,
16
+ ) {
17
+ super(WorkflowStepExecution, dataSource, requestContextService, securityRuleRepository);
18
+ }
19
+ }
@@ -0,0 +1,19 @@
1
+ import { Injectable } from '@nestjs/common';
2
+ import { SecurityRuleRepository } from './security-rule.repository';
3
+ import { SolidBaseRepository } from './solid-base.repository';
4
+ import { RequestContextService } from 'src/services/request-context.service';
5
+ import { DataSource } from 'typeorm';
6
+ import { InjectDataSource } from '@nestjs/typeorm';
7
+ import { WorkflowTriggerExecution } from '../entities/workflow-trigger-execution.entity';
8
+
9
+ @Injectable()
10
+ export class WorkflowTriggerExecutionRepository extends SolidBaseRepository<WorkflowTriggerExecution> {
11
+ constructor(
12
+ @InjectDataSource("default")
13
+ readonly dataSource: DataSource,
14
+ readonly requestContextService: RequestContextService,
15
+ readonly securityRuleRepository: SecurityRuleRepository,
16
+ ) {
17
+ super(WorkflowTriggerExecution, dataSource, requestContextService, securityRuleRepository);
18
+ }
19
+ }
@@ -3,6 +3,7 @@ import { EventEmitter2 } from '@nestjs/event-emitter';
3
3
  import * as fs from 'fs';
4
4
  import * as os from 'os';
5
5
  import * as path from 'path';
6
+ import { createHash } from 'crypto';
6
7
  import { v4 as uuidv4 } from 'uuid';
7
8
 
8
9
  import { CreateEmailTemplateDto } from 'src/dtos/create-email-template.dto';
@@ -66,6 +67,7 @@ import { FieldMetadata } from 'src/entities/field-metadata.entity';
66
67
  import { ModelMetadata } from 'src/entities/model-metadata.entity';
67
68
  import { PermissionMetadata } from 'src/entities/permission-metadata.entity';
68
69
  import { ViewMetadata } from 'src/entities/view-metadata.entity';
70
+ import { WorkflowDefinition } from 'src/entities/workflow-definition.entity';
69
71
  import { EventDetails, EventType, ModuleMetadataSeederEventPayload } from 'src/interfaces';
70
72
 
71
73
  /**
@@ -236,10 +238,15 @@ export class ModuleMetadataSeederService {
236
238
  const moduleModelFieldCounts = await this.timeOperation('seed-module-model-fields', () => this.seedModuleModelFields(moduleMetadata), { moduleName: moduleMetadata.name, component: 'module-model-fields' });
237
239
  console.log(`${this.formatSeedResult(moduleMetadata.name, 'Module/Model/Fields', moduleModelFieldCounts)}`);
238
240
 
239
- currentStep = 'seedLocales';
240
- this.logger.log(`Seeding Locales`);
241
- const localeCounts = await this.seedLocales(overallMetadata);
242
- console.log(`${this.formatSeedResult(moduleMetadata.name, 'Locales', localeCounts)}`);
241
+ currentStep = 'seedWorkflowDefinitions';
242
+ this.logger.log(`Seeding Workflow Definitions`);
243
+ const workflowDefinitionCounts = await this.timeOperation('seed-workflow-definitions', () => this.seedWorkflowDefinitions(moduleMetadata, overallMetadata), { moduleName: moduleMetadata.name, component: 'workflow-definitions' });
244
+ console.log(`${this.formatSeedResult(moduleMetadata.name, 'Workflow Definitions', workflowDefinitionCounts)}`);
245
+
246
+ currentStep = 'seedLocales';
247
+ this.logger.log(`Seeding Locales`);
248
+ const localeCounts = await this.seedLocales(overallMetadata);
249
+ console.log(`${this.formatSeedResult(moduleMetadata.name, 'Locales', localeCounts)}`);
243
250
 
244
251
  currentStep = 'seedPermissions';
245
252
  this.logger.log(`Seeding Permissions`);
@@ -550,6 +557,28 @@ export class ModuleMetadataSeederService {
550
557
  return { pruned, upserted: savedFilters.length };
551
558
  }
552
559
 
560
+ private async seedWorkflowDefinitions(moduleMetadata: CreateModuleMetadataDto, overallMetadata: any): Promise<{ pruned: number; upserted: number }> {
561
+ const workflowDefinitions = this.getSeedArray<any>(overallMetadata?.workflowDefinitions)
562
+ .map((definition) => ({
563
+ ...definition,
564
+ moduleUserKey: definition.moduleUserKey ?? moduleMetadata.name,
565
+ definitionYaml: this.resolveSeedFileBackedWorkflowDefinitionYaml(definition.definitionYaml, overallMetadata?.__seedFilePath),
566
+ }));
567
+ const pruned = this.enablePruning ? await this.timeOperation('prune-workflow-definitions', () => this.pruneWorkflowDefinitions(workflowDefinitions, moduleMetadata.name), {
568
+ moduleName: moduleMetadata.name,
569
+ component: 'workflow-definitions',
570
+ serviceCall: 'pruneWorkflowDefinitions',
571
+ }) : 0;
572
+ if (workflowDefinitions.length > 0) {
573
+ await this.timeOperation('handle-workflow-definitions', () => this.handleSeedWorkflowDefinitions(workflowDefinitions), {
574
+ moduleName: moduleMetadata.name,
575
+ component: 'workflow-definitions',
576
+ serviceCall: 'handleSeedWorkflowDefinitions',
577
+ });
578
+ }
579
+ return { pruned, upserted: workflowDefinitions.length };
580
+ }
581
+
553
582
  private async seedListOfValues(moduleMetadata: CreateModuleMetadataDto, overallMetadata: any): Promise<{ pruned: number; upserted: number }> {
554
583
  const listOfValues = this.getSeedArray<CreateListOfValuesDto>(overallMetadata?.listOfValues);
555
584
  const pruned = this.enablePruning ? await this.timeOperation('prune-list-of-values', () => this.pruneListOfValues(listOfValues, moduleMetadata.name), {
@@ -785,6 +814,7 @@ export class ModuleMetadataSeederService {
785
814
 
786
815
  if (fs.existsSync(fullPath)) {
787
816
  const overallMetadata = JSON.parse(fs.readFileSync(fullPath, 'utf-8'));
817
+ overallMetadata.__seedFilePath = fullPath;
788
818
  seedDataFiles.push(overallMetadata);
789
819
  }
790
820
  }
@@ -792,6 +822,28 @@ export class ModuleMetadataSeederService {
792
822
  return seedDataFiles;
793
823
  }
794
824
 
825
+ private resolveSeedFileBackedWorkflowDefinitionYaml(definitionYaml: string, seedFilePath?: string): string {
826
+ if (typeof definitionYaml !== 'string' || !definitionYaml.startsWith('file:')) {
827
+ return definitionYaml;
828
+ }
829
+
830
+ if (!seedFilePath) {
831
+ throw new Error(`Cannot resolve workflow definition YAML file reference "${definitionYaml}" because the seed file path is unavailable.`);
832
+ }
833
+
834
+ const relativePath = definitionYaml.slice('file:'.length).trim();
835
+ if (!relativePath) {
836
+ throw new Error(`Cannot resolve workflow definition YAML file reference "${definitionYaml}" because no relative path was provided.`);
837
+ }
838
+
839
+ const resolvedPath = path.resolve(path.dirname(seedFilePath), relativePath);
840
+ if (!fs.existsSync(resolvedPath)) {
841
+ throw new Error(`Workflow definition YAML file "${resolvedPath}" referenced from "${seedFilePath}" does not exist.`);
842
+ }
843
+
844
+ return fs.readFileSync(resolvedPath, 'utf-8');
845
+ }
846
+
795
847
  // OK
796
848
  private async seedGlobalMetadata() {
797
849
  this.logger.log(`Seeding Permissions`);
@@ -2147,6 +2199,52 @@ export class ModuleMetadataSeederService {
2147
2199
  }
2148
2200
  }
2149
2201
 
2202
+ private async handleSeedWorkflowDefinitions(workflowDefinitions: any[]) {
2203
+ if (!workflowDefinitions || workflowDefinitions.length === 0) {
2204
+ this.logger.debug(`No workflow definitions found to seed`);
2205
+ return;
2206
+ }
2207
+
2208
+ const repo = this.dataSource.getRepository(WorkflowDefinition);
2209
+ for (const definition of workflowDefinitions) {
2210
+ const moduleMetadata = await this.getModuleByUserKeyCached(definition.moduleUserKey, {
2211
+ moduleName: definition.moduleUserKey,
2212
+ component: 'workflow-definitions',
2213
+ details: `module=${definition.moduleUserKey}`,
2214
+ });
2215
+
2216
+ if (!moduleMetadata) {
2217
+ throw new Error(`Cannot seed workflow definition "${definition.key}": module metadata "${definition.moduleUserKey}" was not found.`);
2218
+ }
2219
+
2220
+ const existing = await repo.findOne({
2221
+ where: {
2222
+ key: definition.key,
2223
+ } as any,
2224
+ });
2225
+ const payload = repo.create({
2226
+ ...existing,
2227
+ key: definition.key,
2228
+ moduleMetadata,
2229
+ displayName: definition.displayName,
2230
+ namespace: definition.namespace,
2231
+ description: definition.description,
2232
+ status: definition.status ?? 'active',
2233
+ definitionVersion: definition.definitionVersion,
2234
+ definitionChecksum: this.workflowDefinitionChecksum(definition.definitionYaml),
2235
+ definitionYaml: definition.definitionYaml,
2236
+ tags: definition.tags,
2237
+ });
2238
+
2239
+ await this.timeOperation('workflow-definition-save', () => repo.save(payload), {
2240
+ moduleName: definition.moduleUserKey,
2241
+ component: 'workflow-definitions',
2242
+ serviceCall: 'workflowDefinitionRepository.save',
2243
+ details: `workflow=${definition.key}`,
2244
+ });
2245
+ }
2246
+ }
2247
+
2150
2248
  private async handleSeedLocales(localesDto: CreateLocaleDto[]) {
2151
2249
  if (!localesDto || localesDto.length === 0) {
2152
2250
  this.logger.debug(`No locales found to seed`);
@@ -2396,6 +2494,49 @@ export class ModuleMetadataSeederService {
2396
2494
  return 0;
2397
2495
  }
2398
2496
 
2497
+ private async pruneWorkflowDefinitions(workflowDefinitionsDto: any[] | undefined, moduleName?: string): Promise<number> {
2498
+ if (!moduleName) {
2499
+ this.logger.warn(`Skipping workflow definition prune: missing module name in metadata.`);
2500
+ return 0;
2501
+ }
2502
+ const workflowDefinitions = workflowDefinitionsDto ?? [];
2503
+
2504
+ const module = await this.getModuleByUserKeyCached(moduleName, {
2505
+ moduleName,
2506
+ component: 'workflow-definitions',
2507
+ details: `module=${moduleName}`,
2508
+ });
2509
+ if (!module) {
2510
+ this.logger.warn(`Skipping workflow definition prune: module not found for ${moduleName}.`);
2511
+ return 0;
2512
+ }
2513
+
2514
+ const workflowKeys = [...new Set(workflowDefinitions.map(dto => dto.key).filter(Boolean))];
2515
+ const repo = this.dataSource.getRepository(WorkflowDefinition);
2516
+ const idsToDeleteQuery = repo
2517
+ .createQueryBuilder('workflowDefinition')
2518
+ .select('workflowDefinition.id', 'id')
2519
+ .innerJoin('workflowDefinition.moduleMetadata', 'moduleMetadata')
2520
+ .where('moduleMetadata.id = :moduleId', { moduleId: module.id });
2521
+
2522
+ if (workflowKeys.length > 0) {
2523
+ idsToDeleteQuery.andWhere('workflowDefinition.key NOT IN (:...workflowKeys)', { workflowKeys });
2524
+ }
2525
+
2526
+ const rows = await idsToDeleteQuery.getRawMany();
2527
+ const ids = rows.map((row) => row.id);
2528
+ if (ids.length > 0) {
2529
+ const result = await repo
2530
+ .createQueryBuilder()
2531
+ .delete()
2532
+ .from(WorkflowDefinition)
2533
+ .whereInIds(ids)
2534
+ .execute();
2535
+ return result.affected ?? 0;
2536
+ }
2537
+ return 0;
2538
+ }
2539
+
2399
2540
  private async pruneListOfValues(listOfValuesDto: CreateListOfValuesDto[] | undefined, moduleName?: string): Promise<number> {
2400
2541
  if (!moduleName) {
2401
2542
  this.logger.warn(`Skipping list of values prune: missing module name in metadata.`);
@@ -2824,4 +2965,25 @@ export class ModuleMetadataSeederService {
2824
2965
  return `✔ [${moduleName}] ${label} seeded (upserted ${counts.upserted})`;
2825
2966
  }
2826
2967
 
2968
+ private workflowDefinitionChecksum(value: any): string {
2969
+ return createHash('sha256')
2970
+ .update(typeof value === 'string' ? value : this.stableStringify(value))
2971
+ .digest('hex');
2972
+ }
2973
+
2974
+ private stableStringify(value: any): string {
2975
+ if (Array.isArray(value)) {
2976
+ return `[${value.map((entry) => this.stableStringify(entry)).join(',')}]`;
2977
+ }
2978
+
2979
+ if (value && typeof value === 'object') {
2980
+ return `{${Object.keys(value)
2981
+ .sort()
2982
+ .map((key) => `${JSON.stringify(key)}:${this.stableStringify(value[key])}`)
2983
+ .join(',')}}`;
2984
+ }
2985
+
2986
+ return JSON.stringify(value);
2987
+ }
2988
+
2827
2989
  }