@solidxai/core 0.1.13-beta.0 → 0.1.13-beta.11

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 (725) hide show
  1. package/CHANGELOG.md +4343 -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 +2 -2
  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-node-provider.decorator.d.ts +4 -0
  122. package/dist/decorators/workflow-node-provider.decorator.d.ts.map +1 -0
  123. package/dist/decorators/workflow-node-provider.decorator.js +13 -0
  124. package/dist/decorators/workflow-node-provider.decorator.js.map +1 -0
  125. package/dist/dtos/basic-filters.dto.d.ts +0 -1
  126. package/dist/dtos/basic-filters.dto.d.ts.map +1 -1
  127. package/dist/dtos/basic-filters.dto.js +1 -6
  128. package/dist/dtos/basic-filters.dto.js.map +1 -1
  129. package/dist/dtos/create-workflow-definition.dto.d.ts +14 -0
  130. package/dist/dtos/create-workflow-definition.dto.d.ts.map +1 -0
  131. package/dist/dtos/create-workflow-definition.dto.js +92 -0
  132. package/dist/dtos/create-workflow-definition.dto.js.map +1 -0
  133. package/dist/dtos/create-workflow-execution-artifact.dto.d.ts +22 -0
  134. package/dist/dtos/create-workflow-execution-artifact.dto.d.ts.map +1 -0
  135. package/dist/dtos/create-workflow-execution-artifact.dto.js +139 -0
  136. package/dist/dtos/create-workflow-execution-artifact.dto.js.map +1 -0
  137. package/dist/dtos/create-workflow-execution-log.dto.d.ts +18 -0
  138. package/dist/dtos/create-workflow-execution-log.dto.d.ts.map +1 -0
  139. package/dist/dtos/create-workflow-execution-log.dto.js +116 -0
  140. package/dist/dtos/create-workflow-execution-log.dto.js.map +1 -0
  141. package/dist/dtos/create-workflow-execution.dto.d.ts +33 -0
  142. package/dist/dtos/create-workflow-execution.dto.d.ts.map +1 -0
  143. package/dist/dtos/create-workflow-execution.dto.js +186 -0
  144. package/dist/dtos/create-workflow-execution.dto.js.map +1 -0
  145. package/dist/dtos/create-workflow-secret.dto.d.ts +11 -0
  146. package/dist/dtos/create-workflow-secret.dto.d.ts.map +1 -0
  147. package/dist/dtos/create-workflow-secret.dto.js +74 -0
  148. package/dist/dtos/create-workflow-secret.dto.js.map +1 -0
  149. package/dist/dtos/create-workflow-step-execution.dto.d.ts +27 -0
  150. package/dist/dtos/create-workflow-step-execution.dto.d.ts.map +1 -0
  151. package/dist/dtos/create-workflow-step-execution.dto.js +171 -0
  152. package/dist/dtos/create-workflow-step-execution.dto.js.map +1 -0
  153. package/dist/dtos/create-workflow-trigger-execution.dto.d.ts +25 -0
  154. package/dist/dtos/create-workflow-trigger-execution.dto.d.ts.map +1 -0
  155. package/dist/dtos/create-workflow-trigger-execution.dto.js +158 -0
  156. package/dist/dtos/create-workflow-trigger-execution.dto.js.map +1 -0
  157. package/dist/dtos/execute-workflow.dto.d.ts +7 -0
  158. package/dist/dtos/execute-workflow.dto.d.ts.map +1 -0
  159. package/dist/dtos/execute-workflow.dto.js +11 -0
  160. package/dist/dtos/execute-workflow.dto.js.map +1 -0
  161. package/dist/dtos/update-workflow-definition.dto.d.ts +15 -0
  162. package/dist/dtos/update-workflow-definition.dto.d.ts.map +1 -0
  163. package/dist/dtos/update-workflow-definition.dto.js +97 -0
  164. package/dist/dtos/update-workflow-definition.dto.js.map +1 -0
  165. package/dist/dtos/update-workflow-execution-artifact.dto.d.ts +23 -0
  166. package/dist/dtos/update-workflow-execution-artifact.dto.d.ts.map +1 -0
  167. package/dist/dtos/update-workflow-execution-artifact.dto.js +143 -0
  168. package/dist/dtos/update-workflow-execution-artifact.dto.js.map +1 -0
  169. package/dist/dtos/update-workflow-execution-log.dto.d.ts +19 -0
  170. package/dist/dtos/update-workflow-execution-log.dto.d.ts.map +1 -0
  171. package/dist/dtos/update-workflow-execution-log.dto.js +121 -0
  172. package/dist/dtos/update-workflow-execution-log.dto.js.map +1 -0
  173. package/dist/dtos/update-workflow-execution.dto.d.ts +34 -0
  174. package/dist/dtos/update-workflow-execution.dto.d.ts.map +1 -0
  175. package/dist/dtos/update-workflow-execution.dto.js +190 -0
  176. package/dist/dtos/update-workflow-execution.dto.js.map +1 -0
  177. package/dist/dtos/update-workflow-secret.dto.d.ts +12 -0
  178. package/dist/dtos/update-workflow-secret.dto.d.ts.map +1 -0
  179. package/dist/dtos/update-workflow-secret.dto.js +80 -0
  180. package/dist/dtos/update-workflow-secret.dto.js.map +1 -0
  181. package/dist/dtos/update-workflow-step-execution.dto.d.ts +28 -0
  182. package/dist/dtos/update-workflow-step-execution.dto.d.ts.map +1 -0
  183. package/dist/dtos/update-workflow-step-execution.dto.js +175 -0
  184. package/dist/dtos/update-workflow-step-execution.dto.js.map +1 -0
  185. package/dist/dtos/update-workflow-trigger-execution.dto.d.ts +26 -0
  186. package/dist/dtos/update-workflow-trigger-execution.dto.d.ts.map +1 -0
  187. package/dist/dtos/update-workflow-trigger-execution.dto.js +163 -0
  188. package/dist/dtos/update-workflow-trigger-execution.dto.js.map +1 -0
  189. package/dist/dtos/validate-workflow-definition.dto.d.ts +4 -0
  190. package/dist/dtos/validate-workflow-definition.dto.d.ts.map +1 -0
  191. package/dist/dtos/validate-workflow-definition.dto.js +11 -0
  192. package/dist/dtos/validate-workflow-definition.dto.js.map +1 -0
  193. package/dist/entities/common.entity.d.ts +4 -0
  194. package/dist/entities/common.entity.d.ts.map +1 -1
  195. package/dist/entities/common.entity.js +25 -1
  196. package/dist/entities/common.entity.js.map +1 -1
  197. package/dist/entities/dashboard-user-layout.entity.js +2 -2
  198. package/dist/entities/dashboard-user-layout.entity.js.map +1 -1
  199. package/dist/entities/user.entity.d.ts.map +1 -1
  200. package/dist/entities/user.entity.js +36 -0
  201. package/dist/entities/user.entity.js.map +1 -1
  202. package/dist/entities/view-metadata.entity.js.map +1 -1
  203. package/dist/entities/workflow-definition.entity.d.ts +15 -0
  204. package/dist/entities/workflow-definition.entity.d.ts.map +1 -0
  205. package/dist/entities/workflow-definition.entity.js +77 -0
  206. package/dist/entities/workflow-definition.entity.js.map +1 -0
  207. package/dist/entities/workflow-execution-artifact.entity.d.ts +23 -0
  208. package/dist/entities/workflow-execution-artifact.entity.d.ts.map +1 -0
  209. package/dist/entities/workflow-execution-artifact.entity.js +114 -0
  210. package/dist/entities/workflow-execution-artifact.entity.js.map +1 -0
  211. package/dist/entities/workflow-execution-log.entity.d.ts +19 -0
  212. package/dist/entities/workflow-execution-log.entity.d.ts.map +1 -0
  213. package/dist/entities/workflow-execution-log.entity.js +96 -0
  214. package/dist/entities/workflow-execution-log.entity.js.map +1 -0
  215. package/dist/entities/workflow-execution.entity.d.ts +28 -0
  216. package/dist/entities/workflow-execution.entity.d.ts.map +1 -0
  217. package/dist/entities/workflow-execution.entity.js +125 -0
  218. package/dist/entities/workflow-execution.entity.js.map +1 -0
  219. package/dist/entities/workflow-secret.entity.d.ts +12 -0
  220. package/dist/entities/workflow-secret.entity.d.ts.map +1 -0
  221. package/dist/entities/workflow-secret.entity.js +67 -0
  222. package/dist/entities/workflow-secret.entity.js.map +1 -0
  223. package/dist/entities/workflow-step-execution.entity.d.ts +28 -0
  224. package/dist/entities/workflow-step-execution.entity.d.ts.map +1 -0
  225. package/dist/entities/workflow-step-execution.entity.js +139 -0
  226. package/dist/entities/workflow-step-execution.entity.js.map +1 -0
  227. package/dist/entities/workflow-trigger-execution.entity.d.ts +26 -0
  228. package/dist/entities/workflow-trigger-execution.entity.d.ts.map +1 -0
  229. package/dist/entities/workflow-trigger-execution.entity.js +128 -0
  230. package/dist/entities/workflow-trigger-execution.entity.js.map +1 -0
  231. package/dist/factories/mail.factory.d.ts.map +1 -1
  232. package/dist/factories/mail.factory.js +4 -0
  233. package/dist/factories/mail.factory.js.map +1 -1
  234. package/dist/factories/sms.factory.d.ts.map +1 -1
  235. package/dist/factories/sms.factory.js +4 -1
  236. package/dist/factories/sms.factory.js.map +1 -1
  237. package/dist/helpers/field-crud-managers/MediaFieldCrudManager.d.ts +1 -0
  238. package/dist/helpers/field-crud-managers/MediaFieldCrudManager.d.ts.map +1 -1
  239. package/dist/helpers/field-crud-managers/MediaFieldCrudManager.js +18 -11
  240. package/dist/helpers/field-crud-managers/MediaFieldCrudManager.js.map +1 -1
  241. package/dist/helpers/file-download.helper.d.ts +9 -0
  242. package/dist/helpers/file-download.helper.d.ts.map +1 -0
  243. package/dist/helpers/file-download.helper.js +14 -0
  244. package/dist/helpers/file-download.helper.js.map +1 -0
  245. package/dist/helpers/model-metadata-helper.service.d.ts.map +1 -1
  246. package/dist/helpers/model-metadata-helper.service.js +30 -1
  247. package/dist/helpers/model-metadata-helper.service.js.map +1 -1
  248. package/dist/helpers/solid-registry.js +1 -1
  249. package/dist/helpers/solid-registry.js.map +1 -1
  250. package/dist/helpers/typeorm-db-helper.d.ts.map +1 -1
  251. package/dist/helpers/typeorm-db-helper.js +9 -0
  252. package/dist/helpers/typeorm-db-helper.js.map +1 -1
  253. package/dist/index.d.ts +58 -0
  254. package/dist/index.d.ts.map +1 -1
  255. package/dist/index.js +58 -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 +1 -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/workflow-definition.repository.d.ts +12 -0
  301. package/dist/repository/workflow-definition.repository.d.ts.map +1 -0
  302. package/dist/repository/workflow-definition.repository.js +39 -0
  303. package/dist/repository/workflow-definition.repository.js.map +1 -0
  304. package/dist/repository/workflow-execution-artifact.repository.d.ts +12 -0
  305. package/dist/repository/workflow-execution-artifact.repository.d.ts.map +1 -0
  306. package/dist/repository/workflow-execution-artifact.repository.js +39 -0
  307. package/dist/repository/workflow-execution-artifact.repository.js.map +1 -0
  308. package/dist/repository/workflow-execution-log.repository.d.ts +12 -0
  309. package/dist/repository/workflow-execution-log.repository.d.ts.map +1 -0
  310. package/dist/repository/workflow-execution-log.repository.js +39 -0
  311. package/dist/repository/workflow-execution-log.repository.js.map +1 -0
  312. package/dist/repository/workflow-execution.repository.d.ts +12 -0
  313. package/dist/repository/workflow-execution.repository.d.ts.map +1 -0
  314. package/dist/repository/workflow-execution.repository.js +39 -0
  315. package/dist/repository/workflow-execution.repository.js.map +1 -0
  316. package/dist/repository/workflow-secret.repository.d.ts +12 -0
  317. package/dist/repository/workflow-secret.repository.d.ts.map +1 -0
  318. package/dist/repository/workflow-secret.repository.js +39 -0
  319. package/dist/repository/workflow-secret.repository.js.map +1 -0
  320. package/dist/repository/workflow-step-execution.repository.d.ts +12 -0
  321. package/dist/repository/workflow-step-execution.repository.d.ts.map +1 -0
  322. package/dist/repository/workflow-step-execution.repository.js +39 -0
  323. package/dist/repository/workflow-step-execution.repository.js.map +1 -0
  324. package/dist/repository/workflow-trigger-execution.repository.d.ts +12 -0
  325. package/dist/repository/workflow-trigger-execution.repository.d.ts.map +1 -0
  326. package/dist/repository/workflow-trigger-execution.repository.js +39 -0
  327. package/dist/repository/workflow-trigger-execution.repository.js.map +1 -0
  328. package/dist/seeders/module-metadata-seeder.service.d.ts +6 -0
  329. package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
  330. package/dist/seeders/module-metadata-seeder.service.js +185 -27
  331. package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
  332. package/dist/seeders/module-test-data.service.d.ts +3 -1
  333. package/dist/seeders/module-test-data.service.d.ts.map +1 -1
  334. package/dist/seeders/module-test-data.service.js +8 -2
  335. package/dist/seeders/module-test-data.service.js.map +1 -1
  336. package/dist/seeders/seed-data/solid-core-metadata.json +11494 -5570
  337. package/dist/services/authentication.service.d.ts +4 -1
  338. package/dist/services/authentication.service.d.ts.map +1 -1
  339. package/dist/services/authentication.service.js +52 -4
  340. package/dist/services/authentication.service.js.map +1 -1
  341. package/dist/services/chatter-message.service.d.ts +11 -0
  342. package/dist/services/chatter-message.service.d.ts.map +1 -1
  343. package/dist/services/chatter-message.service.js +52 -3
  344. package/dist/services/chatter-message.service.js.map +1 -1
  345. package/dist/services/crud-helper.service.d.ts +5 -2
  346. package/dist/services/crud-helper.service.d.ts.map +1 -1
  347. package/dist/services/crud-helper.service.js +30 -32
  348. package/dist/services/crud-helper.service.js.map +1 -1
  349. package/dist/services/crud.service.d.ts +13 -1
  350. package/dist/services/crud.service.d.ts.map +1 -1
  351. package/dist/services/crud.service.js +92 -67
  352. package/dist/services/crud.service.js.map +1 -1
  353. package/dist/services/datasource-introspection.service.d.ts.map +1 -1
  354. package/dist/services/datasource-introspection.service.js.map +1 -1
  355. package/dist/services/draft-publish-helper.service.d.ts +52 -0
  356. package/dist/services/draft-publish-helper.service.d.ts.map +1 -0
  357. package/dist/services/draft-publish-helper.service.js +368 -0
  358. package/dist/services/draft-publish-helper.service.js.map +1 -0
  359. package/dist/services/internationalisation-helper.service.d.ts +19 -0
  360. package/dist/services/internationalisation-helper.service.d.ts.map +1 -0
  361. package/dist/services/internationalisation-helper.service.js +107 -0
  362. package/dist/services/internationalisation-helper.service.js.map +1 -0
  363. package/dist/services/locale.service.d.ts +1 -1
  364. package/dist/services/media.service.d.ts +3 -2
  365. package/dist/services/media.service.d.ts.map +1 -1
  366. package/dist/services/media.service.js +44 -29
  367. package/dist/services/media.service.js.map +1 -1
  368. package/dist/services/metadata-validation.service.d.ts +7 -0
  369. package/dist/services/metadata-validation.service.d.ts.map +1 -0
  370. package/dist/services/metadata-validation.service.js +42 -0
  371. package/dist/services/metadata-validation.service.js.map +1 -0
  372. package/dist/services/model-metadata.service.d.ts.map +1 -1
  373. package/dist/services/model-metadata.service.js +2 -1
  374. package/dist/services/model-metadata.service.js.map +1 -1
  375. package/dist/services/object.utils.d.ts +2 -0
  376. package/dist/services/object.utils.d.ts.map +1 -0
  377. package/dist/services/object.utils.js +11 -0
  378. package/dist/services/object.utils.js.map +1 -0
  379. package/dist/services/settings/default-settings-provider.service.d.ts +46 -6
  380. package/dist/services/settings/default-settings-provider.service.d.ts.map +1 -1
  381. package/dist/services/settings/default-settings-provider.service.js +29 -3
  382. package/dist/services/settings/default-settings-provider.service.js.map +1 -1
  383. package/dist/services/user.service.d.ts +2 -2
  384. package/dist/services/user.service.d.ts.map +1 -1
  385. package/dist/services/user.service.js +9 -3
  386. package/dist/services/user.service.js.map +1 -1
  387. package/dist/services/view-metadata.service.d.ts +1 -2
  388. package/dist/services/view-metadata.service.d.ts.map +1 -1
  389. package/dist/services/view-metadata.service.js +3 -55
  390. package/dist/services/view-metadata.service.js.map +1 -1
  391. package/dist/services/workflow/nodes/execution-fail.node.d.ts +6 -0
  392. package/dist/services/workflow/nodes/execution-fail.node.d.ts.map +1 -0
  393. package/dist/services/workflow/nodes/execution-fail.node.js +81 -0
  394. package/dist/services/workflow/nodes/execution-fail.node.js.map +1 -0
  395. package/dist/services/workflow/nodes/for-each.node.d.ts +8 -0
  396. package/dist/services/workflow/nodes/for-each.node.d.ts.map +1 -0
  397. package/dist/services/workflow/nodes/for-each.node.js +204 -0
  398. package/dist/services/workflow/nodes/for-each.node.js.map +1 -0
  399. package/dist/services/workflow/nodes/http-request.node.d.ts +13 -0
  400. package/dist/services/workflow/nodes/http-request.node.d.ts.map +1 -0
  401. package/dist/services/workflow/nodes/http-request.node.js +549 -0
  402. package/dist/services/workflow/nodes/http-request.node.js.map +1 -0
  403. package/dist/services/workflow/nodes/if.node.d.ts +6 -0
  404. package/dist/services/workflow/nodes/if.node.d.ts.map +1 -0
  405. package/dist/services/workflow/nodes/if.node.js +100 -0
  406. package/dist/services/workflow/nodes/if.node.js.map +1 -0
  407. package/dist/services/workflow/nodes/log-write.node.d.ts +6 -0
  408. package/dist/services/workflow/nodes/log-write.node.d.ts.map +1 -0
  409. package/dist/services/workflow/nodes/log-write.node.js +231 -0
  410. package/dist/services/workflow/nodes/log-write.node.js.map +1 -0
  411. package/dist/services/workflow/nodes/loop-until.node.d.ts +12 -0
  412. package/dist/services/workflow/nodes/loop-until.node.d.ts.map +1 -0
  413. package/dist/services/workflow/nodes/loop-until.node.js +281 -0
  414. package/dist/services/workflow/nodes/loop-until.node.js.map +1 -0
  415. package/dist/services/workflow/nodes/parallel.node.d.ts +6 -0
  416. package/dist/services/workflow/nodes/parallel.node.d.ts.map +1 -0
  417. package/dist/services/workflow/nodes/parallel.node.js +83 -0
  418. package/dist/services/workflow/nodes/parallel.node.js.map +1 -0
  419. package/dist/services/workflow/nodes/runtime-python.node.d.ts +13 -0
  420. package/dist/services/workflow/nodes/runtime-python.node.d.ts.map +1 -0
  421. package/dist/services/workflow/nodes/runtime-python.node.js +522 -0
  422. package/dist/services/workflow/nodes/runtime-python.node.js.map +1 -0
  423. package/dist/services/workflow/nodes/sequential.node.d.ts +6 -0
  424. package/dist/services/workflow/nodes/sequential.node.d.ts.map +1 -0
  425. package/dist/services/workflow/nodes/sequential.node.js +68 -0
  426. package/dist/services/workflow/nodes/sequential.node.js.map +1 -0
  427. package/dist/services/workflow/nodes/solidx-api.helpers.d.ts +25 -0
  428. package/dist/services/workflow/nodes/solidx-api.helpers.d.ts.map +1 -0
  429. package/dist/services/workflow/nodes/solidx-api.helpers.js +143 -0
  430. package/dist/services/workflow/nodes/solidx-api.helpers.js.map +1 -0
  431. package/dist/services/workflow/nodes/solidx-crud.nodes.d.ts +48 -0
  432. package/dist/services/workflow/nodes/solidx-crud.nodes.d.ts.map +1 -0
  433. package/dist/services/workflow/nodes/solidx-crud.nodes.js +475 -0
  434. package/dist/services/workflow/nodes/solidx-crud.nodes.js.map +1 -0
  435. package/dist/services/workflow/nodes/solidx-login.node.d.ts +6 -0
  436. package/dist/services/workflow/nodes/solidx-login.node.d.ts.map +1 -0
  437. package/dist/services/workflow/nodes/solidx-login.node.js +208 -0
  438. package/dist/services/workflow/nodes/solidx-login.node.js.map +1 -0
  439. package/dist/services/workflow/nodes/solidx-send-email.node.d.ts +11 -0
  440. package/dist/services/workflow/nodes/solidx-send-email.node.d.ts.map +1 -0
  441. package/dist/services/workflow/nodes/solidx-send-email.node.js +437 -0
  442. package/dist/services/workflow/nodes/solidx-send-email.node.js.map +1 -0
  443. package/dist/services/workflow/nodes/solidx-send-sms.node.d.ts +10 -0
  444. package/dist/services/workflow/nodes/solidx-send-sms.node.d.ts.map +1 -0
  445. package/dist/services/workflow/nodes/solidx-send-sms.node.js +347 -0
  446. package/dist/services/workflow/nodes/solidx-send-sms.node.js.map +1 -0
  447. package/dist/services/workflow/nodes/switch.node.d.ts +7 -0
  448. package/dist/services/workflow/nodes/switch.node.d.ts.map +1 -0
  449. package/dist/services/workflow/nodes/switch.node.js +120 -0
  450. package/dist/services/workflow/nodes/switch.node.js.map +1 -0
  451. package/dist/services/workflow/workflow-definition-metadata-sync.service.d.ts +19 -0
  452. package/dist/services/workflow/workflow-definition-metadata-sync.service.d.ts.map +1 -0
  453. package/dist/services/workflow/workflow-definition-metadata-sync.service.js +187 -0
  454. package/dist/services/workflow/workflow-definition-metadata-sync.service.js.map +1 -0
  455. package/dist/services/workflow/workflow-definition-validator.service.d.ts +13 -0
  456. package/dist/services/workflow/workflow-definition-validator.service.d.ts.map +1 -0
  457. package/dist/services/workflow/workflow-definition-validator.service.js +166 -0
  458. package/dist/services/workflow/workflow-definition-validator.service.js.map +1 -0
  459. package/dist/services/workflow/workflow-execution-writer.service.d.ts +26 -0
  460. package/dist/services/workflow/workflow-execution-writer.service.d.ts.map +1 -0
  461. package/dist/services/workflow/workflow-execution-writer.service.js +191 -0
  462. package/dist/services/workflow/workflow-execution-writer.service.js.map +1 -0
  463. package/dist/services/workflow/workflow-expression.service.d.ts +14 -0
  464. package/dist/services/workflow/workflow-expression.service.d.ts.map +1 -0
  465. package/dist/services/workflow/workflow-expression.service.js +157 -0
  466. package/dist/services/workflow/workflow-expression.service.js.map +1 -0
  467. package/dist/services/workflow/workflow-invocation.service.d.ts +11 -0
  468. package/dist/services/workflow/workflow-invocation.service.d.ts.map +1 -0
  469. package/dist/services/workflow/workflow-invocation.service.js +37 -0
  470. package/dist/services/workflow/workflow-invocation.service.js.map +1 -0
  471. package/dist/services/workflow/workflow-node-registry.service.d.ts +19 -0
  472. package/dist/services/workflow/workflow-node-registry.service.d.ts.map +1 -0
  473. package/dist/services/workflow/workflow-node-registry.service.js +117 -0
  474. package/dist/services/workflow/workflow-node-registry.service.js.map +1 -0
  475. package/dist/services/workflow/workflow-runtime.service.d.ts +61 -0
  476. package/dist/services/workflow/workflow-runtime.service.d.ts.map +1 -0
  477. package/dist/services/workflow/workflow-runtime.service.js +706 -0
  478. package/dist/services/workflow/workflow-runtime.service.js.map +1 -0
  479. package/dist/services/workflow/workflow-scheduled-trigger.job.d.ts +10 -0
  480. package/dist/services/workflow/workflow-scheduled-trigger.job.d.ts.map +1 -0
  481. package/dist/services/workflow/workflow-scheduled-trigger.job.js +37 -0
  482. package/dist/services/workflow/workflow-scheduled-trigger.job.js.map +1 -0
  483. package/dist/services/workflow-definition.service.d.ts +52 -0
  484. package/dist/services/workflow-definition.service.d.ts.map +1 -0
  485. package/dist/services/workflow-definition.service.js +251 -0
  486. package/dist/services/workflow-definition.service.js.map +1 -0
  487. package/dist/services/workflow-execution-artifact.service.d.ts +12 -0
  488. package/dist/services/workflow-execution-artifact.service.d.ts.map +1 -0
  489. package/dist/services/workflow-execution-artifact.service.js +38 -0
  490. package/dist/services/workflow-execution-artifact.service.js.map +1 -0
  491. package/dist/services/workflow-execution-log.service.d.ts +12 -0
  492. package/dist/services/workflow-execution-log.service.d.ts.map +1 -0
  493. package/dist/services/workflow-execution-log.service.js +38 -0
  494. package/dist/services/workflow-execution-log.service.js.map +1 -0
  495. package/dist/services/workflow-execution.service.d.ts +12 -0
  496. package/dist/services/workflow-execution.service.d.ts.map +1 -0
  497. package/dist/services/workflow-execution.service.js +38 -0
  498. package/dist/services/workflow-execution.service.js.map +1 -0
  499. package/dist/services/workflow-secret.service.d.ts +25 -0
  500. package/dist/services/workflow-secret.service.d.ts.map +1 -0
  501. package/dist/services/workflow-secret.service.js +152 -0
  502. package/dist/services/workflow-secret.service.js.map +1 -0
  503. package/dist/services/workflow-step-execution.service.d.ts +12 -0
  504. package/dist/services/workflow-step-execution.service.d.ts.map +1 -0
  505. package/dist/services/workflow-step-execution.service.js +38 -0
  506. package/dist/services/workflow-step-execution.service.js.map +1 -0
  507. package/dist/services/workflow-trigger-execution.service.d.ts +12 -0
  508. package/dist/services/workflow-trigger-execution.service.d.ts.map +1 -0
  509. package/dist/services/workflow-trigger-execution.service.js +38 -0
  510. package/dist/services/workflow-trigger-execution.service.js.map +1 -0
  511. package/dist/solid-core.module.d.ts.map +1 -1
  512. package/dist/solid-core.module.js +131 -1
  513. package/dist/solid-core.module.js.map +1 -1
  514. package/dist/testing/adapters/ui/playwright-adapter.d.ts +5 -0
  515. package/dist/testing/adapters/ui/playwright-adapter.d.ts.map +1 -1
  516. package/dist/testing/adapters/ui/playwright-adapter.js +17 -1
  517. package/dist/testing/adapters/ui/playwright-adapter.js.map +1 -1
  518. package/dist/testing/adapters/ui/ui.types.d.ts +2 -0
  519. package/dist/testing/adapters/ui/ui.types.d.ts.map +1 -1
  520. package/dist/testing/adapters/ui/ui.types.js.map +1 -1
  521. package/dist/testing/steps/ui/actions.step.d.ts.map +1 -1
  522. package/dist/testing/steps/ui/actions.step.js +6 -2
  523. package/dist/testing/steps/ui/actions.step.js.map +1 -1
  524. package/dist/testing/steps/ui/assertions.step.d.ts.map +1 -1
  525. package/dist/testing/steps/ui/assertions.step.js +11 -3
  526. package/dist/testing/steps/ui/assertions.step.js.map +1 -1
  527. package/dist/testing/steps/ui/form.step.d.ts.map +1 -1
  528. package/dist/testing/steps/ui/form.step.js +9 -3
  529. package/dist/testing/steps/ui/form.step.js.map +1 -1
  530. package/dist/testing/steps/ui/manual.step.js +1 -1
  531. package/dist/testing/steps/ui/manual.step.js.map +1 -1
  532. package/dist/testing/steps/ui/navigation.step.d.ts.map +1 -1
  533. package/dist/testing/steps/ui/navigation.step.js +3 -1
  534. package/dist/testing/steps/ui/navigation.step.js.map +1 -1
  535. package/dist/transformers/empty-string-to-null-transformer.d.ts +4 -0
  536. package/dist/transformers/empty-string-to-null-transformer.d.ts.map +1 -0
  537. package/dist/transformers/empty-string-to-null-transformer.js +12 -0
  538. package/dist/transformers/empty-string-to-null-transformer.js.map +1 -0
  539. package/dist/types/workflow-dsl.types.d.ts +291 -0
  540. package/dist/types/workflow-dsl.types.d.ts.map +1 -0
  541. package/dist/types/workflow-dsl.types.js +3 -0
  542. package/dist/types/workflow-dsl.types.js.map +1 -0
  543. package/dist/types/workflow-execution-queue.types.d.ts +4 -0
  544. package/dist/types/workflow-execution-queue.types.d.ts.map +1 -0
  545. package/dist/types/workflow-execution-queue.types.js +3 -0
  546. package/dist/types/workflow-execution-queue.types.js.map +1 -0
  547. package/dist-tests/api/authenticate.spec.js +119 -0
  548. package/dist-tests/api/authenticate.spec.js.map +1 -0
  549. package/dist-tests/api/crud-service.findOne.cityMaster.spec.js +97 -0
  550. package/dist-tests/api/crud-service.findOne.cityMaster.spec.js.map +1 -0
  551. package/dist-tests/api/ping.spec.js +21 -0
  552. package/dist-tests/api/ping.spec.js.map +1 -0
  553. package/dist-tests/helpers/auth.js +41 -0
  554. package/dist-tests/helpers/auth.js.map +1 -0
  555. package/dist-tests/helpers/env.js +11 -0
  556. package/dist-tests/helpers/env.js.map +1 -0
  557. package/docs/agent-builder/notebook-lm-prompt-for-agent-builder.md +136 -0
  558. package/docs/agent-builder/team-ready-note-agent-builder.md +305 -0
  559. package/docs/agent-hub-grooming.md +301 -0
  560. package/docs/dashboards/AGENTIC_DASHBOARD_IMPLEMENTATION_PLAN.md +438 -0
  561. package/docs/dashboards/dashboard-curl-smoke-tests.txt +146 -0
  562. package/docs/dashboards/delete-legacy-dashboard-metadata.sql +172 -0
  563. package/docs/datasource-introspection-ddl-analysis.md +326 -0
  564. package/docs/datasource-introspection-implementation-plan.md +306 -0
  565. package/docs/grouping-enhancements.md +89 -0
  566. package/docs/java-spring/README.md +3 -0
  567. package/docs/java-spring/solid-core-module-deep-dive-report.md +1317 -0
  568. package/docs/module-package-import-handoff.md +691 -0
  569. package/docs/seed-changes.md +65 -0
  570. package/docs/test-data-workflow.md +200 -0
  571. package/docs/type-declaration-import-issue.md +24 -0
  572. package/docs/workflow/business-automation-example-notes.md +309 -0
  573. package/docs/workflow/control-flow-node-addition-sop.md +324 -0
  574. package/docs/workflow/data-engineering-pipeline-example-notes.md +330 -0
  575. package/docs/workflow/foreach-example-notes.md +187 -0
  576. package/docs/workflow/hello-world-example-notes.md +271 -0
  577. package/docs/workflow/kestra-concepts-plugins-blueprints.md +315 -0
  578. package/docs/workflow/loop-until-example-notes.md +198 -0
  579. package/docs/workflow/microservices-and-apis-example-notes.md +264 -0
  580. package/docs/workflow/samples.md +25 -0
  581. package/docs/workflow/what-is-kestra.md +79 -0
  582. package/docs/workflow/workflow-core-module-handoff-summary.md +191 -0
  583. package/docs/workflow/workflow-module-brd.md +185 -0
  584. package/docs/workflow/workflow-module-domain-model.md +252 -0
  585. package/docs/workflow/workflow-module-metadata-dsl.md +302 -0
  586. package/docs/workflow/workflow-module-technical-spec.md +293 -0
  587. package/docs/workflow/workflow-node-type-contracts.md +635 -0
  588. package/docs/workflow/workflow-node-ui-metadata-contract.md +1262 -0
  589. package/docs/workflow/workflow-solidx-model-field-spec.md +284 -0
  590. package/package.json +3 -2
  591. package/src/commands/run-tests.command.ts +47 -1
  592. package/src/commands/seed.command.ts +19 -0
  593. package/src/constants/chatter-message.constants.ts +12 -0
  594. package/src/constants/draft-publish-fields.ts +5 -0
  595. package/src/constants/media-file-types.ts +50 -0
  596. package/src/constants/user.constants.ts +13 -0
  597. package/src/controllers/chatter-message.controller.ts +8 -0
  598. package/src/controllers/export-template.controller.ts +5 -3
  599. package/src/controllers/import-transaction.controller.ts +6 -6
  600. package/src/controllers/media.controller.ts +17 -6
  601. package/src/controllers/module-package.controller.ts +2 -3
  602. package/src/controllers/workflow-definition.controller.ts +141 -0
  603. package/src/controllers/workflow-execution-artifact.controller.ts +93 -0
  604. package/src/controllers/workflow-execution-log.controller.ts +93 -0
  605. package/src/controllers/workflow-execution.controller.ts +126 -0
  606. package/src/controllers/workflow-secret.controller.ts +90 -0
  607. package/src/controllers/workflow-step-execution.controller.ts +93 -0
  608. package/src/controllers/workflow-trigger-execution.controller.ts +93 -0
  609. package/src/decorators/workflow-node-provider.decorator.ts +14 -0
  610. package/src/dtos/basic-filters.dto.ts +0 -4
  611. package/src/dtos/create-workflow-definition.dto.ts +60 -0
  612. package/src/dtos/create-workflow-execution-artifact.dto.ts +99 -0
  613. package/src/dtos/create-workflow-execution-log.dto.ts +80 -0
  614. package/src/dtos/create-workflow-execution.dto.ts +137 -0
  615. package/src/dtos/create-workflow-secret.dto.ts +44 -0
  616. package/src/dtos/create-workflow-step-execution.dto.ts +123 -0
  617. package/src/dtos/create-workflow-trigger-execution.dto.ts +114 -0
  618. package/src/dtos/execute-workflow.dto.ts +6 -0
  619. package/src/dtos/update-workflow-definition.dto.ts +67 -0
  620. package/src/dtos/update-workflow-execution-artifact.dto.ts +105 -0
  621. package/src/dtos/update-workflow-execution-log.dto.ts +87 -0
  622. package/src/dtos/update-workflow-execution.dto.ts +144 -0
  623. package/src/dtos/update-workflow-secret.dto.ts +53 -0
  624. package/src/dtos/update-workflow-step-execution.dto.ts +132 -0
  625. package/src/dtos/update-workflow-trigger-execution.dto.ts +122 -0
  626. package/src/dtos/validate-workflow-definition.dto.ts +3 -0
  627. package/src/entities/common.entity.ts +24 -0
  628. package/src/entities/dashboard-user-layout.entity.ts +2 -2
  629. package/src/entities/user.entity.ts +53 -36
  630. package/src/entities/view-metadata.entity.ts +2 -2
  631. package/src/entities/workflow-definition.entity.ts +43 -0
  632. package/src/entities/workflow-execution-artifact.entity.ts +73 -0
  633. package/src/entities/workflow-execution-log.entity.ts +59 -0
  634. package/src/entities/workflow-execution.entity.ts +83 -0
  635. package/src/entities/workflow-secret.entity.ts +34 -0
  636. package/src/entities/workflow-step-execution.entity.ts +89 -0
  637. package/src/entities/workflow-trigger-execution.entity.ts +83 -0
  638. package/src/factories/mail.factory.ts +7 -1
  639. package/src/factories/sms.factory.ts +4 -1
  640. package/src/helpers/field-crud-managers/MediaFieldCrudManager.ts +26 -12
  641. package/src/helpers/file-download.helper.ts +31 -0
  642. package/src/helpers/model-metadata-helper.service.ts +32 -1
  643. package/src/helpers/solid-registry.ts +1 -1
  644. package/src/helpers/typeorm-db-helper.ts +12 -1
  645. package/src/index.ts +58 -0
  646. package/src/interfaces/workflow-node-handler.interface.ts +10 -0
  647. package/src/interfaces.ts +1 -0
  648. package/src/jobs/database/workflow-execution-publisher-database.service.ts +24 -0
  649. package/src/jobs/database/workflow-execution-queue-options-database.ts +9 -0
  650. package/src/jobs/database/workflow-execution-subscriber-database.service.ts +44 -0
  651. package/src/jobs/rabbitmq/workflow-execution-publisher.service.ts +24 -0
  652. package/src/jobs/rabbitmq/workflow-execution-queue-options.ts +9 -0
  653. package/src/jobs/rabbitmq/workflow-execution-subscriber.service.ts +42 -0
  654. package/src/jobs/redis/workflow-execution-publisher-redis.service.ts +24 -0
  655. package/src/jobs/redis/workflow-execution-queue-options-redis.ts +9 -0
  656. package/src/jobs/redis/workflow-execution-subscriber-redis.service.ts +42 -0
  657. package/src/repository/workflow-definition.repository.ts +19 -0
  658. package/src/repository/workflow-execution-artifact.repository.ts +19 -0
  659. package/src/repository/workflow-execution-log.repository.ts +19 -0
  660. package/src/repository/workflow-execution.repository.ts +19 -0
  661. package/src/repository/workflow-secret.repository.ts +19 -0
  662. package/src/repository/workflow-step-execution.repository.ts +19 -0
  663. package/src/repository/workflow-trigger-execution.repository.ts +19 -0
  664. package/src/seeders/module-metadata-seeder.service.ts +216 -40
  665. package/src/seeders/module-test-data.service.ts +6 -0
  666. package/src/seeders/seed-data/solid-core-metadata.json +11494 -5570
  667. package/src/services/authentication.service.ts +76 -5
  668. package/src/services/chatter-message.service.ts +102 -4
  669. package/src/services/crud-helper.service.ts +16 -34
  670. package/src/services/crud.service.ts +129 -104
  671. package/src/services/datasource-introspection.service.ts +5 -0
  672. package/src/services/draft-publish-helper.service.ts +529 -0
  673. package/src/services/internationalisation-helper.service.ts +148 -0
  674. package/src/services/media.service.ts +67 -36
  675. package/src/services/metadata-validation.service.ts +39 -0
  676. package/src/services/model-metadata.service.ts +4 -1
  677. package/src/services/object.utils.ts +10 -0
  678. package/src/services/settings/default-settings-provider.service.ts +35 -3
  679. package/src/services/user.service.ts +18 -3
  680. package/src/services/view-metadata.service.ts +5 -145
  681. package/src/services/workflow/nodes/execution-fail.node.ts +82 -0
  682. package/src/services/workflow/nodes/for-each.node.ts +231 -0
  683. package/src/services/workflow/nodes/http-request.node.ts +624 -0
  684. package/src/services/workflow/nodes/if.node.ts +100 -0
  685. package/src/services/workflow/nodes/log-write.node.ts +234 -0
  686. package/src/services/workflow/nodes/loop-until.node.ts +343 -0
  687. package/src/services/workflow/nodes/parallel.node.ts +88 -0
  688. package/src/services/workflow/nodes/runtime-python.node.ts +571 -0
  689. package/src/services/workflow/nodes/sequential.node.ts +65 -0
  690. package/src/services/workflow/nodes/solidx-api.helpers.ts +205 -0
  691. package/src/services/workflow/nodes/solidx-crud.nodes.ts +511 -0
  692. package/src/services/workflow/nodes/solidx-login.node.ts +222 -0
  693. package/src/services/workflow/nodes/solidx-send-email.node.ts +489 -0
  694. package/src/services/workflow/nodes/solidx-send-sms.node.ts +377 -0
  695. package/src/services/workflow/nodes/switch.node.ts +132 -0
  696. package/src/services/workflow/workflow-definition-metadata-sync.service.ts +196 -0
  697. package/src/services/workflow/workflow-definition-validator.service.ts +226 -0
  698. package/src/services/workflow/workflow-execution-writer.service.ts +244 -0
  699. package/src/services/workflow/workflow-expression.service.ts +180 -0
  700. package/src/services/workflow/workflow-invocation.service.ts +39 -0
  701. package/src/services/workflow/workflow-node-registry.service.ts +152 -0
  702. package/src/services/workflow/workflow-runtime.service.ts +934 -0
  703. package/src/services/workflow/workflow-scheduled-trigger.job.ts +33 -0
  704. package/src/services/workflow-definition.service.ts +293 -0
  705. package/src/services/workflow-execution-artifact.service.ts +20 -0
  706. package/src/services/workflow-execution-log.service.ts +20 -0
  707. package/src/services/workflow-execution.service.ts +20 -0
  708. package/src/services/workflow-secret.service.ts +161 -0
  709. package/src/services/workflow-step-execution.service.ts +20 -0
  710. package/src/services/workflow-trigger-execution.service.ts +20 -0
  711. package/src/solid-core.module.ts +144 -3
  712. package/src/testing/README.md +73 -2
  713. package/src/testing/adapters/ui/playwright-adapter.ts +25 -0
  714. package/src/testing/adapters/ui/ui.types.ts +2 -0
  715. package/src/testing/steps/ui/actions.step.ts +8 -4
  716. package/src/testing/steps/ui/assertions.step.ts +18 -5
  717. package/src/testing/steps/ui/form.step.ts +16 -6
  718. package/src/testing/steps/ui/manual.step.ts +1 -1
  719. package/src/testing/steps/ui/navigation.step.ts +4 -2
  720. package/src/transformers/empty-string-to-null-transformer.ts +11 -0
  721. package/src/types/workflow-dsl.types.ts +1030 -0
  722. package/src/types/workflow-execution-queue.types.ts +3 -0
  723. package/.claude/settings.local.json +0 -16
  724. package/CLAUDE.md +0 -26
  725. package/src/services/1.js +0 -6
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.WorkflowTriggerExecution = void 0;
13
+ const openapi = require("@nestjs/swagger");
14
+ const common_entity_1 = require("./common.entity");
15
+ const typeorm_1 = require("typeorm");
16
+ const workflow_definition_entity_1 = require("./workflow-definition.entity");
17
+ const workflow_execution_entity_1 = require("./workflow-execution.entity");
18
+ const typeorm_db_helper_1 = require("../helpers/typeorm-db-helper");
19
+ let WorkflowTriggerExecution = class WorkflowTriggerExecution extends common_entity_1.CommonEntity {
20
+ constructor() {
21
+ super(...arguments);
22
+ this.status = "received";
23
+ this.matched = false;
24
+ }
25
+ static _OPENAPI_METADATA_FACTORY() {
26
+ return { triggerExecutionKey: { required: true, type: () => String }, workflowDefinition: { required: true, type: () => require("./workflow-definition.entity").WorkflowDefinition }, workflowExecution: { required: true, type: () => require("./workflow-execution.entity").WorkflowExecution }, triggerId: { required: true, type: () => String }, triggerName: { required: true, type: () => String }, triggerType: { required: true, type: () => String }, status: { required: true, type: () => String, default: "received" }, matched: { required: true, type: () => Boolean, default: false }, firedAt: { required: true, type: () => Date }, startedAt: { required: true, type: () => Date }, finishedAt: { required: true, type: () => Date }, durationMs: { required: true, type: () => BigInt }, source: { required: true, type: () => String }, correlationId: { required: true, type: () => String }, idempotencyKey: { required: true, type: () => String }, payload: { required: true, type: () => Object }, triggerSnapshot: { required: true, type: () => Object }, errorSummary: { required: true, type: () => String }, errorDetails: { required: true, type: () => Object }, metadata: { required: true, type: () => Object } };
27
+ }
28
+ };
29
+ exports.WorkflowTriggerExecution = WorkflowTriggerExecution;
30
+ __decorate([
31
+ (0, typeorm_1.Index)({ unique: true }),
32
+ (0, typeorm_1.Column)({ type: "varchar" }),
33
+ __metadata("design:type", String)
34
+ ], WorkflowTriggerExecution.prototype, "triggerExecutionKey", void 0);
35
+ __decorate([
36
+ (0, typeorm_1.Index)(),
37
+ (0, typeorm_1.ManyToOne)(() => workflow_definition_entity_1.WorkflowDefinition, { nullable: false }),
38
+ (0, typeorm_1.JoinColumn)(),
39
+ __metadata("design:type", workflow_definition_entity_1.WorkflowDefinition)
40
+ ], WorkflowTriggerExecution.prototype, "workflowDefinition", void 0);
41
+ __decorate([
42
+ (0, typeorm_1.Index)(),
43
+ (0, typeorm_1.ManyToOne)(() => workflow_execution_entity_1.WorkflowExecution, { nullable: true }),
44
+ (0, typeorm_1.JoinColumn)(),
45
+ __metadata("design:type", workflow_execution_entity_1.WorkflowExecution)
46
+ ], WorkflowTriggerExecution.prototype, "workflowExecution", void 0);
47
+ __decorate([
48
+ (0, typeorm_1.Index)(),
49
+ (0, typeorm_1.Column)({ type: "varchar" }),
50
+ __metadata("design:type", String)
51
+ ], WorkflowTriggerExecution.prototype, "triggerId", void 0);
52
+ __decorate([
53
+ (0, typeorm_1.Column)({ type: "varchar", nullable: true }),
54
+ __metadata("design:type", String)
55
+ ], WorkflowTriggerExecution.prototype, "triggerName", void 0);
56
+ __decorate([
57
+ (0, typeorm_1.Index)(),
58
+ (0, typeorm_1.Column)({ type: "varchar" }),
59
+ __metadata("design:type", String)
60
+ ], WorkflowTriggerExecution.prototype, "triggerType", void 0);
61
+ __decorate([
62
+ (0, typeorm_1.Index)(),
63
+ (0, typeorm_1.Column)({ type: "varchar", default: "received" }),
64
+ __metadata("design:type", String)
65
+ ], WorkflowTriggerExecution.prototype, "status", void 0);
66
+ __decorate([
67
+ (0, typeorm_1.Index)(),
68
+ (0, typeorm_1.Column)({ nullable: true, default: false }),
69
+ __metadata("design:type", Boolean)
70
+ ], WorkflowTriggerExecution.prototype, "matched", void 0);
71
+ __decorate([
72
+ (0, typeorm_1.Index)(),
73
+ (0, typeorm_1.Column)({ ...(0, typeorm_db_helper_1.getColumnType)('datetime') }),
74
+ __metadata("design:type", Date)
75
+ ], WorkflowTriggerExecution.prototype, "firedAt", void 0);
76
+ __decorate([
77
+ (0, typeorm_1.Index)(),
78
+ (0, typeorm_1.Column)({ nullable: true, ...(0, typeorm_db_helper_1.getColumnType)('datetime') }),
79
+ __metadata("design:type", Date)
80
+ ], WorkflowTriggerExecution.prototype, "startedAt", void 0);
81
+ __decorate([
82
+ (0, typeorm_1.Index)(),
83
+ (0, typeorm_1.Column)({ nullable: true, ...(0, typeorm_db_helper_1.getColumnType)('datetime') }),
84
+ __metadata("design:type", Date)
85
+ ], WorkflowTriggerExecution.prototype, "finishedAt", void 0);
86
+ __decorate([
87
+ (0, typeorm_1.Column)({ type: "bigint", nullable: true }),
88
+ __metadata("design:type", BigInt)
89
+ ], WorkflowTriggerExecution.prototype, "durationMs", void 0);
90
+ __decorate([
91
+ (0, typeorm_1.Index)(),
92
+ (0, typeorm_1.Column)({ type: "varchar", nullable: true }),
93
+ __metadata("design:type", String)
94
+ ], WorkflowTriggerExecution.prototype, "source", void 0);
95
+ __decorate([
96
+ (0, typeorm_1.Index)(),
97
+ (0, typeorm_1.Column)({ type: "varchar", nullable: true }),
98
+ __metadata("design:type", String)
99
+ ], WorkflowTriggerExecution.prototype, "correlationId", void 0);
100
+ __decorate([
101
+ (0, typeorm_1.Index)(),
102
+ (0, typeorm_1.Column)({ type: "varchar", nullable: true }),
103
+ __metadata("design:type", String)
104
+ ], WorkflowTriggerExecution.prototype, "idempotencyKey", void 0);
105
+ __decorate([
106
+ (0, typeorm_1.Column)({ type: "simple-json", nullable: true }),
107
+ __metadata("design:type", Object)
108
+ ], WorkflowTriggerExecution.prototype, "payload", void 0);
109
+ __decorate([
110
+ (0, typeorm_1.Column)({ type: "simple-json", nullable: true }),
111
+ __metadata("design:type", Object)
112
+ ], WorkflowTriggerExecution.prototype, "triggerSnapshot", void 0);
113
+ __decorate([
114
+ (0, typeorm_1.Column)({ type: "text", nullable: true }),
115
+ __metadata("design:type", String)
116
+ ], WorkflowTriggerExecution.prototype, "errorSummary", void 0);
117
+ __decorate([
118
+ (0, typeorm_1.Column)({ type: "simple-json", nullable: true }),
119
+ __metadata("design:type", Object)
120
+ ], WorkflowTriggerExecution.prototype, "errorDetails", void 0);
121
+ __decorate([
122
+ (0, typeorm_1.Column)({ type: "simple-json", nullable: true }),
123
+ __metadata("design:type", Object)
124
+ ], WorkflowTriggerExecution.prototype, "metadata", void 0);
125
+ exports.WorkflowTriggerExecution = WorkflowTriggerExecution = __decorate([
126
+ (0, typeorm_1.Entity)('ss_workflow_trigger_execution')
127
+ ], WorkflowTriggerExecution);
128
+ //# sourceMappingURL=workflow-trigger-execution.entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-trigger-execution.entity.js","sourceRoot":"","sources":["../../src/entities/workflow-trigger-execution.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,mDAA0D;AAC1D,qCAAuE;AACvE,6EAAkE;AAClE,2EAA+D;AAC/D,oEAA8D;AAGvD,IAAM,wBAAwB,GAA9B,MAAM,wBAAyB,SAAQ,4BAAY;IAAnD;;QA4BH,WAAM,GAAW,UAAU,CAAC;QAI5B,YAAO,GAAY,KAAK,CAAC;KA2C5B;;skBA3CsB,KAAK;;CA2C3B,CAAA;AA3EY,4DAAwB;AAGjC;IAFC,IAAA,eAAK,EAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACvB,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;qEACA;AAK5B;IAHC,IAAA,eAAK,GAAE;IACP,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,+CAAkB,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACxD,IAAA,oBAAU,GAAE;8BACO,+CAAkB;oEAAC;AAKvC;IAHC,IAAA,eAAK,GAAE;IACP,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,6CAAiB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACtD,IAAA,oBAAU,GAAE;8BACM,6CAAiB;mEAAC;AAIrC;IAFC,IAAA,eAAK,GAAE;IACP,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;2DACV;AAGlB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;6DACxB;AAIpB;IAFC,IAAA,eAAK,GAAE;IACP,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;6DACR;AAIpB;IAFC,IAAA,eAAK,GAAE;IACP,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;;wDACrB;AAI5B;IAFC,IAAA,eAAK,GAAE;IACP,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;;yDAClB;AAIzB;IAFC,IAAA,eAAK,GAAE;IACP,IAAA,gBAAM,EAAC,EAAE,GAAG,IAAA,iCAAa,EAAC,UAAU,CAAC,EAAE,CAAC;8BAChC,IAAI;yDAAC;AAId;IAFC,IAAA,eAAK,GAAE;IACP,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,IAAA,iCAAa,EAAC,UAAU,CAAC,EAAE,CAAC;8BAC9C,IAAI;2DAAC;AAIhB;IAFC,IAAA,eAAK,GAAE;IACP,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,IAAA,iCAAa,EAAC,UAAU,CAAC,EAAE,CAAC;8BAC7C,IAAI;4DAAC;AAGjB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;4DACxB;AAInB;IAFC,IAAA,eAAK,GAAE;IACP,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;wDAC7B;AAIf;IAFC,IAAA,eAAK,GAAE;IACP,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;+DACtB;AAItB;IAFC,IAAA,eAAK,GAAE;IACP,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;gEACrB;AAGvB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;yDACnC;AAGb;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;iEAC3B;AAGrB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;8DACpB;AAGrB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;8DAC9B;AAGlB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;0DAClC;mCA1EL,wBAAwB;IADpC,IAAA,gBAAM,EAAC,+BAA+B,CAAC;GAC3B,wBAAwB,CA2EpC","sourcesContent":["import { CommonEntity } from 'src/entities/common.entity';\nimport { Entity, Column, Index, JoinColumn, ManyToOne } from 'typeorm';\nimport { WorkflowDefinition } from './workflow-definition.entity';\nimport { WorkflowExecution } from './workflow-execution.entity'\nimport { getColumnType } from 'src/helpers/typeorm-db-helper';\n\n@Entity('ss_workflow_trigger_execution')\nexport class WorkflowTriggerExecution extends CommonEntity {\n @Index({ unique: true })\n @Column({ type: \"varchar\" })\n triggerExecutionKey: string;\n\n @Index()\n @ManyToOne(() => WorkflowDefinition, { nullable: false })\n @JoinColumn()\n workflowDefinition: WorkflowDefinition;\n\n @Index()\n @ManyToOne(() => WorkflowExecution, { nullable: true })\n @JoinColumn()\n workflowExecution: WorkflowExecution;\n\n @Index()\n @Column({ type: \"varchar\" })\n triggerId: string;\n\n @Column({ type: \"varchar\", nullable: true })\n triggerName: string;\n\n @Index()\n @Column({ type: \"varchar\" })\n triggerType: string;\n\n @Index()\n @Column({ type: \"varchar\", default: \"received\" })\n status: string = \"received\";\n\n @Index()\n @Column({ nullable: true, default: false })\n matched: boolean = false;\n\n @Index()\n @Column({ ...getColumnType('datetime') })\n firedAt: Date;\n\n @Index()\n @Column({ nullable: true, ...getColumnType('datetime') })\n startedAt: Date;\n\n @Index()\n @Column({ nullable: true, ...getColumnType('datetime') })\n finishedAt: Date;\n\n @Column({ type: \"bigint\", nullable: true })\n durationMs: bigint;\n\n @Index()\n @Column({ type: \"varchar\", nullable: true })\n source: string;\n\n @Index()\n @Column({ type: \"varchar\", nullable: true })\n correlationId: string;\n\n @Index()\n @Column({ type: \"varchar\", nullable: true })\n idempotencyKey: string;\n\n @Column({ type: \"simple-json\", nullable: true })\n payload: any;\n\n @Column({ type: \"simple-json\", nullable: true })\n triggerSnapshot: any;\n\n @Column({ type: \"text\", nullable: true })\n errorSummary: string;\n\n @Column({ type: \"simple-json\", nullable: true })\n errorDetails: any;\n\n @Column({ type: \"simple-json\", nullable: true })\n metadata: any;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"mail.factory.d.ts","sourceRoot":"","sources":["../../src/factories/mail.factory.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAQ9D,qBACa,WAAW;IAGhB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAJnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqC;gBAEvC,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,aAAa,EAC5B,cAAc,EAAE,cAAc;IAGnD,cAAc,IAAI,KAAK;CAc1B"}
1
+ {"version":3,"file":"mail.factory.d.ts","sourceRoot":"","sources":["../../src/factories/mail.factory.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAQ9D,qBACa,WAAW;IAGhB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAJnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqC;gBAEvC,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,aAAa,EAC5B,cAAc,EAAE,cAAc;IAGnD,cAAc,IAAI,KAAK;CAoB1B"}
@@ -31,6 +31,10 @@ let MailFactory = class MailFactory {
31
31
  this.logger.error("No mail providers are registered.");
32
32
  }
33
33
  const mailServiceProvider = mailProviders.find(provider => provider.name === mailServiceName);
34
+ if (!mailServiceProvider?.instance) {
35
+ const registeredProviders = mailProviders.map((provider) => provider?.name).filter(Boolean).join(", ");
36
+ throw new Error(`Mail provider "${mailServiceName}" is not registered. Registered providers: ${registeredProviders || "none"}`);
37
+ }
34
38
  return mailServiceProvider.instance;
35
39
  }
36
40
  };
@@ -1 +1 @@
1
- {"version":3,"file":"mail.factory.js","sourceRoot":"","sources":["../../src/factories/mail.factory.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4D;AAE5D,uCAAyC;AACzC,8DAA2D;AAE3D,iEAA8D;AAG9D,SAAS,IAAI,CAAC,CAAU;IACpB,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACnC,CAAC;AAIM,IAAM,WAAW,GAAjB,MAAM,WAAW;IAEpB,YACqB,SAAoB,EACpB,aAA4B,EAC5B,cAA8B;QAF9B,cAAS,GAAT,SAAS,CAAW;QACpB,kBAAa,GAAb,aAAa,CAAe;QAC5B,mBAAc,GAAd,cAAc,CAAgB;QAJlC,WAAM,GAAG,IAAI,eAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAKxD,CAAC;IAEL,cAAc;QACV,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAmB,eAAe,CAAC,IAAI,kBAAkB,CAAC;QACpH,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,CAAC;QAE5D,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;YAExB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAC3D,CAAC;QAED,MAAM,mBAAmB,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC;QAE9F,OAAO,mBAAmB,CAAC,QAAiB,CAAC;IACjD,CAAC;CAEJ,CAAA;AAtBY,kCAAW;sBAAX,WAAW;IADvB,IAAA,mBAAU,GAAE;qCAIuB,gBAAS;QACL,8BAAa;QACZ,gCAAc;GAL1C,WAAW,CAsBvB","sourcesContent":["import { Inject, Injectable, Logger } from \"@nestjs/common\";\nimport { ConfigType } from \"@nestjs/config\";\nimport { ModuleRef } from \"@nestjs/core\";\nimport { SolidRegistry } from \"src/helpers/solid-registry\";\nimport { IMail } from \"src/interfaces\";\nimport { SettingService } from \"src/services/setting.service\";\nimport type { SolidCoreSetting } from \"src/services/settings/default-settings-provider.service\";\n\nfunction norm(s?: string) {\n return s?.trim().toLowerCase();\n}\n\n// This factory will be use to return a mail service instance, using the configured environment variables\n@Injectable()\nexport class MailFactory {\n private readonly logger = new Logger(this.constructor.name);\n constructor(\n private readonly moduleRef: ModuleRef, // Use the module ref to dynamically resolve the mail service\n private readonly solidRegistry: SolidRegistry,\n private readonly settingService: SettingService,\n ) { }\n\n getMailService(): IMail {\n const mailServiceName = this.settingService.getConfigValue<SolidCoreSetting>(\"emailProvider\") ?? \"SMTPEMailService\";\n const mailProviders = this.solidRegistry.getMailProviders();\n // Return the instance which matches the mailServiceName\n if (!mailProviders.length) {\n // throw new Error(\"No mail providers are registered.\");\n this.logger.error(\"No mail providers are registered.\");\n }\n\n const mailServiceProvider = mailProviders.find(provider => provider.name === mailServiceName);\n\n return mailServiceProvider.instance as IMail;\n }\n\n}"]}
1
+ {"version":3,"file":"mail.factory.js","sourceRoot":"","sources":["../../src/factories/mail.factory.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4D;AAE5D,uCAAyC;AACzC,8DAA2D;AAE3D,iEAA8D;AAG9D,SAAS,IAAI,CAAC,CAAU;IACpB,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACnC,CAAC;AAIM,IAAM,WAAW,GAAjB,MAAM,WAAW;IAEpB,YACqB,SAAoB,EACpB,aAA4B,EAC5B,cAA8B;QAF9B,cAAS,GAAT,SAAS,CAAW;QACpB,kBAAa,GAAb,aAAa,CAAe;QAC5B,mBAAc,GAAd,cAAc,CAAgB;QAJlC,WAAM,GAAG,IAAI,eAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAKxD,CAAC;IAEL,cAAc;QACV,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAmB,eAAe,CAAC,IAAI,kBAAkB,CAAC;QACpH,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,CAAC;QAE5D,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;YAExB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAC3D,CAAC;QAED,MAAM,mBAAmB,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC;QAC9F,IAAI,CAAC,mBAAmB,EAAE,QAAQ,EAAE,CAAC;YACjC,MAAM,mBAAmB,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvG,MAAM,IAAI,KAAK,CACX,kBAAkB,eAAe,8CAA8C,mBAAmB,IAAI,MAAM,EAAE,CACjH,CAAC;QACN,CAAC;QAED,OAAO,mBAAmB,CAAC,QAAiB,CAAC;IACjD,CAAC;CAEJ,CAAA;AA5BY,kCAAW;sBAAX,WAAW;IADvB,IAAA,mBAAU,GAAE;qCAIuB,gBAAS;QACL,8BAAa;QACZ,gCAAc;GAL1C,WAAW,CA4BvB","sourcesContent":["import { Inject, Injectable, Logger } from \"@nestjs/common\";\nimport { ConfigType } from \"@nestjs/config\";\nimport { ModuleRef } from \"@nestjs/core\";\nimport { SolidRegistry } from \"src/helpers/solid-registry\";\nimport { IMail } from \"src/interfaces\";\nimport { SettingService } from \"src/services/setting.service\";\nimport type { SolidCoreSetting } from \"src/services/settings/default-settings-provider.service\";\n\nfunction norm(s?: string) {\n return s?.trim().toLowerCase();\n}\n\n// This factory will be use to return a mail service instance, using the configured environment variables\n@Injectable()\nexport class MailFactory {\n private readonly logger = new Logger(this.constructor.name);\n constructor(\n private readonly moduleRef: ModuleRef, // Use the module ref to dynamically resolve the mail service\n private readonly solidRegistry: SolidRegistry,\n private readonly settingService: SettingService,\n ) { }\n\n getMailService(): IMail {\n const mailServiceName = this.settingService.getConfigValue<SolidCoreSetting>(\"emailProvider\") ?? \"SMTPEMailService\";\n const mailProviders = this.solidRegistry.getMailProviders();\n // Return the instance which matches the mailServiceName\n if (!mailProviders.length) {\n // throw new Error(\"No mail providers are registered.\");\n this.logger.error(\"No mail providers are registered.\");\n }\n\n const mailServiceProvider = mailProviders.find(provider => provider.name === mailServiceName);\n if (!mailServiceProvider?.instance) {\n const registeredProviders = mailProviders.map((provider) => provider?.name).filter(Boolean).join(\", \");\n throw new Error(\n `Mail provider \"${mailServiceName}\" is not registered. Registered providers: ${registeredProviders || \"none\"}`,\n );\n }\n\n return mailServiceProvider.instance as IMail;\n }\n\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"sms.factory.d.ts","sourceRoot":"","sources":["../../src/factories/sms.factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAQ9D,qBACa,UAAU;IAIf,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,cAAc;IALnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqC;gBAGvC,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,aAAa,EAC5B,cAAc,EAAE,cAAc;IAKnD,aAAa,CAAC,IAAI,GAAE,MAAa,GAAG,IAAI;CAoB3C"}
1
+ {"version":3,"file":"sms.factory.d.ts","sourceRoot":"","sources":["../../src/factories/sms.factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAQ9D,qBACa,UAAU;IAIf,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,cAAc;IALnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqC;gBAGvC,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,aAAa,EAC5B,cAAc,EAAE,cAAc;IAKnD,aAAa,CAAC,IAAI,GAAE,MAAa,GAAG,IAAI;CAuB3C"}
@@ -25,7 +25,7 @@ let SmsFactory = class SmsFactory {
25
25
  this.logger = new common_1.Logger(this.constructor.name);
26
26
  }
27
27
  getSmsService(name = null) {
28
- const smsServiceName = this.settingService.getConfigValue('smsProvider');
28
+ const smsServiceName = name || this.settingService.getConfigValue('smsProvider');
29
29
  if (!smsServiceName) {
30
30
  throw new Error("Unable to resolve sms provider");
31
31
  }
@@ -34,6 +34,9 @@ let SmsFactory = class SmsFactory {
34
34
  this.logger.error("No sms providers are registered.");
35
35
  }
36
36
  const smsServiceProvider = smsProviders.find(provider => provider.name === smsServiceName);
37
+ if (!smsServiceProvider) {
38
+ throw new Error(`Unable to resolve sms provider ${smsServiceName}`);
39
+ }
37
40
  return smsServiceProvider.instance;
38
41
  }
39
42
  };
@@ -1 +1 @@
1
- {"version":3,"file":"sms.factory.js","sourceRoot":"","sources":["../../src/factories/sms.factory.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAoD;AACpD,uCAAyC;AACzC,8DAA2D;AAE3D,iEAA8D;AAG9D,SAAS,IAAI,CAAC,CAAU;IACpB,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACnC,CAAC;AAIM,IAAM,UAAU,GAAhB,MAAM,UAAU;IAGnB,YACqB,SAAoB,EACpB,aAA4B,EAC5B,cAA8B;QAF9B,cAAS,GAAT,SAAS,CAAW;QACpB,kBAAa,GAAb,aAAa,CAAe;QAC5B,mBAAc,GAAd,cAAc,CAAgB;QALlC,WAAM,GAAG,IAAI,eAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAQxD,CAAC;IAEL,aAAa,CAAC,OAAe,IAAI;QAG7B,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAmB,aAAa,CAAC,CAAC;QAC3F,IAAI,CAAC,cAAc,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;QACrD,CAAC;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE,CAAC;QAG1D,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;YAEvB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,kBAAkB,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;QAE3F,OAAO,kBAAkB,CAAC,QAAgB,CAAC;IAC/C,CAAC;CAEJ,CAAA;AA/BY,gCAAU;qBAAV,UAAU;IADtB,IAAA,mBAAU,GAAE;qCAKuB,gBAAS;QACL,8BAAa;QACZ,gCAAc;GAN1C,UAAU,CA+BtB","sourcesContent":["import { Injectable, Logger } from \"@nestjs/common\";\nimport { ModuleRef } from \"@nestjs/core\";\nimport { SolidRegistry } from \"src/helpers/solid-registry\";\nimport { ISMS } from \"src/interfaces\";\nimport { SettingService } from \"src/services/setting.service\";\nimport type { SolidCoreSetting } from \"src/services/settings/default-settings-provider.service\";\n\nfunction norm(s?: string) {\n return s?.trim().toLowerCase();\n}\n\n// This factory will be use to return a mail service instance, using the configured environment variables\n@Injectable()\nexport class SmsFactory {\n private readonly logger = new Logger(this.constructor.name);\n\n constructor(\n private readonly moduleRef: ModuleRef,\n private readonly solidRegistry: SolidRegistry,\n private readonly settingService: SettingService,\n // @Inject(commonConfig.KEY)\n // private readonly commonConfiguration: ConfigType<typeof commonConfig>,\n ) { }\n\n getSmsService(name: string = null): ISMS {\n // This is the default provider\n // const smsServiceName = name || this.commonConfiguration.smsProvider;\n const smsServiceName = this.settingService.getConfigValue<SolidCoreSetting>('smsProvider');\n if (!smsServiceName) {\n throw new Error(\"Unable to resolve sms provider\")\n }\n const smsProviders = this.solidRegistry.getSmsProviders();\n\n // Return the instance which matches the smsServicename\n if (!smsProviders.length) {\n // throw new Error(\"No mail providers are registered.\");\n this.logger.error(\"No sms providers are registered.\");\n }\n\n const smsServiceProvider = smsProviders.find(provider => provider.name === smsServiceName);\n\n return smsServiceProvider.instance as ISMS;\n }\n\n}\n"]}
1
+ {"version":3,"file":"sms.factory.js","sourceRoot":"","sources":["../../src/factories/sms.factory.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAoD;AACpD,uCAAyC;AACzC,8DAA2D;AAE3D,iEAA8D;AAG9D,SAAS,IAAI,CAAC,CAAU;IACpB,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACnC,CAAC;AAIM,IAAM,UAAU,GAAhB,MAAM,UAAU;IAGnB,YACqB,SAAoB,EACpB,aAA4B,EAC5B,cAA8B;QAF9B,cAAS,GAAT,SAAS,CAAW;QACpB,kBAAa,GAAb,aAAa,CAAe;QAC5B,mBAAc,GAAd,cAAc,CAAgB;QALlC,WAAM,GAAG,IAAI,eAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAQxD,CAAC;IAEL,aAAa,CAAC,OAAe,IAAI;QAG7B,MAAM,cAAc,GAAG,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,cAAc,CAAmB,aAAa,CAAC,CAAC;QACnG,IAAI,CAAC,cAAc,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;QACrD,CAAC;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE,CAAC;QAG1D,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;YAEvB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,kBAAkB,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;QAC3F,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,kCAAkC,cAAc,EAAE,CAAC,CAAC;QACxE,CAAC;QAED,OAAO,kBAAkB,CAAC,QAAgB,CAAC;IAC/C,CAAC;CAEJ,CAAA;AAlCY,gCAAU;qBAAV,UAAU;IADtB,IAAA,mBAAU,GAAE;qCAKuB,gBAAS;QACL,8BAAa;QACZ,gCAAc;GAN1C,UAAU,CAkCtB","sourcesContent":["import { Injectable, Logger } from \"@nestjs/common\";\nimport { ModuleRef } from \"@nestjs/core\";\nimport { SolidRegistry } from \"src/helpers/solid-registry\";\nimport { ISMS } from \"src/interfaces\";\nimport { SettingService } from \"src/services/setting.service\";\nimport type { SolidCoreSetting } from \"src/services/settings/default-settings-provider.service\";\n\nfunction norm(s?: string) {\n return s?.trim().toLowerCase();\n}\n\n// This factory will be use to return a mail service instance, using the configured environment variables\n@Injectable()\nexport class SmsFactory {\n private readonly logger = new Logger(this.constructor.name);\n\n constructor(\n private readonly moduleRef: ModuleRef,\n private readonly solidRegistry: SolidRegistry,\n private readonly settingService: SettingService,\n // @Inject(commonConfig.KEY)\n // private readonly commonConfiguration: ConfigType<typeof commonConfig>,\n ) { }\n\n getSmsService(name: string = null): ISMS {\n // This is the default provider\n // const smsServiceName = name || this.commonConfiguration.smsProvider;\n const smsServiceName = name || this.settingService.getConfigValue<SolidCoreSetting>('smsProvider');\n if (!smsServiceName) {\n throw new Error(\"Unable to resolve sms provider\")\n }\n const smsProviders = this.solidRegistry.getSmsProviders();\n\n // Return the instance which matches the smsServicename\n if (!smsProviders.length) {\n // throw new Error(\"No mail providers are registered.\");\n this.logger.error(\"No sms providers are registered.\");\n }\n\n const smsServiceProvider = smsProviders.find(provider => provider.name === smsServiceName);\n if (!smsServiceProvider) {\n throw new Error(`Unable to resolve sms provider ${smsServiceName}`);\n }\n\n return smsServiceProvider.instance as ISMS;\n }\n\n}\n"]}
@@ -17,6 +17,7 @@ export declare class MediaFieldCrudManager implements FieldCrudManager {
17
17
  private resolveMediaType;
18
18
  validate(dto: any, files: Array<Express.Multer.File>): ValidationError[];
19
19
  private applyValidations;
20
+ private validateDangerousFiles;
20
21
  private validateMediaSingle;
21
22
  private validateMediaMultiple;
22
23
  transformForCreate(dto: any): any;
@@ -1 +1 @@
1
- {"version":3,"file":"MediaFieldCrudManager.d.ts","sourceRoot":"","sources":["../../../src/helpers/field-crud-managers/MediaFieldCrudManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGnE,oBAAY,cAAc;IACtB,WAAW,gBAAgB;IAC3B,aAAa,kBAAkB;CAClC;AAED,MAAM,WAAW,iBAAiB;IAC9B,IAAI,EAAE,cAAc,CAAC;IACrB,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC;IACrC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACrC,cAAc,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IAC1C,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC;CACxC;AA6DD,qBAAa,qBAAsB,YAAW,gBAAgB;IAE9C,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,iBAAiB;IAGvD,OAAO,CAAC,gBAAgB;IA4BxB,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,eAAe,EAAE;IAKxE,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,mBAAmB;IAiD3B,OAAO,CAAC,qBAAqB;IAW7B,kBAAkB,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG;CAKpC"}
1
+ {"version":3,"file":"MediaFieldCrudManager.d.ts","sourceRoot":"","sources":["../../../src/helpers/field-crud-managers/MediaFieldCrudManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGnE,oBAAY,cAAc;IACtB,WAAW,gBAAgB;IAC3B,aAAa,kBAAkB;CAClC;AAED,MAAM,WAAW,iBAAiB;IAC9B,IAAI,EAAE,cAAc,CAAC;IACrB,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC;IACrC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACrC,cAAc,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IAC1C,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC;CACxC;AA6DD,qBAAa,qBAAsB,YAAW,gBAAgB;IAE9C,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,iBAAiB;IAGvD,OAAO,CAAC,gBAAgB;IA2BxB,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,eAAe,EAAE;IAKxE,OAAO,CAAC,gBAAgB;IAgBxB,OAAO,CAAC,sBAAsB;IAU9B,OAAO,CAAC,mBAAmB;IAiD3B,OAAO,CAAC,qBAAqB;IAW7B,kBAAkB,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG;CAKpC"}
@@ -56,15 +56,12 @@ class MediaFieldCrudManager {
56
56
  constructor(options) {
57
57
  this.options = options;
58
58
  }
59
- resolveMediaType(mimetype, filename) {
60
- const ext = (filename || '').split('.').pop()?.toLowerCase();
61
- if (ext && media_file_types_1.DANGEROUS_EXTENSIONS.has(ext)) {
62
- return null;
63
- }
64
- const mt = (mimetype || '').toLowerCase().trim();
65
- if (mt === 'image/svg+xml' || mt === 'text/html' || mt === 'application/xhtml+xml') {
59
+ resolveMediaType(file) {
60
+ if ((0, media_file_types_1.isDangerousMediaFile)(file)) {
66
61
  return null;
67
62
  }
63
+ const ext = (0, media_file_types_1.getLowercaseFileExtension)((0, media_file_types_1.getUploadedFileName)(file));
64
+ const mt = (file.mimetype || '').toLowerCase().trim();
68
65
  if (mt && MIME_TO_MEDIA_TYPE[mt]) {
69
66
  return MIME_TO_MEDIA_TYPE[mt];
70
67
  }
@@ -84,15 +81,25 @@ class MediaFieldCrudManager {
84
81
  return this.applyValidations(fieldFiles);
85
82
  }
86
83
  applyValidations(fieldFiles) {
84
+ const errors = this.validateDangerousFiles(fieldFiles);
87
85
  switch (this.options.type) {
88
86
  case SolidMediaType.mediaSingle:
89
- return this.validateMediaSingle(fieldFiles);
87
+ return [...errors, ...this.validateMediaSingle(fieldFiles)];
90
88
  case SolidMediaType.mediaMultiple:
91
- return this.validateMediaMultiple(fieldFiles);
89
+ return [...errors, ...this.validateMediaMultiple(fieldFiles)];
92
90
  default:
93
- return [];
91
+ return errors;
94
92
  }
95
93
  }
94
+ validateDangerousFiles(fieldFiles) {
95
+ return fieldFiles
96
+ .filter(fieldFile => (0, media_file_types_1.isDangerousMediaFile)(fieldFile))
97
+ .map(fieldFile => ({
98
+ field: this.options.fieldName,
99
+ error: `${this.options.fieldName} file type not allowed. ` +
100
+ `${(0, media_file_types_1.getUploadedFileName)(fieldFile) || 'File'} is a potentially dangerous file type.`
101
+ }));
102
+ }
96
103
  validateMediaSingle(fieldFiles) {
97
104
  const errors = [];
98
105
  if (!this.options.isUpdate && this.options.required && fieldFiles.length === 0) {
@@ -123,7 +130,7 @@ class MediaFieldCrudManager {
123
130
  const allowedFileTypes = this.options.mediaTypes;
124
131
  for (let i = 0; i < fieldFiles.length; i++) {
125
132
  const fieldFile = fieldFiles[i];
126
- const resolvedType = this.resolveMediaType(fieldFile.mimetype, fieldFile.originalname ?? fieldFile.filename ?? '');
133
+ const resolvedType = this.resolveMediaType(fieldFile);
127
134
  if (!resolvedType || !allowedFileTypes.includes(resolvedType)) {
128
135
  errors.push({
129
136
  field: this.options.fieldName,
@@ -1 +1 @@
1
- {"version":3,"file":"MediaFieldCrudManager.js","sourceRoot":"","sources":["../../../src/helpers/field-crud-managers/MediaFieldCrudManager.ts"],"names":[],"mappings":";;;AACA,uEAAwG;AAExG,IAAY,cAGX;AAHD,WAAY,cAAc;IACtB,6CAA2B,CAAA;IAC3B,iDAA+B,CAAA;AACnC,CAAC,EAHW,cAAc,8BAAd,cAAc,QAGzB;AAaD,MAAM,kBAAkB,GAA8B;IAElD,WAAW,EAAE,OAAO;IACpB,YAAY,EAAE,OAAO;IACrB,WAAW,EAAE,OAAO;IACpB,YAAY,EAAE,OAAO;IACrB,WAAW,EAAE,OAAO;IACpB,WAAW,EAAE,OAAO;IACpB,YAAY,EAAE,OAAO;IACrB,YAAY,EAAE,OAAO;IACrB,YAAY,EAAE,OAAO;IAGrB,YAAY,EAAE,OAAO;IACrB,WAAW,EAAE,OAAO;IACpB,WAAW,EAAE,OAAO;IACpB,aAAa,EAAE,OAAO;IACtB,YAAY,EAAE,OAAO;IACrB,WAAW,EAAE,OAAO;IACpB,WAAW,EAAE,OAAO;IACpB,WAAW,EAAE,OAAO;IACpB,aAAa,EAAE,OAAO;IACtB,YAAY,EAAE,OAAO;IAGrB,WAAW,EAAE,OAAO;IACpB,YAAY,EAAE,OAAO;IACrB,YAAY,EAAE,OAAO;IACrB,WAAW,EAAE,OAAO;IACpB,iBAAiB,EAAE,OAAO;IAC1B,iBAAiB,EAAE,OAAO;IAC1B,kBAAkB,EAAE,OAAO;IAC3B,YAAY,EAAE,OAAO;IACrB,aAAa,EAAE,OAAO;IAGtB,iBAAiB,EAAE,KAAK;IACxB,YAAY,EAAE,MAAM;IACpB,eAAe,EAAE,MAAM;IACvB,kBAAkB,EAAE,MAAM;IAC1B,UAAU,EAAE,MAAM;IAGlB,oBAAoB,EAAE,MAAM;IAC5B,yEAAyE,EAAE,MAAM;IACjF,0BAA0B,EAAE,MAAM;IAClC,mEAAmE,EAAE,MAAM;IAC3E,+BAA+B,EAAE,MAAM;IACvC,2EAA2E,EAAE,MAAM;IAGnF,iBAAiB,EAAE,MAAM;IACzB,8BAA8B,EAAE,MAAM;IACtC,8BAA8B,EAAE,MAAM;IACtC,6BAA6B,EAAE,MAAM;CACxC,CAAC;AAEF,MAAa,qBAAqB;IAE9B,YAA6B,OAA0B;QAA1B,YAAO,GAAP,OAAO,CAAmB;IACvD,CAAC;IAEO,gBAAgB,CAAC,QAAiB,EAAE,QAAiB;QACzD,MAAM,GAAG,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,CAAC;QAC7D,IAAI,GAAG,IAAI,uCAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACvC,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,EAAE,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QACjD,IAAI,EAAE,KAAK,eAAe,IAAI,EAAE,KAAK,WAAW,IAAI,EAAE,KAAK,uBAAuB,EAAE,CAAC;YACjF,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,IAAI,EAAE,IAAI,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC;YAC/B,OAAO,kBAAkB,CAAC,EAAE,CAAC,CAAC;QAClC,CAAC;QAGD,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO,OAAO,CAAC;QAC5C,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO,OAAO,CAAC;QAC5C,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO,OAAO,CAAC;QAI5C,IAAI,GAAG,IAAI,oCAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;YAChC,OAAO,oCAAiB,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,QAAQ,CAAC,GAAQ,EAAE,KAAiC;QAChD,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACnF,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAC7C,CAAC;IAEO,gBAAgB,CAAC,UAAsC;QAC3D,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACxB,KAAK,cAAc,CAAC,WAAW;gBAC3B,OAAO,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;YAChD,KAAK,cAAc,CAAC,aAAa;gBAC7B,OAAO,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;YAClD;gBACI,OAAO,EAAE,CAAC;QAClB,CAAC;IACL,CAAC;IAEO,mBAAmB,CAAC,UAAsC;QAC9D,MAAM,MAAM,GAAsB,EAAE,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7E,MAAM,CAAC,IAAI,CAAC;gBACR,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;gBAC7B,KAAK,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,cAAc;aACjD,CAAC,CAAC;QACP,CAAC;QACD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC;gBACR,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;gBAC7B,KAAK,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,wBAAwB;aAC3D,CAAC,CAAC;QACP,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;YAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACzC,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;gBAChC,MAAM,oBAAoB,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;gBAC9D,IAAI,oBAAoB,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;oBACrD,MAAM,CAAC,IAAI,CAAC;wBACR,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;wBAC7B,KAAK,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,cAAc,oBAAoB,iCAAiC,IAAI,CAAC,OAAO,CAAC,cAAc,KAAK;qBACtI,CAAC,CAAC;gBACP,CAAC;YACL,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChE,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,UAAyB,CAAC;YAEhE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACzC,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;gBAEhC,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,YAAY,IAAI,SAAS,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;gBACnH,IAAI,CAAC,YAAY,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;oBAC5D,MAAM,CAAC,IAAI,CAAC;wBACR,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;wBAC7B,KAAK,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,0BAA0B;4BACtD,YAAY,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;4BAC3C,sBAAsB,SAAS,CAAC,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,eAAe,YAAY,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;qBACtG,CAAC,CAAC;gBACP,CAAC;YACL,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAEO,qBAAqB,CAAC,UAAsC;QAChE,MAAM,MAAM,GAAsB,EAAE,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7E,MAAM,CAAC,IAAI,CAAC;gBACR,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;gBAC7B,KAAK,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,cAAc;aACjD,CAAC,CAAC;QACP,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,kBAAkB,CAAC,GAAQ;QACvB,OAAO,GAAG,CAAC;IACf,CAAC;CAGJ;AAlHD,sDAkHC","sourcesContent":["import { FieldCrudManager, ValidationError } from \"src/interfaces\";\nimport { DANGEROUS_EXTENSIONS, EXT_TO_MEDIA_TYPE, MediaCategory } from \"src/constants/media-file-types\";\n\nexport enum SolidMediaType {\n mediaSingle = 'mediaSingle',\n mediaMultiple = 'mediaMultiple'\n}\n\nexport interface MediaFieldOptions {\n type: SolidMediaType;\n required: boolean | undefined | null;\n fieldName: string | undefined | null;\n mediaMaxSizeKb: number | undefined | null;\n mediaTypes: string[];\n isUpdate: boolean | undefined | null;\n}\n\ntype MediaType = MediaCategory;\n\nconst MIME_TO_MEDIA_TYPE: Record<string, MediaType> = {\n // Images\n 'image/png': 'image',\n 'image/jpeg': 'image',\n 'image/jpg': 'image',\n 'image/webp': 'image',\n 'image/gif': 'image',\n 'image/bmp': 'image',\n 'image/tiff': 'image',\n 'image/heic': 'image',\n 'image/heif': 'image',\n\n // Audio\n 'audio/mpeg': 'audio', // mp3\n 'audio/mp3': 'audio',\n 'audio/wav': 'audio',\n 'audio/x-wav': 'audio',\n 'audio/webm': 'audio',\n 'audio/ogg': 'audio',\n 'audio/aac': 'audio',\n 'audio/mp4': 'audio', // m4a often shows as audio/mp4\n 'audio/x-m4a': 'audio',\n 'audio/flac': 'audio',\n\n // Video\n 'video/mp4': 'video',\n 'video/mpeg': 'video',\n 'video/webm': 'video',\n 'video/ogg': 'video',\n 'video/quicktime': 'video', // mov\n 'video/x-msvideo': 'video', // avi\n 'video/x-matroska': 'video',// mkv\n 'video/3gpp': 'video',\n 'video/3gpp2': 'video',\n\n // Documents / files (treat as \"file\")\n 'application/pdf': 'pdf',\n 'text/plain': 'file',\n 'text/markdown': 'file',\n 'application/json': 'file',\n 'text/csv': 'file',\n\n // Office\n 'application/msword': 'file', // doc\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': 'file', // docx\n 'application/vnd.ms-excel': 'file', // xls\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': 'file', // xlsx\n 'application/vnd.ms-powerpoint': 'file', // ppt\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation': 'file', // pptx,\n\n // Archives (optional)\n 'application/zip': 'file',\n 'application/x-zip-compressed': 'file',\n 'application/x-rar-compressed': 'file',\n 'application/x-7z-compressed': 'file',\n};\n\nexport class MediaFieldCrudManager implements FieldCrudManager {\n\n constructor(private readonly options: MediaFieldOptions) {\n }\n\n private resolveMediaType(mimetype?: string, filename?: string): MediaType | null {\n const ext = (filename || '').split('.').pop()?.toLowerCase();\n if (ext && DANGEROUS_EXTENSIONS.has(ext)) {\n return null;\n }\n\n const mt = (mimetype || '').toLowerCase().trim();\n if (mt === 'image/svg+xml' || mt === 'text/html' || mt === 'application/xhtml+xml') {\n return null;\n }\n if (mt && MIME_TO_MEDIA_TYPE[mt]) {\n return MIME_TO_MEDIA_TYPE[mt];\n }\n\n // Some libs may send \"image/*\" etc. Treat broad families safely.\n if (mt.startsWith('image/')) return 'image';\n if (mt.startsWith('audio/')) return 'audio';\n if (mt.startsWith('video/')) return 'video';\n\n // Fallback to extension if provided (also covers generic/unrecognized\n // mimetypes such as application/octet-stream).\n if (ext && EXT_TO_MEDIA_TYPE[ext]) {\n return EXT_TO_MEDIA_TYPE[ext];\n }\n\n return null;\n }\n\n validate(dto: any, files: Array<Express.Multer.File>): ValidationError[] {\n const fieldFiles = files.filter(file => file.fieldname === this.options.fieldName);\n return this.applyValidations(fieldFiles);\n }\n\n private applyValidations(fieldFiles: Array<Express.Multer.File>): ValidationError[] {\n switch (this.options.type) {\n case SolidMediaType.mediaSingle:\n return this.validateMediaSingle(fieldFiles);\n case SolidMediaType.mediaMultiple:\n return this.validateMediaMultiple(fieldFiles);\n default:\n return [];\n }\n }\n\n private validateMediaSingle(fieldFiles: Array<Express.Multer.File>): ValidationError[] {\n const errors: ValidationError[] = [];\n if (!this.options.isUpdate && this.options.required && fieldFiles.length === 0) {\n errors.push({\n field: this.options.fieldName,\n error: `${this.options.fieldName} is required`\n });\n }\n if (fieldFiles.length > 1) {\n errors.push({\n field: this.options.fieldName,\n error: `${this.options.fieldName} must be a single file`\n });\n }\n // validate size\n if (this.options.mediaMaxSizeKb) {\n for (let i = 0; i < fieldFiles.length; i++) {\n const fieldFile = fieldFiles[i];\n const fieldFileSizeInBytes = Math.ceil(fieldFile.size / 1024);\n if (fieldFileSizeInBytes > this.options.mediaMaxSizeKb) {\n errors.push({\n field: this.options.fieldName,\n error: `${this.options.fieldName} with size ${fieldFileSizeInBytes} KB exceeds max size limit of ${this.options.mediaMaxSizeKb} KB`\n });\n }\n }\n }\n // validate type\n if (this.options.mediaTypes && this.options.mediaTypes.length > 0) {\n const allowedFileTypes = this.options.mediaTypes as MediaType[];\n\n for (let i = 0; i < fieldFiles.length; i++) {\n const fieldFile = fieldFiles[i];\n\n const resolvedType = this.resolveMediaType(fieldFile.mimetype, fieldFile.originalname ?? fieldFile.filename ?? '');\n if (!resolvedType || !allowedFileTypes.includes(resolvedType)) {\n errors.push({\n field: this.options.fieldName,\n error: `${this.options.fieldName} file type not allowed. ` +\n `Allowed: ${allowedFileTypes.join(', ')}. ` +\n `Received mimetype: ${fieldFile.mimetype}${resolvedType ? ` (mapped to ${resolvedType})` : ''}`\n });\n }\n }\n }\n\n return errors;\n }\n\n private validateMediaMultiple(fieldFiles: Array<Express.Multer.File>): ValidationError[] {\n const errors: ValidationError[] = [];\n if (!this.options.isUpdate && this.options.required && fieldFiles.length === 0) {\n errors.push({\n field: this.options.fieldName,\n error: `${this.options.fieldName} is required`\n });\n }\n return errors;\n }\n\n transformForCreate(dto: any): any {\n return dto;\n }\n\n // Validation to be applied\n}\n"]}
1
+ {"version":3,"file":"MediaFieldCrudManager.js","sourceRoot":"","sources":["../../../src/helpers/field-crud-managers/MediaFieldCrudManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { FieldCrudManager, ValidationError } from \"src/interfaces\";\nimport { EXT_TO_MEDIA_TYPE, getLowercaseFileExtension, getUploadedFileName, isDangerousMediaFile, MediaCategory } from \"src/constants/media-file-types\";\n\nexport enum SolidMediaType {\n mediaSingle = 'mediaSingle',\n mediaMultiple = 'mediaMultiple'\n}\n\nexport interface MediaFieldOptions {\n type: SolidMediaType;\n required: boolean | undefined | null;\n fieldName: string | undefined | null;\n mediaMaxSizeKb: number | undefined | null;\n mediaTypes: string[];\n isUpdate: boolean | undefined | null;\n}\n\ntype MediaType = MediaCategory;\n\nconst MIME_TO_MEDIA_TYPE: Record<string, MediaType> = {\n // Images\n 'image/png': 'image',\n 'image/jpeg': 'image',\n 'image/jpg': 'image',\n 'image/webp': 'image',\n 'image/gif': 'image',\n 'image/bmp': 'image',\n 'image/tiff': 'image',\n 'image/heic': 'image',\n 'image/heif': 'image',\n\n // Audio\n 'audio/mpeg': 'audio', // mp3\n 'audio/mp3': 'audio',\n 'audio/wav': 'audio',\n 'audio/x-wav': 'audio',\n 'audio/webm': 'audio',\n 'audio/ogg': 'audio',\n 'audio/aac': 'audio',\n 'audio/mp4': 'audio', // m4a often shows as audio/mp4\n 'audio/x-m4a': 'audio',\n 'audio/flac': 'audio',\n\n // Video\n 'video/mp4': 'video',\n 'video/mpeg': 'video',\n 'video/webm': 'video',\n 'video/ogg': 'video',\n 'video/quicktime': 'video', // mov\n 'video/x-msvideo': 'video', // avi\n 'video/x-matroska': 'video',// mkv\n 'video/3gpp': 'video',\n 'video/3gpp2': 'video',\n\n // Documents / files (treat as \"file\")\n 'application/pdf': 'pdf',\n 'text/plain': 'file',\n 'text/markdown': 'file',\n 'application/json': 'file',\n 'text/csv': 'file',\n\n // Office\n 'application/msword': 'file', // doc\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': 'file', // docx\n 'application/vnd.ms-excel': 'file', // xls\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': 'file', // xlsx\n 'application/vnd.ms-powerpoint': 'file', // ppt\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation': 'file', // pptx,\n\n // Archives (optional)\n 'application/zip': 'file',\n 'application/x-zip-compressed': 'file',\n 'application/x-rar-compressed': 'file',\n 'application/x-7z-compressed': 'file',\n};\n\nexport class MediaFieldCrudManager implements FieldCrudManager {\n\n constructor(private readonly options: MediaFieldOptions) {\n }\n\n private resolveMediaType(file: Express.Multer.File): MediaType | null {\n // Belt-and-braces: dangerous files are already rejected outright by\n // validateDangerousFiles, but never let one resolve to a usable category.\n if (isDangerousMediaFile(file)) {\n return null;\n }\n\n const ext = getLowercaseFileExtension(getUploadedFileName(file));\n const mt = (file.mimetype || '').toLowerCase().trim();\n if (mt && MIME_TO_MEDIA_TYPE[mt]) {\n return MIME_TO_MEDIA_TYPE[mt];\n }\n\n // Some libs may send \"image/*\" etc. Treat broad families safely.\n if (mt.startsWith('image/')) return 'image';\n if (mt.startsWith('audio/')) return 'audio';\n if (mt.startsWith('video/')) return 'video';\n\n // Fallback to extension if provided (also covers generic/unrecognized\n // mimetypes such as application/octet-stream).\n if (ext && EXT_TO_MEDIA_TYPE[ext]) {\n return EXT_TO_MEDIA_TYPE[ext];\n }\n\n return null;\n }\n\n validate(dto: any, files: Array<Express.Multer.File>): ValidationError[] {\n const fieldFiles = files.filter(file => file.fieldname === this.options.fieldName);\n return this.applyValidations(fieldFiles);\n }\n\n private applyValidations(fieldFiles: Array<Express.Multer.File>): ValidationError[] {\n // Runs for every media field type and regardless of the admin-configured mediaTypes\n // allowlist - a dangerous upload is never acceptable, so this must not sit behind\n // the optional type checks below.\n const errors = this.validateDangerousFiles(fieldFiles);\n\n switch (this.options.type) {\n case SolidMediaType.mediaSingle:\n return [...errors, ...this.validateMediaSingle(fieldFiles)];\n case SolidMediaType.mediaMultiple:\n return [...errors, ...this.validateMediaMultiple(fieldFiles)];\n default:\n return errors;\n }\n }\n\n private validateDangerousFiles(fieldFiles: Array<Express.Multer.File>): ValidationError[] {\n return fieldFiles\n .filter(fieldFile => isDangerousMediaFile(fieldFile))\n .map(fieldFile => ({\n field: this.options.fieldName,\n error: `${this.options.fieldName} file type not allowed. ` +\n `${getUploadedFileName(fieldFile) || 'File'} is a potentially dangerous file type.`\n }));\n }\n\n private validateMediaSingle(fieldFiles: Array<Express.Multer.File>): ValidationError[] {\n const errors: ValidationError[] = [];\n if (!this.options.isUpdate && this.options.required && fieldFiles.length === 0) {\n errors.push({\n field: this.options.fieldName,\n error: `${this.options.fieldName} is required`\n });\n }\n if (fieldFiles.length > 1) {\n errors.push({\n field: this.options.fieldName,\n error: `${this.options.fieldName} must be a single file`\n });\n }\n // validate size\n if (this.options.mediaMaxSizeKb) {\n for (let i = 0; i < fieldFiles.length; i++) {\n const fieldFile = fieldFiles[i];\n const fieldFileSizeInBytes = Math.ceil(fieldFile.size / 1024);\n if (fieldFileSizeInBytes > this.options.mediaMaxSizeKb) {\n errors.push({\n field: this.options.fieldName,\n error: `${this.options.fieldName} with size ${fieldFileSizeInBytes} KB exceeds max size limit of ${this.options.mediaMaxSizeKb} KB`\n });\n }\n }\n }\n // validate type\n if (this.options.mediaTypes && this.options.mediaTypes.length > 0) {\n const allowedFileTypes = this.options.mediaTypes as MediaType[];\n\n for (let i = 0; i < fieldFiles.length; i++) {\n const fieldFile = fieldFiles[i];\n\n const resolvedType = this.resolveMediaType(fieldFile);\n if (!resolvedType || !allowedFileTypes.includes(resolvedType)) {\n errors.push({\n field: this.options.fieldName,\n error: `${this.options.fieldName} file type not allowed. ` +\n `Allowed: ${allowedFileTypes.join(', ')}. ` +\n `Received mimetype: ${fieldFile.mimetype}${resolvedType ? ` (mapped to ${resolvedType})` : ''}`\n });\n }\n }\n }\n\n return errors;\n }\n\n private validateMediaMultiple(fieldFiles: Array<Express.Multer.File>): ValidationError[] {\n const errors: ValidationError[] = [];\n if (!this.options.isUpdate && this.options.required && fieldFiles.length === 0) {\n errors.push({\n field: this.options.fieldName,\n error: `${this.options.fieldName} is required`\n });\n }\n return errors;\n }\n\n transformForCreate(dto: any): any {\n return dto;\n }\n\n // Validation to be applied\n}\n"]}
@@ -0,0 +1,9 @@
1
+ import type { Response } from "express";
2
+ export interface FileDownloadHeaderOptions {
3
+ fileName: string;
4
+ mimeType: string;
5
+ disposition?: "inline" | "attachment";
6
+ crossOriginResourcePolicy?: boolean;
7
+ }
8
+ export declare function setFileDownloadHeaders(res: Response, options: FileDownloadHeaderOptions): void;
9
+ //# sourceMappingURL=file-download.helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-download.helper.d.ts","sourceRoot":"","sources":["../../src/helpers/file-download.helper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IAEjB,WAAW,CAAC,EAAE,QAAQ,GAAG,YAAY,CAAC;IAEtC,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC;AAMD,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,yBAAyB,GAAG,IAAI,CAe9F"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setFileDownloadHeaders = setFileDownloadHeaders;
4
+ function setFileDownloadHeaders(res, options) {
5
+ const disposition = options.disposition ?? "attachment";
6
+ res.setHeader("Content-Disposition", `${disposition}; filename="${options.fileName}"`);
7
+ res.setHeader("Content-Type", options.mimeType);
8
+ res.setHeader("Access-Control-Expose-Headers", "Content-Disposition, Content-Type");
9
+ res.setHeader("X-Content-Type-Options", "nosniff");
10
+ if (options.crossOriginResourcePolicy) {
11
+ res.setHeader("Cross-Origin-Resource-Policy", "cross-origin");
12
+ }
13
+ }
14
+ //# sourceMappingURL=file-download.helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-download.helper.js","sourceRoot":"","sources":["../../src/helpers/file-download.helper.ts"],"names":[],"mappings":";;AAeA,wDAeC;AAfD,SAAgB,sBAAsB,CAAC,GAAa,EAAE,OAAkC;IACtF,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,YAAY,CAAC;IAExD,GAAG,CAAC,SAAS,CAAC,qBAAqB,EAAE,GAAG,WAAW,eAAe,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvF,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAChD,GAAG,CAAC,SAAS,CAAC,+BAA+B,EAAE,mCAAmC,CAAC,CAAC;IAKpF,GAAG,CAAC,SAAS,CAAC,wBAAwB,EAAE,SAAS,CAAC,CAAC;IAEnD,IAAI,OAAO,CAAC,yBAAyB,EAAE,CAAC;QACtC,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,cAAc,CAAC,CAAC;IAChE,CAAC;AACH,CAAC","sourcesContent":["import type { Response } from \"express\";\n\nexport interface FileDownloadHeaderOptions {\n fileName: string;\n mimeType: string;\n /** Defaults to 'attachment'; only pass 'inline' for types known safe to render. */\n disposition?: \"inline\" | \"attachment\";\n /** Opt in for assets loaded cross-origin by the UI (e.g. media served to :3000). */\n crossOriginResourcePolicy?: boolean;\n}\n\n/**\n * Single place that stamps the response headers for every streamed file download, so the\n * security headers can't be applied to one endpoint and forgotten on the next.\n */\nexport function setFileDownloadHeaders(res: Response, options: FileDownloadHeaderOptions): void {\n const disposition = options.disposition ?? \"attachment\";\n\n res.setHeader(\"Content-Disposition\", `${disposition}; filename=\"${options.fileName}\"`);\n res.setHeader(\"Content-Type\", options.mimeType);\n res.setHeader(\"Access-Control-Expose-Headers\", \"Content-Disposition, Content-Type\");\n\n // Prevent the browser from ever content-sniffing a served file into something more\n // dangerous than its declared Content-Type (e.g. rendering a mislabeled upload as HTML\n // and executing embedded script).\n res.setHeader(\"X-Content-Type-Options\", \"nosniff\");\n\n if (options.crossOriginResourcePolicy) {\n res.setHeader(\"Cross-Origin-Resource-Policy\", \"cross-origin\");\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"model-metadata-helper.service.d.ts","sourceRoot":"","sources":["../../src/helpers/model-metadata-helper.service.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,qBACa,0BAA0B;IAI/B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAIzB,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAPtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+C;gBAGjD,QAAQ,EAAE,aAAa,EAIvB,iBAAiB,EAAE,uBAAuB;IAI/D,uBAAuB,CAAC,eAAe,GAAE,eAAsC,GAAG,GAAG,EAAE;IAmBvF,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,8BAA8B;IAoEtC,OAAO,CAAC,4CAA4C;IA2B9C,kBAAkB,CAAC,SAAS,EAAE,GAAG;CAwB1C"}
1
+ {"version":3,"file":"model-metadata-helper.service.d.ts","sourceRoot":"","sources":["../../src/helpers/model-metadata-helper.service.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,qBACa,0BAA0B;IAI/B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAIzB,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAPtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+C;gBAGjD,QAAQ,EAAE,aAAa,EAIvB,iBAAiB,EAAE,uBAAuB;IAI/D,uBAAuB,CAAC,eAAe,GAAE,eAAsC,GAAG,GAAG,EAAE;IAmBvF,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,8BAA8B;IA8FtC,OAAO,CAAC,4CAA4C;IA+B9C,kBAAkB,CAAC,SAAS,EAAE,GAAG;CAwB1C"}
@@ -16,6 +16,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
16
16
  exports.ModelMetadataHelperService = void 0;
17
17
  const common_1 = require("@nestjs/common");
18
18
  const lodash_1 = require("lodash");
19
+ const draft_publish_fields_1 = require("../constants/draft-publish-fields");
19
20
  const legacy_common_entity_with_existing_id_entity_1 = require("../entities/legacy-common.entity-with-existing-id.entity");
20
21
  const legacy_table_type_enum_1 = require("../enums/legacy-table-type.enum");
21
22
  const model_metadata_repository_1 = require("../repository/model-metadata.repository");
@@ -87,6 +88,32 @@ let ModelMetadataHelperService = ModelMetadataHelperService_1 = class ModelMetad
87
88
  isSystem: true,
88
89
  enableAuditTracking: true
89
90
  },
91
+ {
92
+ name: "isPublished",
93
+ displayName: "Is Published",
94
+ type: "boolean",
95
+ isSystem: true,
96
+ enableAuditTracking: true
97
+ },
98
+ {
99
+ name: "isLatest",
100
+ displayName: "Is Latest",
101
+ type: "boolean",
102
+ isSystem: true,
103
+ enableAuditTracking: true
104
+ },
105
+ {
106
+ name: "initialEntityVersionId",
107
+ displayName: "Initial Entity Version Id",
108
+ type: "int",
109
+ isSystem: true,
110
+ },
111
+ {
112
+ name: "publishedTracker",
113
+ displayName: "Published Tracker",
114
+ type: "shortText",
115
+ isSystem: true,
116
+ },
90
117
  {
91
118
  name: "localeName",
92
119
  displayName: "Locale",
@@ -116,7 +143,9 @@ let ModelMetadataHelperService = ModelMetadataHelperService_1 = class ModelMetad
116
143
  ];
117
144
  }
118
145
  getSystemFieldsMetadataMappingForLegacyTable(withId = true) {
119
- const systemFieldsMetadata = this.getSystemFieldsMetadataMapping();
146
+ const legacyExcludedFieldNames = draft_publish_fields_1.DRAFT_PUBLISH_VERSIONING_FIELD_NAMES;
147
+ const systemFieldsMetadata = this.getSystemFieldsMetadataMapping()
148
+ .filter(field => !legacyExcludedFieldNames.includes(field.name));
120
149
  if (!withId) {
121
150
  const index = systemFieldsMetadata.findIndex(field => field.name === 'id');
122
151
  if (index !== -1) {
@@ -1 +1 @@
1
- {"version":3,"file":"model-metadata-helper.service.js","sourceRoot":"","sources":["../../src/helpers/model-metadata-helper.service.ts"],"names":[],"mappings":"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","sourcesContent":["// Return the system fields metadata for a model\n\nimport { forwardRef, Inject, Injectable, Logger } from \"@nestjs/common\";\nimport { _ } from \"lodash\";\nimport { LEGACY_TABLE_FIELDS_PREFIX } from \"src/entities/legacy-common.entity-with-existing-id.entity\";\nimport { LegacyTableType } from \"src/enums/legacy-table-type.enum\";\nimport { ModelMetadataRepository } from \"src/repository/model-metadata.repository\";\nimport { SolidRegistry } from \"./solid-registry\";\n\n@Injectable()\nexport class ModelMetadataHelperService {\n private readonly logger = new Logger(ModelMetadataHelperService.name);\n\n constructor(\n private readonly registry: SolidRegistry,\n // @InjectRepository(ModelMetadata)\n // private readonly modelMetadataRepo: Repository<ModelMetadata>,\n @Inject(forwardRef(() => ModelMetadataRepository))\n private readonly modelMetadataRepo: ModelMetadataRepository,\n ) {\n }\n\n getSystemFieldsMetadata(legacyTableType: LegacyTableType = LegacyTableType.NONE): any[] {\n let systemFieldsMetadata: any[];\n if (legacyTableType === LegacyTableType.GENERATED_ID) {\n systemFieldsMetadata = this.getSystemFieldsMetadataMappingForLegacyTable(true);\n }\n else if (legacyTableType === LegacyTableType.EXISTING_ID) {\n systemFieldsMetadata = this.getSystemFieldsMetadataMappingForLegacyTable(false);\n }\n else {\n systemFieldsMetadata = this.getSystemFieldsMetadataMapping();\n }\n\n this.checkWithRegistry(systemFieldsMetadata);\n\n return systemFieldsMetadata;\n }\n\n // TODO: Do an additional check and add a warning if the common entity keys and system field metadata keys don't match exactly\n // Ideally this should be reflection based code\n private checkWithRegistry(systemFieldsMetadata: ({ name: string; displayName: string; type: string; ormType: string; isSystem: boolean; relationType?: undefined; relationCoModelSingularName?: undefined; relationCreateInverse?: undefined; relationCascade?: undefined; relationModelModuleName?: undefined; } | { name: string; displayName: string; type: string; isSystem: boolean; ormType?: undefined; relationType?: undefined; relationCoModelSingularName?: undefined; relationCreateInverse?: undefined; relationCascade?: undefined; relationModelModuleName?: undefined; } | { name: string; displayName: string; type: string; ormType: string; isSystem: boolean; relationType: string; relationCoModelSingularName: string; relationCreateInverse: boolean; relationCascade: string; relationModelModuleName: string; })[]) {\n const commonEntityKeys = this.registry.getCommonEntityKeys();\n const systemFieldNames = systemFieldsMetadata.map(field => field.name);\n const missingKeys = commonEntityKeys.filter(key => !systemFieldNames.includes(key));\n if (missingKeys.length > 0) {\n this.logger.warn(`Missing system fields metadata for common entity keys: ${missingKeys.join(', ')}`);\n }\n }\n\n private getSystemFieldsMetadataMapping() {\n return [\n {\n name: \"id\",\n displayName: \"Id\",\n type: \"int\",\n isSystem: true,\n },\n {\n name: \"createdAt\",\n displayName: \"Created At\",\n type: \"datetime\",\n isSystem: true,\n },\n {\n name: \"updatedAt\",\n displayName: \"Updated At\",\n type: \"datetime\",\n isSystem: true,\n },\n {\n name: \"deletedAt\",\n displayName: \"Deleted At\",\n type: \"datetime\",\n isSystem: true,\n },\n {\n name: \"deletedTracker\",\n displayName: \"Deleted Tracker\",\n type: \"shortText\",\n isSystem: true,\n },\n {\n name: \"publishedAt\",\n displayName: \"Published At\",\n type: \"datetime\",\n isSystem: true,\n enableAuditTracking:true\n },\n {\n name: \"localeName\",\n displayName: \"Locale\",\n type: \"shortText\",\n isSystem: true,\n },\n {\n name: \"defaultEntityLocaleId\",\n displayName: \"Default Entity Locale Id\",\n type: \"int\",\n isSystem: true,\n },\n {\n name: \"createdBy\",\n displayName: \"Created By\",\n type: \"int\",\n isSystem: true,\n columnName: \"created_by_id\",\n },\n {\n name: \"updatedBy\",\n displayName: \"Updated By\",\n type: \"int\",\n isSystem: true,\n columnName: \"updated_by_id\",\n }\n ];\n }\n\n private getSystemFieldsMetadataMappingForLegacyTable(withId: boolean=true) {\n const systemFieldsMetadata = this.getSystemFieldsMetadataMapping();\n if (!withId) {\n // Remove the id field metadata\n const index = systemFieldsMetadata.findIndex(field => field.name === 'id');\n if (index !== -1) {\n systemFieldsMetadata.splice(index, 1);\n }\n }\n\n // For legacy table, system fields, remove the ormType atribute from the metadata\n // systemFieldsMetadata.forEach(field => {\n // delete field.ormType;\n // });\n\n // Except for createdBy and updatedBy fields, for which we need to keep the columnName as created_by_id and updated_by_id respectively,\n // we need to add a columnName attribute with legacy prefix concatenated with the kebab cased field name of the system field\n systemFieldsMetadata.forEach(field => {\n if (field.name === 'createdBy' || field.name === 'updatedBy') {\n field['columnName'] = `${LEGACY_TABLE_FIELDS_PREFIX}_${_.snakeCase(field.name)}_id`;\n } else {\n field['columnName'] = `${LEGACY_TABLE_FIELDS_PREFIX}_${_.snakeCase(field.name)}`;\n }\n });\n return systemFieldsMetadata;\n }\n\n async loadFieldHierarchy(modelName: any) {\n const model = await this.modelMetadataRepo.findOne({\n where: {\n singularName: modelName,\n },\n relations: {\n fields: true,\n parentModel: {\n fields: true,\n }\n }\n });\n const fields: any[] = [];\n if (model) {\n // Add the fields of the current model\n fields.push(...model.fields);\n\n // Add the fields of the parent model\n if (model.parentModel) {\n fields.push(...model.parentModel.fields);\n }\n }\n return fields;\n }\n}"]}
1
+ {"version":3,"file":"model-metadata-helper.service.js","sourceRoot":"","sources":["../../src/helpers/model-metadata-helper.service.ts"],"names":[],"mappings":"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","sourcesContent":["// Return the system fields metadata for a model\n\nimport { forwardRef, Inject, Injectable, Logger } from \"@nestjs/common\";\nimport { _ } from \"lodash\";\nimport { DRAFT_PUBLISH_VERSIONING_FIELD_NAMES } from \"src/constants/draft-publish-fields\";\nimport { LEGACY_TABLE_FIELDS_PREFIX } from \"src/entities/legacy-common.entity-with-existing-id.entity\";\nimport { LegacyTableType } from \"src/enums/legacy-table-type.enum\";\nimport { ModelMetadataRepository } from \"src/repository/model-metadata.repository\";\nimport { SolidRegistry } from \"./solid-registry\";\n\n@Injectable()\nexport class ModelMetadataHelperService {\n private readonly logger = new Logger(ModelMetadataHelperService.name);\n\n constructor(\n private readonly registry: SolidRegistry,\n // @InjectRepository(ModelMetadata)\n // private readonly modelMetadataRepo: Repository<ModelMetadata>,\n @Inject(forwardRef(() => ModelMetadataRepository))\n private readonly modelMetadataRepo: ModelMetadataRepository,\n ) {\n }\n\n getSystemFieldsMetadata(legacyTableType: LegacyTableType = LegacyTableType.NONE): any[] {\n let systemFieldsMetadata: any[];\n if (legacyTableType === LegacyTableType.GENERATED_ID) {\n systemFieldsMetadata = this.getSystemFieldsMetadataMappingForLegacyTable(true);\n }\n else if (legacyTableType === LegacyTableType.EXISTING_ID) {\n systemFieldsMetadata = this.getSystemFieldsMetadataMappingForLegacyTable(false);\n }\n else {\n systemFieldsMetadata = this.getSystemFieldsMetadataMapping();\n }\n\n this.checkWithRegistry(systemFieldsMetadata);\n\n return systemFieldsMetadata;\n }\n\n // TODO: Do an additional check and add a warning if the common entity keys and system field metadata keys don't match exactly\n // Ideally this should be reflection based code\n private checkWithRegistry(systemFieldsMetadata: ({ name: string; displayName: string; type: string; ormType: string; isSystem: boolean; relationType?: undefined; relationCoModelSingularName?: undefined; relationCreateInverse?: undefined; relationCascade?: undefined; relationModelModuleName?: undefined; } | { name: string; displayName: string; type: string; isSystem: boolean; ormType?: undefined; relationType?: undefined; relationCoModelSingularName?: undefined; relationCreateInverse?: undefined; relationCascade?: undefined; relationModelModuleName?: undefined; } | { name: string; displayName: string; type: string; ormType: string; isSystem: boolean; relationType: string; relationCoModelSingularName: string; relationCreateInverse: boolean; relationCascade: string; relationModelModuleName: string; })[]) {\n const commonEntityKeys = this.registry.getCommonEntityKeys();\n const systemFieldNames = systemFieldsMetadata.map(field => field.name);\n const missingKeys = commonEntityKeys.filter(key => !systemFieldNames.includes(key));\n if (missingKeys.length > 0) {\n this.logger.warn(`Missing system fields metadata for common entity keys: ${missingKeys.join(', ')}`);\n }\n }\n\n private getSystemFieldsMetadataMapping() {\n return [\n {\n name: \"id\",\n displayName: \"Id\",\n type: \"int\",\n isSystem: true,\n },\n {\n name: \"createdAt\",\n displayName: \"Created At\",\n type: \"datetime\",\n isSystem: true,\n },\n {\n name: \"updatedAt\",\n displayName: \"Updated At\",\n type: \"datetime\",\n isSystem: true,\n },\n {\n name: \"deletedAt\",\n displayName: \"Deleted At\",\n type: \"datetime\",\n isSystem: true,\n },\n {\n name: \"deletedTracker\",\n displayName: \"Deleted Tracker\",\n type: \"shortText\",\n isSystem: true,\n },\n {\n name: \"publishedAt\",\n displayName: \"Published At\",\n type: \"datetime\",\n isSystem: true,\n enableAuditTracking:true\n },\n {\n name: \"isPublished\",\n displayName: \"Is Published\",\n type: \"boolean\",\n isSystem: true,\n enableAuditTracking: true\n },\n {\n name: \"isLatest\",\n displayName: \"Is Latest\",\n type: \"boolean\",\n isSystem: true,\n enableAuditTracking: true\n },\n {\n name: \"initialEntityVersionId\",\n displayName: \"Initial Entity Version Id\",\n type: \"int\",\n isSystem: true,\n },\n {\n name: \"publishedTracker\",\n displayName: \"Published Tracker\",\n type: \"shortText\",\n isSystem: true,\n },\n {\n name: \"localeName\",\n displayName: \"Locale\",\n type: \"shortText\",\n isSystem: true,\n },\n {\n name: \"defaultEntityLocaleId\",\n displayName: \"Default Entity Locale Id\",\n type: \"int\",\n isSystem: true,\n },\n {\n name: \"createdBy\",\n displayName: \"Created By\",\n type: \"int\",\n isSystem: true,\n columnName: \"created_by_id\",\n },\n {\n name: \"updatedBy\",\n displayName: \"Updated By\",\n type: \"int\",\n isSystem: true,\n columnName: \"updated_by_id\",\n }\n ];\n }\n\n private getSystemFieldsMetadataMappingForLegacyTable(withId: boolean=true) {\n // Legacy tables don't have the draft/publish versioning columns, so exclude\n // them from the legacy system fields metadata mapping.\n const legacyExcludedFieldNames: readonly string[] = DRAFT_PUBLISH_VERSIONING_FIELD_NAMES;\n const systemFieldsMetadata = this.getSystemFieldsMetadataMapping()\n .filter(field => !legacyExcludedFieldNames.includes(field.name));\n if (!withId) {\n // Remove the id field metadata\n const index = systemFieldsMetadata.findIndex(field => field.name === 'id');\n if (index !== -1) {\n systemFieldsMetadata.splice(index, 1);\n }\n }\n\n // For legacy table, system fields, remove the ormType atribute from the metadata\n // systemFieldsMetadata.forEach(field => {\n // delete field.ormType;\n // });\n\n // Except for createdBy and updatedBy fields, for which we need to keep the columnName as created_by_id and updated_by_id respectively,\n // we need to add a columnName attribute with legacy prefix concatenated with the kebab cased field name of the system field\n systemFieldsMetadata.forEach(field => {\n if (field.name === 'createdBy' || field.name === 'updatedBy') {\n field['columnName'] = `${LEGACY_TABLE_FIELDS_PREFIX}_${_.snakeCase(field.name)}_id`;\n } else {\n field['columnName'] = `${LEGACY_TABLE_FIELDS_PREFIX}_${_.snakeCase(field.name)}`;\n }\n });\n return systemFieldsMetadata;\n }\n\n async loadFieldHierarchy(modelName: any) {\n const model = await this.modelMetadataRepo.findOne({\n where: {\n singularName: modelName,\n },\n relations: {\n fields: true,\n parentModel: {\n fields: true,\n }\n }\n });\n const fields: any[] = [];\n if (model) {\n // Add the fields of the current model\n fields.push(...model.fields);\n\n // Add the fields of the parent model\n if (model.parentModel) {\n fields.push(...model.parentModel.fields);\n }\n }\n return fields;\n }\n}"]}
@@ -278,7 +278,7 @@ let SolidRegistry = SolidRegistry_1 = class SolidRegistry {
278
278
  return this.auditableModels.has(modelSingularName.toLowerCase());
279
279
  }
280
280
  getCommonEntityKeys() {
281
- return ['id', 'createdAt', 'updatedAt', 'deletedAt', 'createdBy', 'updatedBy', 'deletedTracker', 'localeName', 'defaultEntityLocaleId', 'publishedAt'];
281
+ return ['id', 'createdAt', 'updatedAt', 'deletedAt', 'createdBy', 'updatedBy', 'deletedTracker', 'localeName', 'defaultEntityLocaleId', 'publishedAt', 'isPublished', 'isLatest', 'initialEntityVersionId', 'publishedTracker'];
282
282
  }
283
283
  getAllSettingsProviderInstance() {
284
284
  const settingsProviders = this.getSettingsProviders();