@solidxai/core 0.1.12 → 0.1.13-beta.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (687) hide show
  1. package/CHANGELOG.md +3786 -0
  2. package/dist/commands/run-tests.command.d.ts +7 -1
  3. package/dist/commands/run-tests.command.d.ts.map +1 -1
  4. package/dist/commands/run-tests.command.js +49 -3
  5. package/dist/commands/run-tests.command.js.map +1 -1
  6. package/dist/commands/seed.command.d.ts +2 -0
  7. package/dist/commands/seed.command.d.ts.map +1 -1
  8. package/dist/commands/seed.command.js +21 -0
  9. package/dist/commands/seed.command.js.map +1 -1
  10. package/dist/constants/chatter-message.constants.d.ts +1 -0
  11. package/dist/constants/chatter-message.constants.d.ts.map +1 -1
  12. package/dist/constants/chatter-message.constants.js +3 -1
  13. package/dist/constants/chatter-message.constants.js.map +1 -1
  14. package/dist/constants/draft-publish-fields.d.ts +2 -0
  15. package/dist/constants/draft-publish-fields.d.ts.map +1 -0
  16. package/dist/constants/draft-publish-fields.js +5 -0
  17. package/dist/constants/draft-publish-fields.js.map +1 -0
  18. package/dist/constants/media-file-types.d.ts +9 -0
  19. package/dist/constants/media-file-types.d.ts.map +1 -1
  20. package/dist/constants/media-file-types.js +27 -1
  21. package/dist/constants/media-file-types.js.map +1 -1
  22. package/dist/constants/user.constants.d.ts +2 -0
  23. package/dist/constants/user.constants.d.ts.map +1 -0
  24. package/dist/constants/user.constants.js +5 -0
  25. package/dist/constants/user.constants.js.map +1 -0
  26. package/dist/controllers/action-metadata.controller.d.ts +1 -1
  27. package/dist/controllers/action-metadata.controller.js +1 -1
  28. package/dist/controllers/agent-event.controller.d.ts +1 -1
  29. package/dist/controllers/agent-event.controller.js +1 -1
  30. package/dist/controllers/agent-session.controller.d.ts +1 -1
  31. package/dist/controllers/agent-session.controller.js +1 -1
  32. package/dist/controllers/chatter-message.controller.d.ts +5 -0
  33. package/dist/controllers/chatter-message.controller.d.ts.map +1 -1
  34. package/dist/controllers/chatter-message.controller.js +14 -0
  35. package/dist/controllers/chatter-message.controller.js.map +1 -1
  36. package/dist/controllers/dashboard-user-layout.controller.d.ts +1 -1
  37. package/dist/controllers/dashboard-user-layout.controller.js +1 -1
  38. package/dist/controllers/email-template.controller.d.ts +1 -1
  39. package/dist/controllers/email-template.controller.js +1 -1
  40. package/dist/controllers/export-template.controller.d.ts +1 -1
  41. package/dist/controllers/export-template.controller.d.ts.map +1 -1
  42. package/dist/controllers/export-template.controller.js +6 -4
  43. package/dist/controllers/export-template.controller.js.map +1 -1
  44. package/dist/controllers/export-transaction.controller.d.ts +1 -1
  45. package/dist/controllers/export-transaction.controller.js +1 -1
  46. package/dist/controllers/import-transaction-error-log.controller.d.ts +1 -1
  47. package/dist/controllers/import-transaction-error-log.controller.js +1 -1
  48. package/dist/controllers/import-transaction.controller.d.ts +1 -1
  49. package/dist/controllers/import-transaction.controller.d.ts.map +1 -1
  50. package/dist/controllers/import-transaction.controller.js +7 -7
  51. package/dist/controllers/import-transaction.controller.js.map +1 -1
  52. package/dist/controllers/list-of-values.controller.d.ts +1 -1
  53. package/dist/controllers/list-of-values.controller.js +1 -1
  54. package/dist/controllers/locale.controller.d.ts +1 -1
  55. package/dist/controllers/locale.controller.js +1 -1
  56. package/dist/controllers/mcp-audit-log.controller.d.ts +1 -1
  57. package/dist/controllers/mcp-audit-log.controller.js +1 -1
  58. package/dist/controllers/media.controller.d.ts +2 -2
  59. package/dist/controllers/media.controller.d.ts.map +1 -1
  60. package/dist/controllers/media.controller.js +13 -8
  61. package/dist/controllers/media.controller.js.map +1 -1
  62. package/dist/controllers/menu-item-metadata.controller.d.ts +1 -1
  63. package/dist/controllers/menu-item-metadata.controller.js +1 -1
  64. package/dist/controllers/model-sequence.controller.d.ts +1 -1
  65. package/dist/controllers/model-sequence.controller.js +1 -1
  66. package/dist/controllers/module-package.controller.d.ts.map +1 -1
  67. package/dist/controllers/module-package.controller.js +2 -3
  68. package/dist/controllers/module-package.controller.js.map +1 -1
  69. package/dist/controllers/mq-message-queue.controller.d.ts +1 -1
  70. package/dist/controllers/mq-message-queue.controller.js +1 -1
  71. package/dist/controllers/mq-message.controller.d.ts +1 -1
  72. package/dist/controllers/mq-message.controller.js +1 -1
  73. package/dist/controllers/permission-metadata.controller.d.ts +1 -1
  74. package/dist/controllers/permission-metadata.controller.js +1 -1
  75. package/dist/controllers/role-metadata.controller.d.ts +1 -1
  76. package/dist/controllers/role-metadata.controller.js +1 -1
  77. package/dist/controllers/saved-filters.controller.d.ts +1 -1
  78. package/dist/controllers/saved-filters.controller.js +1 -1
  79. package/dist/controllers/scheduled-job.controller.d.ts +1 -1
  80. package/dist/controllers/scheduled-job.controller.js +1 -1
  81. package/dist/controllers/security-rule.controller.d.ts +1 -1
  82. package/dist/controllers/security-rule.controller.js +1 -1
  83. package/dist/controllers/sms-template.controller.d.ts +1 -1
  84. package/dist/controllers/sms-template.controller.js +1 -1
  85. package/dist/controllers/user-activity-history.controller.d.ts +1 -1
  86. package/dist/controllers/user-activity-history.controller.js +1 -1
  87. package/dist/controllers/user-view-metadata.controller.d.ts +1 -1
  88. package/dist/controllers/user-view-metadata.controller.js +1 -1
  89. package/dist/controllers/user.controller.d.ts +2 -2
  90. package/dist/controllers/user.controller.js +2 -2
  91. package/dist/controllers/view-metadata.controller.d.ts +3 -3
  92. package/dist/controllers/view-metadata.controller.js +1 -1
  93. package/dist/controllers/workflow-definition.controller.d.ts +38 -0
  94. package/dist/controllers/workflow-definition.controller.d.ts.map +1 -0
  95. package/dist/controllers/workflow-definition.controller.js +272 -0
  96. package/dist/controllers/workflow-definition.controller.js.map +1 -0
  97. package/dist/controllers/workflow-execution-artifact.controller.d.ts +24 -0
  98. package/dist/controllers/workflow-execution-artifact.controller.d.ts.map +1 -0
  99. package/dist/controllers/workflow-execution-artifact.controller.js +179 -0
  100. package/dist/controllers/workflow-execution-artifact.controller.js.map +1 -0
  101. package/dist/controllers/workflow-execution-log.controller.d.ts +24 -0
  102. package/dist/controllers/workflow-execution-log.controller.d.ts.map +1 -0
  103. package/dist/controllers/workflow-execution-log.controller.js +179 -0
  104. package/dist/controllers/workflow-execution-log.controller.js.map +1 -0
  105. package/dist/controllers/workflow-execution.controller.d.ts +29 -0
  106. package/dist/controllers/workflow-execution.controller.d.ts.map +1 -0
  107. package/dist/controllers/workflow-execution.controller.js +227 -0
  108. package/dist/controllers/workflow-execution.controller.js.map +1 -0
  109. package/dist/controllers/workflow-secret.controller.d.ts +24 -0
  110. package/dist/controllers/workflow-secret.controller.d.ts.map +1 -0
  111. package/dist/controllers/workflow-secret.controller.js +179 -0
  112. package/dist/controllers/workflow-secret.controller.js.map +1 -0
  113. package/dist/controllers/workflow-step-execution.controller.d.ts +24 -0
  114. package/dist/controllers/workflow-step-execution.controller.d.ts.map +1 -0
  115. package/dist/controllers/workflow-step-execution.controller.js +179 -0
  116. package/dist/controllers/workflow-step-execution.controller.js.map +1 -0
  117. package/dist/controllers/workflow-trigger-execution.controller.d.ts +24 -0
  118. package/dist/controllers/workflow-trigger-execution.controller.d.ts.map +1 -0
  119. package/dist/controllers/workflow-trigger-execution.controller.js +179 -0
  120. package/dist/controllers/workflow-trigger-execution.controller.js.map +1 -0
  121. package/dist/decorators/workflow-field-data-provider.decorator.d.ts +3 -0
  122. package/dist/decorators/workflow-field-data-provider.decorator.d.ts.map +1 -0
  123. package/dist/decorators/workflow-field-data-provider.decorator.js +11 -0
  124. package/dist/decorators/workflow-field-data-provider.decorator.js.map +1 -0
  125. package/dist/decorators/workflow-node-provider.decorator.d.ts +4 -0
  126. package/dist/decorators/workflow-node-provider.decorator.d.ts.map +1 -0
  127. package/dist/decorators/workflow-node-provider.decorator.js +13 -0
  128. package/dist/decorators/workflow-node-provider.decorator.js.map +1 -0
  129. package/dist/dtos/basic-filters.dto.d.ts +0 -1
  130. package/dist/dtos/basic-filters.dto.d.ts.map +1 -1
  131. package/dist/dtos/basic-filters.dto.js +1 -6
  132. package/dist/dtos/basic-filters.dto.js.map +1 -1
  133. package/dist/dtos/create-workflow-definition.dto.d.ts +14 -0
  134. package/dist/dtos/create-workflow-definition.dto.d.ts.map +1 -0
  135. package/dist/dtos/create-workflow-definition.dto.js +92 -0
  136. package/dist/dtos/create-workflow-definition.dto.js.map +1 -0
  137. package/dist/dtos/create-workflow-execution-artifact.dto.d.ts +22 -0
  138. package/dist/dtos/create-workflow-execution-artifact.dto.d.ts.map +1 -0
  139. package/dist/dtos/create-workflow-execution-artifact.dto.js +139 -0
  140. package/dist/dtos/create-workflow-execution-artifact.dto.js.map +1 -0
  141. package/dist/dtos/create-workflow-execution-log.dto.d.ts +18 -0
  142. package/dist/dtos/create-workflow-execution-log.dto.d.ts.map +1 -0
  143. package/dist/dtos/create-workflow-execution-log.dto.js +116 -0
  144. package/dist/dtos/create-workflow-execution-log.dto.js.map +1 -0
  145. package/dist/dtos/create-workflow-execution.dto.d.ts +33 -0
  146. package/dist/dtos/create-workflow-execution.dto.d.ts.map +1 -0
  147. package/dist/dtos/create-workflow-execution.dto.js +186 -0
  148. package/dist/dtos/create-workflow-execution.dto.js.map +1 -0
  149. package/dist/dtos/create-workflow-secret.dto.d.ts +11 -0
  150. package/dist/dtos/create-workflow-secret.dto.d.ts.map +1 -0
  151. package/dist/dtos/create-workflow-secret.dto.js +74 -0
  152. package/dist/dtos/create-workflow-secret.dto.js.map +1 -0
  153. package/dist/dtos/create-workflow-step-execution.dto.d.ts +27 -0
  154. package/dist/dtos/create-workflow-step-execution.dto.d.ts.map +1 -0
  155. package/dist/dtos/create-workflow-step-execution.dto.js +171 -0
  156. package/dist/dtos/create-workflow-step-execution.dto.js.map +1 -0
  157. package/dist/dtos/create-workflow-trigger-execution.dto.d.ts +25 -0
  158. package/dist/dtos/create-workflow-trigger-execution.dto.d.ts.map +1 -0
  159. package/dist/dtos/create-workflow-trigger-execution.dto.js +158 -0
  160. package/dist/dtos/create-workflow-trigger-execution.dto.js.map +1 -0
  161. package/dist/dtos/execute-workflow.dto.d.ts +7 -0
  162. package/dist/dtos/execute-workflow.dto.d.ts.map +1 -0
  163. package/dist/dtos/execute-workflow.dto.js +11 -0
  164. package/dist/dtos/execute-workflow.dto.js.map +1 -0
  165. package/dist/dtos/update-workflow-definition.dto.d.ts +15 -0
  166. package/dist/dtos/update-workflow-definition.dto.d.ts.map +1 -0
  167. package/dist/dtos/update-workflow-definition.dto.js +97 -0
  168. package/dist/dtos/update-workflow-definition.dto.js.map +1 -0
  169. package/dist/dtos/update-workflow-execution-artifact.dto.d.ts +23 -0
  170. package/dist/dtos/update-workflow-execution-artifact.dto.d.ts.map +1 -0
  171. package/dist/dtos/update-workflow-execution-artifact.dto.js +143 -0
  172. package/dist/dtos/update-workflow-execution-artifact.dto.js.map +1 -0
  173. package/dist/dtos/update-workflow-execution-log.dto.d.ts +19 -0
  174. package/dist/dtos/update-workflow-execution-log.dto.d.ts.map +1 -0
  175. package/dist/dtos/update-workflow-execution-log.dto.js +121 -0
  176. package/dist/dtos/update-workflow-execution-log.dto.js.map +1 -0
  177. package/dist/dtos/update-workflow-execution.dto.d.ts +34 -0
  178. package/dist/dtos/update-workflow-execution.dto.d.ts.map +1 -0
  179. package/dist/dtos/update-workflow-execution.dto.js +190 -0
  180. package/dist/dtos/update-workflow-execution.dto.js.map +1 -0
  181. package/dist/dtos/update-workflow-secret.dto.d.ts +12 -0
  182. package/dist/dtos/update-workflow-secret.dto.d.ts.map +1 -0
  183. package/dist/dtos/update-workflow-secret.dto.js +80 -0
  184. package/dist/dtos/update-workflow-secret.dto.js.map +1 -0
  185. package/dist/dtos/update-workflow-step-execution.dto.d.ts +28 -0
  186. package/dist/dtos/update-workflow-step-execution.dto.d.ts.map +1 -0
  187. package/dist/dtos/update-workflow-step-execution.dto.js +175 -0
  188. package/dist/dtos/update-workflow-step-execution.dto.js.map +1 -0
  189. package/dist/dtos/update-workflow-trigger-execution.dto.d.ts +26 -0
  190. package/dist/dtos/update-workflow-trigger-execution.dto.d.ts.map +1 -0
  191. package/dist/dtos/update-workflow-trigger-execution.dto.js +163 -0
  192. package/dist/dtos/update-workflow-trigger-execution.dto.js.map +1 -0
  193. package/dist/dtos/validate-workflow-definition.dto.d.ts +4 -0
  194. package/dist/dtos/validate-workflow-definition.dto.d.ts.map +1 -0
  195. package/dist/dtos/validate-workflow-definition.dto.js +11 -0
  196. package/dist/dtos/validate-workflow-definition.dto.js.map +1 -0
  197. package/dist/entities/common.entity.d.ts +4 -0
  198. package/dist/entities/common.entity.d.ts.map +1 -1
  199. package/dist/entities/common.entity.js +25 -1
  200. package/dist/entities/common.entity.js.map +1 -1
  201. package/dist/entities/user.entity.d.ts.map +1 -1
  202. package/dist/entities/user.entity.js +36 -0
  203. package/dist/entities/user.entity.js.map +1 -1
  204. package/dist/entities/workflow-definition.entity.d.ts +15 -0
  205. package/dist/entities/workflow-definition.entity.d.ts.map +1 -0
  206. package/dist/entities/workflow-definition.entity.js +77 -0
  207. package/dist/entities/workflow-definition.entity.js.map +1 -0
  208. package/dist/entities/workflow-execution-artifact.entity.d.ts +23 -0
  209. package/dist/entities/workflow-execution-artifact.entity.d.ts.map +1 -0
  210. package/dist/entities/workflow-execution-artifact.entity.js +113 -0
  211. package/dist/entities/workflow-execution-artifact.entity.js.map +1 -0
  212. package/dist/entities/workflow-execution-log.entity.d.ts +19 -0
  213. package/dist/entities/workflow-execution-log.entity.d.ts.map +1 -0
  214. package/dist/entities/workflow-execution-log.entity.js +95 -0
  215. package/dist/entities/workflow-execution-log.entity.js.map +1 -0
  216. package/dist/entities/workflow-execution.entity.d.ts +28 -0
  217. package/dist/entities/workflow-execution.entity.d.ts.map +1 -0
  218. package/dist/entities/workflow-execution.entity.js +124 -0
  219. package/dist/entities/workflow-execution.entity.js.map +1 -0
  220. package/dist/entities/workflow-secret.entity.d.ts +12 -0
  221. package/dist/entities/workflow-secret.entity.d.ts.map +1 -0
  222. package/dist/entities/workflow-secret.entity.js +66 -0
  223. package/dist/entities/workflow-secret.entity.js.map +1 -0
  224. package/dist/entities/workflow-step-execution.entity.d.ts +28 -0
  225. package/dist/entities/workflow-step-execution.entity.d.ts.map +1 -0
  226. package/dist/entities/workflow-step-execution.entity.js +138 -0
  227. package/dist/entities/workflow-step-execution.entity.js.map +1 -0
  228. package/dist/entities/workflow-trigger-execution.entity.d.ts +26 -0
  229. package/dist/entities/workflow-trigger-execution.entity.d.ts.map +1 -0
  230. package/dist/entities/workflow-trigger-execution.entity.js +127 -0
  231. package/dist/entities/workflow-trigger-execution.entity.js.map +1 -0
  232. package/dist/factories/mail.factory.d.ts.map +1 -1
  233. package/dist/factories/mail.factory.js +4 -0
  234. package/dist/factories/mail.factory.js.map +1 -1
  235. package/dist/factories/sms.factory.d.ts.map +1 -1
  236. package/dist/factories/sms.factory.js +4 -1
  237. package/dist/factories/sms.factory.js.map +1 -1
  238. package/dist/helpers/field-crud-managers/MediaFieldCrudManager.d.ts +1 -0
  239. package/dist/helpers/field-crud-managers/MediaFieldCrudManager.d.ts.map +1 -1
  240. package/dist/helpers/field-crud-managers/MediaFieldCrudManager.js +18 -11
  241. package/dist/helpers/field-crud-managers/MediaFieldCrudManager.js.map +1 -1
  242. package/dist/helpers/file-download.helper.d.ts +9 -0
  243. package/dist/helpers/file-download.helper.d.ts.map +1 -0
  244. package/dist/helpers/file-download.helper.js +14 -0
  245. package/dist/helpers/file-download.helper.js.map +1 -0
  246. package/dist/helpers/model-metadata-helper.service.d.ts.map +1 -1
  247. package/dist/helpers/model-metadata-helper.service.js +30 -1
  248. package/dist/helpers/model-metadata-helper.service.js.map +1 -1
  249. package/dist/helpers/solid-registry.d.ts +5 -1
  250. package/dist/helpers/solid-registry.d.ts.map +1 -1
  251. package/dist/helpers/solid-registry.js +18 -1
  252. package/dist/helpers/solid-registry.js.map +1 -1
  253. package/dist/index.d.ts +59 -0
  254. package/dist/index.d.ts.map +1 -1
  255. package/dist/index.js +59 -0
  256. package/dist/index.js.map +1 -1
  257. package/dist/interfaces/workflow-node-handler.interface.d.ts +5 -0
  258. package/dist/interfaces/workflow-node-handler.interface.d.ts.map +1 -0
  259. package/dist/interfaces/workflow-node-handler.interface.js +3 -0
  260. package/dist/interfaces/workflow-node-handler.interface.js.map +1 -0
  261. package/dist/interfaces.d.ts +25 -0
  262. package/dist/interfaces.d.ts.map +1 -1
  263. package/dist/interfaces.js.map +1 -1
  264. package/dist/jobs/database/workflow-execution-publisher-database.service.d.ts +12 -0
  265. package/dist/jobs/database/workflow-execution-publisher-database.service.d.ts.map +1 -0
  266. package/dist/jobs/database/workflow-execution-publisher-database.service.js +39 -0
  267. package/dist/jobs/database/workflow-execution-publisher-database.service.js.map +1 -0
  268. package/dist/jobs/database/workflow-execution-queue-options-database.d.ts +8 -0
  269. package/dist/jobs/database/workflow-execution-queue-options-database.d.ts.map +1 -0
  270. package/dist/jobs/database/workflow-execution-queue-options-database.js +10 -0
  271. package/dist/jobs/database/workflow-execution-queue-options-database.js.map +1 -0
  272. package/dist/jobs/database/workflow-execution-subscriber-database.service.d.ts +19 -0
  273. package/dist/jobs/database/workflow-execution-subscriber-database.service.d.ts.map +1 -0
  274. package/dist/jobs/database/workflow-execution-subscriber-database.service.js +55 -0
  275. package/dist/jobs/database/workflow-execution-subscriber-database.service.js.map +1 -0
  276. package/dist/jobs/rabbitmq/workflow-execution-publisher.service.d.ts +12 -0
  277. package/dist/jobs/rabbitmq/workflow-execution-publisher.service.d.ts.map +1 -0
  278. package/dist/jobs/rabbitmq/workflow-execution-publisher.service.js +39 -0
  279. package/dist/jobs/rabbitmq/workflow-execution-publisher.service.js.map +1 -0
  280. package/dist/jobs/rabbitmq/workflow-execution-queue-options.d.ts +8 -0
  281. package/dist/jobs/rabbitmq/workflow-execution-queue-options.d.ts.map +1 -0
  282. package/dist/jobs/rabbitmq/workflow-execution-queue-options.js +10 -0
  283. package/dist/jobs/rabbitmq/workflow-execution-queue-options.js.map +1 -0
  284. package/dist/jobs/rabbitmq/workflow-execution-subscriber.service.d.ts +17 -0
  285. package/dist/jobs/rabbitmq/workflow-execution-subscriber.service.d.ts.map +1 -0
  286. package/dist/jobs/rabbitmq/workflow-execution-subscriber.service.js +52 -0
  287. package/dist/jobs/rabbitmq/workflow-execution-subscriber.service.js.map +1 -0
  288. package/dist/jobs/redis/workflow-execution-publisher-redis.service.d.ts +12 -0
  289. package/dist/jobs/redis/workflow-execution-publisher-redis.service.d.ts.map +1 -0
  290. package/dist/jobs/redis/workflow-execution-publisher-redis.service.js +39 -0
  291. package/dist/jobs/redis/workflow-execution-publisher-redis.service.js.map +1 -0
  292. package/dist/jobs/redis/workflow-execution-queue-options-redis.d.ts +8 -0
  293. package/dist/jobs/redis/workflow-execution-queue-options-redis.d.ts.map +1 -0
  294. package/dist/jobs/redis/workflow-execution-queue-options-redis.js +10 -0
  295. package/dist/jobs/redis/workflow-execution-queue-options-redis.js.map +1 -0
  296. package/dist/jobs/redis/workflow-execution-subscriber-redis.service.d.ts +17 -0
  297. package/dist/jobs/redis/workflow-execution-subscriber-redis.service.d.ts.map +1 -0
  298. package/dist/jobs/redis/workflow-execution-subscriber-redis.service.js +52 -0
  299. package/dist/jobs/redis/workflow-execution-subscriber-redis.service.js.map +1 -0
  300. package/dist/repository/security-rule.repository.d.ts +1 -0
  301. package/dist/repository/security-rule.repository.d.ts.map +1 -1
  302. package/dist/repository/security-rule.repository.js +28 -7
  303. package/dist/repository/security-rule.repository.js.map +1 -1
  304. package/dist/repository/workflow-definition.repository.d.ts +12 -0
  305. package/dist/repository/workflow-definition.repository.d.ts.map +1 -0
  306. package/dist/repository/workflow-definition.repository.js +39 -0
  307. package/dist/repository/workflow-definition.repository.js.map +1 -0
  308. package/dist/repository/workflow-execution-artifact.repository.d.ts +12 -0
  309. package/dist/repository/workflow-execution-artifact.repository.d.ts.map +1 -0
  310. package/dist/repository/workflow-execution-artifact.repository.js +39 -0
  311. package/dist/repository/workflow-execution-artifact.repository.js.map +1 -0
  312. package/dist/repository/workflow-execution-log.repository.d.ts +12 -0
  313. package/dist/repository/workflow-execution-log.repository.d.ts.map +1 -0
  314. package/dist/repository/workflow-execution-log.repository.js +39 -0
  315. package/dist/repository/workflow-execution-log.repository.js.map +1 -0
  316. package/dist/repository/workflow-execution.repository.d.ts +12 -0
  317. package/dist/repository/workflow-execution.repository.d.ts.map +1 -0
  318. package/dist/repository/workflow-execution.repository.js +39 -0
  319. package/dist/repository/workflow-execution.repository.js.map +1 -0
  320. package/dist/repository/workflow-secret.repository.d.ts +12 -0
  321. package/dist/repository/workflow-secret.repository.d.ts.map +1 -0
  322. package/dist/repository/workflow-secret.repository.js +39 -0
  323. package/dist/repository/workflow-secret.repository.js.map +1 -0
  324. package/dist/repository/workflow-step-execution.repository.d.ts +12 -0
  325. package/dist/repository/workflow-step-execution.repository.d.ts.map +1 -0
  326. package/dist/repository/workflow-step-execution.repository.js +39 -0
  327. package/dist/repository/workflow-step-execution.repository.js.map +1 -0
  328. package/dist/repository/workflow-trigger-execution.repository.d.ts +12 -0
  329. package/dist/repository/workflow-trigger-execution.repository.d.ts.map +1 -0
  330. package/dist/repository/workflow-trigger-execution.repository.js +39 -0
  331. package/dist/repository/workflow-trigger-execution.repository.js.map +1 -0
  332. package/dist/seeders/module-metadata-seeder.service.d.ts +6 -0
  333. package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
  334. package/dist/seeders/module-metadata-seeder.service.js +185 -27
  335. package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
  336. package/dist/seeders/module-test-data.service.d.ts +3 -1
  337. package/dist/seeders/module-test-data.service.d.ts.map +1 -1
  338. package/dist/seeders/module-test-data.service.js +8 -2
  339. package/dist/seeders/module-test-data.service.js.map +1 -1
  340. package/dist/seeders/seed-data/solid-core-metadata.json +11494 -5570
  341. package/dist/services/authentication.service.d.ts +4 -1
  342. package/dist/services/authentication.service.d.ts.map +1 -1
  343. package/dist/services/authentication.service.js +52 -4
  344. package/dist/services/authentication.service.js.map +1 -1
  345. package/dist/services/chatter-message.service.d.ts +11 -0
  346. package/dist/services/chatter-message.service.d.ts.map +1 -1
  347. package/dist/services/chatter-message.service.js +53 -4
  348. package/dist/services/chatter-message.service.js.map +1 -1
  349. package/dist/services/crud-helper.service.d.ts +21 -3
  350. package/dist/services/crud-helper.service.d.ts.map +1 -1
  351. package/dist/services/crud-helper.service.js +129 -54
  352. package/dist/services/crud-helper.service.js.map +1 -1
  353. package/dist/services/crud.service.d.ts +14 -1
  354. package/dist/services/crud.service.d.ts.map +1 -1
  355. package/dist/services/crud.service.js +107 -67
  356. package/dist/services/crud.service.js.map +1 -1
  357. package/dist/services/datasource-introspection.service.d.ts.map +1 -1
  358. package/dist/services/datasource-introspection.service.js.map +1 -1
  359. package/dist/services/draft-publish-helper.service.d.ts +52 -0
  360. package/dist/services/draft-publish-helper.service.d.ts.map +1 -0
  361. package/dist/services/draft-publish-helper.service.js +368 -0
  362. package/dist/services/draft-publish-helper.service.js.map +1 -0
  363. package/dist/services/internationalisation-helper.service.d.ts +19 -0
  364. package/dist/services/internationalisation-helper.service.d.ts.map +1 -0
  365. package/dist/services/internationalisation-helper.service.js +107 -0
  366. package/dist/services/internationalisation-helper.service.js.map +1 -0
  367. package/dist/services/locale.service.d.ts +1 -1
  368. package/dist/services/media.service.d.ts +3 -2
  369. package/dist/services/media.service.d.ts.map +1 -1
  370. package/dist/services/media.service.js +44 -29
  371. package/dist/services/media.service.js.map +1 -1
  372. package/dist/services/metadata-validation.service.d.ts +7 -0
  373. package/dist/services/metadata-validation.service.d.ts.map +1 -0
  374. package/dist/services/metadata-validation.service.js +42 -0
  375. package/dist/services/metadata-validation.service.js.map +1 -0
  376. package/dist/services/model-metadata.service.d.ts.map +1 -1
  377. package/dist/services/model-metadata.service.js +2 -1
  378. package/dist/services/model-metadata.service.js.map +1 -1
  379. package/dist/services/object.utils.d.ts +2 -0
  380. package/dist/services/object.utils.d.ts.map +1 -0
  381. package/dist/services/object.utils.js +11 -0
  382. package/dist/services/object.utils.js.map +1 -0
  383. package/dist/services/settings/default-settings-provider.service.d.ts +46 -6
  384. package/dist/services/settings/default-settings-provider.service.d.ts.map +1 -1
  385. package/dist/services/settings/default-settings-provider.service.js +29 -3
  386. package/dist/services/settings/default-settings-provider.service.js.map +1 -1
  387. package/dist/services/solid-introspect.service.d.ts +1 -0
  388. package/dist/services/solid-introspect.service.d.ts.map +1 -1
  389. package/dist/services/solid-introspect.service.js +12 -0
  390. package/dist/services/solid-introspect.service.js.map +1 -1
  391. package/dist/services/user.service.d.ts +2 -2
  392. package/dist/services/user.service.d.ts.map +1 -1
  393. package/dist/services/user.service.js +9 -3
  394. package/dist/services/user.service.js.map +1 -1
  395. package/dist/services/view-metadata.service.d.ts +6 -3
  396. package/dist/services/view-metadata.service.d.ts.map +1 -1
  397. package/dist/services/view-metadata.service.js +60 -63
  398. package/dist/services/view-metadata.service.js.map +1 -1
  399. package/dist/services/workflow/nodes/execution-fail.node.d.ts +6 -0
  400. package/dist/services/workflow/nodes/execution-fail.node.d.ts.map +1 -0
  401. package/dist/services/workflow/nodes/execution-fail.node.js +81 -0
  402. package/dist/services/workflow/nodes/execution-fail.node.js.map +1 -0
  403. package/dist/services/workflow/nodes/for-each.node.d.ts +8 -0
  404. package/dist/services/workflow/nodes/for-each.node.d.ts.map +1 -0
  405. package/dist/services/workflow/nodes/for-each.node.js +204 -0
  406. package/dist/services/workflow/nodes/for-each.node.js.map +1 -0
  407. package/dist/services/workflow/nodes/http-request.node.d.ts +13 -0
  408. package/dist/services/workflow/nodes/http-request.node.d.ts.map +1 -0
  409. package/dist/services/workflow/nodes/http-request.node.js +549 -0
  410. package/dist/services/workflow/nodes/http-request.node.js.map +1 -0
  411. package/dist/services/workflow/nodes/if.node.d.ts +6 -0
  412. package/dist/services/workflow/nodes/if.node.d.ts.map +1 -0
  413. package/dist/services/workflow/nodes/if.node.js +100 -0
  414. package/dist/services/workflow/nodes/if.node.js.map +1 -0
  415. package/dist/services/workflow/nodes/log-write.node.d.ts +6 -0
  416. package/dist/services/workflow/nodes/log-write.node.d.ts.map +1 -0
  417. package/dist/services/workflow/nodes/log-write.node.js +231 -0
  418. package/dist/services/workflow/nodes/log-write.node.js.map +1 -0
  419. package/dist/services/workflow/nodes/loop-until.node.d.ts +12 -0
  420. package/dist/services/workflow/nodes/loop-until.node.d.ts.map +1 -0
  421. package/dist/services/workflow/nodes/loop-until.node.js +281 -0
  422. package/dist/services/workflow/nodes/loop-until.node.js.map +1 -0
  423. package/dist/services/workflow/nodes/parallel.node.d.ts +6 -0
  424. package/dist/services/workflow/nodes/parallel.node.d.ts.map +1 -0
  425. package/dist/services/workflow/nodes/parallel.node.js +83 -0
  426. package/dist/services/workflow/nodes/parallel.node.js.map +1 -0
  427. package/dist/services/workflow/nodes/runtime-python.node.d.ts +13 -0
  428. package/dist/services/workflow/nodes/runtime-python.node.d.ts.map +1 -0
  429. package/dist/services/workflow/nodes/runtime-python.node.js +522 -0
  430. package/dist/services/workflow/nodes/runtime-python.node.js.map +1 -0
  431. package/dist/services/workflow/nodes/sequential.node.d.ts +6 -0
  432. package/dist/services/workflow/nodes/sequential.node.d.ts.map +1 -0
  433. package/dist/services/workflow/nodes/sequential.node.js +68 -0
  434. package/dist/services/workflow/nodes/sequential.node.js.map +1 -0
  435. package/dist/services/workflow/nodes/solidx-api.helpers.d.ts +25 -0
  436. package/dist/services/workflow/nodes/solidx-api.helpers.d.ts.map +1 -0
  437. package/dist/services/workflow/nodes/solidx-api.helpers.js +143 -0
  438. package/dist/services/workflow/nodes/solidx-api.helpers.js.map +1 -0
  439. package/dist/services/workflow/nodes/solidx-crud.nodes.d.ts +48 -0
  440. package/dist/services/workflow/nodes/solidx-crud.nodes.d.ts.map +1 -0
  441. package/dist/services/workflow/nodes/solidx-crud.nodes.js +475 -0
  442. package/dist/services/workflow/nodes/solidx-crud.nodes.js.map +1 -0
  443. package/dist/services/workflow/nodes/solidx-login.node.d.ts +6 -0
  444. package/dist/services/workflow/nodes/solidx-login.node.d.ts.map +1 -0
  445. package/dist/services/workflow/nodes/solidx-login.node.js +208 -0
  446. package/dist/services/workflow/nodes/solidx-login.node.js.map +1 -0
  447. package/dist/services/workflow/nodes/solidx-send-email.node.d.ts +11 -0
  448. package/dist/services/workflow/nodes/solidx-send-email.node.d.ts.map +1 -0
  449. package/dist/services/workflow/nodes/solidx-send-email.node.js +437 -0
  450. package/dist/services/workflow/nodes/solidx-send-email.node.js.map +1 -0
  451. package/dist/services/workflow/nodes/solidx-send-sms.node.d.ts +10 -0
  452. package/dist/services/workflow/nodes/solidx-send-sms.node.d.ts.map +1 -0
  453. package/dist/services/workflow/nodes/solidx-send-sms.node.js +347 -0
  454. package/dist/services/workflow/nodes/solidx-send-sms.node.js.map +1 -0
  455. package/dist/services/workflow/nodes/switch.node.d.ts +7 -0
  456. package/dist/services/workflow/nodes/switch.node.d.ts.map +1 -0
  457. package/dist/services/workflow/nodes/switch.node.js +120 -0
  458. package/dist/services/workflow/nodes/switch.node.js.map +1 -0
  459. package/dist/services/workflow/workflow-definition-metadata-sync.service.d.ts +19 -0
  460. package/dist/services/workflow/workflow-definition-metadata-sync.service.d.ts.map +1 -0
  461. package/dist/services/workflow/workflow-definition-metadata-sync.service.js +187 -0
  462. package/dist/services/workflow/workflow-definition-metadata-sync.service.js.map +1 -0
  463. package/dist/services/workflow/workflow-definition-validator.service.d.ts +13 -0
  464. package/dist/services/workflow/workflow-definition-validator.service.d.ts.map +1 -0
  465. package/dist/services/workflow/workflow-definition-validator.service.js +166 -0
  466. package/dist/services/workflow/workflow-definition-validator.service.js.map +1 -0
  467. package/dist/services/workflow/workflow-execution-writer.service.d.ts +26 -0
  468. package/dist/services/workflow/workflow-execution-writer.service.d.ts.map +1 -0
  469. package/dist/services/workflow/workflow-execution-writer.service.js +191 -0
  470. package/dist/services/workflow/workflow-execution-writer.service.js.map +1 -0
  471. package/dist/services/workflow/workflow-expression.service.d.ts +14 -0
  472. package/dist/services/workflow/workflow-expression.service.d.ts.map +1 -0
  473. package/dist/services/workflow/workflow-expression.service.js +157 -0
  474. package/dist/services/workflow/workflow-expression.service.js.map +1 -0
  475. package/dist/services/workflow/workflow-invocation.service.d.ts +11 -0
  476. package/dist/services/workflow/workflow-invocation.service.d.ts.map +1 -0
  477. package/dist/services/workflow/workflow-invocation.service.js +37 -0
  478. package/dist/services/workflow/workflow-invocation.service.js.map +1 -0
  479. package/dist/services/workflow/workflow-node-registry.service.d.ts +19 -0
  480. package/dist/services/workflow/workflow-node-registry.service.d.ts.map +1 -0
  481. package/dist/services/workflow/workflow-node-registry.service.js +117 -0
  482. package/dist/services/workflow/workflow-node-registry.service.js.map +1 -0
  483. package/dist/services/workflow/workflow-runtime.service.d.ts +61 -0
  484. package/dist/services/workflow/workflow-runtime.service.d.ts.map +1 -0
  485. package/dist/services/workflow/workflow-runtime.service.js +706 -0
  486. package/dist/services/workflow/workflow-runtime.service.js.map +1 -0
  487. package/dist/services/workflow/workflow-scheduled-trigger.job.d.ts +10 -0
  488. package/dist/services/workflow/workflow-scheduled-trigger.job.d.ts.map +1 -0
  489. package/dist/services/workflow/workflow-scheduled-trigger.job.js +37 -0
  490. package/dist/services/workflow/workflow-scheduled-trigger.job.js.map +1 -0
  491. package/dist/services/workflow-definition.service.d.ts +52 -0
  492. package/dist/services/workflow-definition.service.d.ts.map +1 -0
  493. package/dist/services/workflow-definition.service.js +251 -0
  494. package/dist/services/workflow-definition.service.js.map +1 -0
  495. package/dist/services/workflow-execution-artifact.service.d.ts +12 -0
  496. package/dist/services/workflow-execution-artifact.service.d.ts.map +1 -0
  497. package/dist/services/workflow-execution-artifact.service.js +38 -0
  498. package/dist/services/workflow-execution-artifact.service.js.map +1 -0
  499. package/dist/services/workflow-execution-log.service.d.ts +12 -0
  500. package/dist/services/workflow-execution-log.service.d.ts.map +1 -0
  501. package/dist/services/workflow-execution-log.service.js +38 -0
  502. package/dist/services/workflow-execution-log.service.js.map +1 -0
  503. package/dist/services/workflow-execution.service.d.ts +12 -0
  504. package/dist/services/workflow-execution.service.d.ts.map +1 -0
  505. package/dist/services/workflow-execution.service.js +38 -0
  506. package/dist/services/workflow-execution.service.js.map +1 -0
  507. package/dist/services/workflow-secret.service.d.ts +25 -0
  508. package/dist/services/workflow-secret.service.d.ts.map +1 -0
  509. package/dist/services/workflow-secret.service.js +152 -0
  510. package/dist/services/workflow-secret.service.js.map +1 -0
  511. package/dist/services/workflow-step-execution.service.d.ts +12 -0
  512. package/dist/services/workflow-step-execution.service.d.ts.map +1 -0
  513. package/dist/services/workflow-step-execution.service.js +38 -0
  514. package/dist/services/workflow-step-execution.service.js.map +1 -0
  515. package/dist/services/workflow-trigger-execution.service.d.ts +12 -0
  516. package/dist/services/workflow-trigger-execution.service.d.ts.map +1 -0
  517. package/dist/services/workflow-trigger-execution.service.js +38 -0
  518. package/dist/services/workflow-trigger-execution.service.js.map +1 -0
  519. package/dist/solid-core.module.d.ts.map +1 -1
  520. package/dist/solid-core.module.js +131 -1
  521. package/dist/solid-core.module.js.map +1 -1
  522. package/dist/testing/adapters/ui/playwright-adapter.d.ts +5 -0
  523. package/dist/testing/adapters/ui/playwright-adapter.d.ts.map +1 -1
  524. package/dist/testing/adapters/ui/playwright-adapter.js +17 -1
  525. package/dist/testing/adapters/ui/playwright-adapter.js.map +1 -1
  526. package/dist/testing/adapters/ui/ui.types.d.ts +2 -0
  527. package/dist/testing/adapters/ui/ui.types.d.ts.map +1 -1
  528. package/dist/testing/adapters/ui/ui.types.js.map +1 -1
  529. package/dist/testing/steps/ui/actions.step.d.ts.map +1 -1
  530. package/dist/testing/steps/ui/actions.step.js +6 -2
  531. package/dist/testing/steps/ui/actions.step.js.map +1 -1
  532. package/dist/testing/steps/ui/assertions.step.d.ts.map +1 -1
  533. package/dist/testing/steps/ui/assertions.step.js +11 -3
  534. package/dist/testing/steps/ui/assertions.step.js.map +1 -1
  535. package/dist/testing/steps/ui/form.step.d.ts.map +1 -1
  536. package/dist/testing/steps/ui/form.step.js +9 -3
  537. package/dist/testing/steps/ui/form.step.js.map +1 -1
  538. package/dist/testing/steps/ui/manual.step.js +1 -1
  539. package/dist/testing/steps/ui/manual.step.js.map +1 -1
  540. package/dist/testing/steps/ui/navigation.step.d.ts.map +1 -1
  541. package/dist/testing/steps/ui/navigation.step.js +3 -1
  542. package/dist/testing/steps/ui/navigation.step.js.map +1 -1
  543. package/dist/transformers/empty-string-to-null-transformer.d.ts +4 -0
  544. package/dist/transformers/empty-string-to-null-transformer.d.ts.map +1 -0
  545. package/dist/transformers/empty-string-to-null-transformer.js +12 -0
  546. package/dist/transformers/empty-string-to-null-transformer.js.map +1 -0
  547. package/dist/types/workflow-dsl.types.d.ts +291 -0
  548. package/dist/types/workflow-dsl.types.d.ts.map +1 -0
  549. package/dist/types/workflow-dsl.types.js +3 -0
  550. package/dist/types/workflow-dsl.types.js.map +1 -0
  551. package/dist/types/workflow-execution-queue.types.d.ts +4 -0
  552. package/dist/types/workflow-execution-queue.types.d.ts.map +1 -0
  553. package/dist/types/workflow-execution-queue.types.js +3 -0
  554. package/dist/types/workflow-execution-queue.types.js.map +1 -0
  555. package/package.json +3 -2
  556. package/src/commands/run-tests.command.ts +47 -1
  557. package/src/commands/seed.command.ts +19 -0
  558. package/src/constants/chatter-message.constants.ts +12 -0
  559. package/src/constants/draft-publish-fields.ts +5 -0
  560. package/src/constants/media-file-types.ts +50 -0
  561. package/src/constants/user.constants.ts +13 -0
  562. package/src/controllers/chatter-message.controller.ts +8 -0
  563. package/src/controllers/export-template.controller.ts +5 -3
  564. package/src/controllers/import-transaction.controller.ts +6 -6
  565. package/src/controllers/media.controller.ts +17 -6
  566. package/src/controllers/module-package.controller.ts +2 -3
  567. package/src/controllers/workflow-definition.controller.ts +141 -0
  568. package/src/controllers/workflow-execution-artifact.controller.ts +93 -0
  569. package/src/controllers/workflow-execution-log.controller.ts +93 -0
  570. package/src/controllers/workflow-execution.controller.ts +126 -0
  571. package/src/controllers/workflow-secret.controller.ts +90 -0
  572. package/src/controllers/workflow-step-execution.controller.ts +93 -0
  573. package/src/controllers/workflow-trigger-execution.controller.ts +93 -0
  574. package/src/decorators/workflow-field-data-provider.decorator.ts +7 -0
  575. package/src/decorators/workflow-node-provider.decorator.ts +14 -0
  576. package/src/dtos/basic-filters.dto.ts +0 -4
  577. package/src/dtos/create-workflow-definition.dto.ts +60 -0
  578. package/src/dtos/create-workflow-execution-artifact.dto.ts +99 -0
  579. package/src/dtos/create-workflow-execution-log.dto.ts +80 -0
  580. package/src/dtos/create-workflow-execution.dto.ts +137 -0
  581. package/src/dtos/create-workflow-secret.dto.ts +44 -0
  582. package/src/dtos/create-workflow-step-execution.dto.ts +123 -0
  583. package/src/dtos/create-workflow-trigger-execution.dto.ts +114 -0
  584. package/src/dtos/execute-workflow.dto.ts +6 -0
  585. package/src/dtos/update-workflow-definition.dto.ts +67 -0
  586. package/src/dtos/update-workflow-execution-artifact.dto.ts +105 -0
  587. package/src/dtos/update-workflow-execution-log.dto.ts +87 -0
  588. package/src/dtos/update-workflow-execution.dto.ts +144 -0
  589. package/src/dtos/update-workflow-secret.dto.ts +53 -0
  590. package/src/dtos/update-workflow-step-execution.dto.ts +132 -0
  591. package/src/dtos/update-workflow-trigger-execution.dto.ts +122 -0
  592. package/src/dtos/validate-workflow-definition.dto.ts +3 -0
  593. package/src/entities/common.entity.ts +24 -0
  594. package/src/entities/user.entity.ts +53 -36
  595. package/src/entities/workflow-definition.entity.ts +43 -0
  596. package/src/entities/workflow-execution-artifact.entity.ts +72 -0
  597. package/src/entities/workflow-execution-log.entity.ts +58 -0
  598. package/src/entities/workflow-execution.entity.ts +82 -0
  599. package/src/entities/workflow-secret.entity.ts +33 -0
  600. package/src/entities/workflow-step-execution.entity.ts +88 -0
  601. package/src/entities/workflow-trigger-execution.entity.ts +82 -0
  602. package/src/factories/mail.factory.ts +7 -1
  603. package/src/factories/sms.factory.ts +4 -1
  604. package/src/helpers/field-crud-managers/MediaFieldCrudManager.ts +26 -12
  605. package/src/helpers/file-download.helper.ts +31 -0
  606. package/src/helpers/model-metadata-helper.service.ts +32 -1
  607. package/src/helpers/solid-registry.ts +22 -2
  608. package/src/index.ts +59 -0
  609. package/src/interfaces/workflow-node-handler.interface.ts +10 -0
  610. package/src/interfaces.ts +30 -0
  611. package/src/jobs/database/workflow-execution-publisher-database.service.ts +24 -0
  612. package/src/jobs/database/workflow-execution-queue-options-database.ts +9 -0
  613. package/src/jobs/database/workflow-execution-subscriber-database.service.ts +44 -0
  614. package/src/jobs/rabbitmq/workflow-execution-publisher.service.ts +24 -0
  615. package/src/jobs/rabbitmq/workflow-execution-queue-options.ts +9 -0
  616. package/src/jobs/rabbitmq/workflow-execution-subscriber.service.ts +42 -0
  617. package/src/jobs/redis/workflow-execution-publisher-redis.service.ts +24 -0
  618. package/src/jobs/redis/workflow-execution-queue-options-redis.ts +9 -0
  619. package/src/jobs/redis/workflow-execution-subscriber-redis.service.ts +42 -0
  620. package/src/repository/security-rule.repository.ts +52 -10
  621. package/src/repository/workflow-definition.repository.ts +19 -0
  622. package/src/repository/workflow-execution-artifact.repository.ts +19 -0
  623. package/src/repository/workflow-execution-log.repository.ts +19 -0
  624. package/src/repository/workflow-execution.repository.ts +19 -0
  625. package/src/repository/workflow-secret.repository.ts +19 -0
  626. package/src/repository/workflow-step-execution.repository.ts +19 -0
  627. package/src/repository/workflow-trigger-execution.repository.ts +19 -0
  628. package/src/seeders/module-metadata-seeder.service.ts +216 -40
  629. package/src/seeders/module-test-data.service.ts +6 -0
  630. package/src/seeders/seed-data/solid-core-metadata.json +11494 -5570
  631. package/src/services/authentication.service.ts +76 -5
  632. package/src/services/chatter-message.service.ts +107 -5
  633. package/src/services/crud-helper.service.ts +236 -56
  634. package/src/services/crud.service.ts +159 -104
  635. package/src/services/datasource-introspection.service.ts +5 -0
  636. package/src/services/draft-publish-helper.service.ts +529 -0
  637. package/src/services/internationalisation-helper.service.ts +148 -0
  638. package/src/services/media.service.ts +67 -36
  639. package/src/services/metadata-validation.service.ts +39 -0
  640. package/src/services/model-metadata.service.ts +4 -1
  641. package/src/services/object.utils.ts +10 -0
  642. package/src/services/settings/default-settings-provider.service.ts +35 -3
  643. package/src/services/solid-introspect.service.ts +19 -0
  644. package/src/services/user.service.ts +18 -3
  645. package/src/services/view-metadata.service.ts +80 -154
  646. package/src/services/workflow/nodes/execution-fail.node.ts +82 -0
  647. package/src/services/workflow/nodes/for-each.node.ts +231 -0
  648. package/src/services/workflow/nodes/http-request.node.ts +624 -0
  649. package/src/services/workflow/nodes/if.node.ts +100 -0
  650. package/src/services/workflow/nodes/log-write.node.ts +234 -0
  651. package/src/services/workflow/nodes/loop-until.node.ts +343 -0
  652. package/src/services/workflow/nodes/parallel.node.ts +88 -0
  653. package/src/services/workflow/nodes/runtime-python.node.ts +571 -0
  654. package/src/services/workflow/nodes/sequential.node.ts +65 -0
  655. package/src/services/workflow/nodes/solidx-api.helpers.ts +205 -0
  656. package/src/services/workflow/nodes/solidx-crud.nodes.ts +511 -0
  657. package/src/services/workflow/nodes/solidx-login.node.ts +222 -0
  658. package/src/services/workflow/nodes/solidx-send-email.node.ts +489 -0
  659. package/src/services/workflow/nodes/solidx-send-sms.node.ts +377 -0
  660. package/src/services/workflow/nodes/switch.node.ts +132 -0
  661. package/src/services/workflow/workflow-definition-metadata-sync.service.ts +196 -0
  662. package/src/services/workflow/workflow-definition-validator.service.ts +226 -0
  663. package/src/services/workflow/workflow-execution-writer.service.ts +244 -0
  664. package/src/services/workflow/workflow-expression.service.ts +180 -0
  665. package/src/services/workflow/workflow-invocation.service.ts +39 -0
  666. package/src/services/workflow/workflow-node-registry.service.ts +152 -0
  667. package/src/services/workflow/workflow-runtime.service.ts +934 -0
  668. package/src/services/workflow/workflow-scheduled-trigger.job.ts +33 -0
  669. package/src/services/workflow-definition.service.ts +293 -0
  670. package/src/services/workflow-execution-artifact.service.ts +20 -0
  671. package/src/services/workflow-execution-log.service.ts +20 -0
  672. package/src/services/workflow-execution.service.ts +20 -0
  673. package/src/services/workflow-secret.service.ts +161 -0
  674. package/src/services/workflow-step-execution.service.ts +20 -0
  675. package/src/services/workflow-trigger-execution.service.ts +20 -0
  676. package/src/solid-core.module.ts +144 -3
  677. package/src/testing/README.md +73 -2
  678. package/src/testing/adapters/ui/playwright-adapter.ts +25 -0
  679. package/src/testing/adapters/ui/ui.types.ts +2 -0
  680. package/src/testing/steps/ui/actions.step.ts +8 -4
  681. package/src/testing/steps/ui/assertions.step.ts +18 -5
  682. package/src/testing/steps/ui/form.step.ts +16 -6
  683. package/src/testing/steps/ui/manual.step.ts +1 -1
  684. package/src/testing/steps/ui/navigation.step.ts +4 -2
  685. package/src/transformers/empty-string-to-null-transformer.ts +11 -0
  686. package/src/types/workflow-dsl.types.ts +1030 -0
  687. package/src/types/workflow-execution-queue.types.ts +3 -0
@@ -7,6 +7,7 @@ import { SolidBaseRepository } from "../repository/solid-base.repository";
7
7
  import { SettingService } from "./setting.service";
8
8
  import { ERROR_MESSAGES } from "src/constants/error-messages";
9
9
  import { SUCCESS_MESSAGES } from "src/constants/success-messages";
10
+ import { USER_SUMMARY_FIELDS } from "src/constants/user.constants";
10
11
  import { EntityManager, FindOptionsWhere, In, IsNull, Not, QueryFailedError, SelectQueryBuilder } from "typeorm";
11
12
  import { QueryDeepPartialEntity } from "typeorm/query-builder/QueryPartialEntity";
12
13
  import { BasicFilterDto } from "../dtos/basic-filters.dto";
@@ -36,6 +37,8 @@ import { ShortTextFieldCrudManager } from "../helpers/field-crud-managers/ShortT
36
37
  import { UUIDFieldCrudManager } from "../helpers/field-crud-managers/UUIDFieldCrudManager";
37
38
  import { ModelMetadataHelperService } from "src/helpers/model-metadata-helper.service";
38
39
  import { FieldCrudManager, MediaWithFullUrl } from "../interfaces";
40
+ import { DraftPublishHelperService } from "./draft-publish-helper.service";
41
+ import { InternationalisationHelperService } from "./internationalisation-helper.service";
39
42
  import { CrudHelperService, FilterCombinator, UserIdFields } from "./crud-helper.service";
40
43
  import { HashingService } from "./hashing.service";
41
44
  import { SolidRegistry } from "src/helpers/solid-registry";
@@ -49,6 +52,8 @@ export class CRUDService<T extends CommonEntity> { // Add two generic value i.e
49
52
 
50
53
  private _modelMetadataService: ModelMetadataService;
51
54
  private _crudHelperService: CrudHelperService;
55
+ private _draftPublishHelperService: DraftPublishHelperService;
56
+ private _internationalisationHelperService: InternationalisationHelperService;
52
57
  private _discoveryService: DiscoveryService;
53
58
  private _settingService: SettingService;
54
59
 
@@ -69,6 +74,14 @@ export class CRUDService<T extends CommonEntity> { // Add two generic value i.e
69
74
  return this._crudHelperService ??= this.moduleRef.get(CrudHelperService, { strict: false });
70
75
  }
71
76
 
77
+ protected get draftPublishHelperService(): DraftPublishHelperService {
78
+ return this._draftPublishHelperService ??= this.moduleRef.get(DraftPublishHelperService, { strict: false });
79
+ }
80
+
81
+ protected get internationalisationHelperService(): InternationalisationHelperService {
82
+ return this._internationalisationHelperService ??= this.moduleRef.get(InternationalisationHelperService, { strict: false });
83
+ }
84
+
72
85
  protected get discoveryService(): DiscoveryService {
73
86
  return this._discoveryService ??= this.moduleRef.get(DiscoveryService, { strict: false });
74
87
  }
@@ -77,6 +90,19 @@ export class CRUDService<T extends CommonEntity> { // Add two generic value i.e
77
90
  return this._settingService ??= this.moduleRef.get(SettingService, { strict: false });
78
91
  }
79
92
 
93
+ private getDraftPublishCrudContext() {
94
+ return {
95
+ repo: this.repo,
96
+ modelName: this.modelName,
97
+ moduleName: this.moduleName,
98
+ validateAndTransformDto: this.validateAndTransformDto.bind(this),
99
+ saveMedia: this.saveMedia.bind(this),
100
+ getDatasourceDefaultEntityManager: this.getDatasourceDefaultEntityManager.bind(this),
101
+ getColumnDatabaseName: this.getColumnDatabaseName.bind(this),
102
+ escapeDatabaseName: this.escapeDatabaseName.bind(this),
103
+ };
104
+ }
105
+
80
106
  private async tryCreateAsExtensionUser(createDto: any): Promise<T | null> {
81
107
  if (this.repo.metadata?.parentEntityMetadata?.target !== User) return null;
82
108
  const registry = this.moduleRef.get(SolidRegistry, { strict: false });
@@ -122,8 +148,11 @@ export class CRUDService<T extends CommonEntity> { // Add two generic value i.e
122
148
  try {
123
149
  // 5. Save the entity
124
150
  // For media, we need to use a storage provider and save the media, then save the associated uri against the entity or media table
151
+ this.draftPublishHelperService.applyCreateDefaults(model, createDto);
152
+ this.internationalisationHelperService.applyCreateDefaults(model, createDto, this.moduleRef.get(SolidRegistry, { strict: false }));
125
153
  const entity = this.repo.create(createDto);
126
- const savedEntity = await this.repo.save(entity) as unknown as T;
154
+ let savedEntity = await this.repo.save(entity) as unknown as T;
155
+ savedEntity = await this.draftPublishHelperService.ensureInitialEntityVersionId(model, this.repo, savedEntity);
127
156
 
128
157
  // 6. Save the media
129
158
  if (hasMediaFields) {
@@ -210,9 +239,10 @@ export class CRUDService<T extends CommonEntity> { // Add two generic value i.e
210
239
  throw new Error(`Entity [${this.moduleName}.${this.modelName}] with id ${id} not found`);
211
240
  }
212
241
 
213
- if (model.draftPublishWorkflow === true && entity.publishedAt) {
214
- throw new BadRequestException(`Cannot update a published record for model ${this.modelName}. Unpublish it first.`
215
- );
242
+ this.draftPublishHelperService.assertUpdateAllowed(model, entity, this.modelName);
243
+
244
+ if (this.draftPublishHelperService.shouldCopyPublishedVersionForUpdate(model, entity)) {
245
+ return this.draftPublishHelperService.copyPublishedVersionAndUpdate(this.getDraftPublishCrudContext(), id, updateDto, files, isPartialUpdate, model);
216
246
  }
217
247
 
218
248
  // Capture pre-update many-to-many relation state for audit tracking
@@ -244,6 +274,18 @@ export class CRUDService<T extends CommonEntity> { // Add two generic value i.e
244
274
  return savedEntity;
245
275
  }
246
276
 
277
+ private getColumnDatabaseName(propertyName: string): string {
278
+ const column = this.repo.metadata.findColumnWithPropertyName(propertyName);
279
+ if (!column) {
280
+ throw new Error(`Column ${propertyName} not found in entity ${this.repo.metadata.name}`);
281
+ }
282
+ return column.databaseName;
283
+ }
284
+
285
+ private escapeDatabaseName(databaseName: string): string {
286
+ return this.repo.manager.connection.driver.escape(databaseName);
287
+ }
288
+
247
289
  /**
248
290
  * Captures the current state of audit-enabled many-to-many relations
249
291
  * before the entity is updated. The snapshot is attached to the entity
@@ -306,32 +348,37 @@ private async prepareManyToManyAuditSnapshot(entity: T,id: number,modelSingularN
306
348
  throw new Error(`Entity [${this.moduleName}.${this.modelName}] with id ${id} not found`);
307
349
  }
308
350
 
309
- if (model.draftPublishWorkflow === true && entity.publishedAt) {
310
- throw new BadRequestException(`Cannot update a published record for model ${this.modelName}, Unpublish it first.`);
351
+ const entitiesToDelete: T[] = [entity];
352
+ if (this.draftPublishHelperService.isDraftPublishEnabled(model)) {
353
+ this.draftPublishHelperService.assertDraftPublishDeleteAllowed(this.modelName, entitiesToDelete);
311
354
  }
312
355
 
313
- // If the model has internationalisation enabled, delete children with defaultEntityLocaleId === this entity's id
314
- if (model.internationalisation) {
315
- // Find all child entities where defaultEntityLocaleId === this entity's id
316
- const childEntities = await this.repo.find({
317
- where: { defaultEntityLocaleId: id } as any
318
- });
356
+ await this.internationalisationHelperService.deleteChildLocaleEntities(this.repo, model, [id]);
319
357
 
320
- if (childEntities.length > 0) {
321
- if (model.enableSoftDelete === true) {
322
- await this.repo.softRemove(childEntities);
323
- } else {
324
- await this.repo.remove(childEntities);
325
- }
326
- }
327
- }
358
+ return this.deleteEntitiesAndPromote(model, entitiesToDelete);
359
+ }
360
+
361
+ private async deleteEntitiesAndPromote(model: ModelMetadata, entitiesToDelete: T[]): Promise<T[]> {
362
+ const isDraftPublishEnabled = this.draftPublishHelperService.isDraftPublishEnabled(model);
363
+ const deletedLatestChainIds = isDraftPublishEnabled
364
+ ? this.draftPublishHelperService.getLatestDraftPublishChainIds(entitiesToDelete)
365
+ : [];
328
366
 
367
+ let deleteResult: T[];
329
368
  if (model.enableSoftDelete === true) {
330
- await this.repo.softRemove(entity);
331
- return this.repo.save(entity);
369
+ this.draftPublishHelperService.markDeletedDraftPublishVersionsAsNotLatest(model, entitiesToDelete);
370
+ await this.repo.softRemove(entitiesToDelete);
371
+ deleteResult = await this.repo.save(entitiesToDelete);
332
372
  } else {
333
- return this.repo.remove(entity);
373
+ deleteResult = await this.repo.remove(entitiesToDelete);
374
+ }
375
+
376
+ if (isDraftPublishEnabled) {
377
+ const deletedEntityIds = this.draftPublishHelperService.getEntityIds(entitiesToDelete);
378
+ await this.draftPublishHelperService.promoteLatestDraftPublishVersionAfterDelete(this.repo, deletedLatestChainIds, deletedEntityIds);
334
379
  }
380
+
381
+ return deleteResult;
335
382
  }
336
383
 
337
384
  private async fieldCrudManager(fieldMetadata: FieldMetadata, entityManager: EntityManager, isPartialUpdate: boolean = false, isUpdate: boolean = false, entityId?: number) {
@@ -528,9 +575,7 @@ private async prepareManyToManyAuditSnapshot(entity: T,id: number,modelSingularN
528
575
  var qb: SelectQueryBuilder<T> = await this.repo.createSecurityRuleAwareQueryBuilder(alias)
529
576
 
530
577
  if (basicFilterDto.groupBy?.length) {
531
- const groupFilterQb = (internationalisation && draftPublishWorkflow)
532
- ? this.crudHelperService.buildFilterQuery(qb, basicFilterDto, alias, internationalisation, draftPublishWorkflow, this.moduleRef, FilterCombinator.AND, false, false)
533
- : this.crudHelperService.buildFilterQuery(qb, basicFilterDto, alias, undefined, undefined, undefined, FilterCombinator.AND, false, false);
578
+ const groupFilterQb = this.crudHelperService.buildFilterQuery(qb, basicFilterDto, alias, internationalisation, draftPublishWorkflow, this.moduleRef, FilterCombinator.AND, false, false);
534
579
 
535
580
  return this.crudHelperService.executeGroupPipeline(
536
581
  groupFilterQb, basicFilterDto, alias,
@@ -542,9 +587,7 @@ private async prepareManyToManyAuditSnapshot(entity: T,id: number,modelSingularN
542
587
  );
543
588
  }
544
589
  else {
545
- qb = (internationalisation && draftPublishWorkflow)
546
- ? this.crudHelperService.buildFilterQuery(qb, basicFilterDto, alias, internationalisation, draftPublishWorkflow, this.moduleRef)
547
- : this.crudHelperService.buildFilterQuery(qb, basicFilterDto, alias);
590
+ qb = this.crudHelperService.buildFilterQuery(qb, basicFilterDto, alias, internationalisation, draftPublishWorkflow, this.moduleRef);
548
591
  const { meta, records } = await this.handleNonGroupFind(qb, populateUserIdFields, populateMedia, offset, limit, alias);
549
592
  return {
550
593
  meta,
@@ -573,6 +616,29 @@ private async prepareManyToManyAuditSnapshot(entity: T,id: number,modelSingularN
573
616
  return this.crudHelperService.pagedResponse(offset, limit, count, entities);
574
617
  }
575
618
 
619
+ /**
620
+ * Reduce a user to USER_SUMMARY_FIELDS as a plain object.
621
+ *
622
+ * Returning the hydrated entity is not good enough. A partially selected `User` is still
623
+ * built with `new User()`, so every property that has a TypeScript field initializer
624
+ * (`active`, `forcePasswordChange`, `lastLoginProvider`, `failedLoginAttempts`,
625
+ * `isAllowedToGenerateApiKeys`) is present on the instance holding its *default* rather
626
+ * than the value in the database - `active: true` for a user who may well be inactive.
627
+ * Serialization does not help: those defaults are real own properties. Copying the
628
+ * allowlist into a fresh object is what guarantees the response contains only columns
629
+ * actually read from the database.
630
+ */
631
+ protected toUserSummary(user: unknown): Partial<User> | null {
632
+ if (!user) {
633
+ return null;
634
+ }
635
+ const summary: Partial<User> = {};
636
+ for (const field of USER_SUMMARY_FIELDS) {
637
+ summary[field] = user[field] as never;
638
+ }
639
+ return summary;
640
+ }
641
+
576
642
  // entities is an array of T
577
643
  // T can contain createdBy and updatedBy fields
578
644
  // We need to populate the createdBy and updatedBy fields with the User entity
@@ -584,9 +650,15 @@ private async prepareManyToManyAuditSnapshot(entity: T,id: number,modelSingularN
584
650
  if (userId) {
585
651
  const user = await userRepository.findOne({
586
652
  where: { id: userId },
653
+ // SECURITY: a populated createdBy/updatedBy is only ever displayed as
654
+ // "who did this", so it must not ship the author's email, mobile, role
655
+ // assignments or API keys - let alone the credential columns, which
656
+ // survive here whenever User is subclassed (class-transformer resolves
657
+ // @Exclude() per class and does not inherit it).
658
+ select: USER_SUMMARY_FIELDS as unknown as (keyof User)[],
587
659
  });
588
660
  // @ts-ignore
589
- entity[userFieldPath] = user;
661
+ entity[userFieldPath] = this.toUserSummary(user);
590
662
  }
591
663
  }
592
664
  }
@@ -697,6 +769,12 @@ private async prepareManyToManyAuditSnapshot(entity: T,id: number,modelSingularN
697
769
  }
698
770
  }
699
771
 
772
+ // Validate populate/fields against real entity metadata before handing them to TypeORM.
773
+ // This path is not SQL-injectable (setFindOptions is metadata driven), but without this an
774
+ // unknown name surfaces as an unhandled TypeORM error — a 500 leaking schema detail — and
775
+ // behaves inconsistently with find(), which returns a 400.
776
+ this.validateFindOneQueryFields(normalizedPopulate, this.crudHelperService.normalize(fields));
777
+
700
778
  let entity = await this.repo.findOne({
701
779
  where: {
702
780
  id: id,
@@ -715,6 +793,30 @@ private async prepareManyToManyAuditSnapshot(entity: T,id: number,modelSingularN
715
793
  return entity;
716
794
  }
717
795
 
796
+ /**
797
+ * Validate findOne's `populate` / `fields` against the entity's real TypeORM metadata.
798
+ *
799
+ * `findOne` goes through repo.findOne({ relations, select }) -> setFindOptions, which is
800
+ * metadata driven and therefore not SQL-injectable. Validating here is about turning an
801
+ * unknown name into a clean 400 instead of an unhandled TypeORM error (a 500 that leaks
802
+ * schema detail), and keeping behaviour consistent with find().
803
+ */
804
+ private validateFindOneQueryFields(populate: string[], fields: string[]) {
805
+ const metadata = this.repo.metadata;
806
+ if (!metadata) return;
807
+ for (const relationPath of populate) {
808
+ const resolved = this.crudHelperService.resolveFieldPathFromMetadata(
809
+ metadata, relationPath.split('.'), { allowRelationLeaf: true }
810
+ );
811
+ if (!resolved.leafIsRelation) {
812
+ throw new BadRequestException(`'${relationPath}' is not a relation and cannot be populated.`);
813
+ }
814
+ }
815
+ for (const field of fields) {
816
+ this.crudHelperService.resolveFieldPathFromMetadata(metadata, field.split('.'));
817
+ }
818
+ }
819
+
718
820
  async createMany(createDtos: any[], solidRequestContext: any = {}): Promise<T[]> {
719
821
  const loadedmodel = await this.loadModel();
720
822
 
@@ -735,6 +837,7 @@ private async prepareManyToManyAuditSnapshot(entity: T,id: number,modelSingularN
735
837
  module: true,
736
838
  });
737
839
 
840
+ const solidRegistry = this.moduleRef.get(SolidRegistry, { strict: false });
738
841
  const entitiesForSave: T[] = [];
739
842
  for (const createDto of createDtos) {
740
843
  // Validate and transform each createDto sequentially
@@ -747,6 +850,7 @@ private async prepareManyToManyAuditSnapshot(entity: T,id: number,modelSingularN
747
850
  }
748
851
  transformedDto = await fieldManager.transformForCreate(createDto);
749
852
  }
853
+ this.internationalisationHelperService.applyCreateDefaults(model, transformedDto, solidRegistry);
750
854
  const entity = this.repo.create(transformedDto);
751
855
  entitiesForSave.push(entity as unknown as T);
752
856
  }
@@ -784,7 +888,7 @@ private async prepareManyToManyAuditSnapshot(entity: T,id: number,modelSingularN
784
888
 
785
889
 
786
890
 
787
- const removedEntities = [];
891
+ const removedEntities: T[] = [];
788
892
  for (let i = 0; i < ids.length; i++) {
789
893
  const id = ids[i]
790
894
  const entity = await this.repo.findOne({
@@ -793,36 +897,21 @@ private async prepareManyToManyAuditSnapshot(entity: T,id: number,modelSingularN
793
897
  } as unknown as FindOptionsWhere<T>,
794
898
  });
795
899
 
900
+ if (!entity) {
901
+ throw new Error(`Entity [${this.moduleName}.${this.modelName}] with id ${id} not found`);
902
+ }
903
+
796
904
  removedEntities.push(entity);
797
905
  }
798
906
 
799
907
 
800
- // entity-level flag
801
- const isDraftPublishEnabled = model?.draftPublishWorkflow === true;
802
-
803
- let publishedEntitiesExists: T[] = [];
804
-
805
- if (isDraftPublishEnabled) {
806
- publishedEntitiesExists = removedEntities.filter(
807
- (x) => !!x?.publishedAt
808
- );
908
+ if (this.draftPublishHelperService.isDraftPublishEnabled(model)) {
909
+ this.draftPublishHelperService.assertDraftPublishDeleteAllowed(this.modelName, removedEntities);
809
910
  }
810
911
 
811
- if (publishedEntitiesExists.length > 0) {
812
- const publishedEntitiesExistsID = publishedEntitiesExists.map(x => x.id);
912
+ await this.internationalisationHelperService.deleteChildLocaleEntities(this.repo, model, ids);
813
913
 
814
- throw new BadRequestException(
815
- `Cannot delete published record(s) for model ${this.modelName} with Ids ${publishedEntitiesExistsID.join(', ')}. Unpublish them first.`
816
- );
817
- }
818
-
819
- if (model.enableSoftDelete === true) {
820
- await this.repo.softRemove(removedEntities);
821
- return this.repo.save(removedEntities);
822
- } else {
823
- return this.repo.remove(removedEntities);
824
- }
825
- // return removedEntities
914
+ return this.deleteEntitiesAndPromote(model, removedEntities);
826
915
  }
827
916
 
828
917
  async recover(id: number, solidRequestContext: any = {}) {
@@ -852,6 +941,10 @@ private async prepareManyToManyAuditSnapshot(entity: T,id: number,modelSingularN
852
941
  } as unknown as QueryDeepPartialEntity<T>
853
942
  );
854
943
 
944
+ if (this.draftPublishHelperService.isDraftPublishEnabled(loadedmodel)) {
945
+ await this.draftPublishHelperService.promoteRecoveredDraftPublishVersion(this.repo, softDeletedRows);
946
+ }
947
+
855
948
  return { message: SUCCESS_MESSAGES.RECORD_RECOVERED, data: softDeletedRows };
856
949
  } catch (error: any) {
857
950
  if (error instanceof QueryFailedError && (error as any).code === '23505') {
@@ -898,6 +991,14 @@ private async prepareManyToManyAuditSnapshot(entity: T,id: number,modelSingularN
898
991
  { deletedAt: null, deletedTracker: "not-deleted" } as unknown as QueryDeepPartialEntity<T>
899
992
  );
900
993
 
994
+ if (this.draftPublishHelperService.isDraftPublishEnabled(loadedmodel)) {
995
+ // Sequential: two ids in the same batch could belong to the same version
996
+ // chain, and each promotion clears isLatest across the whole chain first.
997
+ for (const entity of softDeletedRows) {
998
+ await this.draftPublishHelperService.promoteRecoveredDraftPublishVersion(this.repo, entity);
999
+ }
1000
+ }
1001
+
901
1002
  return { message: SUCCESS_MESSAGES.SELECTED_RECORDS_RECOVERED, recoveredIds: ids };
902
1003
  } catch (error: any) {
903
1004
  if (error instanceof QueryFailedError && (error as any).code === "23505") {
@@ -952,18 +1053,11 @@ private async prepareManyToManyAuditSnapshot(entity: T,id: number,modelSingularN
952
1053
  return model.userKeyField?.name || '';
953
1054
  }
954
1055
 
955
- /* Publish a record - sets publishedAt timestamp */
1056
+ /* Publish a record - marks the selected version as the active published version. */
956
1057
  async publishRecord(id: number, solidRequestContext: any = {}): Promise<T> {
957
1058
 
958
1059
  const model = await this.loadModel();
959
1060
 
960
- // Check if publish workflow is enabled for this model
961
- if (!model.draftPublishWorkflow) {
962
- throw new BadRequestException(
963
- `Publish workflow is not enabled for ${this.modelName}`
964
- );
965
- }
966
-
967
1061
  // Check user permissions
968
1062
  if (solidRequestContext.activeUser) {
969
1063
  const hasPermission = this.crudHelperService.hasPublishPermissionOnModel(
@@ -975,37 +1069,14 @@ private async prepareManyToManyAuditSnapshot(entity: T,id: number,modelSingularN
975
1069
  }
976
1070
  }
977
1071
 
978
- // Find the entity
979
- const entity = await this.repo.findOne({ where: { id } as any });
980
- if (!entity) {
981
- throw new NotFoundException(`${this.modelName} with id ${id} not found`);
982
- }
983
-
984
- // Check if already published
985
- if (entity.publishedAt) {
986
- throw new BadRequestException(
987
- `${this.modelName} with id ${id} is already published`
988
- );
989
- }
990
-
991
- // Update publish status
992
- const updatedEntity = await this.repo.save({ ...entity, publishedAt: new Date() });
993
-
994
- return updatedEntity
1072
+ return this.draftPublishHelperService.publishRecord(this.repo, model, this.modelName, id, solidRequestContext.activeUser);
995
1073
  }
996
1074
 
997
- /* Unpublish a record - clears publishedAt timestamp */
1075
+ /* Unpublish a record - marks the selected version as not currently published. */
998
1076
  async unpublishRecord(id: number, solidRequestContext: any = {}): Promise<T> {
999
1077
 
1000
1078
  const model = await this.loadModel();
1001
1079
 
1002
- // Check if publish workflow is enabled for this model
1003
- if (!model.draftPublishWorkflow) {
1004
- throw new BadRequestException(
1005
- `Publish workflow is not enabled for ${this.modelName}`
1006
- );
1007
- }
1008
-
1009
1080
  // Check user permissions
1010
1081
  if (solidRequestContext.activeUser) {
1011
1082
  const hasPermission = this.crudHelperService.hasUnpublishPermissionOnModel(
@@ -1017,23 +1088,7 @@ private async prepareManyToManyAuditSnapshot(entity: T,id: number,modelSingularN
1017
1088
  }
1018
1089
  }
1019
1090
 
1020
- // Find the entity
1021
- const entity = await this.repo.findOne({ where: { id } as any });
1022
- if (!entity) {
1023
- throw new NotFoundException(`${this.modelName} with id ${id} not found`);
1024
- }
1025
-
1026
- // Check if already unpublished
1027
- if (!entity.publishedAt) {
1028
- throw new BadRequestException(
1029
- `${this.modelName} with id ${id} is already unpublished`
1030
- );
1031
- }
1032
-
1033
- // Update unpublish status
1034
- const updatedEntity = await this.repo.save({ ...entity, publishedAt: null });
1035
-
1036
- return updatedEntity
1091
+ return this.draftPublishHelperService.unpublishRecord(this.repo, model, this.modelName, id, solidRequestContext.activeUser);
1037
1092
  }
1038
1093
 
1039
1094
  private getDatasourceDefaultEntityManager() {
@@ -1680,6 +1680,11 @@ export class DatasourceIntrospectionService {
1680
1680
 
1681
1681
  private getLegacySuperclassFieldName(columnName: string, legacyTableType: LegacyTableType) {
1682
1682
  const normalized = columnName.toLowerCase();
1683
+ // LegacyCommonEntityWithExistingId doesn't declare the draft/publish versioning
1684
+ // columns (see DRAFT_PUBLISH_VERSIONING_FIELD_NAMES), so their ss_-prefixed column
1685
+ // names must not appear here — otherwise a table that still physically has one of
1686
+ // those columns would have it silently treated as superclass-handled and dropped
1687
+ // from introspection instead of being surfaced as a real column.
1683
1688
  const legacyFieldMap: Record<string, string> = {
1684
1689
  ss_created_at: "createdAt",
1685
1690
  ss_updated_at: "updatedAt",