@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,222 @@
1
+ import { BadRequestException } from '@nestjs/common';
2
+ import { WorkflowNodeProvider } from '../../../decorators/workflow-node-provider.decorator';
3
+ import { WorkflowNodeHandler } from '../../../interfaces/workflow-node-handler.interface';
4
+ import {
5
+ WorkflowNodeExecutionContext,
6
+ WorkflowNodeHandlerResult,
7
+ } from '../../../types/workflow-dsl.types';
8
+ import { executeSolidXRequest } from './solidx-api.helpers';
9
+
10
+ const fullWidthField = {
11
+ layout: {
12
+ width: 'full',
13
+ },
14
+ };
15
+
16
+ @WorkflowNodeProvider({
17
+ type: 'solidx.login',
18
+ kind: 'task',
19
+ version: '1.0.0',
20
+ category: 'integration',
21
+ subcategory: 'solidx',
22
+ label: 'SolidX Login',
23
+ description:
24
+ 'Authenticates with a SolidX API and exposes access tokens to downstream nodes.',
25
+ tags: ['solidx', 'auth', 'login', 'token'],
26
+ aliases: ['solid.login', 'iam.authenticate'],
27
+ configSchema: {
28
+ type: 'object',
29
+ required: ['apiBaseUrl', 'username', 'password'],
30
+ properties: {
31
+ apiBaseUrl: { type: 'string' },
32
+ username: { type: 'string' },
33
+ password: { type: 'string' },
34
+ timeoutMs: { type: 'number', default: 30000 },
35
+ },
36
+ },
37
+ outputSchema: {
38
+ type: 'object',
39
+ properties: {
40
+ accessToken: { type: 'string' },
41
+ refreshToken: { type: 'string' },
42
+ user: { type: 'object' },
43
+ status: { type: 'number' },
44
+ ok: { type: 'boolean' },
45
+ raw: { type: 'object' },
46
+ },
47
+ },
48
+ examples: [
49
+ {
50
+ key: 'login',
51
+ label: 'Authenticate and expose token',
52
+ description:
53
+ 'Use the access token downstream as {{ outputs.login.accessToken }}.',
54
+ language: 'yaml',
55
+ snippet:
56
+ 'apiBaseUrl: http://localhost:3000\nusername: sa\npassword: "{{ variables.solidPassword }}"\n',
57
+ configurationOnly: true,
58
+ },
59
+ ],
60
+ authoring: {
61
+ defaultConfiguration: {
62
+ timeoutMs: 30000,
63
+ },
64
+ configurationFields: [
65
+ {
66
+ key: 'apiBaseUrl',
67
+ label: 'API Base URL',
68
+ description:
69
+ 'Base URL of the SolidX API host, without /api. Expressions are allowed.',
70
+ valueType: 'uri',
71
+ required: true,
72
+ expressionAllowed: true,
73
+ group: 'Authentication',
74
+ uiSchema: fullWidthField,
75
+ },
76
+ {
77
+ key: 'username',
78
+ label: 'Username',
79
+ description: 'SolidX username or email. Expressions are allowed.',
80
+ valueType: 'string',
81
+ required: true,
82
+ expressionAllowed: true,
83
+ group: 'Authentication',
84
+ uiSchema: fullWidthField,
85
+ },
86
+ {
87
+ key: 'password',
88
+ label: 'Password',
89
+ description: 'SolidX password. Expressions are allowed.',
90
+ valueType: 'secret',
91
+ required: true,
92
+ expressionAllowed: true,
93
+ secretAllowed: true,
94
+ group: 'Authentication',
95
+ uiSchema: fullWidthField,
96
+ },
97
+ {
98
+ key: 'timeoutMs',
99
+ label: 'Timeout (ms)',
100
+ description: 'Abort the login request after this many milliseconds.',
101
+ valueType: 'number',
102
+ defaultValue: 30000,
103
+ group: 'Advanced',
104
+ uiSchema: fullWidthField,
105
+ },
106
+ ],
107
+ outputs: [
108
+ {
109
+ key: 'accessToken',
110
+ label: 'Access Token',
111
+ description: 'JWT access token returned by SolidX.',
112
+ valueType: 'secret',
113
+ path: 'accessToken',
114
+ required: true,
115
+ },
116
+ {
117
+ key: 'refreshToken',
118
+ label: 'Refresh Token',
119
+ description: 'Refresh token returned by SolidX.',
120
+ valueType: 'secret',
121
+ path: 'refreshToken',
122
+ },
123
+ {
124
+ key: 'user',
125
+ label: 'User',
126
+ description: 'Authenticated user payload.',
127
+ valueType: 'object',
128
+ path: 'user',
129
+ },
130
+ ],
131
+ supportsExpressions: true,
132
+ supportsRetryPolicy: true,
133
+ supportsTimeoutMs: true,
134
+ supportsOnError: true,
135
+ supportsDisableToggle: true,
136
+ supportsName: true,
137
+ supportsDescription: true,
138
+ searchableText: ['solidx', 'solid', 'login', 'auth', 'token', 'iam'],
139
+ },
140
+ runtime: {
141
+ emitsLogs: true,
142
+ emitsArtifacts: false,
143
+ deterministicOutputs: false,
144
+ executionMode: 'task',
145
+ successStatuses: ['success'],
146
+ },
147
+ documentation: {
148
+ summary:
149
+ 'Authenticates with /api/iam/authenticate and exposes accessToken, refreshToken, and user for downstream expressions.',
150
+ },
151
+ ui: {
152
+ icon: 'si-lock',
153
+ iconColor: '#7c3aed',
154
+ iconBackgroundColor: '#ede9fe',
155
+ iconBorderColor: '#ddd6fe',
156
+ defaultEditorMode: 'schema',
157
+ modalSize: 'lg',
158
+ layoutHints: {
159
+ preferredPanel: 'flow',
160
+ groupOrder: ['Authentication', 'Advanced'],
161
+ stickySummary: true,
162
+ },
163
+ },
164
+ })
165
+ export class SolidXLoginNode implements WorkflowNodeHandler {
166
+ async execute(
167
+ context: WorkflowNodeExecutionContext,
168
+ ): Promise<WorkflowNodeHandlerResult> {
169
+ const configuration = context.expression.interpolate(
170
+ context.node.configuration ?? {},
171
+ context,
172
+ );
173
+
174
+ const username = configuration.username;
175
+ const password = configuration.password;
176
+ if (!username || !password) {
177
+ throw new BadRequestException(
178
+ 'solidx.login requires username and password.',
179
+ );
180
+ }
181
+
182
+ const result = await executeSolidXRequest({
183
+ apiBaseUrl: configuration.apiBaseUrl,
184
+ path: 'iam/authenticate',
185
+ method: 'POST',
186
+ body: {
187
+ username,
188
+ email: String(username).includes('@') ? username : null,
189
+ password,
190
+ },
191
+ timeoutMs: configuration.timeoutMs ?? context.node.timeoutMs ?? 30000,
192
+ });
193
+
194
+ const payload = result.data ?? {};
195
+ const accessToken = payload.accessToken ?? result.raw?.accessToken;
196
+ const refreshToken = payload.refreshToken ?? result.raw?.refreshToken;
197
+
198
+ if (!result.ok || !accessToken) {
199
+ throw new BadRequestException(
200
+ `SolidX login failed with status ${result.status}.`,
201
+ );
202
+ }
203
+
204
+ await context.emitLog({
205
+ level: 'info',
206
+ eventType: 'node.solidx.login',
207
+ source: 'solidx.login',
208
+ message: `SolidX login succeeded for ${username}.`,
209
+ });
210
+
211
+ return {
212
+ output: {
213
+ ok: result.ok,
214
+ status: result.status,
215
+ accessToken,
216
+ refreshToken,
217
+ user: payload.user,
218
+ raw: result.raw,
219
+ },
220
+ };
221
+ }
222
+ }
@@ -0,0 +1,489 @@
1
+ import { BadRequestException } from '@nestjs/common';
2
+ import { WorkflowNodeProvider } from '../../../decorators/workflow-node-provider.decorator';
3
+ import { MailFactory } from '../../../factories/mail.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.email.send',
25
+ kind: 'task',
26
+ version: '1.0.0',
27
+ category: 'integration',
28
+ subcategory: 'solidx',
29
+ label: 'Send Email',
30
+ description:
31
+ 'Sends an email using the native SolidX mail provider and queue settings.',
32
+ tags: ['solidx', 'email', 'mail', 'notification', 'template'],
33
+ aliases: ['email.send', 'mail.send', 'solidx.mail.send'],
34
+ configSchema: {
35
+ type: 'object',
36
+ required: ['to', 'mode'],
37
+ properties: {
38
+ mode: {
39
+ type: 'string',
40
+ enum: ['raw', 'template'],
41
+ default: 'raw',
42
+ },
43
+ to: {},
44
+ subject: { type: 'string' },
45
+ body: { type: 'string' },
46
+ templateName: { type: 'string' },
47
+ templateParams: { type: 'object', default: {} },
48
+ shouldQueueEmails: { type: 'boolean', default: true },
49
+ cc: {},
50
+ bcc: {},
51
+ from: { type: 'string' },
52
+ parentEntity: { type: 'string' },
53
+ parentEntityId: { type: 'string' },
54
+ },
55
+ },
56
+ outputSchema: {
57
+ type: 'object',
58
+ properties: {
59
+ ok: { type: 'boolean' },
60
+ mode: { type: 'string' },
61
+ to: {},
62
+ cc: {},
63
+ bcc: {},
64
+ subject: { type: 'string' },
65
+ templateName: { type: 'string' },
66
+ queued: { type: 'boolean' },
67
+ response: {},
68
+ },
69
+ },
70
+ examples: [
71
+ {
72
+ key: 'template-email',
73
+ label: 'Template email',
74
+ description:
75
+ 'Render a SolidX email template and queue the email for delivery.',
76
+ language: 'yaml',
77
+ snippet:
78
+ 'mode: template\nto: "{{ input.email }}"\ntemplateName: welcome-email\ntemplateParams:\n name: "{{ input.name }}"\n activationUrl: "{{ outputs.createInvite.data.url }}"\nshouldQueueEmails: true\n',
79
+ configurationOnly: true,
80
+ },
81
+ {
82
+ key: 'raw-email',
83
+ label: 'Raw email',
84
+ description: 'Send a direct subject/body email.',
85
+ language: 'yaml',
86
+ snippet:
87
+ 'mode: raw\nto:\n - ops@example.com\nsubject: "Workflow {{ execution.executionIdentifier }} completed"\nbody: "<p>The workflow completed successfully.</p>"\nshouldQueueEmails: true\n',
88
+ configurationOnly: true,
89
+ },
90
+ ],
91
+ definitions: [
92
+ {
93
+ key: 'native-mail-provider',
94
+ label: 'Native SolidX mail provider',
95
+ content:
96
+ 'This task resolves the active SolidX mail provider through MailFactory, so SMTP, Elastic Email, or consuming-project providers can be selected by the existing emailProvider setting.',
97
+ },
98
+ {
99
+ key: 'queueing',
100
+ label: 'Queueing',
101
+ content:
102
+ 'shouldQueueEmails is passed to the native provider. Providers may still queue based on system settings even when this value is false.',
103
+ },
104
+ ],
105
+ authoring: {
106
+ defaultConfiguration: {
107
+ mode: 'raw',
108
+ templateParams: {},
109
+ shouldQueueEmails: true,
110
+ cc: [],
111
+ bcc: [],
112
+ },
113
+ configurationFields: [
114
+ {
115
+ key: 'mode',
116
+ label: 'Mode',
117
+ description: 'Send a raw email or render a SolidX email template.',
118
+ valueType: 'string',
119
+ enumValues: ['raw', 'template'],
120
+ defaultValue: 'raw',
121
+ required: true,
122
+ group: 'Message',
123
+ uiSchema: fullWidthField,
124
+ },
125
+ {
126
+ key: 'to',
127
+ label: 'To',
128
+ description:
129
+ 'Recipient email address, comma-separated list, or array. Expressions are allowed. Use a pure expression like "{{ outputs.someStep.emails }}" when the expression should evaluate to an array; mixed text such as "ops@example.com, {{ outputs.someStep.emails }}" is treated as comma-separated text.',
130
+ valueType: 'array',
131
+ required: true,
132
+ expressionAllowed: true,
133
+ group: 'Recipients',
134
+ widgetHint: 'recipient-list',
135
+ uiSchema: {
136
+ ...fullWidthField,
137
+ placeholder: '{{ item.email }}',
138
+ },
139
+ },
140
+ {
141
+ key: 'subject',
142
+ label: 'Subject',
143
+ description: 'Email subject for raw mode. Expressions are allowed.',
144
+ valueType: 'string',
145
+ required: true,
146
+ expressionAllowed: true,
147
+ group: 'Message',
148
+ uiSchema: {
149
+ ...fullWidthField,
150
+ visibleWhen: {
151
+ field: 'mode',
152
+ equals: 'raw',
153
+ },
154
+ },
155
+ },
156
+ {
157
+ key: 'body',
158
+ label: 'Body',
159
+ description:
160
+ 'HTML email body for raw mode. Expressions are allowed.',
161
+ valueType: 'string',
162
+ required: true,
163
+ expressionAllowed: true,
164
+ group: 'Message',
165
+ widgetHint: 'raw-editor',
166
+ uiSchema: {
167
+ ...fullWidthField,
168
+ editor: {
169
+ language: 'html',
170
+ },
171
+ visibleWhen: {
172
+ field: 'mode',
173
+ equals: 'raw',
174
+ },
175
+ },
176
+ },
177
+ {
178
+ key: 'templateName',
179
+ label: 'Template Name',
180
+ description:
181
+ 'SolidX email template name/user key for template mode. Expressions are allowed.',
182
+ valueType: 'string',
183
+ required: true,
184
+ expressionAllowed: true,
185
+ group: 'Template',
186
+ uiSchema: {
187
+ ...fullWidthField,
188
+ visibleWhen: {
189
+ field: 'mode',
190
+ equals: 'template',
191
+ },
192
+ },
193
+ },
194
+ {
195
+ key: 'templateParams',
196
+ label: 'Template Parameters',
197
+ description:
198
+ 'JSON parameters used when rendering the email template. Expressions are allowed.',
199
+ valueType: 'object',
200
+ expressionAllowed: true,
201
+ group: 'Template',
202
+ widgetHint: 'json-editor',
203
+ uiSchema: {
204
+ ...jsonEditorField,
205
+ visibleWhen: {
206
+ field: 'mode',
207
+ equals: 'template',
208
+ },
209
+ },
210
+ },
211
+ {
212
+ key: 'shouldQueueEmails',
213
+ label: 'Queue Email',
214
+ description: 'Use the native SolidX email queue when available.',
215
+ valueType: 'boolean',
216
+ defaultValue: true,
217
+ group: 'Delivery',
218
+ uiSchema: fullWidthField,
219
+ },
220
+ {
221
+ key: 'cc',
222
+ label: 'CC',
223
+ description:
224
+ 'Optional CC recipients as comma-separated text or an array. Expressions are allowed. Use a pure expression like "{{ outputs.someStep.emails }}" when the expression should evaluate to an array; mixed text such as "ops@example.com, {{ outputs.someStep.emails }}" is treated as comma-separated text.',
225
+ valueType: 'array',
226
+ expressionAllowed: true,
227
+ group: 'Recipients',
228
+ widgetHint: 'recipient-list',
229
+ uiSchema: {
230
+ ...fullWidthField,
231
+ placeholder: '{{ outputs.someStep.ccEmails }}',
232
+ },
233
+ },
234
+ {
235
+ key: 'bcc',
236
+ label: 'BCC',
237
+ description:
238
+ 'Optional BCC recipients as comma-separated text or an array. Expressions are allowed. Use a pure expression like "{{ outputs.someStep.emails }}" when the expression should evaluate to an array; mixed text such as "ops@example.com, {{ outputs.someStep.emails }}" is treated as comma-separated text.',
239
+ valueType: 'array',
240
+ expressionAllowed: true,
241
+ group: 'Recipients',
242
+ widgetHint: 'recipient-list',
243
+ uiSchema: {
244
+ ...fullWidthField,
245
+ placeholder: '{{ outputs.someStep.bccEmails }}',
246
+ },
247
+ },
248
+ {
249
+ key: 'from',
250
+ label: 'From',
251
+ description:
252
+ 'Optional sender address. If omitted, the active provider setting is used.',
253
+ valueType: 'string',
254
+ expressionAllowed: true,
255
+ group: 'Delivery',
256
+ uiSchema: fullWidthField,
257
+ },
258
+ {
259
+ key: 'parentEntity',
260
+ label: 'Parent Entity',
261
+ description: 'Optional entity key used by providers for audit linkage.',
262
+ valueType: 'string',
263
+ expressionAllowed: true,
264
+ group: 'Advanced',
265
+ uiSchema: fullWidthField,
266
+ },
267
+ {
268
+ key: 'parentEntityId',
269
+ label: 'Parent Entity ID',
270
+ description: 'Optional entity id used by providers for audit linkage.',
271
+ valueType: 'string',
272
+ expressionAllowed: true,
273
+ group: 'Advanced',
274
+ uiSchema: fullWidthField,
275
+ },
276
+ ],
277
+ outputs: [
278
+ {
279
+ key: 'ok',
280
+ label: 'OK',
281
+ description: 'Whether the mail provider call completed.',
282
+ valueType: 'boolean',
283
+ path: 'ok',
284
+ },
285
+ {
286
+ key: 'response',
287
+ label: 'Provider Response',
288
+ description: 'Response returned by the active native mail provider.',
289
+ valueType: 'any',
290
+ path: 'response',
291
+ },
292
+ {
293
+ key: 'to',
294
+ label: 'To',
295
+ description: 'Resolved recipients.',
296
+ valueType: 'array',
297
+ path: 'to',
298
+ },
299
+ {
300
+ key: 'mode',
301
+ label: 'Mode',
302
+ description: 'Resolved send mode.',
303
+ valueType: 'string',
304
+ path: 'mode',
305
+ },
306
+ ],
307
+ supportsExpressions: true,
308
+ supportsRetryPolicy: true,
309
+ supportsTimeoutMs: true,
310
+ supportsOnError: true,
311
+ supportsDisableToggle: true,
312
+ supportsName: true,
313
+ supportsDescription: true,
314
+ searchableText: [
315
+ 'email',
316
+ 'mail',
317
+ 'send',
318
+ 'notification',
319
+ 'template',
320
+ 'solidx',
321
+ ],
322
+ },
323
+ runtime: {
324
+ emitsLogs: true,
325
+ emitsArtifacts: false,
326
+ deterministicOutputs: false,
327
+ executionMode: 'task',
328
+ successStatuses: ['success'],
329
+ },
330
+ documentation: {
331
+ summary:
332
+ 'Sends raw or template-based email through the configured native SolidX mail provider.',
333
+ },
334
+ ui: {
335
+ icon: 'si-envelope',
336
+ iconColor: '#db2777',
337
+ iconBackgroundColor: '#fce7f3',
338
+ iconBorderColor: '#fbcfe8',
339
+ defaultEditorMode: 'schema',
340
+ modalSize: 'xl',
341
+ layoutHints: {
342
+ preferredPanel: 'flow',
343
+ groupOrder: [
344
+ 'Recipients',
345
+ 'Message',
346
+ 'Template',
347
+ 'Delivery',
348
+ 'Advanced',
349
+ ],
350
+ stickySummary: true,
351
+ },
352
+ },
353
+ })
354
+ export class SolidXSendEmailNode implements WorkflowNodeHandler {
355
+ constructor(private readonly mailFactory: MailFactory) {}
356
+
357
+ async execute(
358
+ context: WorkflowNodeExecutionContext,
359
+ ): Promise<WorkflowNodeHandlerResult> {
360
+ const configuration = context.expression.interpolate(
361
+ context.node.configuration ?? {},
362
+ context,
363
+ );
364
+
365
+ const mode = configuration.mode ?? 'raw';
366
+ const to = this.normalizeRecipients(configuration.to);
367
+ if (!to.length) {
368
+ throw new BadRequestException('solidx.email.send requires recipients.');
369
+ }
370
+
371
+ const shouldQueueEmails = configuration.shouldQueueEmails !== false;
372
+ const cc = this.normalizeRecipients(configuration.cc);
373
+ const bcc = this.normalizeRecipients(configuration.bcc);
374
+ const attachments = this.normalizeArray(configuration.attachments);
375
+ const wrapperAttachments = this.normalizeArray(
376
+ configuration.wrapperAttachments,
377
+ );
378
+ const mailService = this.mailFactory.getMailService();
379
+
380
+ if (!mailService) {
381
+ throw new BadRequestException('No SolidX mail provider is configured.');
382
+ }
383
+
384
+ let response: any;
385
+ let subject = configuration.subject;
386
+ let templateName = configuration.templateName;
387
+
388
+ if (mode === 'template') {
389
+ if (!templateName) {
390
+ throw new BadRequestException(
391
+ 'solidx.email.send requires templateName in template mode.',
392
+ );
393
+ }
394
+
395
+ response = await mailService.sendEmailUsingTemplate(
396
+ to.join(','),
397
+ templateName,
398
+ configuration.templateParams ?? {},
399
+ shouldQueueEmails,
400
+ wrapperAttachments,
401
+ attachments,
402
+ configuration.parentEntity,
403
+ configuration.parentEntityId,
404
+ cc,
405
+ bcc,
406
+ configuration.from,
407
+ );
408
+ } else {
409
+ subject = configuration.subject;
410
+ const body = configuration.body;
411
+ if (!subject || !body) {
412
+ throw new BadRequestException(
413
+ 'solidx.email.send requires subject and body in raw mode.',
414
+ );
415
+ }
416
+
417
+ response = await mailService.sendEmail(
418
+ to.join(','),
419
+ subject,
420
+ body,
421
+ shouldQueueEmails,
422
+ wrapperAttachments,
423
+ attachments,
424
+ configuration.parentEntity,
425
+ configuration.parentEntityId,
426
+ cc,
427
+ bcc,
428
+ configuration.from,
429
+ );
430
+ }
431
+
432
+ await context.emitLog({
433
+ level: 'info',
434
+ eventType: 'node.solidx.email.sent',
435
+ source: 'solidx.email.send',
436
+ message:
437
+ mode === 'template'
438
+ ? `SolidX email template "${templateName}" queued/sent to ${to.join(', ')}.`
439
+ : `SolidX email "${subject}" queued/sent to ${to.join(', ')}.`,
440
+ metadata: {
441
+ mode,
442
+ to,
443
+ cc,
444
+ bcc,
445
+ shouldQueueEmails,
446
+ parentEntity: configuration.parentEntity,
447
+ parentEntityId: configuration.parentEntityId,
448
+ },
449
+ });
450
+
451
+ return {
452
+ output: {
453
+ ok: true,
454
+ mode,
455
+ to,
456
+ cc,
457
+ bcc,
458
+ subject,
459
+ templateName,
460
+ queued: shouldQueueEmails,
461
+ response,
462
+ },
463
+ };
464
+ }
465
+
466
+ private normalizeRecipients(value: any): string[] {
467
+ if (value === undefined || value === null || value === '') {
468
+ return [];
469
+ }
470
+
471
+ if (Array.isArray(value)) {
472
+ return value
473
+ .flatMap((entry) => this.normalizeRecipients(entry))
474
+ .filter(Boolean);
475
+ }
476
+
477
+ return String(value)
478
+ .split(',')
479
+ .map((entry) => entry.trim())
480
+ .filter(Boolean);
481
+ }
482
+
483
+ private normalizeArray(value: any): any[] {
484
+ if (value === undefined || value === null || value === '') {
485
+ return [];
486
+ }
487
+ return Array.isArray(value) ? value : [value];
488
+ }
489
+ }