@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,377 @@
1
+ import { BadRequestException } from '@nestjs/common';
2
+ import { WorkflowNodeProvider } from '../../../decorators/workflow-node-provider.decorator';
3
+ import { SmsFactory } from '../../../factories/sms.factory';
4
+ import { WorkflowNodeHandler } from '../../../interfaces/workflow-node-handler.interface';
5
+ import {
6
+ WorkflowNodeExecutionContext,
7
+ WorkflowNodeHandlerResult,
8
+ } from '../../../types/workflow-dsl.types';
9
+
10
+ const fullWidthField = {
11
+ layout: {
12
+ width: 'full',
13
+ },
14
+ };
15
+
16
+ const jsonEditorField = {
17
+ ...fullWidthField,
18
+ editor: {
19
+ language: 'json',
20
+ },
21
+ };
22
+
23
+ @WorkflowNodeProvider({
24
+ type: 'solidx.sms.send',
25
+ kind: 'task',
26
+ version: '1.0.0',
27
+ category: 'integration',
28
+ subcategory: 'solidx',
29
+ label: 'Send SMS',
30
+ description:
31
+ 'Sends an SMS using the native SolidX SMS provider and queue settings.',
32
+ tags: ['solidx', 'sms', 'notification', 'template', 'text-message'],
33
+ aliases: ['sms.send', 'text.send', 'solidx.text.send'],
34
+ configSchema: {
35
+ type: 'object',
36
+ required: ['to', 'mode'],
37
+ properties: {
38
+ mode: {
39
+ type: 'string',
40
+ enum: ['template', 'raw'],
41
+ default: 'template',
42
+ },
43
+ to: {},
44
+ body: { type: 'string' },
45
+ templateName: { type: 'string' },
46
+ templateParams: { type: 'object', default: {} },
47
+ shouldQueueSms: { type: 'boolean', default: true },
48
+ providerName: { type: 'string' },
49
+ },
50
+ },
51
+ outputSchema: {
52
+ type: 'object',
53
+ properties: {
54
+ ok: { type: 'boolean' },
55
+ mode: { type: 'string' },
56
+ to: {},
57
+ body: { type: 'string' },
58
+ templateName: { type: 'string' },
59
+ queued: { type: 'boolean' },
60
+ providerName: { type: 'string' },
61
+ response: {},
62
+ },
63
+ },
64
+ examples: [
65
+ {
66
+ key: 'template-sms',
67
+ label: 'Template SMS',
68
+ description:
69
+ 'Render a SolidX SMS template and queue the message for delivery.',
70
+ language: 'yaml',
71
+ snippet:
72
+ 'mode: template\nto: "{{ input.mobile }}"\ntemplateName: workflow-alert\ntemplateParams:\n name: "{{ input.name }}"\n reference: "{{ execution.executionIdentifier }}"\nshouldQueueSms: true\n',
73
+ configurationOnly: true,
74
+ },
75
+ {
76
+ key: 'raw-sms',
77
+ label: 'Raw SMS',
78
+ description:
79
+ 'Send a direct SMS body. Use only with providers that support raw SMS, such as Twilio.',
80
+ language: 'yaml',
81
+ snippet:
82
+ 'mode: raw\nto:\n - "+15551234567"\nbody: "Workflow {{ execution.executionIdentifier }} completed."\nshouldQueueSms: true\n',
83
+ configurationOnly: true,
84
+ },
85
+ ],
86
+ definitions: [
87
+ {
88
+ key: 'native-sms-provider',
89
+ label: 'Native SolidX SMS provider',
90
+ content:
91
+ 'This task resolves the active SolidX SMS provider through SmsFactory, so Twilio, Msg91, or consuming-project providers can be selected by the existing smsProvider setting.',
92
+ },
93
+ {
94
+ key: 'template-first',
95
+ label: 'Template-first delivery',
96
+ content:
97
+ 'Some SMS gateways require registered templates and do not support raw text. Template mode is therefore the default, while raw mode remains available for providers that support it.',
98
+ },
99
+ {
100
+ key: 'queueing',
101
+ label: 'Queueing',
102
+ content:
103
+ 'shouldQueueSms is passed to the native provider. Providers may still queue based on system settings even when this value is false.',
104
+ },
105
+ ],
106
+ authoring: {
107
+ defaultConfiguration: {
108
+ mode: 'template',
109
+ templateParams: {},
110
+ shouldQueueSms: true,
111
+ },
112
+ configurationFields: [
113
+ {
114
+ key: 'mode',
115
+ label: 'Mode',
116
+ description: 'Send a raw SMS or render a SolidX SMS template.',
117
+ valueType: 'string',
118
+ enumValues: ['template', 'raw'],
119
+ defaultValue: 'template',
120
+ required: true,
121
+ group: 'Message',
122
+ uiSchema: fullWidthField,
123
+ },
124
+ {
125
+ key: 'to',
126
+ label: 'To',
127
+ description:
128
+ 'Recipient mobile number, comma-separated list, or array. Expressions are allowed.',
129
+ valueType: 'array',
130
+ required: true,
131
+ expressionAllowed: true,
132
+ group: 'Recipients',
133
+ widgetHint: 'json-editor',
134
+ uiSchema: fullWidthField,
135
+ },
136
+ {
137
+ key: 'templateName',
138
+ label: 'Template Name',
139
+ description:
140
+ 'SolidX SMS template name/user key for template mode. Expressions are allowed.',
141
+ valueType: 'string',
142
+ required: true,
143
+ expressionAllowed: true,
144
+ group: 'Template',
145
+ uiSchema: {
146
+ ...fullWidthField,
147
+ visibleWhen: {
148
+ field: 'mode',
149
+ equals: 'template',
150
+ },
151
+ },
152
+ },
153
+ {
154
+ key: 'templateParams',
155
+ label: 'Template Parameters',
156
+ description:
157
+ 'JSON parameters used when rendering the SMS template. Expressions are allowed.',
158
+ valueType: 'object',
159
+ expressionAllowed: true,
160
+ group: 'Template',
161
+ widgetHint: 'json-editor',
162
+ uiSchema: {
163
+ ...jsonEditorField,
164
+ visibleWhen: {
165
+ field: 'mode',
166
+ equals: 'template',
167
+ },
168
+ },
169
+ },
170
+ {
171
+ key: 'body',
172
+ label: 'Body',
173
+ description:
174
+ 'SMS body for raw mode. Expressions are allowed. Some providers require template mode instead.',
175
+ valueType: 'string',
176
+ required: true,
177
+ expressionAllowed: true,
178
+ group: 'Message',
179
+ widgetHint: 'raw-editor',
180
+ uiSchema: {
181
+ ...fullWidthField,
182
+ visibleWhen: {
183
+ field: 'mode',
184
+ equals: 'raw',
185
+ },
186
+ },
187
+ },
188
+ {
189
+ key: 'shouldQueueSms',
190
+ label: 'Queue SMS',
191
+ description: 'Use the native SolidX SMS queue when available.',
192
+ valueType: 'boolean',
193
+ defaultValue: true,
194
+ group: 'Delivery',
195
+ uiSchema: fullWidthField,
196
+ },
197
+ {
198
+ key: 'providerName',
199
+ label: 'Provider Name',
200
+ description:
201
+ 'Optional registered SMS provider class name. If omitted, the smsProvider setting is used.',
202
+ valueType: 'string',
203
+ expressionAllowed: true,
204
+ group: 'Advanced',
205
+ uiSchema: fullWidthField,
206
+ },
207
+ ],
208
+ outputs: [
209
+ {
210
+ key: 'ok',
211
+ label: 'OK',
212
+ description: 'Whether the SMS provider call completed.',
213
+ valueType: 'boolean',
214
+ path: 'ok',
215
+ },
216
+ {
217
+ key: 'response',
218
+ label: 'Provider Response',
219
+ description: 'Response returned by the active native SMS provider.',
220
+ valueType: 'any',
221
+ path: 'response',
222
+ },
223
+ {
224
+ key: 'to',
225
+ label: 'To',
226
+ description: 'Resolved recipients.',
227
+ valueType: 'array',
228
+ path: 'to',
229
+ },
230
+ {
231
+ key: 'mode',
232
+ label: 'Mode',
233
+ description: 'Resolved send mode.',
234
+ valueType: 'string',
235
+ path: 'mode',
236
+ },
237
+ ],
238
+ supportsExpressions: true,
239
+ supportsRetryPolicy: true,
240
+ supportsTimeoutMs: true,
241
+ supportsOnError: true,
242
+ supportsDisableToggle: true,
243
+ supportsName: true,
244
+ supportsDescription: true,
245
+ searchableText: [
246
+ 'sms',
247
+ 'text',
248
+ 'send',
249
+ 'notification',
250
+ 'template',
251
+ 'solidx',
252
+ ],
253
+ },
254
+ runtime: {
255
+ emitsLogs: true,
256
+ emitsArtifacts: false,
257
+ deterministicOutputs: false,
258
+ executionMode: 'task',
259
+ successStatuses: ['success'],
260
+ },
261
+ documentation: {
262
+ summary:
263
+ 'Sends raw or template-based SMS through the configured native SolidX SMS provider.',
264
+ },
265
+ ui: {
266
+ icon: 'si-send',
267
+ iconColor: '#0f766e',
268
+ iconBackgroundColor: '#ccfbf1',
269
+ iconBorderColor: '#99f6e4',
270
+ defaultEditorMode: 'schema',
271
+ modalSize: 'xl',
272
+ layoutHints: {
273
+ preferredPanel: 'flow',
274
+ groupOrder: ['Recipients', 'Message', 'Template', 'Delivery', 'Advanced'],
275
+ stickySummary: true,
276
+ },
277
+ },
278
+ })
279
+ export class SolidXSendSmsNode implements WorkflowNodeHandler {
280
+ constructor(private readonly smsFactory: SmsFactory) {}
281
+
282
+ async execute(
283
+ context: WorkflowNodeExecutionContext,
284
+ ): Promise<WorkflowNodeHandlerResult> {
285
+ const configuration = context.expression.interpolate(
286
+ context.node.configuration ?? {},
287
+ context,
288
+ );
289
+
290
+ const mode = configuration.mode ?? 'template';
291
+ const to = this.normalizeRecipients(configuration.to);
292
+ if (!to.length) {
293
+ throw new BadRequestException('solidx.sms.send requires recipients.');
294
+ }
295
+
296
+ const shouldQueueSms = configuration.shouldQueueSms !== false;
297
+ const smsService = this.smsFactory.getSmsService(configuration.providerName);
298
+
299
+ if (!smsService) {
300
+ throw new BadRequestException('No SolidX SMS provider is configured.');
301
+ }
302
+
303
+ let response: any;
304
+ let body = configuration.body;
305
+ let templateName = configuration.templateName;
306
+
307
+ if (mode === 'template') {
308
+ if (!templateName) {
309
+ throw new BadRequestException(
310
+ 'solidx.sms.send requires templateName in template mode.',
311
+ );
312
+ }
313
+
314
+ response = await smsService.sendSMSUsingTemplate(
315
+ to.join(','),
316
+ templateName,
317
+ configuration.templateParams ?? {},
318
+ shouldQueueSms,
319
+ );
320
+ } else {
321
+ body = configuration.body;
322
+ if (!body) {
323
+ throw new BadRequestException(
324
+ 'solidx.sms.send requires body in raw mode.',
325
+ );
326
+ }
327
+
328
+ response = await smsService.sendSMS(to.join(','), body, shouldQueueSms);
329
+ }
330
+
331
+ await context.emitLog({
332
+ level: 'info',
333
+ eventType: 'node.solidx.sms.sent',
334
+ source: 'solidx.sms.send',
335
+ message:
336
+ mode === 'template'
337
+ ? `SolidX SMS template "${templateName}" queued/sent to ${to.join(', ')}.`
338
+ : `SolidX SMS queued/sent to ${to.join(', ')}.`,
339
+ metadata: {
340
+ mode,
341
+ to,
342
+ shouldQueueSms,
343
+ providerName: configuration.providerName,
344
+ },
345
+ });
346
+
347
+ return {
348
+ output: {
349
+ ok: true,
350
+ mode,
351
+ to,
352
+ body,
353
+ templateName,
354
+ queued: shouldQueueSms,
355
+ providerName: configuration.providerName,
356
+ response,
357
+ },
358
+ };
359
+ }
360
+
361
+ private normalizeRecipients(value: any): string[] {
362
+ if (value === undefined || value === null || value === '') {
363
+ return [];
364
+ }
365
+
366
+ if (Array.isArray(value)) {
367
+ return value
368
+ .flatMap((entry) => this.normalizeRecipients(entry))
369
+ .filter(Boolean);
370
+ }
371
+
372
+ return String(value)
373
+ .split(',')
374
+ .map((entry) => entry.trim())
375
+ .filter(Boolean);
376
+ }
377
+ }
@@ -0,0 +1,125 @@
1
+ import { WorkflowNodeProvider } from '../../../decorators/workflow-node-provider.decorator';
2
+ import { WorkflowNodeHandler } from '../../../interfaces/workflow-node-handler.interface';
3
+ import {
4
+ WorkflowNodeDefinition,
5
+ WorkflowNodeExecutionContext,
6
+ WorkflowNodeHandlerResult,
7
+ } from '../../../types/workflow-dsl.types';
8
+
9
+ @WorkflowNodeProvider({
10
+ type: 'switch',
11
+ kind: 'control',
12
+ category: 'control-flow',
13
+ label: 'Switch',
14
+ description:
15
+ 'Runs one case sequence based on a contextual value, with an optional default sequence.',
16
+ tags: ['switch', 'case', 'branching', 'condition'],
17
+ authoring: {
18
+ defaultConfiguration: {
19
+ value: '{{ input.value }}',
20
+ },
21
+ configurationFields: [
22
+ {
23
+ key: 'value',
24
+ label: 'Value',
25
+ description:
26
+ 'Expression or literal value used to choose the matching case key.',
27
+ valueType: 'expression',
28
+ required: true,
29
+ expressionAllowed: true,
30
+ widgetHint: 'textarea',
31
+ group: 'General',
32
+ },
33
+ ],
34
+ childSlots: [
35
+ {
36
+ key: 'cases',
37
+ label: 'Cases',
38
+ description: 'Named case sequences. The matching case key is executed.',
39
+ kind: 'case-collection',
40
+ required: true,
41
+ minItems: 1,
42
+ },
43
+ {
44
+ key: 'defaults',
45
+ label: 'Default',
46
+ description:
47
+ 'Fallback sequence that runs when no case key matches the resolved value.',
48
+ kind: 'sequence',
49
+ },
50
+ ],
51
+ supportsDescription: true,
52
+ supportsName: true,
53
+ },
54
+ documentation: {
55
+ summary:
56
+ 'Evaluates a contextual value and runs the child node sequence under the matching case key. If no case matches, the optional default sequence runs.',
57
+ },
58
+ ui: {
59
+ icon: 'si-git-branch',
60
+ iconColor: '#db2777',
61
+ iconBackgroundColor: '#fce7f3',
62
+ iconBorderColor: '#f9a8d4',
63
+ modalSize: 'lg',
64
+ layoutHints: {
65
+ groupOrder: ['General'],
66
+ },
67
+ },
68
+ })
69
+ export class SwitchNode implements WorkflowNodeHandler {
70
+ async execute(
71
+ context: WorkflowNodeExecutionContext,
72
+ ): Promise<WorkflowNodeHandlerResult> {
73
+ const configuration = context.node.configuration ?? {};
74
+ const resolvedValue = context.expression.interpolate(
75
+ configuration.value,
76
+ context,
77
+ );
78
+ const caseKey = this.resolveCaseKey(resolvedValue, context.node.cases ?? {});
79
+ const selectedNodes = caseKey
80
+ ? context.node.cases?.[caseKey] ?? []
81
+ : context.node.defaults ?? [];
82
+
83
+ await context.emitLog({
84
+ level: 'info',
85
+ eventType: 'node.switch.evaluated',
86
+ source: 'switch',
87
+ message: caseKey
88
+ ? `Switch node "${context.node.id}" matched case "${caseKey}".`
89
+ : `Switch node "${context.node.id}" did not match a case and will run defaults.`,
90
+ context: {
91
+ value: resolvedValue,
92
+ caseKey,
93
+ },
94
+ });
95
+
96
+ await context.runNodes(selectedNodes);
97
+
98
+ return {
99
+ output: {
100
+ value: resolvedValue,
101
+ case: caseKey,
102
+ matched: Boolean(caseKey),
103
+ },
104
+ };
105
+ }
106
+
107
+ private resolveCaseKey(
108
+ value: any,
109
+ cases: Record<string, WorkflowNodeDefinition[]>,
110
+ ): string | undefined {
111
+ const exactKey = String(value);
112
+ if (Object.prototype.hasOwnProperty.call(cases, exactKey)) {
113
+ return exactKey;
114
+ }
115
+
116
+ if (typeof value === 'boolean') {
117
+ const booleanKey = value ? 'true' : 'false';
118
+ if (Object.prototype.hasOwnProperty.call(cases, booleanKey)) {
119
+ return booleanKey;
120
+ }
121
+ }
122
+
123
+ return undefined;
124
+ }
125
+ }
@@ -0,0 +1,196 @@
1
+ import { Injectable, Logger } from '@nestjs/common';
2
+ import * as fs from 'fs/promises';
3
+ import * as path from 'path';
4
+ import { WorkflowDefinition } from 'src/entities/workflow-definition.entity';
5
+ import { ModuleMetadataHelperService } from 'src/helpers/module-metadata-helper.service';
6
+
7
+ type WorkflowMetadataEntry = {
8
+ key: string;
9
+ moduleUserKey: string;
10
+ displayName: string;
11
+ namespace?: string;
12
+ description?: string;
13
+ status?: string;
14
+ definitionVersion?: string;
15
+ tags?: any;
16
+ definitionYaml: string;
17
+ };
18
+
19
+ @Injectable()
20
+ export class WorkflowDefinitionMetadataSyncService {
21
+ private readonly logger = new Logger(WorkflowDefinitionMetadataSyncService.name);
22
+
23
+ constructor(
24
+ private readonly moduleMetadataHelperService: ModuleMetadataHelperService,
25
+ ) {}
26
+
27
+ async upsertWorkflowDefinition(
28
+ workflowDefinition: WorkflowDefinition,
29
+ previousWorkflowDefinition?: WorkflowDefinition | null,
30
+ ): Promise<void> {
31
+ const moduleName = workflowDefinition.moduleMetadata?.name;
32
+ if (!moduleName) {
33
+ this.logger.warn(`Skipping workflow metadata sync for ${workflowDefinition.key}: moduleMetadata relation is not loaded.`);
34
+ return;
35
+ }
36
+
37
+ if (
38
+ previousWorkflowDefinition &&
39
+ (
40
+ previousWorkflowDefinition.key !== workflowDefinition.key ||
41
+ previousWorkflowDefinition.moduleMetadata?.name !== moduleName
42
+ )
43
+ ) {
44
+ await this.removeWorkflowDefinition(previousWorkflowDefinition);
45
+ }
46
+
47
+ const metadataFilePath = await this.getExistingMetadataFilePath(moduleName);
48
+ if (!metadataFilePath) {
49
+ return;
50
+ }
51
+
52
+ const metadata = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(metadataFilePath);
53
+ if (!metadata) {
54
+ return;
55
+ }
56
+
57
+ const yamlRelativePath = this.getWorkflowYamlRelativePath(workflowDefinition.key);
58
+ const yamlFilePath = path.resolve(path.dirname(metadataFilePath), yamlRelativePath);
59
+
60
+ await fs.mkdir(path.dirname(yamlFilePath), { recursive: true });
61
+ await fs.writeFile(yamlFilePath, this.withTrailingNewline(workflowDefinition.definitionYaml ?? ''), 'utf8');
62
+
63
+ if (!Array.isArray(metadata.workflowDefinitions)) {
64
+ metadata.workflowDefinitions = [];
65
+ }
66
+
67
+ const entry = this.toMetadataEntry(workflowDefinition, moduleName, yamlRelativePath);
68
+ const existingIndex = metadata.workflowDefinitions.findIndex(
69
+ (definition: WorkflowMetadataEntry) => definition.key === workflowDefinition.key,
70
+ );
71
+
72
+ if (existingIndex === -1) {
73
+ metadata.workflowDefinitions.push(entry);
74
+ } else {
75
+ metadata.workflowDefinitions[existingIndex] = entry;
76
+ }
77
+
78
+ await this.writeMetadataFile(metadataFilePath, metadata);
79
+ this.logger.log(`Synced workflow definition ${workflowDefinition.key} to ${metadataFilePath}`);
80
+ }
81
+
82
+ async removeWorkflowDefinition(workflowDefinition: WorkflowDefinition): Promise<void> {
83
+ const moduleName = workflowDefinition.moduleMetadata?.name;
84
+ if (!moduleName) {
85
+ this.logger.warn(`Skipping workflow metadata removal for ${workflowDefinition.key}: moduleMetadata relation is not loaded.`);
86
+ return;
87
+ }
88
+
89
+ const metadataFilePath = await this.getExistingMetadataFilePath(moduleName);
90
+ if (!metadataFilePath) {
91
+ return;
92
+ }
93
+
94
+ const metadata = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(metadataFilePath);
95
+ if (!metadata || !Array.isArray(metadata.workflowDefinitions)) {
96
+ return;
97
+ }
98
+
99
+ const existingEntry = metadata.workflowDefinitions.find(
100
+ (definition: WorkflowMetadataEntry) => definition.key === workflowDefinition.key,
101
+ );
102
+ const previousLength = metadata.workflowDefinitions.length;
103
+ metadata.workflowDefinitions = metadata.workflowDefinitions.filter(
104
+ (definition: WorkflowMetadataEntry) => definition.key !== workflowDefinition.key,
105
+ );
106
+
107
+ const yamlRelativePath = this.resolveWorkflowYamlReference(workflowDefinition, existingEntry);
108
+ if (yamlRelativePath) {
109
+ await this.removeYamlFile(path.resolve(path.dirname(metadataFilePath), yamlRelativePath));
110
+ }
111
+
112
+ if (metadata.workflowDefinitions.length !== previousLength) {
113
+ await this.writeMetadataFile(metadataFilePath, metadata);
114
+ this.logger.log(`Removed workflow definition ${workflowDefinition.key} from ${metadataFilePath}`);
115
+ }
116
+ }
117
+
118
+ private async getExistingMetadataFilePath(moduleName: string): Promise<string | null> {
119
+ const metadataFilePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(moduleName);
120
+ try {
121
+ await fs.access(metadataFilePath);
122
+ return metadataFilePath;
123
+ } catch {
124
+ this.logger.warn(`Skipping workflow metadata sync because metadata file was not found: ${metadataFilePath}`);
125
+ return null;
126
+ }
127
+ }
128
+
129
+ private toMetadataEntry(
130
+ workflowDefinition: WorkflowDefinition,
131
+ moduleName: string,
132
+ yamlRelativePath: string,
133
+ ): WorkflowMetadataEntry {
134
+ const entry: WorkflowMetadataEntry = {
135
+ key: workflowDefinition.key,
136
+ moduleUserKey: moduleName,
137
+ displayName: workflowDefinition.displayName,
138
+ definitionYaml: `file:${yamlRelativePath}`,
139
+ };
140
+
141
+ this.assignIfPresent(entry, 'namespace', workflowDefinition.namespace);
142
+ this.assignIfPresent(entry, 'description', workflowDefinition.description);
143
+ this.assignIfPresent(entry, 'status', workflowDefinition.status);
144
+ this.assignIfPresent(entry, 'definitionVersion', workflowDefinition.definitionVersion);
145
+ this.assignIfPresent(entry, 'tags', workflowDefinition.tags);
146
+
147
+ return entry;
148
+ }
149
+
150
+ private assignIfPresent(target: WorkflowMetadataEntry, key: keyof WorkflowMetadataEntry, value: any) {
151
+ if (value !== undefined && value !== null && value !== '') {
152
+ (target as any)[key] = value;
153
+ }
154
+ }
155
+
156
+ private getWorkflowYamlRelativePath(workflowKey: string) {
157
+ return path.posix.join('workflows', `${this.safeWorkflowFileName(workflowKey)}.yaml`);
158
+ }
159
+
160
+ private safeWorkflowFileName(workflowKey: string) {
161
+ return String(workflowKey ?? 'workflow')
162
+ .trim()
163
+ .replace(/[\\/]/g, '-')
164
+ .replace(/^\.+/, '')
165
+ || 'workflow';
166
+ }
167
+
168
+ private resolveWorkflowYamlReference(
169
+ workflowDefinition: WorkflowDefinition,
170
+ metadataEntry?: WorkflowMetadataEntry,
171
+ ): string | null {
172
+ if (typeof metadataEntry?.definitionYaml === 'string' && metadataEntry.definitionYaml.startsWith('file:')) {
173
+ return metadataEntry.definitionYaml.slice('file:'.length).trim();
174
+ }
175
+
176
+ return this.getWorkflowYamlRelativePath(workflowDefinition.key);
177
+ }
178
+
179
+ private async removeYamlFile(filePath: string) {
180
+ try {
181
+ await fs.unlink(filePath);
182
+ } catch (error: any) {
183
+ if (error?.code !== 'ENOENT') {
184
+ this.logger.warn(`Unable to remove workflow YAML file ${filePath}: ${error?.message ?? String(error)}`);
185
+ }
186
+ }
187
+ }
188
+
189
+ private async writeMetadataFile(metadataFilePath: string, metadata: any) {
190
+ await fs.writeFile(metadataFilePath, `${JSON.stringify(metadata, null, 2)}\n`, 'utf8');
191
+ }
192
+
193
+ private withTrailingNewline(value: string) {
194
+ return value.endsWith('\n') ? value : `${value}\n`;
195
+ }
196
+ }