@hexabot-ai/api 3.2.2-alpha.0 → 3.2.2-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (417) hide show
  1. package/dist/actions/actions.service.d.ts +3 -3
  2. package/dist/actions/base-action.d.ts +3 -3
  3. package/dist/actions/create-action.d.ts +1 -1
  4. package/dist/actions/types.d.ts +3 -3
  5. package/dist/analytics/controllers/stats.controller.d.ts +1 -1
  6. package/dist/analytics/dto/stats.dto.d.ts +1 -1
  7. package/dist/analytics/entities/stats.entity.d.ts +1 -1
  8. package/dist/analytics/repositories/stats.repository.d.ts +1 -1
  9. package/dist/analytics/services/stats.service.d.ts +7 -7
  10. package/dist/attachment/controllers/attachment.controller.d.ts +1 -1
  11. package/dist/attachment/dto/attachment.dto.d.ts +2 -2
  12. package/dist/attachment/entities/attachment.entity.d.ts +3 -3
  13. package/dist/attachment/guards/attachment-ability.guard.d.ts +2 -2
  14. package/dist/attachment/repositories/attachment.repository.d.ts +2 -2
  15. package/dist/attachment/services/attachment.service.d.ts +3 -3
  16. package/dist/attachment/utilities/index.js +2 -2
  17. package/dist/attachment/utilities/index.js.map +1 -1
  18. package/dist/audit/controllers/audit-log.controller.d.ts +2 -2
  19. package/dist/audit/dto/audit-log.dto.d.ts +1 -1
  20. package/dist/audit/entities/audit-log.entity.d.ts +1 -1
  21. package/dist/audit/exporters/audit-backend.factory.d.ts +1 -1
  22. package/dist/audit/exporters/audit-safe.exporter.d.ts +1 -1
  23. package/dist/audit/repositories/audit-log.repository.d.ts +1 -1
  24. package/dist/audit/services/audit-log-record.service.d.ts +1 -1
  25. package/dist/bindings/base-binding-kind.d.ts +2 -2
  26. package/dist/bindings/runtime-bindings.service.d.ts +2 -2
  27. package/dist/bootstrap.js +8 -0
  28. package/dist/bootstrap.js.map +1 -1
  29. package/dist/channel/channel.controller.d.ts +1 -1
  30. package/dist/channel/channel.service.d.ts +5 -5
  31. package/dist/channel/dto/source.dto.d.ts +1 -1
  32. package/dist/channel/entities/source.entity.d.ts +2 -2
  33. package/dist/channel/lib/Handler.d.ts +7 -7
  34. package/dist/channel/lib/Handler.js +2 -2
  35. package/dist/channel/lib/Handler.js.map +1 -1
  36. package/dist/channel/lib/channel-event-bus.d.ts +1 -1
  37. package/dist/channel/lib/inbound-events/channel-inbound-event-context.d.ts +1 -1
  38. package/dist/channel/lib/inbound-events/channel-inbound-event-decoder.d.ts +1 -1
  39. package/dist/channel/lib/inbound-events/channel-inbound-event.d.ts +2 -2
  40. package/dist/channel/lib/inbound-events/message-inbound-event.d.ts +1 -1
  41. package/dist/channel/lib/transports/http-channel-handler.d.ts +2 -2
  42. package/dist/channel/lib/transports/websocket-channel-handler.d.ts +3 -3
  43. package/dist/channel/repositories/source.repository.d.ts +1 -1
  44. package/dist/channel/services/channel-attachment.service.d.ts +3 -3
  45. package/dist/channel/services/source.service.d.ts +3 -3
  46. package/dist/channel/services/subscriber-resolver.service.d.ts +2 -2
  47. package/dist/channel/source.controller.d.ts +1 -1
  48. package/dist/channel/webhook.controller.d.ts +1 -1
  49. package/dist/chat/chat.module.js +1 -1
  50. package/dist/chat/chat.module.js.map +1 -1
  51. package/dist/chat/controllers/label-group.controller.d.ts +1 -1
  52. package/dist/chat/controllers/label.controller.d.ts +1 -1
  53. package/dist/chat/controllers/message.controller.d.ts +2 -2
  54. package/dist/chat/controllers/subscriber.controller.d.ts +3 -3
  55. package/dist/chat/controllers/thread.controller.d.ts +2 -2
  56. package/dist/chat/dto/label-group.dto.d.ts +1 -1
  57. package/dist/chat/dto/label.dto.d.ts +1 -1
  58. package/dist/chat/dto/message.dto.d.ts +1 -1
  59. package/dist/chat/dto/subscriber.dto.d.ts +3 -3
  60. package/dist/chat/dto/thread.dto.d.ts +1 -1
  61. package/dist/chat/entities/label-group.entity.d.ts +1 -1
  62. package/dist/chat/entities/label.entity.d.ts +1 -1
  63. package/dist/chat/entities/message.entity.d.ts +2 -2
  64. package/dist/chat/entities/subscriber.entity.d.ts +4 -4
  65. package/dist/chat/entities/subscriber.entity.js +3 -1
  66. package/dist/chat/entities/subscriber.entity.js.map +1 -1
  67. package/dist/chat/entities/thread.entity.d.ts +2 -2
  68. package/dist/chat/repositories/label-group.repository.d.ts +1 -1
  69. package/dist/chat/repositories/label.repository.d.ts +1 -1
  70. package/dist/chat/repositories/message.repository.d.ts +1 -1
  71. package/dist/chat/repositories/subscriber.repository.d.ts +1 -1
  72. package/dist/chat/repositories/thread.repository.d.ts +1 -1
  73. package/dist/chat/services/chat.service.d.ts +4 -4
  74. package/dist/chat/services/label-group.service.d.ts +1 -1
  75. package/dist/chat/services/label.service.d.ts +1 -1
  76. package/dist/chat/services/message.service.d.ts +2 -2
  77. package/dist/chat/services/subscriber.service.d.ts +5 -5
  78. package/dist/chat/services/subscriber.service.js +2 -2
  79. package/dist/chat/services/subscriber.service.js.map +1 -1
  80. package/dist/chat/services/thread.service.d.ts +2 -2
  81. package/dist/chat/types/channel.d.ts +1 -1
  82. package/dist/cms/controllers/content-type.controller.d.ts +1 -1
  83. package/dist/cms/controllers/content.controller.d.ts +1 -1
  84. package/dist/cms/controllers/menu.controller.d.ts +2 -2
  85. package/dist/cms/dto/content.dto.d.ts +1 -1
  86. package/dist/cms/dto/contentType.dto.d.ts +2 -2
  87. package/dist/cms/dto/menu.dto.d.ts +1 -1
  88. package/dist/cms/entities/content-type.entity.d.ts +2 -2
  89. package/dist/cms/entities/content-type.entity.js +3 -2
  90. package/dist/cms/entities/content-type.entity.js.map +1 -1
  91. package/dist/cms/entities/content.entity.d.ts +2 -2
  92. package/dist/cms/entities/content.entity.js +4 -3
  93. package/dist/cms/entities/content.entity.js.map +1 -1
  94. package/dist/cms/entities/menu.entity.d.ts +1 -1
  95. package/dist/cms/repositories/content-type.repository.d.ts +1 -1
  96. package/dist/cms/repositories/content.repository.d.ts +1 -1
  97. package/dist/cms/repositories/menu.repository.d.ts +1 -1
  98. package/dist/cms/services/content-type.service.d.ts +2 -2
  99. package/dist/cms/services/content.service.d.ts +1 -1
  100. package/dist/cms/services/menu.service.d.ts +1 -1
  101. package/dist/cms/services/rag-backend.service.d.ts +2 -2
  102. package/dist/cms/services/rag-indexer.service.d.ts +2 -2
  103. package/dist/cms/services/rag-retriever.service.d.ts +1 -1
  104. package/dist/cms/services/rag.service.d.ts +4 -4
  105. package/dist/database/entities/base.entity.d.ts +1 -1
  106. package/dist/extension/cleanup.service.d.ts +3 -3
  107. package/dist/extension/extension.module.d.ts +1 -1
  108. package/dist/extension/types.d.ts +1 -1
  109. package/dist/extensions/actions/ai/agent.action.d.ts +3 -3
  110. package/dist/extensions/actions/ai/ai-base.action.d.ts +5 -5
  111. package/dist/extensions/actions/ai/generate-object.action.d.ts +2 -2
  112. package/dist/extensions/actions/ai/generate-object.base.action.d.ts +3 -3
  113. package/dist/extensions/actions/ai/generate-reply.action.d.ts +2 -2
  114. package/dist/extensions/actions/ai/generate-text.action.d.ts +2 -2
  115. package/dist/extensions/actions/ai/generate-text.base.action.d.ts +3 -3
  116. package/dist/extensions/actions/ai/infer-object.action.d.ts +2 -2
  117. package/dist/extensions/actions/ai/retrieve-content-rag.action.d.ts +1 -1
  118. package/dist/extensions/actions/memory/update-memory.action.d.ts +4 -4
  119. package/dist/extensions/actions/messaging/attachment.action.d.ts +3 -3
  120. package/dist/extensions/actions/messaging/await-reply.action.d.ts +4 -4
  121. package/dist/extensions/actions/messaging/buttons.action.d.ts +3 -3
  122. package/dist/extensions/actions/messaging/list.action.d.ts +3 -3
  123. package/dist/extensions/actions/messaging/message-action.base.d.ts +6 -6
  124. package/dist/extensions/actions/messaging/quick-replies.action.d.ts +3 -3
  125. package/dist/extensions/actions/messaging/text-message.action.d.ts +3 -3
  126. package/dist/extensions/actions/subscriber/handover.action.d.ts +1 -1
  127. package/dist/extensions/actions/subscriber/update-labels.action.d.ts +1 -1
  128. package/dist/extensions/actions/web/http-request.action.d.ts +1 -1
  129. package/dist/extensions/actions/web/http-request.action.js +15 -4
  130. package/dist/extensions/actions/web/http-request.action.js.map +1 -1
  131. package/dist/extensions/actions/web/i18n/en.translations.json +9 -0
  132. package/dist/extensions/actions/web/i18n/fr.translations.json +9 -0
  133. package/dist/extensions/actions/web/send-mail.action.d.ts +30 -0
  134. package/dist/extensions/actions/web/send-mail.action.js +79 -0
  135. package/dist/extensions/actions/web/send-mail.action.js.map +1 -0
  136. package/dist/extensions/channels/web/base-web-channel.d.ts +6 -6
  137. package/dist/extensions/channels/web/base-web-channel.js +2 -2
  138. package/dist/extensions/channels/web/base-web-channel.js.map +1 -1
  139. package/dist/extensions/channels/web/inbound/events/base-web-inbound.event.d.ts +3 -3
  140. package/dist/extensions/channels/web/inbound/events/delivery.event.d.ts +2 -2
  141. package/dist/extensions/channels/web/inbound/events/messages/attachment.event.d.ts +2 -2
  142. package/dist/extensions/channels/web/inbound/events/messages/location.event.d.ts +2 -2
  143. package/dist/extensions/channels/web/inbound/events/messages/payload.event.d.ts +2 -2
  144. package/dist/extensions/channels/web/inbound/events/messages/postback.event.d.ts +2 -2
  145. package/dist/extensions/channels/web/inbound/events/messages/quick-reply.event.d.ts +2 -2
  146. package/dist/extensions/channels/web/inbound/events/messages/text.event.d.ts +2 -2
  147. package/dist/extensions/channels/web/inbound/events/messages/web-message.event.d.ts +3 -3
  148. package/dist/extensions/channels/web/inbound/events/read.event.d.ts +2 -2
  149. package/dist/extensions/channels/web/inbound/events/typing.event.d.ts +2 -2
  150. package/dist/extensions/channels/web/inbound/events/unsupported.event.d.ts +2 -2
  151. package/dist/extensions/channels/web/inbound/web-inbound-event-decoder.d.ts +2 -2
  152. package/dist/extensions/channels/web/inbound/web-inbound-message-encoder.d.ts +1 -1
  153. package/dist/extensions/channels/web/outbound/web-outbound-message-encoder.d.ts +4 -4
  154. package/dist/extensions/channels/web/services/web-history.service.d.ts +2 -2
  155. package/dist/extensions/channels/web/services/web-session.service.d.ts +6 -6
  156. package/dist/extensions/helpers/local-storage/index.helper.d.ts +2 -2
  157. package/dist/extensions/index.d.ts +1 -0
  158. package/dist/extensions/index.js +1 -0
  159. package/dist/extensions/index.js.map +1 -1
  160. package/dist/health/health.service.d.ts +3 -3
  161. package/dist/helper/helper.service.d.ts +2 -2
  162. package/dist/helper/lib/base-helper.d.ts +2 -2
  163. package/dist/helper/lib/base-storage-helper.d.ts +1 -1
  164. package/dist/helper/types.d.ts +1 -1
  165. package/dist/i18n/controllers/language.controller.d.ts +1 -1
  166. package/dist/i18n/controllers/translation.controller.d.ts +1 -1
  167. package/dist/i18n/dto/language.dto.d.ts +1 -1
  168. package/dist/i18n/dto/translation.dto.d.ts +1 -1
  169. package/dist/i18n/entities/language.entity.d.ts +1 -1
  170. package/dist/i18n/entities/translation.entity.d.ts +1 -1
  171. package/dist/i18n/repositories/language.repository.d.ts +1 -1
  172. package/dist/i18n/repositories/translation.repository.d.ts +1 -1
  173. package/dist/i18n/seeds/language.seed.d.ts +1 -1
  174. package/dist/i18n/seeds/translation.seed.d.ts +1 -1
  175. package/dist/i18n/services/i18n.service.d.ts +2 -2
  176. package/dist/i18n/services/language.service.d.ts +1 -1
  177. package/dist/i18n/services/translation.service.d.ts +3 -3
  178. package/dist/license/services/lemon-squeezy.service.js +2 -2
  179. package/dist/license/services/lemon-squeezy.service.js.map +1 -1
  180. package/dist/license/services/license.service.d.ts +5 -5
  181. package/dist/mailer/mailer.module.js +1 -49
  182. package/dist/mailer/mailer.module.js.map +1 -1
  183. package/dist/mailer/mailer.service.d.ts +11 -2
  184. package/dist/mailer/mailer.service.js +69 -3
  185. package/dist/mailer/mailer.service.js.map +1 -1
  186. package/dist/migration/migration.command.d.ts +1 -1
  187. package/dist/migration/migration.service.d.ts +3 -3
  188. package/dist/migration/types.d.ts +2 -2
  189. package/dist/setting/base-setting-group.d.ts +2 -2
  190. package/dist/setting/controllers/setting.controller.d.ts +1 -1
  191. package/dist/setting/create-setting-group.d.ts +2 -2
  192. package/dist/setting/dto/metadata.dto.d.ts +1 -1
  193. package/dist/setting/dto/setting.dto.d.ts +1 -1
  194. package/dist/setting/entities/metadata.entity.d.ts +1 -1
  195. package/dist/setting/entities/setting.entity.d.ts +1 -1
  196. package/dist/setting/repositories/metadata.repository.d.ts +1 -1
  197. package/dist/setting/repositories/setting.repository.d.ts +1 -1
  198. package/dist/setting/runtime-settings.seed.d.ts +3 -3
  199. package/dist/setting/seeds/metadata.seed.d.ts +1 -1
  200. package/dist/setting/seeds/setting.seed.d.ts +1 -1
  201. package/dist/setting/services/metadata.service.d.ts +1 -1
  202. package/dist/setting/services/runtime-settings.service.d.ts +1 -1
  203. package/dist/setting/services/setting.service.d.ts +4 -4
  204. package/dist/static/assets/browser-ponyfill-BHrZk0Ba.js +2 -0
  205. package/dist/static/assets/{cssMode-Cl7JZDYi.js → cssMode-BMhPv6LQ.js} +1 -1
  206. package/dist/static/assets/{freemarker2-Ddcsv82z.js → freemarker2-BeZMhdTv.js} +1 -1
  207. package/dist/static/assets/{handlebars-BggcQSEE.js → handlebars-BKG3g2Ua.js} +1 -1
  208. package/dist/static/assets/{html-FN76dqvq.js → html-DGzTITbD.js} +1 -1
  209. package/dist/static/assets/{htmlMode-BWRIcbsi.js → htmlMode-BqkaqtYx.js} +1 -1
  210. package/dist/static/assets/{index-DKozh3Um.css → index-BI1BtkYv.css} +1 -1
  211. package/dist/static/assets/{index-DOga3_TI.js → index-BZ6XUYgl.js} +2136 -2133
  212. package/dist/static/assets/{javascript-1EusMo1M.js → javascript-b5wI9R64.js} +1 -1
  213. package/dist/static/assets/{jsonMode-WNbHOGWa.js → jsonMode-CHkAHll-.js} +1 -1
  214. package/dist/static/assets/{liquid-D45yUZ7g.js → liquid-DWtcf_ol.js} +1 -1
  215. package/dist/static/assets/{lspLanguageFeatures-uwS-CJEU.js → lspLanguageFeatures-CogY5n0Q.js} +1 -1
  216. package/dist/static/assets/{mdx-PpOJ5pZ0.js → mdx-Bahv9Yam.js} +1 -1
  217. package/dist/static/assets/{python-B3PwxkAn.js → python-BMSmNQlB.js} +1 -1
  218. package/dist/static/assets/{razor-D0t-tcQz.js → razor-gQN4hgMu.js} +1 -1
  219. package/dist/static/assets/{tsMode-DEMWhFCv.js → tsMode-lBRxNuK8.js} +1 -1
  220. package/dist/static/assets/{typescript-DUe9LVDn.js → typescript-BIY26e43.js} +1 -1
  221. package/dist/static/assets/{xml-Dqap22Hx.js → xml-CU3COlzI.js} +1 -1
  222. package/dist/static/assets/{yaml-Suu2-EtH.js → yaml-Bu2tB__J.js} +1 -1
  223. package/dist/static/assets/{yaml.worker.entry-BdO9k22I.js → yaml.worker.entry-BB81z30Q.js} +228 -228
  224. package/dist/static/index.html +2 -2
  225. package/dist/static/locales/en/translation.json +6 -1
  226. package/dist/static/locales/fr/translation.json +6 -1
  227. package/dist/tsconfig.build.tsbuildinfo +1 -1
  228. package/dist/user/controllers/auth.controller.d.ts +2 -2
  229. package/dist/user/controllers/credential.controller.d.ts +1 -1
  230. package/dist/user/controllers/model.controller.d.ts +3 -3
  231. package/dist/user/controllers/permission.controller.d.ts +2 -2
  232. package/dist/user/controllers/role.controller.d.ts +1 -1
  233. package/dist/user/controllers/user.controller.d.ts +3 -3
  234. package/dist/user/dto/credential.dto.d.ts +1 -1
  235. package/dist/user/dto/model.dto.d.ts +1 -1
  236. package/dist/user/dto/permission.dto.d.ts +1 -1
  237. package/dist/user/dto/role.dto.d.ts +1 -1
  238. package/dist/user/dto/user-profile.dto.d.ts +1 -1
  239. package/dist/user/dto/user.dto.d.ts +2 -2
  240. package/dist/user/entities/credential.entity.d.ts +1 -1
  241. package/dist/user/entities/model.entity.d.ts +2 -2
  242. package/dist/user/entities/model.entity.js +4 -3
  243. package/dist/user/entities/model.entity.js.map +1 -1
  244. package/dist/user/entities/permission.entity.d.ts +3 -3
  245. package/dist/user/entities/permission.entity.js +7 -7
  246. package/dist/user/entities/permission.entity.js.map +1 -1
  247. package/dist/user/entities/role.entity.d.ts +2 -2
  248. package/dist/user/entities/role.entity.js +3 -2
  249. package/dist/user/entities/role.entity.js.map +1 -1
  250. package/dist/user/entities/user-profile.entity.d.ts +3 -3
  251. package/dist/user/entities/user.entity.d.ts +1 -1
  252. package/dist/user/repositories/credential.repository.d.ts +1 -1
  253. package/dist/user/repositories/model.repository.d.ts +1 -1
  254. package/dist/user/repositories/permission.repository.d.ts +1 -1
  255. package/dist/user/repositories/role.repository.d.ts +1 -1
  256. package/dist/user/repositories/user.repository.d.ts +1 -1
  257. package/dist/user/seeds/model.seed.d.ts +1 -1
  258. package/dist/user/seeds/permission.seed.d.ts +1 -1
  259. package/dist/user/seeds/role.seed.d.ts +1 -1
  260. package/dist/user/seeds/user.seed.d.ts +1 -1
  261. package/dist/user/services/credential.service.d.ts +1 -1
  262. package/dist/user/services/model.service.d.ts +1 -1
  263. package/dist/user/services/passwordReset.service.d.ts +4 -4
  264. package/dist/user/services/permission.service.d.ts +1 -1
  265. package/dist/user/services/role.service.d.ts +1 -1
  266. package/dist/user/services/user.service.d.ts +1 -1
  267. package/dist/user/services/validate-account.service.d.ts +4 -4
  268. package/dist/utils/decorators/roles.decorator.d.ts +1 -1
  269. package/dist/utils/generics/base-orm.controller.d.ts +2 -2
  270. package/dist/utils/generics/base-orm.repository.d.ts +2 -2
  271. package/dist/utils/generics/base-orm.seeder.d.ts +1 -1
  272. package/dist/utils/generics/base-orm.service.d.ts +2 -2
  273. package/dist/utils/generics/extension.d.ts +3 -4
  274. package/dist/utils/generics/extension.js.map +1 -1
  275. package/dist/utils/helpers/safe-property-path.d.ts +1 -0
  276. package/dist/utils/helpers/safe-property-path.js +12 -0
  277. package/dist/utils/helpers/safe-property-path.js.map +1 -0
  278. package/dist/utils/helpers/zod.d.ts +1 -1
  279. package/dist/utils/index.d.ts +0 -1
  280. package/dist/utils/index.js +0 -1
  281. package/dist/utils/index.js.map +1 -1
  282. package/dist/utils/pipes/typeorm-search-filter.pipe.js +4 -3
  283. package/dist/utils/pipes/typeorm-search-filter.pipe.js.map +1 -1
  284. package/dist/utils/pipes/uuid.pipe.js +3 -3
  285. package/dist/utils/pipes/uuid.pipe.js.map +1 -1
  286. package/dist/utils/test/dummy/controllers/dummy.controller.d.ts +1 -1
  287. package/dist/utils/test/dummy/dto/dummy.dto.d.ts +1 -1
  288. package/dist/utils/test/dummy/dummy.action.d.ts +1 -1
  289. package/dist/utils/test/dummy/entities/dummy.entity.d.ts +1 -1
  290. package/dist/utils/test/dummy/repositories/dummy.repository.d.ts +1 -1
  291. package/dist/utils/test/dummy/services/dummy.service.d.ts +1 -1
  292. package/dist/utils/test/fixtures/attachment.d.ts +1 -1
  293. package/dist/utils/test/fixtures/content.d.ts +2 -2
  294. package/dist/utils/test/fixtures/contenttype.d.ts +2 -2
  295. package/dist/utils/test/fixtures/contenttype.js +2 -2
  296. package/dist/utils/test/fixtures/contenttype.js.map +1 -1
  297. package/dist/utils/test/fixtures/dummy.d.ts +2 -2
  298. package/dist/utils/test/fixtures/label-group.d.ts +3 -3
  299. package/dist/utils/test/fixtures/label.d.ts +2 -2
  300. package/dist/utils/test/fixtures/language.d.ts +2 -2
  301. package/dist/utils/test/fixtures/mcp-server.d.ts +3 -3
  302. package/dist/utils/test/fixtures/memory-definition.d.ts +2 -2
  303. package/dist/utils/test/fixtures/memory-record.d.ts +2 -2
  304. package/dist/utils/test/fixtures/menu.d.ts +1 -1
  305. package/dist/utils/test/fixtures/message.d.ts +1 -1
  306. package/dist/utils/test/fixtures/migration.d.ts +1 -1
  307. package/dist/utils/test/fixtures/model.d.ts +2 -2
  308. package/dist/utils/test/fixtures/permission.d.ts +4 -4
  309. package/dist/utils/test/fixtures/role.d.ts +2 -2
  310. package/dist/utils/test/fixtures/setting.d.ts +1 -1
  311. package/dist/utils/test/fixtures/stats.d.ts +1 -1
  312. package/dist/utils/test/fixtures/subscriber.d.ts +4 -4
  313. package/dist/utils/test/fixtures/translation.d.ts +1 -1
  314. package/dist/utils/test/fixtures/user.d.ts +2 -2
  315. package/dist/utils/test/fixtures/workflow-run.d.ts +2 -2
  316. package/dist/utils/test/fixtures/workflow.d.ts +2 -2
  317. package/dist/utils/test/providers/i18n-service.provider.d.ts +1 -1
  318. package/dist/utils/test/providers/mailer-service.provider.d.ts +3 -3
  319. package/dist/utils/test/providers/setting-service.provider.d.ts +1 -1
  320. package/dist/utils/test/test.d.ts +4 -0
  321. package/dist/utils/test/test.js +34 -1
  322. package/dist/utils/test/test.js.map +1 -1
  323. package/dist/utils/test/types.d.ts +1 -1
  324. package/dist/utils/test/utils.d.ts +2 -1
  325. package/dist/utils/test/utils.js +181 -41
  326. package/dist/utils/test/utils.js.map +1 -1
  327. package/dist/utils/types/dto.types.d.ts +1 -1
  328. package/dist/utils/types/entity-event.types.d.ts +1 -1
  329. package/dist/websocket/services/socket-event-dispatcher.service.d.ts +1 -1
  330. package/dist/websocket/websocket.gateway.d.ts +6 -6
  331. package/dist/websocket/websocket.gateway.js +2 -2
  332. package/dist/websocket/websocket.gateway.js.map +1 -1
  333. package/dist/workflow/contexts/conversational-workflow.context.d.ts +1 -1
  334. package/dist/workflow/contexts/workflow-runtime.context.d.ts +10 -10
  335. package/dist/workflow/controllers/mcp-server.controller.d.ts +1 -1
  336. package/dist/workflow/controllers/memory-definition.controller.d.ts +1 -1
  337. package/dist/workflow/controllers/workflow-run.controller.d.ts +1 -1
  338. package/dist/workflow/controllers/workflow-version.controller.d.ts +1 -1
  339. package/dist/workflow/controllers/workflow.controller.d.ts +4 -4
  340. package/dist/workflow/dto/mcp-server.dto.d.ts +1 -1
  341. package/dist/workflow/dto/memory-definition.dto.d.ts +1 -1
  342. package/dist/workflow/dto/memory-record.dto.d.ts +1 -1
  343. package/dist/workflow/dto/workflow-run.dto.d.ts +1 -1
  344. package/dist/workflow/dto/workflow-version.dto.d.ts +1 -1
  345. package/dist/workflow/dto/workflow.dto.d.ts +1 -1
  346. package/dist/workflow/entities/mcp-server.entity.d.ts +2 -2
  347. package/dist/workflow/entities/memory-definition.entity.d.ts +1 -1
  348. package/dist/workflow/entities/memory-record.entity.d.ts +4 -4
  349. package/dist/workflow/entities/workflow-run.entity.d.ts +4 -4
  350. package/dist/workflow/entities/workflow-version.entity.d.ts +3 -3
  351. package/dist/workflow/entities/workflow-version.entity.js +6 -4
  352. package/dist/workflow/entities/workflow-version.entity.js.map +1 -1
  353. package/dist/workflow/entities/workflow.entity.d.ts +2 -2
  354. package/dist/workflow/lib/trigger-event-wrapper.d.ts +1 -1
  355. package/dist/workflow/repositories/mcp-server.repository.d.ts +1 -1
  356. package/dist/workflow/repositories/memory-definition.repository.d.ts +1 -1
  357. package/dist/workflow/repositories/memory-record.repository.d.ts +1 -1
  358. package/dist/workflow/repositories/workflow-run.repository.d.ts +1 -1
  359. package/dist/workflow/repositories/workflow-version.repository.d.ts +1 -1
  360. package/dist/workflow/repositories/workflow.repository.d.ts +1 -1
  361. package/dist/workflow/seeds/memory-definition.seed.d.ts +1 -1
  362. package/dist/workflow/seeds/workflow.seed.d.ts +1 -1
  363. package/dist/workflow/services/agentic.service.d.ts +4 -4
  364. package/dist/workflow/services/mcp-client-pool.service.d.ts +2 -2
  365. package/dist/workflow/services/mcp-server.service.d.ts +1 -1
  366. package/dist/workflow/services/memory-definition.service.d.ts +1 -1
  367. package/dist/workflow/services/memory-record.service.d.ts +1 -1
  368. package/dist/workflow/services/memory.service.js +1 -0
  369. package/dist/workflow/services/memory.service.js.map +1 -1
  370. package/dist/workflow/services/workflow-run.service.d.ts +1 -1
  371. package/dist/workflow/services/workflow-scheduler.service.d.ts +3 -3
  372. package/dist/workflow/services/workflow-version.service.d.ts +1 -1
  373. package/dist/workflow/services/workflow.service.d.ts +3 -3
  374. package/dist/workflow/utils/memory-store.js +12 -1
  375. package/dist/workflow/utils/memory-store.js.map +1 -1
  376. package/package.json +63 -32
  377. package/src/attachment/utilities/index.ts +2 -2
  378. package/src/bootstrap.ts +10 -1
  379. package/src/channel/lib/Handler.ts +3 -2
  380. package/src/chat/chat.module.ts +1 -1
  381. package/src/chat/entities/subscriber.entity.ts +14 -7
  382. package/src/chat/services/subscriber.service.ts +3 -2
  383. package/src/cms/entities/content-type.entity.ts +12 -4
  384. package/src/cms/entities/content.entity.ts +13 -5
  385. package/src/extensions/actions/web/http-request.action.ts +23 -4
  386. package/src/extensions/actions/web/i18n/en.translations.json +9 -0
  387. package/src/extensions/actions/web/i18n/fr.translations.json +9 -0
  388. package/src/extensions/actions/web/send-mail.action.ts +89 -0
  389. package/src/extensions/channels/web/base-web-channel.ts +3 -2
  390. package/src/extensions/index.ts +2 -0
  391. package/src/global.d.ts +0 -6
  392. package/src/license/services/lemon-squeezy.service.ts +3 -2
  393. package/src/mailer/mailer.module.ts +1 -54
  394. package/src/mailer/mailer.service.ts +86 -2
  395. package/src/user/entities/model.entity.ts +13 -5
  396. package/src/user/entities/permission.entity.ts +21 -9
  397. package/src/user/entities/role.entity.ts +12 -4
  398. package/src/utils/generics/extension.ts +1 -3
  399. package/src/utils/helpers/safe-property-path.ts +13 -0
  400. package/src/utils/index.ts +0 -2
  401. package/src/utils/pipes/typeorm-search-filter.pipe.ts +4 -3
  402. package/src/utils/pipes/uuid.pipe.ts +3 -3
  403. package/src/utils/test/fixtures/contenttype.ts +1 -1
  404. package/src/utils/test/test.ts +39 -0
  405. package/src/utils/test/utils.ts +278 -52
  406. package/src/websocket/websocket.gateway.ts +2 -2
  407. package/src/workflow/entities/workflow-version.entity.ts +8 -3
  408. package/src/workflow/services/memory.service.ts +1 -0
  409. package/src/workflow/utils/memory-store.ts +13 -1
  410. package/dist/mailer/mjml-adapter.class.d.ts +0 -4
  411. package/dist/mailer/mjml-adapter.class.js +0 -67
  412. package/dist/mailer/mjml-adapter.class.js.map +0 -1
  413. package/dist/utils/types/extension.d.ts +0 -4
  414. package/dist/utils/types/extension.js +0 -3
  415. package/dist/utils/types/extension.js.map +0 -1
  416. package/src/mailer/mjml-adapter.class.ts +0 -41
  417. package/src/utils/types/extension.ts +0 -13
@@ -33,7 +33,7 @@ import { SettingModule } from '@/setting/setting.module';
33
33
 
34
34
  import { I18nTestingModule } from './modules/i18n-testing.module';
35
35
  import { I18nServiceProvider } from './providers/i18n-service.provider';
36
- import { registerTypeOrmDataSource } from './test';
36
+ import { registerTestingModule, registerTypeOrmDataSource } from './test';
37
37
 
38
38
  type TTypeOrToken = [
39
39
  new (...args: any[]) => any,
@@ -51,12 +51,16 @@ type TypeOrmTestingConfig = {
51
51
  fixtures?: TypeOrmFixture | TypeOrmFixture[];
52
52
  dataSourceOptions?: Partial<DataSourceOptions>;
53
53
  };
54
+ type TypeOrmTestingInput =
55
+ | TypeOrmTestingConfig
56
+ | TypeOrmTestingConfig[]
57
+ | false;
54
58
 
55
59
  type buildTestingMocksProps<
56
60
  P extends ModuleMetadata['providers'] = ModuleMetadata['providers'],
57
61
  C extends ModuleMetadata['controllers'] = ModuleMetadata['controllers'],
58
62
  > = ModuleMetadata & {
59
- typeorm?: TypeOrmTestingConfig | TypeOrmTestingConfig[];
63
+ typeorm?: TypeOrmTestingInput;
60
64
  } & (
61
65
  | {
62
66
  providers: NonNullable<P>;
@@ -108,7 +112,10 @@ const getParamTypes = (provider: Provider) =>
108
112
  * @param parentClass - The root provider class whose dependency graph is resolved.
109
113
  * @returns A complete array of unique provider dependencies.
110
114
  */
111
- const getClassDependencies = (parentClass: Provider): Provider[] => {
115
+ const getClassDependencies = (
116
+ parentClass: Provider,
117
+ providedTokens = new Set<Provider>(),
118
+ ): Provider[] => {
112
119
  const dependencies: Provider[] = [];
113
120
  const seenClasses = new Set<Provider>();
114
121
  const classQueue: Provider[] = [parentClass];
@@ -124,7 +131,11 @@ const getClassDependencies = (parentClass: Provider): Provider[] => {
124
131
 
125
132
  if (currentClass) {
126
133
  getParamTypes(currentClass).forEach((paramType: Provider) => {
127
- if (paramType && !seenClasses.has(paramType)) {
134
+ if (
135
+ paramType &&
136
+ !seenClasses.has(paramType) &&
137
+ !providedTokens.has(paramType)
138
+ ) {
128
139
  classQueue.push(paramType);
129
140
  dependencies.push(paramType);
130
141
  }
@@ -136,6 +147,17 @@ const getClassDependencies = (parentClass: Provider): Provider[] => {
136
147
  };
137
148
  const filterNestedDependencies = (dependency: Provider) =>
138
149
  dependency.valueOf().toString().slice(0, 6) === 'class ';
150
+ const resolveProviderToken = (provider: Provider): Provider | undefined => {
151
+ if (
152
+ typeof provider === 'object' &&
153
+ provider !== null &&
154
+ 'provide' in provider
155
+ ) {
156
+ return provider.provide as Provider;
157
+ }
158
+
159
+ return provider;
160
+ };
139
161
  /**
140
162
  * Identifies nested class-based dependencies to be automatically injected into test modules.
141
163
  *
@@ -145,9 +167,14 @@ const filterNestedDependencies = (dependency: Provider) =>
145
167
  const autoInjectExclusions = new Set<Provider>([DataSource]);
146
168
  const getNestedDependencies = (providers: Provider[]): Provider[] => {
147
169
  const nestedDependencies = new Set<Provider>();
170
+ const providedTokens = new Set<Provider>(
171
+ providers
172
+ .map(resolveProviderToken)
173
+ .filter((provider): provider is Provider => provider !== undefined),
174
+ );
148
175
 
149
176
  providers.filter(filterNestedDependencies).forEach((provider) => {
150
- getClassDependencies(provider)
177
+ getClassDependencies(provider, providedTokens)
151
178
  .filter(filterNestedDependencies)
152
179
  .forEach((dependency) => {
153
180
  if (autoInjectExclusions.has(dependency)) {
@@ -213,6 +240,24 @@ const buildEntityLookup = () => {
213
240
 
214
241
  return lookup;
215
242
  };
243
+ const addEntityToLookup = (
244
+ lookup: Map<string, EntityTarget<any>>,
245
+ entity: EntityTarget<any> | undefined,
246
+ ): EntityTarget<any> | undefined => {
247
+ if (!entity) {
248
+ return undefined;
249
+ }
250
+
251
+ const key = resolveEntityTargetName(entity);
252
+ if (key) {
253
+ lookup.set(key, entity);
254
+ }
255
+
256
+ return entity;
257
+ };
258
+ const refreshEntityLookup = (lookup: Map<string, EntityTarget<any>>): void => {
259
+ buildEntityLookup().forEach((entity, key) => lookup.set(key, entity));
260
+ };
216
261
  const registeredSubscribers = new Set<unknown>();
217
262
  const registerAllRepositorySubscribers = (
218
263
  dataSource: DataSource,
@@ -314,22 +359,41 @@ const extractInjectTokensFromProvider = (provider: ProviderLike): unknown[] => {
314
359
 
315
360
  return [];
316
361
  };
317
- const registerMetadataEntities = (
318
- currentEntities: Set<EntityTarget<any>>,
319
- lookup: Map<string, EntityTarget<any>>,
320
- ): void => {
321
- lookup.forEach((entity) => currentEntities.add(entity));
362
+ const dependsOnDataSource = (provider: ProviderLike): boolean => {
363
+ if (!provider) {
364
+ return false;
365
+ }
366
+
367
+ if (typeof provider === 'function') {
368
+ return (
369
+ getParamTypes(provider).includes(DataSource) ||
370
+ extractCustomInjectTokens(provider).includes(DataSource)
371
+ );
372
+ }
373
+
374
+ if (typeof provider === 'object') {
375
+ if ('useClass' in provider && typeof provider.useClass === 'function') {
376
+ return dependsOnDataSource(provider.useClass);
377
+ }
378
+
379
+ if ('inject' in provider && Array.isArray(provider.inject)) {
380
+ return provider.inject.includes(DataSource);
381
+ }
382
+ }
383
+
384
+ return false;
322
385
  };
323
386
  const registerAutoDetectedTypeOrmEntities = (
324
387
  currentEntities: Set<EntityTarget<any>>,
325
388
  providers: Provider[],
326
389
  controllers: ModuleMetadata['controllers'],
327
390
  lookup: Map<string, EntityTarget<any>>,
328
- ) => {
391
+ ): boolean => {
329
392
  if (!lookup.size) {
330
- return;
393
+ return false;
331
394
  }
332
395
 
396
+ let detected = false;
333
397
  const controllerList = Array.isArray(controllers) ? controllers : [];
334
398
  const tokens = [
335
399
  ...providers.flatMap(extractInjectTokensFromProvider),
@@ -340,8 +404,147 @@ const registerAutoDetectedTypeOrmEntities = (
340
404
  const entity = resolveEntityFromToken(token, lookup);
341
405
  if (entity) {
342
406
  currentEntities.add(entity);
407
+ detected = true;
343
408
  }
344
409
  });
410
+
411
+ return detected;
412
+ };
413
+ const addEntityToSet = (
414
+ entities: Set<EntityTarget<any>>,
415
+ entity: EntityTarget<any> | undefined,
416
+ queue: EntityTarget<any>[],
417
+ ): void => {
418
+ if (!entity || entities.has(entity)) {
419
+ return;
420
+ }
421
+
422
+ entities.add(entity);
423
+ queue.push(entity);
424
+ };
425
+ const isSameEntityTarget = (
426
+ left: EntityTarget<any> | undefined,
427
+ right: EntityTarget<any>,
428
+ ): boolean => {
429
+ if (!left) {
430
+ return false;
431
+ }
432
+
433
+ if (left === right) {
434
+ return true;
435
+ }
436
+
437
+ const leftName = resolveEntityTargetName(left);
438
+ const rightName = resolveEntityTargetName(right);
439
+
440
+ return !!leftName && leftName === rightName;
441
+ };
442
+ const resolveRelationTarget = async (
443
+ relationType: unknown,
444
+ lookup: Map<string, EntityTarget<any>>,
445
+ ): Promise<EntityTarget<any> | undefined> => {
446
+ if (typeof relationType === 'string') {
447
+ return lookup.get(relationType);
448
+ }
449
+
450
+ if (typeof relationType === 'function') {
451
+ try {
452
+ const resolved = relationType();
453
+
454
+ if (typeof resolved === 'string') {
455
+ return resolveRelationTarget(resolved, lookup);
456
+ }
457
+
458
+ return addEntityToLookup(lookup, resolved as EntityTarget<any>);
459
+ } catch {
460
+ return addEntityToLookup(lookup, relationType as EntityTarget<any>);
461
+ }
462
+ }
463
+
464
+ return undefined;
465
+ };
466
+ const registerInheritedTypeOrmEntities = (
467
+ currentEntities: Set<EntityTarget<any>>,
468
+ entity: EntityTarget<any>,
469
+ lookup: Map<string, EntityTarget<any>>,
470
+ queue: EntityTarget<any>[],
471
+ ): void => {
472
+ if (typeof entity !== 'function') {
473
+ return;
474
+ }
475
+
476
+ let prototype = Object.getPrototypeOf(entity.prototype);
477
+
478
+ while (prototype?.constructor && prototype.constructor !== Object) {
479
+ const parent = lookup.get(prototype.constructor.name);
480
+ if (parent) {
481
+ addEntityToSet(currentEntities, parent, queue);
482
+ }
483
+
484
+ prototype = Object.getPrototypeOf(prototype);
485
+ }
486
+ };
487
+ const registerChildTypeOrmEntities = (
488
+ currentEntities: Set<EntityTarget<any>>,
489
+ entity: EntityTarget<any>,
490
+ lookup: Map<string, EntityTarget<any>>,
491
+ queue: EntityTarget<any>[],
492
+ ): void => {
493
+ if (typeof entity !== 'function') {
494
+ return;
495
+ }
496
+
497
+ getMetadataArgsStorage().tables.forEach((table) => {
498
+ if (
499
+ table.type !== 'entity-child' ||
500
+ typeof table.target !== 'function' ||
501
+ !entity.prototype.isPrototypeOf(table.target.prototype)
502
+ ) {
503
+ return;
504
+ }
505
+
506
+ addEntityToSet(
507
+ currentEntities,
508
+ addEntityToLookup(lookup, table.target as EntityTarget<any>),
509
+ queue,
510
+ );
511
+ });
512
+ };
513
+ const registerRelatedTypeOrmEntities = async (
514
+ currentEntities: Set<EntityTarget<any>>,
515
+ lookup: Map<string, EntityTarget<any>>,
516
+ ): Promise<void> => {
517
+ const queue = Array.from(currentEntities);
518
+
519
+ while (queue.length > 0) {
520
+ const entity = queue.shift()!;
521
+ const storage = getMetadataArgsStorage();
522
+
523
+ refreshEntityLookup(lookup);
524
+ registerInheritedTypeOrmEntities(currentEntities, entity, lookup, queue);
525
+ registerChildTypeOrmEntities(currentEntities, entity, lookup, queue);
526
+
527
+ const relations = storage.relations.filter((relation) =>
528
+ isSameEntityTarget(relation.target as EntityTarget<any>, entity),
529
+ );
530
+
531
+ for (const relation of relations) {
532
+ const relationEntity = await resolveRelationTarget(relation.type, lookup);
533
+ addEntityToSet(currentEntities, relationEntity, queue);
534
+ }
535
+
536
+ for (const relation of storage.relations) {
537
+ const relationEntity = await resolveRelationTarget(relation.type, lookup);
538
+
539
+ if (isSameEntityTarget(relationEntity, entity)) {
540
+ addEntityToSet(
541
+ currentEntities,
542
+ addEntityToLookup(lookup, relation.target as EntityTarget<any>),
543
+ queue,
544
+ );
545
+ }
546
+ }
547
+ }
345
548
  };
346
549
 
347
550
  /**
@@ -421,27 +624,33 @@ export const buildTestingMocks = async ({
421
624
  overrideTokens.has(provider as unknown as Provider)
422
625
  ),
423
626
  );
424
- const defaultTypeOrmEntities: EntityTarget<any>[] = [
425
- SettingOrmEntity,
426
- MetadataOrmEntity,
427
- LanguageOrmEntity,
428
- ];
429
- const typeOrmEntities = new Set<EntityTarget<any>>(defaultTypeOrmEntities);
627
+ const typeOrmDisabled = typeorm === false;
628
+ let typeOrmOptions: Partial<DataSourceOptions> | undefined;
629
+ const typeOrmFixtures: TypeOrmFixture[] = [];
630
+ const typeOrmConfigs =
631
+ !typeOrmDisabled && Array.isArray(typeorm)
632
+ ? typeorm.filter(Boolean)
633
+ : !typeOrmDisabled && typeorm
634
+ ? [typeorm]
635
+ : [];
636
+ const hasExplicitTypeOrmConfig = typeOrmConfigs.length > 0;
637
+ const typeOrmEntities = new Set<EntityTarget<any>>();
430
638
  const entityLookup = buildEntityLookup();
431
- registerMetadataEntities(typeOrmEntities, entityLookup);
432
- registerAutoDetectedTypeOrmEntities(
639
+ const hasTypeOrmEntityDependencies = registerAutoDetectedTypeOrmEntities(
433
640
  typeOrmEntities,
434
641
  providersList,
435
642
  controllers,
436
643
  entityLookup,
437
644
  );
438
- let typeOrmOptions: Partial<DataSourceOptions> | undefined;
439
- const typeOrmFixtures: TypeOrmFixture[] = [];
440
- const typeOrmConfigs = Array.isArray(typeorm)
441
- ? typeorm.filter(Boolean)
442
- : typeorm
443
- ? [typeorm]
444
- : [];
645
+ const controllerList = Array.isArray(controllers) ? controllers : [];
646
+ const hasDataSourceDependencies = [...providersList, ...controllerList].some(
647
+ dependsOnDataSource,
648
+ );
649
+ const shouldUseTypeOrm =
650
+ !typeOrmDisabled &&
651
+ (hasExplicitTypeOrmConfig ||
652
+ hasTypeOrmEntityDependencies ||
653
+ hasDataSourceDependencies);
445
654
 
446
655
  typeOrmConfigs.forEach((config) => {
447
656
  config.entities?.forEach((entity) => typeOrmEntities.add(entity));
@@ -459,43 +668,59 @@ export const buildTestingMocks = async ({
459
668
  }
460
669
  });
461
670
 
671
+ if (shouldUseTypeOrm && typeOrmEntities.size === 0) {
672
+ entityLookup.forEach((entity) => typeOrmEntities.add(entity));
673
+ }
674
+
675
+ if (shouldUseTypeOrm) {
676
+ [SettingOrmEntity, MetadataOrmEntity, LanguageOrmEntity].forEach((entity) =>
677
+ typeOrmEntities.add(entity),
678
+ );
679
+ await registerRelatedTypeOrmEntities(typeOrmEntities, entityLookup);
680
+ }
681
+
462
682
  const runTypeOrmFixtures = async (dataSource: DataSource) => {
463
683
  for (const fixture of typeOrmFixtures) {
464
684
  await fixture(dataSource);
465
685
  }
466
686
  };
467
687
  const entitiesArray = Array.from(typeOrmEntities);
468
- const baseOptions: DataSourceOptions = {
469
- type: 'sqlite',
470
- database: ':memory:',
471
- synchronize: true,
472
- dropSchema: true,
473
- logging: false,
474
- entities: entitiesArray,
475
- ...(typeOrmOptions ?? {}),
476
- } as DataSourceOptions;
477
- const dataSource = new DataSource(baseOptions);
478
- await dataSource.initialize();
479
- registerAllRepositorySubscribers(dataSource, entitiesArray as any[]);
480
- await runTypeOrmFixtures(dataSource);
481
- registerTypeOrmDataSource(dataSource);
482
-
483
- const typeOrmRootModule: DynamicModule = TypeOrmModule.forRootAsync({
484
- useFactory: async () => baseOptions as DataSourceOptions,
485
- dataSourceFactory: async () => dataSource,
486
- });
487
- const typeOrmProviders = entitiesArray.map((entity) => ({
488
- provide: getRepositoryToken(entity as any),
489
- useValue: dataSource.getRepository(entity),
490
- }));
688
+ let typeOrmRootModule: DynamicModule | undefined;
689
+ let typeOrmProviders: Provider[] = [];
690
+
691
+ if (shouldUseTypeOrm) {
692
+ const baseOptions: DataSourceOptions = {
693
+ type: 'sqlite',
694
+ database: ':memory:',
695
+ synchronize: true,
696
+ dropSchema: true,
697
+ logging: false,
698
+ entities: entitiesArray,
699
+ ...(typeOrmOptions ?? {}),
700
+ } as DataSourceOptions;
701
+ const dataSource = new DataSource(baseOptions);
702
+ await dataSource.initialize();
703
+ registerAllRepositorySubscribers(dataSource, entitiesArray as any[]);
704
+ await runTypeOrmFixtures(dataSource);
705
+ registerTypeOrmDataSource(dataSource);
706
+
707
+ typeOrmRootModule = TypeOrmModule.forRootAsync({
708
+ useFactory: async () => baseOptions as DataSourceOptions,
709
+ dataSourceFactory: async () => dataSource,
710
+ });
711
+ typeOrmProviders = entitiesArray.map((entity) => ({
712
+ provide: getRepositoryToken(entity as any),
713
+ useValue: dataSource.getRepository(entity),
714
+ }));
715
+ }
716
+
491
717
  const testingModuleBuilder = Test.createTestingModule({
492
718
  imports: [
493
719
  LoggerModule,
494
720
  EventEmitterModule.forRoot({ global: true }),
495
721
  CacheModule.register({ isGlobal: true }),
496
- typeOrmRootModule,
497
722
  I18nTestingModule,
498
- SettingModule,
723
+ ...(typeOrmRootModule ? [typeOrmRootModule, SettingModule] : []),
499
724
  ...imports,
500
725
  ],
501
726
  providers: [
@@ -507,6 +732,7 @@ export const buildTestingMocks = async ({
507
732
  ...rest,
508
733
  });
509
734
  const module = await testingModuleBuilder.compile();
735
+ registerTestingModule(module);
510
736
 
511
737
  return {
512
738
  module,
@@ -18,6 +18,7 @@ import {
18
18
  WebSocketGateway,
19
19
  WebSocketServer,
20
20
  } from '@nestjs/websockets';
21
+ import { isUUID } from 'class-validator';
21
22
  import Cookie from 'cookie';
22
23
  import signature from 'cookie-signature';
23
24
  import { Request } from 'express';
@@ -25,7 +26,6 @@ import { Session as ExpressSession, SessionData } from 'express-session';
25
26
  import { ExtendedError, Server, Socket } from 'socket.io';
26
27
  import { DataSource } from 'typeorm';
27
28
  import { sync as uid } from 'uid-safe';
28
- import { validate as isUuid } from 'uuid';
29
29
 
30
30
  import { SourceOrmEntity } from '@/channel/entities/source.entity';
31
31
  import { config } from '@/config';
@@ -179,7 +179,7 @@ export class WebsocketGateway
179
179
  }
180
180
 
181
181
  private normalizeSourceId(value: string | null): string | null {
182
- if (!value || !isUuid(value)) {
182
+ if (!value || !isUUID(value)) {
183
183
  return null;
184
184
  }
185
185
 
@@ -5,6 +5,7 @@
5
5
  */
6
6
 
7
7
  import { createHash } from 'crypto';
8
+ import { createRequire } from 'node:module';
8
9
 
9
10
  import {
10
11
  workflowVersionSchema,
@@ -32,7 +33,9 @@ import { AsRelation } from '@/utils';
32
33
  import { WorkflowVersionDto } from '../dto/workflow-version.dto';
33
34
  import { WorkflowVersionAction } from '../types';
34
35
 
35
- import { WorkflowOrmEntity } from './workflow.entity';
36
+ import type { WorkflowOrmEntity } from './workflow.entity';
37
+
38
+ const requireEntity = createRequire(__filename);
36
39
 
37
40
  @Entity({ name: 'workflow_versions' })
38
41
  @Index(['workflow', 'version'], { unique: true })
@@ -42,7 +45,7 @@ export class WorkflowVersionOrmEntity extends BaseOrmEntity<WorkflowVersionDto>
42
45
  fullCls = workflowVersionFullSchema;
43
46
 
44
47
  /** Workflow that owns this version snapshot. */
45
- @ManyToOne(() => WorkflowOrmEntity, {
48
+ @ManyToOne(() => requireEntity('./workflow.entity').WorkflowOrmEntity, {
46
49
  nullable: false,
47
50
  onDelete: 'CASCADE',
48
51
  })
@@ -130,7 +133,9 @@ export class WorkflowVersionOrmEntity extends BaseOrmEntity<WorkflowVersionDto>
130
133
  return;
131
134
  }
132
135
 
133
- const workflowRepository = event.manager.getRepository(WorkflowOrmEntity);
136
+ const WorkflowEntity = requireEntity('./workflow.entity').WorkflowOrmEntity;
137
+ const workflowRepository =
138
+ event.manager.getRepository<WorkflowOrmEntity>(WorkflowEntity);
134
139
  const workflow = await workflowRepository.findOne({
135
140
  where: { id: workflowId },
136
141
  });
@@ -40,6 +40,7 @@ export class MemoryService {
40
40
  const records = await this.memoryRecordService.findActiveByScope({
41
41
  ownerId,
42
42
  workflowId,
43
+ threadId,
43
44
  runId,
44
45
  });
45
46
 
@@ -9,6 +9,7 @@ import { ZodSchema, z } from 'zod';
9
9
 
10
10
  import { cloneObject } from '@/utils/helpers/clone';
11
11
  import { deepFreeze } from '@/utils/helpers/freeze';
12
+ import { deepMerge } from '@/utils/helpers/object';
12
13
 
13
14
  import { WorkflowRuntimeContext } from '../contexts/workflow-runtime.context';
14
15
  import {
@@ -377,9 +378,20 @@ export class MemoryStore {
377
378
 
378
379
  const updates = await Promise.all(
379
380
  entries.map(async ([slug, value]) => {
381
+ const currentValue = this.raw[slug];
382
+ const canMerge =
383
+ currentValue !== null &&
384
+ value !== null &&
385
+ typeof currentValue === 'object' &&
386
+ typeof value === 'object' &&
387
+ !Array.isArray(currentValue) &&
388
+ !Array.isArray(value);
389
+ const nextValue = canMerge
390
+ ? deepMerge(cloneObject(currentValue), value)
391
+ : value;
380
392
  const parsedValue = await this.updateStoreEntry(
381
393
  slug,
382
- value,
394
+ nextValue,
383
395
  persistRecord,
384
396
  );
385
397
 
@@ -1,4 +0,0 @@
1
- import { TemplateAdapter } from '@nestjs-modules/mailer';
2
- export declare class MjmlAdapter implements TemplateAdapter {
3
- compile: TemplateAdapter['compile'];
4
- }
@@ -1,67 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.MjmlAdapter = void 0;
40
- const fs = __importStar(require("fs"));
41
- const path_1 = __importDefault(require("path"));
42
- const common_1 = require("@nestjs/common");
43
- const handlebars_1 = __importDefault(require("handlebars"));
44
- class MjmlAdapter {
45
- constructor() {
46
- this.compile = async (mail, callback, options) => {
47
- try {
48
- const templatePath = path_1.default.join(options.template?.dir || '', mail.data.template || '');
49
- const content = fs.readFileSync(templatePath, 'utf-8');
50
- const delegate = handlebars_1.default.compile(content);
51
- const compiledHandlebars = delegate(mail.data.context);
52
- const mjml2html = await Promise.resolve().then(() => __importStar(require('mjml')));
53
- const { errors, html } = await mjml2html.default(compiledHandlebars);
54
- if (errors.length) {
55
- throw 'Unable to compiling mjml';
56
- }
57
- mail.data.html = html;
58
- callback();
59
- }
60
- catch (err) {
61
- common_1.Logger.error('@nestjs-modules/mailer: Unable to compiling mjml', err);
62
- }
63
- };
64
- }
65
- }
66
- exports.MjmlAdapter = MjmlAdapter;
67
- //# sourceMappingURL=mjml-adapter.class.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mjml-adapter.class.js","sourceRoot":"","sources":["../../src/mailer/mjml-adapter.class.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,uCAAyB;AACzB,gDAAwB;AAExB,2CAAwC;AAExC,4DAAoC;AAEpC,MAAa,WAAW;IAAxB;QACE,YAAO,GAA+B,KAAK,EACzC,IAAgC,EAChC,QAAQ,EACR,OAAO,EACP,EAAE;YACF,IAAI,CAAC;gBACH,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAC5B,OAAO,CAAC,QAAQ,EAAE,GAAG,IAAI,EAAE,EAC3B,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CACzB,CAAC;gBACF,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;gBACvD,MAAM,QAAQ,GAAG,oBAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC7C,MAAM,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvD,MAAM,SAAS,GAAG,wDAAa,MAAM,GAAC,CAAC;gBACvC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;gBAErE,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;oBAClB,MAAM,0BAA0B,CAAC;gBACnC,CAAC;gBACD,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;gBAEtB,QAAQ,EAAE,CAAC;YACb,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,eAAM,CAAC,KAAK,CAAC,kDAAkD,EAAE,GAAG,CAAC,CAAC;YACxE,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;CAAA;AA3BD,kCA2BC"}
@@ -1,4 +0,0 @@
1
- import { ChannelName } from '@/channel/types';
2
- import { HelperName } from '@/helper/types';
3
- export type ExtensionName = ChannelName | HelperName;
4
- export type HyphenToUnderscore<S extends string> = S extends `${infer P}-${infer Q}` ? `${P}_${HyphenToUnderscore<Q>}` : S;
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=extension.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extension.js","sourceRoot":"","sources":["../../../src/utils/types/extension.ts"],"names":[],"mappings":""}
@@ -1,41 +0,0 @@
1
- /*
2
- * Hexabot — Fair Core License (FCL-1.0-ALv2)
3
- * Copyright (c) 2025 Hexastack.
4
- * Full terms: see LICENSE.md.
5
- */
6
-
7
- import * as fs from 'fs';
8
- import path from 'path';
9
-
10
- import { Logger } from '@nestjs/common';
11
- import { ISendMailOptions, TemplateAdapter } from '@nestjs-modules/mailer';
12
- import Handlebars from 'handlebars';
13
-
14
- export class MjmlAdapter implements TemplateAdapter {
15
- compile: TemplateAdapter['compile'] = async (
16
- mail: { data: ISendMailOptions },
17
- callback,
18
- options,
19
- ) => {
20
- try {
21
- const templatePath = path.join(
22
- options.template?.dir || '',
23
- mail.data.template || '',
24
- );
25
- const content = fs.readFileSync(templatePath, 'utf-8');
26
- const delegate = Handlebars.compile(content);
27
- const compiledHandlebars = delegate(mail.data.context);
28
- const mjml2html = await import('mjml');
29
- const { errors, html } = await mjml2html.default(compiledHandlebars);
30
-
31
- if (errors.length) {
32
- throw 'Unable to compiling mjml';
33
- }
34
- mail.data.html = html;
35
-
36
- callback();
37
- } catch (err) {
38
- Logger.error('@nestjs-modules/mailer: Unable to compiling mjml', err);
39
- }
40
- };
41
- }