@solidxai/core 0.1.13-beta.0 → 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 (419) hide show
  1. package/dist/controllers/workflow-definition.controller.d.ts +38 -0
  2. package/dist/controllers/workflow-definition.controller.d.ts.map +1 -0
  3. package/dist/controllers/workflow-definition.controller.js +272 -0
  4. package/dist/controllers/workflow-definition.controller.js.map +1 -0
  5. package/dist/controllers/workflow-execution-artifact.controller.d.ts +24 -0
  6. package/dist/controllers/workflow-execution-artifact.controller.d.ts.map +1 -0
  7. package/dist/controllers/workflow-execution-artifact.controller.js +179 -0
  8. package/dist/controllers/workflow-execution-artifact.controller.js.map +1 -0
  9. package/dist/controllers/workflow-execution-log.controller.d.ts +24 -0
  10. package/dist/controllers/workflow-execution-log.controller.d.ts.map +1 -0
  11. package/dist/controllers/workflow-execution-log.controller.js +179 -0
  12. package/dist/controllers/workflow-execution-log.controller.js.map +1 -0
  13. package/dist/controllers/workflow-execution.controller.d.ts +29 -0
  14. package/dist/controllers/workflow-execution.controller.d.ts.map +1 -0
  15. package/dist/controllers/workflow-execution.controller.js +227 -0
  16. package/dist/controllers/workflow-execution.controller.js.map +1 -0
  17. package/dist/controllers/workflow-secret.controller.d.ts +24 -0
  18. package/dist/controllers/workflow-secret.controller.d.ts.map +1 -0
  19. package/dist/controllers/workflow-secret.controller.js +179 -0
  20. package/dist/controllers/workflow-secret.controller.js.map +1 -0
  21. package/dist/controllers/workflow-step-execution.controller.d.ts +24 -0
  22. package/dist/controllers/workflow-step-execution.controller.d.ts.map +1 -0
  23. package/dist/controllers/workflow-step-execution.controller.js +179 -0
  24. package/dist/controllers/workflow-step-execution.controller.js.map +1 -0
  25. package/dist/controllers/workflow-trigger-execution.controller.d.ts +24 -0
  26. package/dist/controllers/workflow-trigger-execution.controller.d.ts.map +1 -0
  27. package/dist/controllers/workflow-trigger-execution.controller.js +179 -0
  28. package/dist/controllers/workflow-trigger-execution.controller.js.map +1 -0
  29. package/dist/decorators/workflow-node-provider.decorator.d.ts +4 -0
  30. package/dist/decorators/workflow-node-provider.decorator.d.ts.map +1 -0
  31. package/dist/decorators/workflow-node-provider.decorator.js +13 -0
  32. package/dist/decorators/workflow-node-provider.decorator.js.map +1 -0
  33. package/dist/dtos/create-workflow-definition.dto.d.ts +14 -0
  34. package/dist/dtos/create-workflow-definition.dto.d.ts.map +1 -0
  35. package/dist/dtos/create-workflow-definition.dto.js +92 -0
  36. package/dist/dtos/create-workflow-definition.dto.js.map +1 -0
  37. package/dist/dtos/create-workflow-execution-artifact.dto.d.ts +22 -0
  38. package/dist/dtos/create-workflow-execution-artifact.dto.d.ts.map +1 -0
  39. package/dist/dtos/create-workflow-execution-artifact.dto.js +139 -0
  40. package/dist/dtos/create-workflow-execution-artifact.dto.js.map +1 -0
  41. package/dist/dtos/create-workflow-execution-log.dto.d.ts +18 -0
  42. package/dist/dtos/create-workflow-execution-log.dto.d.ts.map +1 -0
  43. package/dist/dtos/create-workflow-execution-log.dto.js +116 -0
  44. package/dist/dtos/create-workflow-execution-log.dto.js.map +1 -0
  45. package/dist/dtos/create-workflow-execution.dto.d.ts +33 -0
  46. package/dist/dtos/create-workflow-execution.dto.d.ts.map +1 -0
  47. package/dist/dtos/create-workflow-execution.dto.js +186 -0
  48. package/dist/dtos/create-workflow-execution.dto.js.map +1 -0
  49. package/dist/dtos/create-workflow-secret.dto.d.ts +11 -0
  50. package/dist/dtos/create-workflow-secret.dto.d.ts.map +1 -0
  51. package/dist/dtos/create-workflow-secret.dto.js +74 -0
  52. package/dist/dtos/create-workflow-secret.dto.js.map +1 -0
  53. package/dist/dtos/create-workflow-step-execution.dto.d.ts +27 -0
  54. package/dist/dtos/create-workflow-step-execution.dto.d.ts.map +1 -0
  55. package/dist/dtos/create-workflow-step-execution.dto.js +171 -0
  56. package/dist/dtos/create-workflow-step-execution.dto.js.map +1 -0
  57. package/dist/dtos/create-workflow-trigger-execution.dto.d.ts +25 -0
  58. package/dist/dtos/create-workflow-trigger-execution.dto.d.ts.map +1 -0
  59. package/dist/dtos/create-workflow-trigger-execution.dto.js +158 -0
  60. package/dist/dtos/create-workflow-trigger-execution.dto.js.map +1 -0
  61. package/dist/dtos/execute-workflow.dto.d.ts +7 -0
  62. package/dist/dtos/execute-workflow.dto.d.ts.map +1 -0
  63. package/dist/dtos/execute-workflow.dto.js +11 -0
  64. package/dist/dtos/execute-workflow.dto.js.map +1 -0
  65. package/dist/dtos/update-workflow-definition.dto.d.ts +15 -0
  66. package/dist/dtos/update-workflow-definition.dto.d.ts.map +1 -0
  67. package/dist/dtos/update-workflow-definition.dto.js +97 -0
  68. package/dist/dtos/update-workflow-definition.dto.js.map +1 -0
  69. package/dist/dtos/update-workflow-execution-artifact.dto.d.ts +23 -0
  70. package/dist/dtos/update-workflow-execution-artifact.dto.d.ts.map +1 -0
  71. package/dist/dtos/update-workflow-execution-artifact.dto.js +143 -0
  72. package/dist/dtos/update-workflow-execution-artifact.dto.js.map +1 -0
  73. package/dist/dtos/update-workflow-execution-log.dto.d.ts +19 -0
  74. package/dist/dtos/update-workflow-execution-log.dto.d.ts.map +1 -0
  75. package/dist/dtos/update-workflow-execution-log.dto.js +121 -0
  76. package/dist/dtos/update-workflow-execution-log.dto.js.map +1 -0
  77. package/dist/dtos/update-workflow-execution.dto.d.ts +34 -0
  78. package/dist/dtos/update-workflow-execution.dto.d.ts.map +1 -0
  79. package/dist/dtos/update-workflow-execution.dto.js +190 -0
  80. package/dist/dtos/update-workflow-execution.dto.js.map +1 -0
  81. package/dist/dtos/update-workflow-secret.dto.d.ts +12 -0
  82. package/dist/dtos/update-workflow-secret.dto.d.ts.map +1 -0
  83. package/dist/dtos/update-workflow-secret.dto.js +80 -0
  84. package/dist/dtos/update-workflow-secret.dto.js.map +1 -0
  85. package/dist/dtos/update-workflow-step-execution.dto.d.ts +28 -0
  86. package/dist/dtos/update-workflow-step-execution.dto.d.ts.map +1 -0
  87. package/dist/dtos/update-workflow-step-execution.dto.js +175 -0
  88. package/dist/dtos/update-workflow-step-execution.dto.js.map +1 -0
  89. package/dist/dtos/update-workflow-trigger-execution.dto.d.ts +26 -0
  90. package/dist/dtos/update-workflow-trigger-execution.dto.d.ts.map +1 -0
  91. package/dist/dtos/update-workflow-trigger-execution.dto.js +163 -0
  92. package/dist/dtos/update-workflow-trigger-execution.dto.js.map +1 -0
  93. package/dist/dtos/validate-workflow-definition.dto.d.ts +4 -0
  94. package/dist/dtos/validate-workflow-definition.dto.d.ts.map +1 -0
  95. package/dist/dtos/validate-workflow-definition.dto.js +11 -0
  96. package/dist/dtos/validate-workflow-definition.dto.js.map +1 -0
  97. package/dist/entities/saved-filters.entity.js +3 -3
  98. package/dist/entities/saved-filters.entity.js.map +1 -1
  99. package/dist/entities/workflow-definition.entity.d.ts +15 -0
  100. package/dist/entities/workflow-definition.entity.d.ts.map +1 -0
  101. package/dist/entities/workflow-definition.entity.js +77 -0
  102. package/dist/entities/workflow-definition.entity.js.map +1 -0
  103. package/dist/entities/workflow-execution-artifact.entity.d.ts +23 -0
  104. package/dist/entities/workflow-execution-artifact.entity.d.ts.map +1 -0
  105. package/dist/entities/workflow-execution-artifact.entity.js +113 -0
  106. package/dist/entities/workflow-execution-artifact.entity.js.map +1 -0
  107. package/dist/entities/workflow-execution-log.entity.d.ts +19 -0
  108. package/dist/entities/workflow-execution-log.entity.d.ts.map +1 -0
  109. package/dist/entities/workflow-execution-log.entity.js +95 -0
  110. package/dist/entities/workflow-execution-log.entity.js.map +1 -0
  111. package/dist/entities/workflow-execution.entity.d.ts +28 -0
  112. package/dist/entities/workflow-execution.entity.d.ts.map +1 -0
  113. package/dist/entities/workflow-execution.entity.js +124 -0
  114. package/dist/entities/workflow-execution.entity.js.map +1 -0
  115. package/dist/entities/workflow-secret.entity.d.ts +12 -0
  116. package/dist/entities/workflow-secret.entity.d.ts.map +1 -0
  117. package/dist/entities/workflow-secret.entity.js +66 -0
  118. package/dist/entities/workflow-secret.entity.js.map +1 -0
  119. package/dist/entities/workflow-step-execution.entity.d.ts +28 -0
  120. package/dist/entities/workflow-step-execution.entity.d.ts.map +1 -0
  121. package/dist/entities/workflow-step-execution.entity.js +138 -0
  122. package/dist/entities/workflow-step-execution.entity.js.map +1 -0
  123. package/dist/entities/workflow-trigger-execution.entity.d.ts +26 -0
  124. package/dist/entities/workflow-trigger-execution.entity.d.ts.map +1 -0
  125. package/dist/entities/workflow-trigger-execution.entity.js +127 -0
  126. package/dist/entities/workflow-trigger-execution.entity.js.map +1 -0
  127. package/dist/factories/sms.factory.d.ts.map +1 -1
  128. package/dist/factories/sms.factory.js +4 -1
  129. package/dist/factories/sms.factory.js.map +1 -1
  130. package/dist/index.d.ts +54 -0
  131. package/dist/index.d.ts.map +1 -1
  132. package/dist/index.js +54 -0
  133. package/dist/index.js.map +1 -1
  134. package/dist/interfaces/workflow-node-handler.interface.d.ts +5 -0
  135. package/dist/interfaces/workflow-node-handler.interface.d.ts.map +1 -0
  136. package/dist/interfaces/workflow-node-handler.interface.js +3 -0
  137. package/dist/interfaces/workflow-node-handler.interface.js.map +1 -0
  138. package/dist/jobs/database/workflow-execution-publisher-database.service.d.ts +12 -0
  139. package/dist/jobs/database/workflow-execution-publisher-database.service.d.ts.map +1 -0
  140. package/dist/jobs/database/workflow-execution-publisher-database.service.js +39 -0
  141. package/dist/jobs/database/workflow-execution-publisher-database.service.js.map +1 -0
  142. package/dist/jobs/database/workflow-execution-queue-options-database.d.ts +8 -0
  143. package/dist/jobs/database/workflow-execution-queue-options-database.d.ts.map +1 -0
  144. package/dist/jobs/database/workflow-execution-queue-options-database.js +10 -0
  145. package/dist/jobs/database/workflow-execution-queue-options-database.js.map +1 -0
  146. package/dist/jobs/database/workflow-execution-subscriber-database.service.d.ts +19 -0
  147. package/dist/jobs/database/workflow-execution-subscriber-database.service.d.ts.map +1 -0
  148. package/dist/jobs/database/workflow-execution-subscriber-database.service.js +55 -0
  149. package/dist/jobs/database/workflow-execution-subscriber-database.service.js.map +1 -0
  150. package/dist/jobs/rabbitmq/workflow-execution-publisher.service.d.ts +12 -0
  151. package/dist/jobs/rabbitmq/workflow-execution-publisher.service.d.ts.map +1 -0
  152. package/dist/jobs/rabbitmq/workflow-execution-publisher.service.js +39 -0
  153. package/dist/jobs/rabbitmq/workflow-execution-publisher.service.js.map +1 -0
  154. package/dist/jobs/rabbitmq/workflow-execution-queue-options.d.ts +8 -0
  155. package/dist/jobs/rabbitmq/workflow-execution-queue-options.d.ts.map +1 -0
  156. package/dist/jobs/rabbitmq/workflow-execution-queue-options.js +10 -0
  157. package/dist/jobs/rabbitmq/workflow-execution-queue-options.js.map +1 -0
  158. package/dist/jobs/rabbitmq/workflow-execution-subscriber.service.d.ts +17 -0
  159. package/dist/jobs/rabbitmq/workflow-execution-subscriber.service.d.ts.map +1 -0
  160. package/dist/jobs/rabbitmq/workflow-execution-subscriber.service.js +52 -0
  161. package/dist/jobs/rabbitmq/workflow-execution-subscriber.service.js.map +1 -0
  162. package/dist/jobs/redis/workflow-execution-publisher-redis.service.d.ts +12 -0
  163. package/dist/jobs/redis/workflow-execution-publisher-redis.service.d.ts.map +1 -0
  164. package/dist/jobs/redis/workflow-execution-publisher-redis.service.js +39 -0
  165. package/dist/jobs/redis/workflow-execution-publisher-redis.service.js.map +1 -0
  166. package/dist/jobs/redis/workflow-execution-queue-options-redis.d.ts +8 -0
  167. package/dist/jobs/redis/workflow-execution-queue-options-redis.d.ts.map +1 -0
  168. package/dist/jobs/redis/workflow-execution-queue-options-redis.js +10 -0
  169. package/dist/jobs/redis/workflow-execution-queue-options-redis.js.map +1 -0
  170. package/dist/jobs/redis/workflow-execution-subscriber-redis.service.d.ts +17 -0
  171. package/dist/jobs/redis/workflow-execution-subscriber-redis.service.d.ts.map +1 -0
  172. package/dist/jobs/redis/workflow-execution-subscriber-redis.service.js +52 -0
  173. package/dist/jobs/redis/workflow-execution-subscriber-redis.service.js.map +1 -0
  174. package/dist/repository/workflow-definition.repository.d.ts +12 -0
  175. package/dist/repository/workflow-definition.repository.d.ts.map +1 -0
  176. package/dist/repository/workflow-definition.repository.js +39 -0
  177. package/dist/repository/workflow-definition.repository.js.map +1 -0
  178. package/dist/repository/workflow-execution-artifact.repository.d.ts +12 -0
  179. package/dist/repository/workflow-execution-artifact.repository.d.ts.map +1 -0
  180. package/dist/repository/workflow-execution-artifact.repository.js +39 -0
  181. package/dist/repository/workflow-execution-artifact.repository.js.map +1 -0
  182. package/dist/repository/workflow-execution-log.repository.d.ts +12 -0
  183. package/dist/repository/workflow-execution-log.repository.d.ts.map +1 -0
  184. package/dist/repository/workflow-execution-log.repository.js +39 -0
  185. package/dist/repository/workflow-execution-log.repository.js.map +1 -0
  186. package/dist/repository/workflow-execution.repository.d.ts +12 -0
  187. package/dist/repository/workflow-execution.repository.d.ts.map +1 -0
  188. package/dist/repository/workflow-execution.repository.js +39 -0
  189. package/dist/repository/workflow-execution.repository.js.map +1 -0
  190. package/dist/repository/workflow-secret.repository.d.ts +12 -0
  191. package/dist/repository/workflow-secret.repository.d.ts.map +1 -0
  192. package/dist/repository/workflow-secret.repository.js +39 -0
  193. package/dist/repository/workflow-secret.repository.js.map +1 -0
  194. package/dist/repository/workflow-step-execution.repository.d.ts +12 -0
  195. package/dist/repository/workflow-step-execution.repository.d.ts.map +1 -0
  196. package/dist/repository/workflow-step-execution.repository.js +39 -0
  197. package/dist/repository/workflow-step-execution.repository.js.map +1 -0
  198. package/dist/repository/workflow-trigger-execution.repository.d.ts +12 -0
  199. package/dist/repository/workflow-trigger-execution.repository.d.ts.map +1 -0
  200. package/dist/repository/workflow-trigger-execution.repository.js +39 -0
  201. package/dist/repository/workflow-trigger-execution.repository.js.map +1 -0
  202. package/dist/seeders/module-metadata-seeder.service.d.ts +6 -0
  203. package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
  204. package/dist/seeders/module-metadata-seeder.service.js +141 -0
  205. package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
  206. package/dist/seeders/seed-data/solid-core-metadata.json +11437 -5567
  207. package/dist/services/workflow/nodes/for-each.node.d.ts +6 -0
  208. package/dist/services/workflow/nodes/for-each.node.d.ts.map +1 -0
  209. package/dist/services/workflow/nodes/for-each.node.js +95 -0
  210. package/dist/services/workflow/nodes/for-each.node.js.map +1 -0
  211. package/dist/services/workflow/nodes/http-request.node.d.ts +13 -0
  212. package/dist/services/workflow/nodes/http-request.node.d.ts.map +1 -0
  213. package/dist/services/workflow/nodes/http-request.node.js +549 -0
  214. package/dist/services/workflow/nodes/http-request.node.js.map +1 -0
  215. package/dist/services/workflow/nodes/if.node.d.ts +6 -0
  216. package/dist/services/workflow/nodes/if.node.d.ts.map +1 -0
  217. package/dist/services/workflow/nodes/if.node.js +93 -0
  218. package/dist/services/workflow/nodes/if.node.js.map +1 -0
  219. package/dist/services/workflow/nodes/log-write.node.d.ts +6 -0
  220. package/dist/services/workflow/nodes/log-write.node.d.ts.map +1 -0
  221. package/dist/services/workflow/nodes/log-write.node.js +229 -0
  222. package/dist/services/workflow/nodes/log-write.node.js.map +1 -0
  223. package/dist/services/workflow/nodes/parallel.node.d.ts +6 -0
  224. package/dist/services/workflow/nodes/parallel.node.d.ts.map +1 -0
  225. package/dist/services/workflow/nodes/parallel.node.js +76 -0
  226. package/dist/services/workflow/nodes/parallel.node.js.map +1 -0
  227. package/dist/services/workflow/nodes/runtime-python.node.d.ts +13 -0
  228. package/dist/services/workflow/nodes/runtime-python.node.d.ts.map +1 -0
  229. package/dist/services/workflow/nodes/runtime-python.node.js +522 -0
  230. package/dist/services/workflow/nodes/runtime-python.node.js.map +1 -0
  231. package/dist/services/workflow/nodes/sequential.node.d.ts +6 -0
  232. package/dist/services/workflow/nodes/sequential.node.d.ts.map +1 -0
  233. package/dist/services/workflow/nodes/sequential.node.js +61 -0
  234. package/dist/services/workflow/nodes/sequential.node.js.map +1 -0
  235. package/dist/services/workflow/nodes/solidx-api.helpers.d.ts +25 -0
  236. package/dist/services/workflow/nodes/solidx-api.helpers.d.ts.map +1 -0
  237. package/dist/services/workflow/nodes/solidx-api.helpers.js +143 -0
  238. package/dist/services/workflow/nodes/solidx-api.helpers.js.map +1 -0
  239. package/dist/services/workflow/nodes/solidx-crud.nodes.d.ts +48 -0
  240. package/dist/services/workflow/nodes/solidx-crud.nodes.d.ts.map +1 -0
  241. package/dist/services/workflow/nodes/solidx-crud.nodes.js +475 -0
  242. package/dist/services/workflow/nodes/solidx-crud.nodes.js.map +1 -0
  243. package/dist/services/workflow/nodes/solidx-login.node.d.ts +6 -0
  244. package/dist/services/workflow/nodes/solidx-login.node.d.ts.map +1 -0
  245. package/dist/services/workflow/nodes/solidx-login.node.js +208 -0
  246. package/dist/services/workflow/nodes/solidx-login.node.js.map +1 -0
  247. package/dist/services/workflow/nodes/solidx-send-email.node.d.ts +11 -0
  248. package/dist/services/workflow/nodes/solidx-send-email.node.d.ts.map +1 -0
  249. package/dist/services/workflow/nodes/solidx-send-email.node.js +437 -0
  250. package/dist/services/workflow/nodes/solidx-send-email.node.js.map +1 -0
  251. package/dist/services/workflow/nodes/solidx-send-sms.node.d.ts +10 -0
  252. package/dist/services/workflow/nodes/solidx-send-sms.node.d.ts.map +1 -0
  253. package/dist/services/workflow/nodes/solidx-send-sms.node.js +347 -0
  254. package/dist/services/workflow/nodes/solidx-send-sms.node.js.map +1 -0
  255. package/dist/services/workflow/nodes/switch.node.d.ts +7 -0
  256. package/dist/services/workflow/nodes/switch.node.d.ts.map +1 -0
  257. package/dist/services/workflow/nodes/switch.node.js +113 -0
  258. package/dist/services/workflow/nodes/switch.node.js.map +1 -0
  259. package/dist/services/workflow/workflow-definition-metadata-sync.service.d.ts +19 -0
  260. package/dist/services/workflow/workflow-definition-metadata-sync.service.d.ts.map +1 -0
  261. package/dist/services/workflow/workflow-definition-metadata-sync.service.js +187 -0
  262. package/dist/services/workflow/workflow-definition-metadata-sync.service.js.map +1 -0
  263. package/dist/services/workflow/workflow-definition-validator.service.d.ts +13 -0
  264. package/dist/services/workflow/workflow-definition-validator.service.d.ts.map +1 -0
  265. package/dist/services/workflow/workflow-definition-validator.service.js +163 -0
  266. package/dist/services/workflow/workflow-definition-validator.service.js.map +1 -0
  267. package/dist/services/workflow/workflow-execution-writer.service.d.ts +26 -0
  268. package/dist/services/workflow/workflow-execution-writer.service.d.ts.map +1 -0
  269. package/dist/services/workflow/workflow-execution-writer.service.js +191 -0
  270. package/dist/services/workflow/workflow-execution-writer.service.js.map +1 -0
  271. package/dist/services/workflow/workflow-expression.service.d.ts +14 -0
  272. package/dist/services/workflow/workflow-expression.service.d.ts.map +1 -0
  273. package/dist/services/workflow/workflow-expression.service.js +152 -0
  274. package/dist/services/workflow/workflow-expression.service.js.map +1 -0
  275. package/dist/services/workflow/workflow-invocation.service.d.ts +11 -0
  276. package/dist/services/workflow/workflow-invocation.service.d.ts.map +1 -0
  277. package/dist/services/workflow/workflow-invocation.service.js +37 -0
  278. package/dist/services/workflow/workflow-invocation.service.js.map +1 -0
  279. package/dist/services/workflow/workflow-node-registry.service.d.ts +18 -0
  280. package/dist/services/workflow/workflow-node-registry.service.d.ts.map +1 -0
  281. package/dist/services/workflow/workflow-node-registry.service.js +110 -0
  282. package/dist/services/workflow/workflow-node-registry.service.js.map +1 -0
  283. package/dist/services/workflow/workflow-runtime.service.d.ts +53 -0
  284. package/dist/services/workflow/workflow-runtime.service.d.ts.map +1 -0
  285. package/dist/services/workflow/workflow-runtime.service.js +541 -0
  286. package/dist/services/workflow/workflow-runtime.service.js.map +1 -0
  287. package/dist/services/workflow/workflow-scheduled-trigger.job.d.ts +10 -0
  288. package/dist/services/workflow/workflow-scheduled-trigger.job.d.ts.map +1 -0
  289. package/dist/services/workflow/workflow-scheduled-trigger.job.js +37 -0
  290. package/dist/services/workflow/workflow-scheduled-trigger.job.js.map +1 -0
  291. package/dist/services/workflow-definition.service.d.ts +52 -0
  292. package/dist/services/workflow-definition.service.d.ts.map +1 -0
  293. package/dist/services/workflow-definition.service.js +251 -0
  294. package/dist/services/workflow-definition.service.js.map +1 -0
  295. package/dist/services/workflow-execution-artifact.service.d.ts +12 -0
  296. package/dist/services/workflow-execution-artifact.service.d.ts.map +1 -0
  297. package/dist/services/workflow-execution-artifact.service.js +38 -0
  298. package/dist/services/workflow-execution-artifact.service.js.map +1 -0
  299. package/dist/services/workflow-execution-log.service.d.ts +12 -0
  300. package/dist/services/workflow-execution-log.service.d.ts.map +1 -0
  301. package/dist/services/workflow-execution-log.service.js +38 -0
  302. package/dist/services/workflow-execution-log.service.js.map +1 -0
  303. package/dist/services/workflow-execution.service.d.ts +12 -0
  304. package/dist/services/workflow-execution.service.d.ts.map +1 -0
  305. package/dist/services/workflow-execution.service.js +38 -0
  306. package/dist/services/workflow-execution.service.js.map +1 -0
  307. package/dist/services/workflow-secret.service.d.ts +25 -0
  308. package/dist/services/workflow-secret.service.d.ts.map +1 -0
  309. package/dist/services/workflow-secret.service.js +152 -0
  310. package/dist/services/workflow-secret.service.js.map +1 -0
  311. package/dist/services/workflow-step-execution.service.d.ts +12 -0
  312. package/dist/services/workflow-step-execution.service.d.ts.map +1 -0
  313. package/dist/services/workflow-step-execution.service.js +38 -0
  314. package/dist/services/workflow-step-execution.service.js.map +1 -0
  315. package/dist/services/workflow-trigger-execution.service.d.ts +12 -0
  316. package/dist/services/workflow-trigger-execution.service.d.ts.map +1 -0
  317. package/dist/services/workflow-trigger-execution.service.js +38 -0
  318. package/dist/services/workflow-trigger-execution.service.js.map +1 -0
  319. package/dist/solid-core.module.d.ts.map +1 -1
  320. package/dist/solid-core.module.js +117 -0
  321. package/dist/solid-core.module.js.map +1 -1
  322. package/dist/transformers/empty-string-to-null-transformer.d.ts +4 -0
  323. package/dist/transformers/empty-string-to-null-transformer.d.ts.map +1 -0
  324. package/dist/transformers/empty-string-to-null-transformer.js +12 -0
  325. package/dist/transformers/empty-string-to-null-transformer.js.map +1 -0
  326. package/dist/types/workflow-dsl.types.d.ts +277 -0
  327. package/dist/types/workflow-dsl.types.d.ts.map +1 -0
  328. package/dist/types/workflow-dsl.types.js +3 -0
  329. package/dist/types/workflow-dsl.types.js.map +1 -0
  330. package/dist/types/workflow-execution-queue.types.d.ts +4 -0
  331. package/dist/types/workflow-execution-queue.types.d.ts.map +1 -0
  332. package/dist/types/workflow-execution-queue.types.js +3 -0
  333. package/dist/types/workflow-execution-queue.types.js.map +1 -0
  334. package/package.json +3 -2
  335. package/src/controllers/workflow-definition.controller.ts +141 -0
  336. package/src/controllers/workflow-execution-artifact.controller.ts +93 -0
  337. package/src/controllers/workflow-execution-log.controller.ts +93 -0
  338. package/src/controllers/workflow-execution.controller.ts +126 -0
  339. package/src/controllers/workflow-secret.controller.ts +90 -0
  340. package/src/controllers/workflow-step-execution.controller.ts +93 -0
  341. package/src/controllers/workflow-trigger-execution.controller.ts +93 -0
  342. package/src/decorators/workflow-node-provider.decorator.ts +14 -0
  343. package/src/dtos/create-workflow-definition.dto.ts +60 -0
  344. package/src/dtos/create-workflow-execution-artifact.dto.ts +99 -0
  345. package/src/dtos/create-workflow-execution-log.dto.ts +80 -0
  346. package/src/dtos/create-workflow-execution.dto.ts +137 -0
  347. package/src/dtos/create-workflow-secret.dto.ts +44 -0
  348. package/src/dtos/create-workflow-step-execution.dto.ts +123 -0
  349. package/src/dtos/create-workflow-trigger-execution.dto.ts +114 -0
  350. package/src/dtos/execute-workflow.dto.ts +6 -0
  351. package/src/dtos/update-workflow-definition.dto.ts +67 -0
  352. package/src/dtos/update-workflow-execution-artifact.dto.ts +105 -0
  353. package/src/dtos/update-workflow-execution-log.dto.ts +87 -0
  354. package/src/dtos/update-workflow-execution.dto.ts +144 -0
  355. package/src/dtos/update-workflow-secret.dto.ts +53 -0
  356. package/src/dtos/update-workflow-step-execution.dto.ts +132 -0
  357. package/src/dtos/update-workflow-trigger-execution.dto.ts +122 -0
  358. package/src/dtos/validate-workflow-definition.dto.ts +3 -0
  359. package/src/entities/saved-filters.entity.ts +3 -3
  360. package/src/entities/workflow-definition.entity.ts +43 -0
  361. package/src/entities/workflow-execution-artifact.entity.ts +72 -0
  362. package/src/entities/workflow-execution-log.entity.ts +58 -0
  363. package/src/entities/workflow-execution.entity.ts +82 -0
  364. package/src/entities/workflow-secret.entity.ts +33 -0
  365. package/src/entities/workflow-step-execution.entity.ts +88 -0
  366. package/src/entities/workflow-trigger-execution.entity.ts +82 -0
  367. package/src/factories/sms.factory.ts +4 -1
  368. package/src/index.ts +54 -0
  369. package/src/interfaces/workflow-node-handler.interface.ts +10 -0
  370. package/src/jobs/database/workflow-execution-publisher-database.service.ts +24 -0
  371. package/src/jobs/database/workflow-execution-queue-options-database.ts +9 -0
  372. package/src/jobs/database/workflow-execution-subscriber-database.service.ts +44 -0
  373. package/src/jobs/rabbitmq/workflow-execution-publisher.service.ts +24 -0
  374. package/src/jobs/rabbitmq/workflow-execution-queue-options.ts +9 -0
  375. package/src/jobs/rabbitmq/workflow-execution-subscriber.service.ts +42 -0
  376. package/src/jobs/redis/workflow-execution-publisher-redis.service.ts +24 -0
  377. package/src/jobs/redis/workflow-execution-queue-options-redis.ts +9 -0
  378. package/src/jobs/redis/workflow-execution-subscriber-redis.service.ts +42 -0
  379. package/src/repository/workflow-definition.repository.ts +19 -0
  380. package/src/repository/workflow-execution-artifact.repository.ts +19 -0
  381. package/src/repository/workflow-execution-log.repository.ts +19 -0
  382. package/src/repository/workflow-execution.repository.ts +19 -0
  383. package/src/repository/workflow-secret.repository.ts +19 -0
  384. package/src/repository/workflow-step-execution.repository.ts +19 -0
  385. package/src/repository/workflow-trigger-execution.repository.ts +19 -0
  386. package/src/seeders/module-metadata-seeder.service.ts +166 -4
  387. package/src/seeders/seed-data/solid-core-metadata.json +11437 -5567
  388. package/src/services/workflow/nodes/for-each.node.ts +97 -0
  389. package/src/services/workflow/nodes/http-request.node.ts +624 -0
  390. package/src/services/workflow/nodes/if.node.ts +93 -0
  391. package/src/services/workflow/nodes/log-write.node.ts +232 -0
  392. package/src/services/workflow/nodes/parallel.node.ts +81 -0
  393. package/src/services/workflow/nodes/runtime-python.node.ts +571 -0
  394. package/src/services/workflow/nodes/sequential.node.ts +58 -0
  395. package/src/services/workflow/nodes/solidx-api.helpers.ts +205 -0
  396. package/src/services/workflow/nodes/solidx-crud.nodes.ts +511 -0
  397. package/src/services/workflow/nodes/solidx-login.node.ts +222 -0
  398. package/src/services/workflow/nodes/solidx-send-email.node.ts +489 -0
  399. package/src/services/workflow/nodes/solidx-send-sms.node.ts +377 -0
  400. package/src/services/workflow/nodes/switch.node.ts +125 -0
  401. package/src/services/workflow/workflow-definition-metadata-sync.service.ts +196 -0
  402. package/src/services/workflow/workflow-definition-validator.service.ts +223 -0
  403. package/src/services/workflow/workflow-execution-writer.service.ts +244 -0
  404. package/src/services/workflow/workflow-expression.service.ts +175 -0
  405. package/src/services/workflow/workflow-invocation.service.ts +39 -0
  406. package/src/services/workflow/workflow-node-registry.service.ts +141 -0
  407. package/src/services/workflow/workflow-runtime.service.ts +699 -0
  408. package/src/services/workflow/workflow-scheduled-trigger.job.ts +33 -0
  409. package/src/services/workflow-definition.service.ts +293 -0
  410. package/src/services/workflow-execution-artifact.service.ts +20 -0
  411. package/src/services/workflow-execution-log.service.ts +20 -0
  412. package/src/services/workflow-execution.service.ts +20 -0
  413. package/src/services/workflow-secret.service.ts +161 -0
  414. package/src/services/workflow-step-execution.service.ts +20 -0
  415. package/src/services/workflow-trigger-execution.service.ts +20 -0
  416. package/src/solid-core.module.ts +124 -0
  417. package/src/transformers/empty-string-to-null-transformer.ts +11 -0
  418. package/src/types/workflow-dsl.types.ts +987 -0
  419. package/src/types/workflow-execution-queue.types.ts +3 -0
@@ -0,0 +1,205 @@
1
+ import { BadRequestException } from '@nestjs/common';
2
+
3
+ export type SolidXCrudOperation =
4
+ | 'list'
5
+ | 'get'
6
+ | 'create'
7
+ | 'update'
8
+ | 'patch'
9
+ | 'delete';
10
+
11
+ export interface SolidXRequestOptions {
12
+ apiBaseUrl: string;
13
+ path: string;
14
+ method: string;
15
+ accessToken?: string;
16
+ headers?: Record<string, any>;
17
+ query?: any;
18
+ body?: any;
19
+ timeoutMs?: number;
20
+ }
21
+
22
+ export interface SolidXRequestResult {
23
+ ok: boolean;
24
+ status: number;
25
+ statusText: string;
26
+ headers: Record<string, string>;
27
+ data: any;
28
+ raw: any;
29
+ uri: string;
30
+ method: string;
31
+ }
32
+
33
+ export async function executeSolidXRequest(
34
+ options: SolidXRequestOptions,
35
+ ): Promise<SolidXRequestResult> {
36
+ const fetchImpl = globalThis.fetch;
37
+ if (!fetchImpl) {
38
+ throw new BadRequestException('global fetch is not available.');
39
+ }
40
+
41
+ const uri = buildSolidXUri(options.apiBaseUrl, options.path, options.query);
42
+ const headers = normalizeHeaders(options.headers);
43
+
44
+ if (options.accessToken) {
45
+ setHeaderIfMissing(headers, 'Authorization', `Bearer ${options.accessToken}`);
46
+ }
47
+
48
+ let body: any;
49
+ if (options.body !== undefined && options.body !== null) {
50
+ setHeaderIfMissing(headers, 'Content-Type', 'application/json');
51
+ body =
52
+ typeof options.body === 'string'
53
+ ? options.body
54
+ : JSON.stringify(options.body);
55
+ }
56
+
57
+ const controller = new AbortController();
58
+ const timeout = setTimeout(
59
+ () => controller.abort(),
60
+ options.timeoutMs ?? 30000,
61
+ );
62
+
63
+ try {
64
+ const response = await fetchImpl(uri, {
65
+ method: options.method,
66
+ headers,
67
+ body,
68
+ signal: controller.signal,
69
+ } as any);
70
+
71
+ const responseHeaders: Record<string, string> = {};
72
+ response.headers.forEach((value, key) => {
73
+ responseHeaders[key] = value;
74
+ });
75
+
76
+ const text = await response.text();
77
+ const parsed = parseBody(text);
78
+
79
+ return {
80
+ ok: response.ok,
81
+ status: response.status,
82
+ statusText: response.statusText,
83
+ headers: responseHeaders,
84
+ data: unwrapSolidXData(parsed),
85
+ raw: parsed,
86
+ uri,
87
+ method: options.method,
88
+ };
89
+ } finally {
90
+ clearTimeout(timeout);
91
+ }
92
+ }
93
+
94
+ export function buildSolidXPath(model: string, id?: any): string {
95
+ const normalizedModel = normalizeModelPath(model);
96
+ if (!normalizedModel) {
97
+ throw new BadRequestException('SolidX model is required.');
98
+ }
99
+
100
+ if (id === undefined || id === null || id === '') {
101
+ return normalizedModel;
102
+ }
103
+
104
+ return `${normalizedModel}/${encodeURIComponent(String(id))}`;
105
+ }
106
+
107
+ export function normalizeModelPath(model: string): string {
108
+ return String(model ?? '')
109
+ .trim()
110
+ .replace(/^\/+/, '')
111
+ .replace(/^api\//i, '')
112
+ .replace(/\/+$/, '');
113
+ }
114
+
115
+ function buildSolidXUri(apiBaseUrl: string, path: string, query: any): string {
116
+ if (!apiBaseUrl) {
117
+ throw new BadRequestException('SolidX API base URL is required.');
118
+ }
119
+
120
+ const base = String(apiBaseUrl).trim().replace(/\/+$/, '');
121
+ const normalizedPath = String(path ?? '').replace(/^\/+/, '');
122
+ const url = new URL(`${base}/api/${normalizedPath}`);
123
+
124
+ appendQuery(url, query);
125
+ return url.toString();
126
+ }
127
+
128
+ function appendQuery(url: URL, query: any) {
129
+ if (!query || typeof query !== 'object') {
130
+ return;
131
+ }
132
+
133
+ const appendValue = (key: string, value: any) => {
134
+ if (!key || value === undefined || value === null || value === '') {
135
+ return;
136
+ }
137
+ if (Array.isArray(value)) {
138
+ value.forEach((item) => appendValue(key, item));
139
+ return;
140
+ }
141
+ if (typeof value === 'object') {
142
+ url.searchParams.append(key, JSON.stringify(value));
143
+ return;
144
+ }
145
+ url.searchParams.append(key, String(value));
146
+ };
147
+
148
+ if (Array.isArray(query)) {
149
+ query.forEach((item) => {
150
+ appendValue(String(item?.key ?? item?.name ?? ''), item?.value);
151
+ });
152
+ return;
153
+ }
154
+
155
+ Object.entries(query).forEach(([key, value]) => appendValue(key, value));
156
+ }
157
+
158
+ function normalizeHeaders(headers: any): Record<string, string> {
159
+ if (!headers || typeof headers !== 'object' || Array.isArray(headers)) {
160
+ return {};
161
+ }
162
+
163
+ return Object.entries(headers).reduce<Record<string, string>>(
164
+ (acc, [key, value]) => {
165
+ if (value === undefined || value === null) {
166
+ return acc;
167
+ }
168
+ acc[key] = String(value);
169
+ return acc;
170
+ },
171
+ {},
172
+ );
173
+ }
174
+
175
+ function setHeaderIfMissing(
176
+ headers: Record<string, string>,
177
+ name: string,
178
+ value: string,
179
+ ) {
180
+ const existingKey = Object.keys(headers).find(
181
+ (key) => key.toLowerCase() === name.toLowerCase(),
182
+ );
183
+ if (!existingKey) {
184
+ headers[name] = value;
185
+ }
186
+ }
187
+
188
+ function parseBody(text: string): any {
189
+ if (!text) {
190
+ return null;
191
+ }
192
+
193
+ try {
194
+ return JSON.parse(text);
195
+ } catch {
196
+ return text;
197
+ }
198
+ }
199
+
200
+ function unwrapSolidXData(body: any): any {
201
+ if (body && typeof body === 'object' && 'data' in body) {
202
+ return body.data;
203
+ }
204
+ return body;
205
+ }
@@ -0,0 +1,511 @@
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
+ WorkflowNodeProviderMetadata,
8
+ } from '../../../types/workflow-dsl.types';
9
+ import {
10
+ buildSolidXPath,
11
+ executeSolidXRequest,
12
+ SolidXCrudOperation,
13
+ } from './solidx-api.helpers';
14
+
15
+ const fullWidthField = {
16
+ layout: {
17
+ width: 'full',
18
+ },
19
+ };
20
+
21
+ const jsonEditorField = {
22
+ ...fullWidthField,
23
+ editor: {
24
+ language: 'json',
25
+ },
26
+ };
27
+
28
+ const commonOutputs = [
29
+ {
30
+ key: 'ok',
31
+ label: 'OK',
32
+ description: 'Whether the SolidX API response was successful.',
33
+ valueType: 'boolean' as const,
34
+ path: 'ok',
35
+ },
36
+ {
37
+ key: 'status',
38
+ label: 'Status',
39
+ description: 'HTTP status code.',
40
+ valueType: 'integer' as const,
41
+ path: 'status',
42
+ },
43
+ {
44
+ key: 'data',
45
+ label: 'Data',
46
+ description: 'Unwrapped SolidX response data.',
47
+ valueType: 'any' as const,
48
+ path: 'data',
49
+ },
50
+ {
51
+ key: 'raw',
52
+ label: 'Raw Response',
53
+ description: 'Full response payload before SolidX data unwrapping.',
54
+ valueType: 'any' as const,
55
+ path: 'raw',
56
+ },
57
+ {
58
+ key: 'uri',
59
+ label: 'URI',
60
+ description: 'Final request URI.',
61
+ valueType: 'uri' as const,
62
+ path: 'uri',
63
+ },
64
+ ];
65
+
66
+ function createCrudMetadata(options: {
67
+ type: string;
68
+ label: string;
69
+ description: string;
70
+ operation: SolidXCrudOperation;
71
+ method: string;
72
+ requiresId?: boolean;
73
+ requiresData?: boolean;
74
+ icon: string;
75
+ iconColor: string;
76
+ iconBackgroundColor: string;
77
+ iconBorderColor: string;
78
+ }): WorkflowNodeProviderMetadata {
79
+ const required = ['apiBaseUrl', 'model', 'accessToken'];
80
+ if (options.requiresId) {
81
+ required.push('id');
82
+ }
83
+ if (options.requiresData) {
84
+ required.push('data');
85
+ }
86
+
87
+ return {
88
+ type: options.type,
89
+ kind: 'task',
90
+ version: '1.0.0',
91
+ category: 'integration',
92
+ subcategory: 'solidx',
93
+ label: options.label,
94
+ description: options.description,
95
+ tags: ['solidx', 'crud', options.operation, 'api', 'model'],
96
+ aliases: [`solid.${options.operation}`, `solidx.${options.method.toLowerCase()}`],
97
+ configSchema: {
98
+ type: 'object',
99
+ required,
100
+ properties: {
101
+ apiBaseUrl: { type: 'string' },
102
+ model: { type: 'string' },
103
+ id: {},
104
+ accessToken: { type: 'string' },
105
+ query: { type: 'object', default: {} },
106
+ data: {},
107
+ headers: { type: 'object', default: {} },
108
+ timeoutMs: { type: 'number', default: 30000 },
109
+ },
110
+ },
111
+ outputSchema: {
112
+ type: 'object',
113
+ properties: {
114
+ ok: { type: 'boolean' },
115
+ status: { type: 'number' },
116
+ statusText: { type: 'string' },
117
+ headers: { type: 'object' },
118
+ data: {},
119
+ raw: {},
120
+ uri: { type: 'string' },
121
+ method: { type: 'string' },
122
+ model: { type: 'string' },
123
+ id: {},
124
+ operation: { type: 'string' },
125
+ },
126
+ },
127
+ examples: [
128
+ {
129
+ key: `${options.operation}-example`,
130
+ label: options.label,
131
+ description:
132
+ 'Use expressions to pass tokens and values from earlier workflow steps.',
133
+ language: 'yaml',
134
+ snippet: buildExampleSnippet(options.operation),
135
+ configurationOnly: true,
136
+ },
137
+ ],
138
+ definitions: [
139
+ {
140
+ key: 'model-field',
141
+ label: 'Model/resource field',
142
+ content:
143
+ 'The model field is the SolidX REST resource slug, for example `user`, `workflow-definition`, or `model-metadata`. Leading `/api/` is accepted and normalized.',
144
+ },
145
+ {
146
+ key: 'expression-fields',
147
+ label: 'Expression-enabled fields',
148
+ content:
149
+ 'Access tokens, ids, query values, and JSON payloads may use expressions such as `{{ outputs.login.accessToken }}` or `{{ outputs.findUser.data.id }}`.',
150
+ },
151
+ ],
152
+ authoring: {
153
+ defaultConfiguration: {
154
+ query: {},
155
+ headers: {},
156
+ timeoutMs: 30000,
157
+ },
158
+ configurationFields: [
159
+ {
160
+ key: 'apiBaseUrl',
161
+ label: 'API Base URL',
162
+ description:
163
+ 'Base URL of the SolidX API host, without /api. Expressions are allowed.',
164
+ valueType: 'uri',
165
+ required: true,
166
+ expressionAllowed: true,
167
+ group: 'Request',
168
+ uiSchema: fullWidthField,
169
+ },
170
+ {
171
+ key: 'model',
172
+ label: 'Model',
173
+ description:
174
+ 'SolidX REST resource slug, for example user or workflow-definition.',
175
+ valueType: 'string',
176
+ required: true,
177
+ expressionAllowed: true,
178
+ group: 'Request',
179
+ uiSchema: fullWidthField,
180
+ },
181
+ {
182
+ key: 'id',
183
+ label: 'Record ID',
184
+ description: 'Record identifier. Expressions are allowed.',
185
+ valueType: 'any',
186
+ required: options.requiresId,
187
+ expressionAllowed: true,
188
+ group: 'Request',
189
+ uiSchema: {
190
+ ...fullWidthField,
191
+ visibleWhen: {
192
+ field: 'model',
193
+ isSet: true,
194
+ },
195
+ },
196
+ },
197
+ {
198
+ key: 'accessToken',
199
+ label: 'Access Token',
200
+ description:
201
+ 'Bearer token, typically {{ outputs.login.accessToken }}.',
202
+ valueType: 'secret',
203
+ required: true,
204
+ expressionAllowed: true,
205
+ secretAllowed: true,
206
+ group: 'Authentication',
207
+ uiSchema: fullWidthField,
208
+ },
209
+ {
210
+ key: 'query',
211
+ label: 'Query Parameters',
212
+ description: 'Optional query-string parameters. Expressions are allowed.',
213
+ valueType: 'object',
214
+ expressionAllowed: true,
215
+ group: 'Request',
216
+ widgetHint: 'key-value-editor',
217
+ uiSchema: fullWidthField,
218
+ },
219
+ {
220
+ key: 'data',
221
+ label: 'JSON Data',
222
+ description:
223
+ 'JSON request payload for create, update, or patch. Expressions are allowed.',
224
+ valueType: 'object',
225
+ required: options.requiresData,
226
+ expressionAllowed: true,
227
+ group: 'Payload',
228
+ widgetHint: 'json-editor',
229
+ uiSchema: jsonEditorField,
230
+ },
231
+ {
232
+ key: 'headers',
233
+ label: 'Headers',
234
+ description:
235
+ 'Optional extra headers. Authorization and Content-Type are handled automatically unless overridden.',
236
+ valueType: 'object',
237
+ expressionAllowed: true,
238
+ group: 'Advanced',
239
+ widgetHint: 'key-value-editor',
240
+ uiSchema: fullWidthField,
241
+ },
242
+ {
243
+ key: 'timeoutMs',
244
+ label: 'Timeout (ms)',
245
+ description: 'Abort the request after this many milliseconds.',
246
+ valueType: 'number',
247
+ defaultValue: 30000,
248
+ group: 'Advanced',
249
+ uiSchema: fullWidthField,
250
+ },
251
+ ],
252
+ outputs: commonOutputs,
253
+ supportsExpressions: true,
254
+ supportsRetryPolicy: true,
255
+ supportsTimeoutMs: true,
256
+ supportsOnError: true,
257
+ supportsDisableToggle: true,
258
+ supportsName: true,
259
+ supportsDescription: true,
260
+ searchableText: [
261
+ 'solidx',
262
+ 'solid',
263
+ 'crud',
264
+ options.operation,
265
+ 'model',
266
+ 'rest',
267
+ ],
268
+ },
269
+ runtime: {
270
+ emitsLogs: true,
271
+ emitsArtifacts: false,
272
+ deterministicOutputs: false,
273
+ executionMode: 'task',
274
+ successStatuses: ['success'],
275
+ },
276
+ documentation: {
277
+ summary: options.description,
278
+ },
279
+ ui: {
280
+ icon: options.icon,
281
+ iconColor: options.iconColor,
282
+ iconBackgroundColor: options.iconBackgroundColor,
283
+ iconBorderColor: options.iconBorderColor,
284
+ defaultEditorMode: 'schema',
285
+ modalSize: 'xl',
286
+ layoutHints: {
287
+ preferredPanel: 'flow',
288
+ groupOrder: ['Request', 'Authentication', 'Payload', 'Advanced'],
289
+ stickySummary: true,
290
+ },
291
+ },
292
+ };
293
+ }
294
+
295
+ abstract class BaseSolidXCrudNode implements WorkflowNodeHandler {
296
+ protected abstract readonly operation: SolidXCrudOperation;
297
+ protected abstract readonly method: string;
298
+ protected abstract readonly requiresId: boolean;
299
+ protected abstract readonly requiresData: boolean;
300
+
301
+ async execute(
302
+ context: WorkflowNodeExecutionContext,
303
+ ): Promise<WorkflowNodeHandlerResult> {
304
+ const configuration = context.expression.interpolate(
305
+ context.node.configuration ?? {},
306
+ context,
307
+ );
308
+
309
+ const id = configuration.id;
310
+ if (this.requiresId && (id === undefined || id === null || id === '')) {
311
+ throw new BadRequestException(
312
+ `${context.node.type} requires configuration.id.`,
313
+ );
314
+ }
315
+
316
+ if (
317
+ this.requiresData &&
318
+ (configuration.data === undefined || configuration.data === null)
319
+ ) {
320
+ throw new BadRequestException(
321
+ `${context.node.type} requires configuration.data.`,
322
+ );
323
+ }
324
+
325
+ const result = await executeSolidXRequest({
326
+ apiBaseUrl: configuration.apiBaseUrl,
327
+ path: buildSolidXPath(configuration.model, id),
328
+ method: this.method,
329
+ accessToken: configuration.accessToken,
330
+ headers: configuration.headers,
331
+ query: configuration.query,
332
+ body: this.requiresData ? configuration.data : undefined,
333
+ timeoutMs: configuration.timeoutMs ?? context.node.timeoutMs ?? 30000,
334
+ });
335
+
336
+ await context.emitLog({
337
+ level: result.ok ? 'info' : 'warn',
338
+ eventType: `node.solidx.${this.operation}`,
339
+ source: context.node.type,
340
+ message: `SolidX ${this.operation} ${configuration.model} returned ${result.status}.`,
341
+ metadata: {
342
+ model: configuration.model,
343
+ id,
344
+ status: result.status,
345
+ },
346
+ });
347
+
348
+ return {
349
+ output: {
350
+ ok: result.ok,
351
+ status: result.status,
352
+ statusText: result.statusText,
353
+ headers: result.headers,
354
+ data: result.data,
355
+ raw: result.raw,
356
+ uri: result.uri,
357
+ method: result.method,
358
+ model: configuration.model,
359
+ id,
360
+ operation: this.operation,
361
+ },
362
+ };
363
+ }
364
+ }
365
+
366
+ @WorkflowNodeProvider(
367
+ createCrudMetadata({
368
+ type: 'solidx.list',
369
+ label: 'SolidX List',
370
+ description: 'Lists records from any SolidX model/resource.',
371
+ operation: 'list',
372
+ method: 'GET',
373
+ icon: 'si-th-large',
374
+ iconColor: '#2563eb',
375
+ iconBackgroundColor: '#dbeafe',
376
+ iconBorderColor: '#bfdbfe',
377
+ }),
378
+ )
379
+ export class SolidXListNode extends BaseSolidXCrudNode {
380
+ protected readonly operation = 'list' as const;
381
+ protected readonly method = 'GET';
382
+ protected readonly requiresId = false;
383
+ protected readonly requiresData = false;
384
+ }
385
+
386
+ @WorkflowNodeProvider(
387
+ createCrudMetadata({
388
+ type: 'solidx.get',
389
+ label: 'SolidX Get',
390
+ description: 'Fetches one record from any SolidX model/resource.',
391
+ operation: 'get',
392
+ method: 'GET',
393
+ requiresId: true,
394
+ icon: 'si-search',
395
+ iconColor: '#0891b2',
396
+ iconBackgroundColor: '#cffafe',
397
+ iconBorderColor: '#a5f3fc',
398
+ }),
399
+ )
400
+ export class SolidXGetNode extends BaseSolidXCrudNode {
401
+ protected readonly operation = 'get' as const;
402
+ protected readonly method = 'GET';
403
+ protected readonly requiresId = true;
404
+ protected readonly requiresData = false;
405
+ }
406
+
407
+ @WorkflowNodeProvider(
408
+ createCrudMetadata({
409
+ type: 'solidx.create',
410
+ label: 'SolidX Create',
411
+ description: 'Creates a JSON-backed record in any SolidX model/resource.',
412
+ operation: 'create',
413
+ method: 'POST',
414
+ requiresData: true,
415
+ icon: 'si-plus',
416
+ iconColor: '#16a34a',
417
+ iconBackgroundColor: '#dcfce7',
418
+ iconBorderColor: '#bbf7d0',
419
+ }),
420
+ )
421
+ export class SolidXCreateNode extends BaseSolidXCrudNode {
422
+ protected readonly operation = 'create' as const;
423
+ protected readonly method = 'POST';
424
+ protected readonly requiresId = false;
425
+ protected readonly requiresData = true;
426
+ }
427
+
428
+ @WorkflowNodeProvider(
429
+ createCrudMetadata({
430
+ type: 'solidx.update',
431
+ label: 'SolidX Update',
432
+ description: 'Replaces a JSON-backed record in any SolidX model/resource.',
433
+ operation: 'update',
434
+ method: 'PUT',
435
+ requiresId: true,
436
+ requiresData: true,
437
+ icon: 'si-pencil',
438
+ iconColor: '#ea580c',
439
+ iconBackgroundColor: '#ffedd5',
440
+ iconBorderColor: '#fed7aa',
441
+ }),
442
+ )
443
+ export class SolidXUpdateNode extends BaseSolidXCrudNode {
444
+ protected readonly operation = 'update' as const;
445
+ protected readonly method = 'PUT';
446
+ protected readonly requiresId = true;
447
+ protected readonly requiresData = true;
448
+ }
449
+
450
+ @WorkflowNodeProvider(
451
+ createCrudMetadata({
452
+ type: 'solidx.patch',
453
+ label: 'SolidX Patch',
454
+ description:
455
+ 'Partially updates a JSON-backed record in any SolidX model/resource.',
456
+ operation: 'patch',
457
+ method: 'PATCH',
458
+ requiresId: true,
459
+ requiresData: true,
460
+ icon: 'si-file-edit',
461
+ iconColor: '#9333ea',
462
+ iconBackgroundColor: '#f3e8ff',
463
+ iconBorderColor: '#e9d5ff',
464
+ }),
465
+ )
466
+ export class SolidXPatchNode extends BaseSolidXCrudNode {
467
+ protected readonly operation = 'patch' as const;
468
+ protected readonly method = 'PATCH';
469
+ protected readonly requiresId = true;
470
+ protected readonly requiresData = true;
471
+ }
472
+
473
+ @WorkflowNodeProvider(
474
+ createCrudMetadata({
475
+ type: 'solidx.delete',
476
+ label: 'SolidX Delete',
477
+ description: 'Deletes one record from any SolidX model/resource.',
478
+ operation: 'delete',
479
+ method: 'DELETE',
480
+ requiresId: true,
481
+ icon: 'si-trash',
482
+ iconColor: '#dc2626',
483
+ iconBackgroundColor: '#fee2e2',
484
+ iconBorderColor: '#fecaca',
485
+ }),
486
+ )
487
+ export class SolidXDeleteNode extends BaseSolidXCrudNode {
488
+ protected readonly operation = 'delete' as const;
489
+ protected readonly method = 'DELETE';
490
+ protected readonly requiresId = true;
491
+ protected readonly requiresData = false;
492
+ }
493
+
494
+ function buildExampleSnippet(operation: SolidXCrudOperation): string {
495
+ const base =
496
+ 'apiBaseUrl: http://localhost:3000\nmodel: user\naccessToken: "{{ outputs.login.accessToken }}"\n';
497
+
498
+ if (operation === 'list') {
499
+ return `${base}query:\n limit: 25\n offset: 0\n`;
500
+ }
501
+
502
+ if (operation === 'get' || operation === 'delete') {
503
+ return `${base}id: "{{ outputs.findUser.data.id }}"\n`;
504
+ }
505
+
506
+ if (operation === 'create') {
507
+ return `${base}data:\n username: "{{ input.username }}"\n email: "{{ input.email }}"\n`;
508
+ }
509
+
510
+ return `${base}id: "{{ outputs.findUser.data.id }}"\ndata:\n displayName: "{{ input.displayName }}"\n`;
511
+ }