@hexabot-ai/api 3.0.0-alpha.3

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 (1778) hide show
  1. package/README.md +97 -0
  2. package/dist/analytics/analytics.module.d.ts +2 -0
  3. package/dist/analytics/analytics.module.js +26 -0
  4. package/dist/analytics/analytics.module.js.map +1 -0
  5. package/dist/analytics/controllers/bot-stats.controller.d.ts +17 -0
  6. package/dist/analytics/controllers/bot-stats.controller.js +107 -0
  7. package/dist/analytics/controllers/bot-stats.controller.js.map +1 -0
  8. package/dist/analytics/dto/bot-stats.dto.d.ts +35 -0
  9. package/dist/analytics/dto/bot-stats.dto.js +112 -0
  10. package/dist/analytics/dto/bot-stats.dto.js.map +1 -0
  11. package/dist/analytics/entities/bot-stats.entity.d.ts +33 -0
  12. package/dist/analytics/entities/bot-stats.entity.js +80 -0
  13. package/dist/analytics/entities/bot-stats.entity.js.map +1 -0
  14. package/dist/analytics/index.d.ts +8 -0
  15. package/dist/analytics/index.js +25 -0
  16. package/dist/analytics/index.js.map +1 -0
  17. package/dist/analytics/repositories/bot-stats.repository.d.ts +12 -0
  18. package/dist/analytics/repositories/bot-stats.repository.js +68 -0
  19. package/dist/analytics/repositories/bot-stats.repository.js.map +1 -0
  20. package/dist/analytics/services/bot-stats.service.d.ts +22 -0
  21. package/dist/analytics/services/bot-stats.service.js +132 -0
  22. package/dist/analytics/services/bot-stats.service.js.map +1 -0
  23. package/dist/analytics/utilities/index.d.ts +1 -0
  24. package/dist/analytics/utilities/index.js +6 -0
  25. package/dist/analytics/utilities/index.js.map +1 -0
  26. package/dist/analytics/validation-rules/is-less-than-date.d.ts +2 -0
  27. package/dist/analytics/validation-rules/is-less-than-date.js +25 -0
  28. package/dist/analytics/validation-rules/is-less-than-date.js.map +1 -0
  29. package/dist/app.controller.d.ts +14 -0
  30. package/dist/app.controller.js +81 -0
  31. package/dist/app.controller.js.map +1 -0
  32. package/dist/app.instance.d.ts +7 -0
  33. package/dist/app.instance.js +20 -0
  34. package/dist/app.instance.js.map +1 -0
  35. package/dist/app.module.d.ts +11 -0
  36. package/dist/app.module.js +172 -0
  37. package/dist/app.module.js.map +1 -0
  38. package/dist/app.service.d.ts +6 -0
  39. package/dist/app.service.js +28 -0
  40. package/dist/app.service.js.map +1 -0
  41. package/dist/attachment/attachment.module.d.ts +4 -0
  42. package/dist/attachment/attachment.module.js +42 -0
  43. package/dist/attachment/attachment.module.js.map +1 -0
  44. package/dist/attachment/controllers/attachment.controller.d.ts +21 -0
  45. package/dist/attachment/controllers/attachment.controller.js +153 -0
  46. package/dist/attachment/controllers/attachment.controller.js.map +1 -0
  47. package/dist/attachment/dto/attachment.dto.d.ts +49 -0
  48. package/dist/attachment/dto/attachment.dto.js +201 -0
  49. package/dist/attachment/dto/attachment.dto.js.map +1 -0
  50. package/dist/attachment/entities/attachment.entity.d.ts +18 -0
  51. package/dist/attachment/entities/attachment.entity.js +101 -0
  52. package/dist/attachment/entities/attachment.entity.js.map +1 -0
  53. package/dist/attachment/guards/attachment-ability.guard.d.ts +15 -0
  54. package/dist/attachment/guards/attachment-ability.guard.js +193 -0
  55. package/dist/attachment/guards/attachment-ability.guard.js.map +1 -0
  56. package/dist/attachment/index.d.ts +9 -0
  57. package/dist/attachment/index.js +26 -0
  58. package/dist/attachment/index.js.map +1 -0
  59. package/dist/attachment/mocks/attachment.mock.d.ts +3 -0
  60. package/dist/attachment/mocks/attachment.mock.js +33 -0
  61. package/dist/attachment/mocks/attachment.mock.js.map +1 -0
  62. package/dist/attachment/repositories/attachment.repository.d.ts +7 -0
  63. package/dist/attachment/repositories/attachment.repository.js +36 -0
  64. package/dist/attachment/repositories/attachment.repository.js.map +1 -0
  65. package/dist/attachment/services/attachment.service.d.ts +16 -0
  66. package/dist/attachment/services/attachment.service.js +48 -0
  67. package/dist/attachment/services/attachment.service.js.map +1 -0
  68. package/dist/attachment/types/index.d.ts +23 -0
  69. package/dist/attachment/types/index.js +26 -0
  70. package/dist/attachment/types/index.js.map +1 -0
  71. package/dist/attachment/utilities/index.d.ts +13 -0
  72. package/dist/attachment/utilities/index.js +53 -0
  73. package/dist/attachment/utilities/index.js.map +1 -0
  74. package/dist/bootstrap.d.ts +13 -0
  75. package/dist/bootstrap.js +104 -0
  76. package/dist/bootstrap.js.map +1 -0
  77. package/dist/channel/channel.controller.d.ts +8 -0
  78. package/dist/channel/channel.controller.js +38 -0
  79. package/dist/channel/channel.controller.js.map +1 -0
  80. package/dist/channel/channel.middleware.d.ts +8 -0
  81. package/dist/channel/channel.middleware.js +40 -0
  82. package/dist/channel/channel.middleware.js.map +1 -0
  83. package/dist/channel/channel.module.d.ts +7 -0
  84. package/dist/channel/channel.module.js +39 -0
  85. package/dist/channel/channel.module.js.map +1 -0
  86. package/dist/channel/channel.service.d.ts +21 -0
  87. package/dist/channel/channel.service.js +138 -0
  88. package/dist/channel/channel.service.js.map +1 -0
  89. package/dist/channel/index.d.ts +8 -0
  90. package/dist/channel/index.js +25 -0
  91. package/dist/channel/index.js.map +1 -0
  92. package/dist/channel/lib/EventWrapper.d.ts +67 -0
  93. package/dist/channel/lib/EventWrapper.js +126 -0
  94. package/dist/channel/lib/EventWrapper.js.map +1 -0
  95. package/dist/channel/lib/Handler.d.ts +52 -0
  96. package/dist/channel/lib/Handler.js +143 -0
  97. package/dist/channel/lib/Handler.js.map +1 -0
  98. package/dist/channel/lib/__test__/base.mock.d.ts +5 -0
  99. package/dist/channel/lib/__test__/base.mock.js +9 -0
  100. package/dist/channel/lib/__test__/base.mock.js.map +1 -0
  101. package/dist/channel/lib/__test__/common.mock.d.ts +7 -0
  102. package/dist/channel/lib/__test__/common.mock.js +153 -0
  103. package/dist/channel/lib/__test__/common.mock.js.map +1 -0
  104. package/dist/channel/lib/__test__/label.mock.d.ts +3 -0
  105. package/dist/channel/lib/__test__/label.mock.js +54 -0
  106. package/dist/channel/lib/__test__/label.mock.js.map +1 -0
  107. package/dist/channel/lib/__test__/subscriber.mock.d.ts +4 -0
  108. package/dist/channel/lib/__test__/subscriber.mock.js +36 -0
  109. package/dist/channel/lib/__test__/subscriber.mock.js.map +1 -0
  110. package/dist/channel/types.d.ts +7 -0
  111. package/dist/channel/types.js +3 -0
  112. package/dist/channel/types.js.map +1 -0
  113. package/dist/channel/webhook.controller.d.ts +12 -0
  114. package/dist/channel/webhook.controller.js +86 -0
  115. package/dist/channel/webhook.controller.js.map +1 -0
  116. package/dist/chat/chat.module.d.ts +2 -0
  117. package/dist/chat/chat.module.js +114 -0
  118. package/dist/chat/chat.module.js.map +1 -0
  119. package/dist/chat/constants/block.d.ts +3 -0
  120. package/dist/chat/constants/block.js +13 -0
  121. package/dist/chat/constants/block.js.map +1 -0
  122. package/dist/chat/constants/conversation.d.ts +2 -0
  123. package/dist/chat/constants/conversation.js +23 -0
  124. package/dist/chat/constants/conversation.js.map +1 -0
  125. package/dist/chat/controllers/block.controller.d.ts +56 -0
  126. package/dist/chat/controllers/block.controller.js +253 -0
  127. package/dist/chat/controllers/block.controller.js.map +1 -0
  128. package/dist/chat/controllers/category.controller.d.ts +19 -0
  129. package/dist/chat/controllers/category.controller.js +132 -0
  130. package/dist/chat/controllers/category.controller.js.map +1 -0
  131. package/dist/chat/controllers/context-var.controller.d.ts +19 -0
  132. package/dist/chat/controllers/context-var.controller.js +132 -0
  133. package/dist/chat/controllers/context-var.controller.js.map +1 -0
  134. package/dist/chat/controllers/label-group.controller.d.ts +19 -0
  135. package/dist/chat/controllers/label-group.controller.js +140 -0
  136. package/dist/chat/controllers/label-group.controller.js.map +1 -0
  137. package/dist/chat/controllers/label.controller.d.ts +19 -0
  138. package/dist/chat/controllers/label.controller.js +140 -0
  139. package/dist/chat/controllers/label.controller.js.map +1 -0
  140. package/dist/chat/controllers/message.controller.d.ts +22 -0
  141. package/dist/chat/controllers/message.controller.js +156 -0
  142. package/dist/chat/controllers/message.controller.js.map +1 -0
  143. package/dist/chat/controllers/subscriber.controller.d.ts +19 -0
  144. package/dist/chat/controllers/subscriber.controller.js +129 -0
  145. package/dist/chat/controllers/subscriber.controller.js.map +1 -0
  146. package/dist/chat/dto/block.dto.d.ts +80 -0
  147. package/dist/chat/dto/block.dto.js +363 -0
  148. package/dist/chat/dto/block.dto.js.map +1 -0
  149. package/dist/chat/dto/category.dto.d.ts +33 -0
  150. package/dist/chat/dto/category.dto.js +91 -0
  151. package/dist/chat/dto/category.dto.js.map +1 -0
  152. package/dist/chat/dto/context-var.dto.d.ts +28 -0
  153. package/dist/chat/dto/context-var.dto.js +71 -0
  154. package/dist/chat/dto/context-var.dto.js.map +1 -0
  155. package/dist/chat/dto/conversation.dto.d.ts +38 -0
  156. package/dist/chat/dto/conversation.dto.js +120 -0
  157. package/dist/chat/dto/conversation.dto.js.map +1 -0
  158. package/dist/chat/dto/label-group.dto.d.ts +25 -0
  159. package/dist/chat/dto/label-group.dto.js +61 -0
  160. package/dist/chat/dto/label-group.dto.js.map +1 -0
  161. package/dist/chat/dto/label.dto.d.ts +38 -0
  162. package/dist/chat/dto/label.dto.js +120 -0
  163. package/dist/chat/dto/label.dto.js.map +1 -0
  164. package/dist/chat/dto/message.dto.d.ts +45 -0
  165. package/dist/chat/dto/message.dto.js +154 -0
  166. package/dist/chat/dto/message.dto.js.map +1 -0
  167. package/dist/chat/dto/subscriber.dto.d.ts +63 -0
  168. package/dist/chat/dto/subscriber.dto.js +254 -0
  169. package/dist/chat/dto/subscriber.dto.js.map +1 -0
  170. package/dist/chat/entities/block.entity.d.ts +39 -0
  171. package/dist/chat/entities/block.entity.js +334 -0
  172. package/dist/chat/entities/block.entity.js.map +1 -0
  173. package/dist/chat/entities/category.entity.d.ts +10 -0
  174. package/dist/chat/entities/category.entity.js +69 -0
  175. package/dist/chat/entities/category.entity.js.map +1 -0
  176. package/dist/chat/entities/context-var.entity.d.ts +7 -0
  177. package/dist/chat/entities/context-var.entity.js +75 -0
  178. package/dist/chat/entities/context-var.entity.js.map +1 -0
  179. package/dist/chat/entities/conversation.entity.d.ts +14 -0
  180. package/dist/chat/entities/conversation.entity.js +74 -0
  181. package/dist/chat/entities/conversation.entity.js.map +1 -0
  182. package/dist/chat/entities/label-group.entity.d.ts +6 -0
  183. package/dist/chat/entities/label-group.entity.js +31 -0
  184. package/dist/chat/entities/label-group.entity.js.map +1 -0
  185. package/dist/chat/entities/label.entity.d.ts +16 -0
  186. package/dist/chat/entities/label.entity.js +76 -0
  187. package/dist/chat/entities/label.entity.js.map +1 -0
  188. package/dist/chat/entities/message.entity.d.ts +17 -0
  189. package/dist/chat/entities/message.entity.js +85 -0
  190. package/dist/chat/entities/message.entity.js.map +1 -0
  191. package/dist/chat/entities/subscriber.entity.d.ts +30 -0
  192. package/dist/chat/entities/subscriber.entity.js +143 -0
  193. package/dist/chat/entities/subscriber.entity.js.map +1 -0
  194. package/dist/chat/helpers/constants.d.ts +1 -0
  195. package/dist/chat/helpers/constants.js +5 -0
  196. package/dist/chat/helpers/constants.js.map +1 -0
  197. package/dist/chat/helpers/envelope-builder.d.ts +18 -0
  198. package/dist/chat/helpers/envelope-builder.js +65 -0
  199. package/dist/chat/helpers/envelope-builder.js.map +1 -0
  200. package/dist/chat/helpers/envelope-factory.d.ts +242 -0
  201. package/dist/chat/helpers/envelope-factory.js +109 -0
  202. package/dist/chat/helpers/envelope-factory.js.map +1 -0
  203. package/dist/chat/index.d.ts +62 -0
  204. package/dist/chat/index.js +79 -0
  205. package/dist/chat/index.js.map +1 -0
  206. package/dist/chat/repositories/block.repository.d.ts +10 -0
  207. package/dist/chat/repositories/block.repository.js +116 -0
  208. package/dist/chat/repositories/block.repository.js.map +1 -0
  209. package/dist/chat/repositories/category.repository.d.ts +7 -0
  210. package/dist/chat/repositories/category.repository.js +36 -0
  211. package/dist/chat/repositories/category.repository.js.map +1 -0
  212. package/dist/chat/repositories/context-var.repository.d.ts +7 -0
  213. package/dist/chat/repositories/context-var.repository.js +36 -0
  214. package/dist/chat/repositories/context-var.repository.js.map +1 -0
  215. package/dist/chat/repositories/conversation.repository.d.ts +8 -0
  216. package/dist/chat/repositories/conversation.repository.js +39 -0
  217. package/dist/chat/repositories/conversation.repository.js.map +1 -0
  218. package/dist/chat/repositories/label-group.repository.d.ts +7 -0
  219. package/dist/chat/repositories/label-group.repository.js +36 -0
  220. package/dist/chat/repositories/label-group.repository.js.map +1 -0
  221. package/dist/chat/repositories/label.repository.d.ts +7 -0
  222. package/dist/chat/repositories/label.repository.js +36 -0
  223. package/dist/chat/repositories/label.repository.js.map +1 -0
  224. package/dist/chat/repositories/message.repository.d.ts +11 -0
  225. package/dist/chat/repositories/message.repository.js +97 -0
  226. package/dist/chat/repositories/message.repository.js.map +1 -0
  227. package/dist/chat/repositories/subscriber.repository.d.ts +15 -0
  228. package/dist/chat/repositories/subscriber.repository.js +135 -0
  229. package/dist/chat/repositories/subscriber.repository.js.map +1 -0
  230. package/dist/chat/seeds/category.seed-model.d.ts +2 -0
  231. package/dist/chat/seeds/category.seed-model.js +9 -0
  232. package/dist/chat/seeds/category.seed-model.js.map +1 -0
  233. package/dist/chat/seeds/category.seed.d.ts +8 -0
  234. package/dist/chat/seeds/category.seed.js +27 -0
  235. package/dist/chat/seeds/category.seed.js.map +1 -0
  236. package/dist/chat/seeds/context-var.seed-model.d.ts +2 -0
  237. package/dist/chat/seeds/context-var.seed-model.js +14 -0
  238. package/dist/chat/seeds/context-var.seed-model.js.map +1 -0
  239. package/dist/chat/seeds/context-var.seed.d.ts +8 -0
  240. package/dist/chat/seeds/context-var.seed.js +27 -0
  241. package/dist/chat/seeds/context-var.seed.js.map +1 -0
  242. package/dist/chat/services/block.service.d.ts +51 -0
  243. package/dist/chat/services/block.service.js +366 -0
  244. package/dist/chat/services/block.service.js.map +1 -0
  245. package/dist/chat/services/bot.service.d.ts +36 -0
  246. package/dist/chat/services/bot.service.js +375 -0
  247. package/dist/chat/services/bot.service.js.map +1 -0
  248. package/dist/chat/services/category.service.d.ts +8 -0
  249. package/dist/chat/services/category.service.js +27 -0
  250. package/dist/chat/services/category.service.js.map +1 -0
  251. package/dist/chat/services/chat.service.d.ts +37 -0
  252. package/dist/chat/services/chat.service.js +327 -0
  253. package/dist/chat/services/chat.service.js.map +1 -0
  254. package/dist/chat/services/context-var.service.d.ts +10 -0
  255. package/dist/chat/services/context-var.service.js +41 -0
  256. package/dist/chat/services/context-var.service.js.map +1 -0
  257. package/dist/chat/services/conversation.service.d.ts +18 -0
  258. package/dist/chat/services/conversation.service.js +149 -0
  259. package/dist/chat/services/conversation.service.js.map +1 -0
  260. package/dist/chat/services/label-group.service.d.ts +8 -0
  261. package/dist/chat/services/label-group.service.js +27 -0
  262. package/dist/chat/services/label-group.service.js.map +1 -0
  263. package/dist/chat/services/label.service.d.ts +8 -0
  264. package/dist/chat/services/label.service.js +27 -0
  265. package/dist/chat/services/label.service.js.map +1 -0
  266. package/dist/chat/services/message.service.d.ts +20 -0
  267. package/dist/chat/services/message.service.js +74 -0
  268. package/dist/chat/services/message.service.js.map +1 -0
  269. package/dist/chat/services/subscriber.service.d.ts +31 -0
  270. package/dist/chat/services/subscriber.service.js +197 -0
  271. package/dist/chat/services/subscriber.service.js.map +1 -0
  272. package/dist/chat/types/attachment.d.ts +57 -0
  273. package/dist/chat/types/attachment.js +26 -0
  274. package/dist/chat/types/attachment.js.map +1 -0
  275. package/dist/chat/types/button.d.ts +81 -0
  276. package/dist/chat/types/button.js +33 -0
  277. package/dist/chat/types/button.js.map +1 -0
  278. package/dist/chat/types/capture-var.d.ts +12 -0
  279. package/dist/chat/types/capture-var.js +9 -0
  280. package/dist/chat/types/capture-var.js.map +1 -0
  281. package/dist/chat/types/channel.d.ts +19 -0
  282. package/dist/chat/types/channel.js +10 -0
  283. package/dist/chat/types/channel.js.map +1 -0
  284. package/dist/chat/types/context.d.ts +25 -0
  285. package/dist/chat/types/context.js +3 -0
  286. package/dist/chat/types/context.js.map +1 -0
  287. package/dist/chat/types/message.d.ts +3434 -0
  288. package/dist/chat/types/message.js +232 -0
  289. package/dist/chat/types/message.js.map +1 -0
  290. package/dist/chat/types/options.d.ts +325 -0
  291. package/dist/chat/types/options.js +34 -0
  292. package/dist/chat/types/options.js.map +1 -0
  293. package/dist/chat/types/pattern.d.ts +100 -0
  294. package/dist/chat/types/pattern.js +56 -0
  295. package/dist/chat/types/pattern.js.map +1 -0
  296. package/dist/chat/types/position.d.ts +12 -0
  297. package/dist/chat/types/position.js +9 -0
  298. package/dist/chat/types/position.js.map +1 -0
  299. package/dist/chat/types/quick-reply.d.ts +110 -0
  300. package/dist/chat/types/quick-reply.js +33 -0
  301. package/dist/chat/types/quick-reply.js.map +1 -0
  302. package/dist/chat/types/subscriberContext.d.ts +9 -0
  303. package/dist/chat/types/subscriberContext.js +8 -0
  304. package/dist/chat/types/subscriberContext.js.map +1 -0
  305. package/dist/cli.d.ts +1 -0
  306. package/dist/cli.js +21 -0
  307. package/dist/cli.js.map +1 -0
  308. package/dist/cms/cms.module.d.ts +2 -0
  309. package/dist/cms/cms.module.js +50 -0
  310. package/dist/cms/cms.module.js.map +1 -0
  311. package/dist/cms/controllers/content-type.controller.d.ts +17 -0
  312. package/dist/cms/controllers/content-type.controller.js +109 -0
  313. package/dist/cms/controllers/content-type.controller.js.map +1 -0
  314. package/dist/cms/controllers/content.controller.d.ts +21 -0
  315. package/dist/cms/controllers/content.controller.js +167 -0
  316. package/dist/cms/controllers/content.controller.js.map +1 -0
  317. package/dist/cms/controllers/menu.controller.d.ts +20 -0
  318. package/dist/cms/controllers/menu.controller.js +145 -0
  319. package/dist/cms/controllers/menu.controller.js.map +1 -0
  320. package/dist/cms/decorators/unique-field-names.decorator.d.ts +2 -0
  321. package/dist/cms/decorators/unique-field-names.decorator.js +17 -0
  322. package/dist/cms/decorators/unique-field-names.decorator.js.map +1 -0
  323. package/dist/cms/dto/content.dto.d.ts +32 -0
  324. package/dist/cms/dto/content.dto.js +92 -0
  325. package/dist/cms/dto/content.dto.js.map +1 -0
  326. package/dist/cms/dto/contentType.dto.d.ts +31 -0
  327. package/dist/cms/dto/contentType.dto.js +93 -0
  328. package/dist/cms/dto/contentType.dto.js.map +1 -0
  329. package/dist/cms/dto/menu.dto.d.ts +37 -0
  330. package/dist/cms/dto/menu.dto.js +116 -0
  331. package/dist/cms/dto/menu.dto.js.map +1 -0
  332. package/dist/cms/entities/content-type.entity.d.ts +9 -0
  333. package/dist/cms/entities/content-type.entity.js +70 -0
  334. package/dist/cms/entities/content-type.entity.js.map +1 -0
  335. package/dist/cms/entities/content.entity.d.ts +17 -0
  336. package/dist/cms/entities/content.entity.js +83 -0
  337. package/dist/cms/entities/content.entity.js.map +1 -0
  338. package/dist/cms/entities/menu.entity.d.ts +18 -0
  339. package/dist/cms/entities/menu.entity.js +102 -0
  340. package/dist/cms/entities/menu.entity.js.map +1 -0
  341. package/dist/cms/index.d.ts +24 -0
  342. package/dist/cms/index.js +41 -0
  343. package/dist/cms/index.js.map +1 -0
  344. package/dist/cms/repositories/content-type.repository.d.ts +7 -0
  345. package/dist/cms/repositories/content-type.repository.js +36 -0
  346. package/dist/cms/repositories/content-type.repository.js.map +1 -0
  347. package/dist/cms/repositories/content.repository.d.ts +8 -0
  348. package/dist/cms/repositories/content.repository.js +44 -0
  349. package/dist/cms/repositories/content.repository.js.map +1 -0
  350. package/dist/cms/repositories/menu.repository.d.ts +7 -0
  351. package/dist/cms/repositories/menu.repository.js +36 -0
  352. package/dist/cms/repositories/menu.repository.js.map +1 -0
  353. package/dist/cms/services/content-type.service.d.ts +9 -0
  354. package/dist/cms/services/content-type.service.js +49 -0
  355. package/dist/cms/services/content-type.service.js.map +1 -0
  356. package/dist/cms/services/content.service.d.ts +17 -0
  357. package/dist/cms/services/content.service.js +123 -0
  358. package/dist/cms/services/content.service.js.map +1 -0
  359. package/dist/cms/services/menu.service.d.ts +16 -0
  360. package/dist/cms/services/menu.service.js +92 -0
  361. package/dist/cms/services/menu.service.js.map +1 -0
  362. package/dist/cms/types/content.d.ts +7 -0
  363. package/dist/cms/types/content.js +5 -0
  364. package/dist/cms/types/content.js.map +1 -0
  365. package/dist/cms/types/menu-types.d.ts +28 -0
  366. package/dist/cms/types/menu-types.js +3 -0
  367. package/dist/cms/types/menu-types.js.map +1 -0
  368. package/dist/cms/types/menu.d.ts +27 -0
  369. package/dist/cms/types/menu.js +3 -0
  370. package/dist/cms/types/menu.js.map +1 -0
  371. package/dist/cms/utilities/field-validation.utils.d.ts +1 -0
  372. package/dist/cms/utilities/field-validation.utils.js +6 -0
  373. package/dist/cms/utilities/field-validation.utils.js.map +1 -0
  374. package/dist/cms/utilities/verifyTree.d.ts +2 -0
  375. package/dist/cms/utilities/verifyTree.js +32 -0
  376. package/dist/cms/utilities/verifyTree.js.map +1 -0
  377. package/dist/cms/validators/validate-required-fields.validator.d.ts +7 -0
  378. package/dist/cms/validators/validate-required-fields.validator.js +55 -0
  379. package/dist/cms/validators/validate-required-fields.validator.js.map +1 -0
  380. package/dist/cms/validators/validate-unique-names.validator.d.ts +6 -0
  381. package/dist/cms/validators/validate-unique-names.validator.js +24 -0
  382. package/dist/cms/validators/validate-unique-names.validator.js.map +1 -0
  383. package/dist/config/csrf.d.ts +1 -0
  384. package/dist/config/csrf.js +17 -0
  385. package/dist/config/csrf.js.map +1 -0
  386. package/dist/config/i18n/en/messages.json +21 -0
  387. package/dist/config/i18n/fr/messages.json +20 -0
  388. package/dist/config/index.d.ts +2 -0
  389. package/dist/config/index.js +210 -0
  390. package/dist/config/index.js.map +1 -0
  391. package/dist/config/types.d.ts +138 -0
  392. package/dist/config/types.js +3 -0
  393. package/dist/config/types.js.map +1 -0
  394. package/dist/database/decorators/datetime-column.decorator.d.ts +4 -0
  395. package/dist/database/decorators/datetime-column.decorator.js +22 -0
  396. package/dist/database/decorators/datetime-column.decorator.js.map +1 -0
  397. package/dist/database/decorators/enum-column.decorator.d.ts +4 -0
  398. package/dist/database/decorators/enum-column.decorator.js +25 -0
  399. package/dist/database/decorators/enum-column.decorator.js.map +1 -0
  400. package/dist/database/decorators/json-column.decorator.d.ts +4 -0
  401. package/dist/database/decorators/json-column.decorator.js +21 -0
  402. package/dist/database/decorators/json-column.decorator.js.map +1 -0
  403. package/dist/database/entities/base.entity.d.ts +11 -0
  404. package/dist/database/entities/base.entity.js +73 -0
  405. package/dist/database/entities/base.entity.js.map +1 -0
  406. package/dist/database/index.d.ts +5 -0
  407. package/dist/database/index.js +22 -0
  408. package/dist/database/index.js.map +1 -0
  409. package/dist/database/typeorm-config.service.d.ts +4 -0
  410. package/dist/database/typeorm-config.service.js +59 -0
  411. package/dist/database/typeorm-config.service.js.map +1 -0
  412. package/dist/extension/cleanup.service.d.ts +16 -0
  413. package/dist/extension/cleanup.service.js +79 -0
  414. package/dist/extension/cleanup.service.js.map +1 -0
  415. package/dist/extension/extension.module.d.ts +9 -0
  416. package/dist/extension/extension.module.js +44 -0
  417. package/dist/extension/extension.module.js.map +1 -0
  418. package/dist/extension/index.d.ts +3 -0
  419. package/dist/extension/index.js +20 -0
  420. package/dist/extension/index.js.map +1 -0
  421. package/dist/extension/types.d.ts +13 -0
  422. package/dist/extension/types.js +3 -0
  423. package/dist/extension/types.js.map +1 -0
  424. package/dist/extensions/channels/console/i18n/en/label.json +21 -0
  425. package/dist/extensions/channels/console/i18n/en/title.json +3 -0
  426. package/dist/extensions/channels/console/i18n/fr/label.json +21 -0
  427. package/dist/extensions/channels/console/i18n/fr/title.json +3 -0
  428. package/dist/extensions/channels/console/index.channel.d.ts +16 -0
  429. package/dist/extensions/channels/console/index.channel.js +50 -0
  430. package/dist/extensions/channels/console/index.channel.js.map +1 -0
  431. package/dist/extensions/channels/console/package.json +7 -0
  432. package/dist/extensions/channels/console/settings.d.ts +56 -0
  433. package/dist/extensions/channels/console/settings.js +71 -0
  434. package/dist/extensions/channels/console/settings.js.map +1 -0
  435. package/dist/extensions/channels/web/__test__/data.mock.d.ts +7 -0
  436. package/dist/extensions/channels/web/__test__/data.mock.js +135 -0
  437. package/dist/extensions/channels/web/__test__/data.mock.js.map +1 -0
  438. package/dist/extensions/channels/web/__test__/events.mock.d.ts +3 -0
  439. package/dist/extensions/channels/web/__test__/events.mock.js +151 -0
  440. package/dist/extensions/channels/web/__test__/events.mock.js.map +1 -0
  441. package/dist/extensions/channels/web/base-web-channel.d.ts +75 -0
  442. package/dist/extensions/channels/web/base-web-channel.js +958 -0
  443. package/dist/extensions/channels/web/base-web-channel.js.map +1 -0
  444. package/dist/extensions/channels/web/i18n/en/label.json +21 -0
  445. package/dist/extensions/channels/web/i18n/en/title.json +3 -0
  446. package/dist/extensions/channels/web/i18n/fr/label.json +21 -0
  447. package/dist/extensions/channels/web/i18n/fr/title.json +3 -0
  448. package/dist/extensions/channels/web/index.channel.d.ts +16 -0
  449. package/dist/extensions/channels/web/index.channel.js +50 -0
  450. package/dist/extensions/channels/web/index.channel.js.map +1 -0
  451. package/dist/extensions/channels/web/package.json +7 -0
  452. package/dist/extensions/channels/web/settings.d.ts +68 -0
  453. package/dist/extensions/channels/web/settings.js +85 -0
  454. package/dist/extensions/channels/web/settings.js.map +1 -0
  455. package/dist/extensions/channels/web/types.d.ts +151 -0
  456. package/dist/extensions/channels/web/types.js +30 -0
  457. package/dist/extensions/channels/web/types.js.map +1 -0
  458. package/dist/extensions/channels/web/wrapper.d.ts +63 -0
  459. package/dist/extensions/channels/web/wrapper.js +167 -0
  460. package/dist/extensions/channels/web/wrapper.js.map +1 -0
  461. package/dist/extensions/helpers/llm-nlu/i18n/en/help.json +5 -0
  462. package/dist/extensions/helpers/llm-nlu/i18n/en/label.json +5 -0
  463. package/dist/extensions/helpers/llm-nlu/i18n/en/title.json +3 -0
  464. package/dist/extensions/helpers/llm-nlu/i18n/fr/help.json +5 -0
  465. package/dist/extensions/helpers/llm-nlu/i18n/fr/label.json +5 -0
  466. package/dist/extensions/helpers/llm-nlu/i18n/fr/title.json +3 -0
  467. package/dist/extensions/helpers/llm-nlu/index.helper.d.ts +21 -0
  468. package/dist/extensions/helpers/llm-nlu/index.helper.js +138 -0
  469. package/dist/extensions/helpers/llm-nlu/index.helper.js.map +1 -0
  470. package/dist/extensions/helpers/llm-nlu/package.json +8 -0
  471. package/dist/extensions/helpers/llm-nlu/settings.d.ts +20 -0
  472. package/dist/extensions/helpers/llm-nlu/settings.js +39 -0
  473. package/dist/extensions/helpers/llm-nlu/settings.js.map +1 -0
  474. package/dist/extensions/helpers/local-storage/index.helper.d.ts +18 -0
  475. package/dist/extensions/helpers/local-storage/index.helper.js +115 -0
  476. package/dist/extensions/helpers/local-storage/index.helper.js.map +1 -0
  477. package/dist/extensions/helpers/local-storage/package.json +8 -0
  478. package/dist/extensions/helpers/local-storage/settings.d.ts +4 -0
  479. package/dist/extensions/helpers/local-storage/settings.js +7 -0
  480. package/dist/extensions/helpers/local-storage/settings.js.map +1 -0
  481. package/dist/extensions/index.d.ts +11 -0
  482. package/dist/extensions/index.js +28 -0
  483. package/dist/extensions/index.js.map +1 -0
  484. package/dist/extra/index.d.ts +2 -0
  485. package/dist/extra/index.js +4 -0
  486. package/dist/extra/index.js.map +1 -0
  487. package/dist/helper/helper.controller.d.ts +9 -0
  488. package/dist/helper/helper.controller.js +45 -0
  489. package/dist/helper/helper.controller.js.map +1 -0
  490. package/dist/helper/helper.module.d.ts +2 -0
  491. package/dist/helper/helper.module.js +31 -0
  492. package/dist/helper/helper.module.js.map +1 -0
  493. package/dist/helper/helper.service.d.ts +18 -0
  494. package/dist/helper/helper.service.js +96 -0
  495. package/dist/helper/helper.service.js.map +1 -0
  496. package/dist/helper/index.d.ts +9 -0
  497. package/dist/helper/index.js +26 -0
  498. package/dist/helper/index.js.map +1 -0
  499. package/dist/helper/lib/__test__/settings.d.ts +10 -0
  500. package/dist/helper/lib/__test__/settings.js +15 -0
  501. package/dist/helper/lib/__test__/settings.js.map +1 -0
  502. package/dist/helper/lib/base-flow-escape-helper.d.ts +13 -0
  503. package/dist/helper/lib/base-flow-escape-helper.js +15 -0
  504. package/dist/helper/lib/base-flow-escape-helper.js.map +1 -0
  505. package/dist/helper/lib/base-helper.d.ts +19 -0
  506. package/dist/helper/lib/base-helper.js +34 -0
  507. package/dist/helper/lib/base-helper.js.map +1 -0
  508. package/dist/helper/lib/base-llm-helper.d.ts +13 -0
  509. package/dist/helper/lib/base-llm-helper.js +16 -0
  510. package/dist/helper/lib/base-llm-helper.js.map +1 -0
  511. package/dist/helper/lib/base-nlp-helper.d.ts +28 -0
  512. package/dist/helper/lib/base-nlp-helper.js +168 -0
  513. package/dist/helper/lib/base-nlp-helper.js.map +1 -0
  514. package/dist/helper/lib/base-storage-helper.d.ts +16 -0
  515. package/dist/helper/lib/base-storage-helper.js +16 -0
  516. package/dist/helper/lib/base-storage-helper.js.map +1 -0
  517. package/dist/helper/types.d.ts +87 -0
  518. package/dist/helper/types.js +33 -0
  519. package/dist/helper/types.js.map +1 -0
  520. package/dist/i18n/controllers/i18n.controller.d.ts +10 -0
  521. package/dist/i18n/controllers/i18n.controller.js +46 -0
  522. package/dist/i18n/controllers/i18n.controller.js.map +1 -0
  523. package/dist/i18n/controllers/language.controller.d.ts +18 -0
  524. package/dist/i18n/controllers/language.controller.js +111 -0
  525. package/dist/i18n/controllers/language.controller.js.map +1 -0
  526. package/dist/i18n/controllers/translation.controller.d.ts +20 -0
  527. package/dist/i18n/controllers/translation.controller.js +128 -0
  528. package/dist/i18n/controllers/translation.controller.js.map +1 -0
  529. package/dist/i18n/dto/language.dto.d.ts +27 -0
  530. package/dist/i18n/dto/language.dto.js +75 -0
  531. package/dist/i18n/dto/language.dto.js.map +1 -0
  532. package/dist/i18n/dto/translation.dto.d.ts +23 -0
  533. package/dist/i18n/dto/translation.dto.js +56 -0
  534. package/dist/i18n/dto/translation.dto.js.map +1 -0
  535. package/dist/i18n/entities/language.entity.d.ts +9 -0
  536. package/dist/i18n/entities/language.entity.js +73 -0
  537. package/dist/i18n/entities/language.entity.js.map +1 -0
  538. package/dist/i18n/entities/translation.entity.d.ts +5 -0
  539. package/dist/i18n/entities/translation.entity.js +31 -0
  540. package/dist/i18n/entities/translation.entity.js.map +1 -0
  541. package/dist/i18n/i18n.module.d.ts +9 -0
  542. package/dist/i18n/i18n.module.js +77 -0
  543. package/dist/i18n/i18n.module.js.map +1 -0
  544. package/dist/i18n/index.d.ts +17 -0
  545. package/dist/i18n/index.js +34 -0
  546. package/dist/i18n/index.js.map +1 -0
  547. package/dist/i18n/repositories/language.repository.d.ts +7 -0
  548. package/dist/i18n/repositories/language.repository.js +36 -0
  549. package/dist/i18n/repositories/language.repository.js.map +1 -0
  550. package/dist/i18n/repositories/translation.repository.d.ts +7 -0
  551. package/dist/i18n/repositories/translation.repository.js +36 -0
  552. package/dist/i18n/repositories/translation.repository.js.map +1 -0
  553. package/dist/i18n/seeds/language.seed-model.d.ts +2 -0
  554. package/dist/i18n/seeds/language.seed-model.js +17 -0
  555. package/dist/i18n/seeds/language.seed-model.js.map +1 -0
  556. package/dist/i18n/seeds/language.seed.d.ts +10 -0
  557. package/dist/i18n/seeds/language.seed.js +41 -0
  558. package/dist/i18n/seeds/language.seed.js.map +1 -0
  559. package/dist/i18n/seeds/translation.seed-model.d.ts +2 -0
  560. package/dist/i18n/seeds/translation.seed-model.js +13 -0
  561. package/dist/i18n/seeds/translation.seed-model.js.map +1 -0
  562. package/dist/i18n/seeds/translation.seed.d.ts +7 -0
  563. package/dist/i18n/seeds/translation.seed.js +26 -0
  564. package/dist/i18n/seeds/translation.seed.js.map +1 -0
  565. package/dist/i18n/services/i18n.service.d.ts +8 -0
  566. package/dist/i18n/services/i18n.service.js +52 -0
  567. package/dist/i18n/services/i18n.service.js.map +1 -0
  568. package/dist/i18n/services/language.service.d.ts +15 -0
  569. package/dist/i18n/services/language.service.js +83 -0
  570. package/dist/i18n/services/language.service.js.map +1 -0
  571. package/dist/i18n/services/translation.service.d.ts +23 -0
  572. package/dist/i18n/services/translation.service.js +162 -0
  573. package/dist/i18n/services/translation.service.js.map +1 -0
  574. package/dist/index.d.ts +30 -0
  575. package/dist/index.js +47 -0
  576. package/dist/index.js.map +1 -0
  577. package/dist/logger/index.d.ts +2 -0
  578. package/dist/logger/index.js +19 -0
  579. package/dist/logger/index.js.map +1 -0
  580. package/dist/logger/logger.module.d.ts +2 -0
  581. package/dist/logger/logger.module.js +22 -0
  582. package/dist/logger/logger.module.js.map +1 -0
  583. package/dist/logger/logger.service.d.ts +12 -0
  584. package/dist/logger/logger.service.js +59 -0
  585. package/dist/logger/logger.service.js.map +1 -0
  586. package/dist/mailer/index.d.ts +2 -0
  587. package/dist/mailer/index.js +19 -0
  588. package/dist/mailer/index.js.map +1 -0
  589. package/dist/mailer/mailer.module.d.ts +2 -0
  590. package/dist/mailer/mailer.module.js +70 -0
  591. package/dist/mailer/mailer.module.js.map +1 -0
  592. package/dist/mailer/mailer.service.d.ts +3 -0
  593. package/dist/mailer/mailer.service.js +8 -0
  594. package/dist/mailer/mailer.service.js.map +1 -0
  595. package/dist/mailer/mjml-adapter.class.d.ts +4 -0
  596. package/dist/mailer/mjml-adapter.class.js +67 -0
  597. package/dist/mailer/mjml-adapter.class.js.map +1 -0
  598. package/dist/main.d.ts +1 -0
  599. package/dist/main.js +7 -0
  600. package/dist/main.js.map +1 -0
  601. package/dist/migration/index.d.ts +5 -0
  602. package/dist/migration/index.js +22 -0
  603. package/dist/migration/index.js.map +1 -0
  604. package/dist/migration/migration.command.d.ts +10 -0
  605. package/dist/migration/migration.command.js +73 -0
  606. package/dist/migration/migration.command.js.map +1 -0
  607. package/dist/migration/migration.entity.d.ts +8 -0
  608. package/dist/migration/migration.entity.js +45 -0
  609. package/dist/migration/migration.entity.js.map +1 -0
  610. package/dist/migration/migration.module.d.ts +2 -0
  611. package/dist/migration/migration.module.js +41 -0
  612. package/dist/migration/migration.module.js.map +1 -0
  613. package/dist/migration/migration.service.d.ts +44 -0
  614. package/dist/migration/migration.service.js +406 -0
  615. package/dist/migration/migration.service.js.map +1 -0
  616. package/dist/migration/types.d.ts +26 -0
  617. package/dist/migration/types.js +9 -0
  618. package/dist/migration/types.js.map +1 -0
  619. package/dist/nlp/controllers/nlp-entity.controller.d.ts +19 -0
  620. package/dist/nlp/controllers/nlp-entity.controller.js +160 -0
  621. package/dist/nlp/controllers/nlp-entity.controller.js.map +1 -0
  622. package/dist/nlp/controllers/nlp-sample.controller.d.ts +39 -0
  623. package/dist/nlp/controllers/nlp-sample.controller.js +289 -0
  624. package/dist/nlp/controllers/nlp-sample.controller.js.map +1 -0
  625. package/dist/nlp/controllers/nlp-value.controller.d.ts +21 -0
  626. package/dist/nlp/controllers/nlp-value.controller.js +141 -0
  627. package/dist/nlp/controllers/nlp-value.controller.js.map +1 -0
  628. package/dist/nlp/dto/nlp-entity.dto.d.ts +37 -0
  629. package/dist/nlp/dto/nlp-entity.dto.js +141 -0
  630. package/dist/nlp/dto/nlp-entity.dto.js.map +1 -0
  631. package/dist/nlp/dto/nlp-sample-entity.dto.d.ts +32 -0
  632. package/dist/nlp/dto/nlp-sample-entity.dto.js +110 -0
  633. package/dist/nlp/dto/nlp-sample-entity.dto.js.map +1 -0
  634. package/dist/nlp/dto/nlp-sample.dto.d.ts +43 -0
  635. package/dist/nlp/dto/nlp-sample.dto.js +160 -0
  636. package/dist/nlp/dto/nlp-sample.dto.js.map +1 -0
  637. package/dist/nlp/dto/nlp-value.dto.d.ts +46 -0
  638. package/dist/nlp/dto/nlp-value.dto.js +166 -0
  639. package/dist/nlp/dto/nlp-value.dto.js.map +1 -0
  640. package/dist/nlp/entities/nlp-entity.entity.d.ts +16 -0
  641. package/dist/nlp/entities/nlp-entity.entity.js +66 -0
  642. package/dist/nlp/entities/nlp-entity.entity.js.map +1 -0
  643. package/dist/nlp/entities/nlp-sample-entity.entity.d.ts +14 -0
  644. package/dist/nlp/entities/nlp-sample-entity.entity.js +73 -0
  645. package/dist/nlp/entities/nlp-sample-entity.entity.js.map +1 -0
  646. package/dist/nlp/entities/nlp-sample.entity.d.ts +12 -0
  647. package/dist/nlp/entities/nlp-sample.entity.js +58 -0
  648. package/dist/nlp/entities/nlp-sample.entity.js.map +1 -0
  649. package/dist/nlp/entities/nlp-value.entity.d.ts +23 -0
  650. package/dist/nlp/entities/nlp-value.entity.js +83 -0
  651. package/dist/nlp/entities/nlp-value.entity.js.map +1 -0
  652. package/dist/nlp/index.d.ts +26 -0
  653. package/dist/nlp/index.js +43 -0
  654. package/dist/nlp/index.js.map +1 -0
  655. package/dist/nlp/nlp.module.d.ts +2 -0
  656. package/dist/nlp/nlp.module.js +64 -0
  657. package/dist/nlp/nlp.module.js.map +1 -0
  658. package/dist/nlp/repositories/nlp-entity.repository.d.ts +7 -0
  659. package/dist/nlp/repositories/nlp-entity.repository.js +36 -0
  660. package/dist/nlp/repositories/nlp-entity.repository.js.map +1 -0
  661. package/dist/nlp/repositories/nlp-sample-entity.repository.d.ts +7 -0
  662. package/dist/nlp/repositories/nlp-sample-entity.repository.js +36 -0
  663. package/dist/nlp/repositories/nlp-sample-entity.repository.js.map +1 -0
  664. package/dist/nlp/repositories/nlp-sample.repository.d.ts +24 -0
  665. package/dist/nlp/repositories/nlp-sample.repository.js +123 -0
  666. package/dist/nlp/repositories/nlp-sample.repository.js.map +1 -0
  667. package/dist/nlp/repositories/nlp-value.repository.d.ts +10 -0
  668. package/dist/nlp/repositories/nlp-value.repository.js +93 -0
  669. package/dist/nlp/repositories/nlp-value.repository.js.map +1 -0
  670. package/dist/nlp/seeds/nlp-entity.seed-model.d.ts +2 -0
  671. package/dist/nlp/seeds/nlp-entity.seed-model.js +12 -0
  672. package/dist/nlp/seeds/nlp-entity.seed-model.js.map +1 -0
  673. package/dist/nlp/seeds/nlp-entity.seed.d.ts +7 -0
  674. package/dist/nlp/seeds/nlp-entity.seed.js +26 -0
  675. package/dist/nlp/seeds/nlp-entity.seed.js.map +1 -0
  676. package/dist/nlp/seeds/nlp-value.seed-model.d.ts +2 -0
  677. package/dist/nlp/seeds/nlp-value.seed-model.js +5 -0
  678. package/dist/nlp/seeds/nlp-value.seed-model.js.map +1 -0
  679. package/dist/nlp/seeds/nlp-value.seed.d.ts +10 -0
  680. package/dist/nlp/seeds/nlp-value.seed.js +41 -0
  681. package/dist/nlp/seeds/nlp-value.seed.js.map +1 -0
  682. package/dist/nlp/services/nlp-entity.service.d.ts +24 -0
  683. package/dist/nlp/services/nlp-entity.service.js +120 -0
  684. package/dist/nlp/services/nlp-entity.service.js.map +1 -0
  685. package/dist/nlp/services/nlp-sample-entity.service.d.ts +17 -0
  686. package/dist/nlp/services/nlp-sample-entity.service.js +72 -0
  687. package/dist/nlp/services/nlp-sample-entity.service.js.map +1 -0
  688. package/dist/nlp/services/nlp-sample.service.d.ts +42 -0
  689. package/dist/nlp/services/nlp-sample.service.js +236 -0
  690. package/dist/nlp/services/nlp-sample.service.js.map +1 -0
  691. package/dist/nlp/services/nlp-value.service.d.ts +19 -0
  692. package/dist/nlp/services/nlp-value.service.js +159 -0
  693. package/dist/nlp/services/nlp-value.service.js.map +1 -0
  694. package/dist/nlp/services/nlp.service.d.ts +26 -0
  695. package/dist/nlp/services/nlp.service.js +241 -0
  696. package/dist/nlp/services/nlp.service.js.map +1 -0
  697. package/dist/nlp/types.d.ts +34 -0
  698. package/dist/nlp/types.js +17 -0
  699. package/dist/nlp/types.js.map +1 -0
  700. package/dist/plugins/base-block-plugin.d.ts +16 -0
  701. package/dist/plugins/base-block-plugin.js +47 -0
  702. package/dist/plugins/base-block-plugin.js.map +1 -0
  703. package/dist/plugins/base-event-plugin.d.ts +7 -0
  704. package/dist/plugins/base-event-plugin.js +28 -0
  705. package/dist/plugins/base-event-plugin.js.map +1 -0
  706. package/dist/plugins/base-plugin.service.d.ts +11 -0
  707. package/dist/plugins/base-plugin.service.js +32 -0
  708. package/dist/plugins/base-plugin.service.js.map +1 -0
  709. package/dist/plugins/index.d.ts +7 -0
  710. package/dist/plugins/index.js +24 -0
  711. package/dist/plugins/index.js.map +1 -0
  712. package/dist/plugins/map-types.d.ts +11 -0
  713. package/dist/plugins/map-types.js +10 -0
  714. package/dist/plugins/map-types.js.map +1 -0
  715. package/dist/plugins/plugins.module.d.ts +2 -0
  716. package/dist/plugins/plugins.module.js +39 -0
  717. package/dist/plugins/plugins.module.js.map +1 -0
  718. package/dist/plugins/plugins.service.d.ts +12 -0
  719. package/dist/plugins/plugins.service.js +50 -0
  720. package/dist/plugins/plugins.service.js.map +1 -0
  721. package/dist/plugins/types.d.ts +20 -0
  722. package/dist/plugins/types.js +9 -0
  723. package/dist/plugins/types.js.map +1 -0
  724. package/dist/repl.d.ts +1 -0
  725. package/dist/repl.js +10 -0
  726. package/dist/repl.js.map +1 -0
  727. package/dist/seeder.d.ts +2 -0
  728. package/dist/seeder.js +135 -0
  729. package/dist/seeder.js.map +1 -0
  730. package/dist/setting/controllers/setting.controller.d.ts +11 -0
  731. package/dist/setting/controllers/setting.controller.js +56 -0
  732. package/dist/setting/controllers/setting.controller.js.map +1 -0
  733. package/dist/setting/dto/metadata.dto.d.ts +23 -0
  734. package/dist/setting/dto/metadata.dto.js +54 -0
  735. package/dist/setting/dto/metadata.dto.js.map +1 -0
  736. package/dist/setting/dto/setting.dto.d.ts +38 -0
  737. package/dist/setting/dto/setting.dto.js +155 -0
  738. package/dist/setting/dto/setting.dto.js.map +1 -0
  739. package/dist/setting/entities/metadata.entity.d.ts +5 -0
  740. package/dist/setting/entities/metadata.entity.js +31 -0
  741. package/dist/setting/entities/metadata.entity.js.map +1 -0
  742. package/dist/setting/entities/setting.entity.d.ts +16 -0
  743. package/dist/setting/entities/setting.entity.js +125 -0
  744. package/dist/setting/entities/setting.entity.js.map +1 -0
  745. package/dist/setting/index.d.ts +15 -0
  746. package/dist/setting/index.js +32 -0
  747. package/dist/setting/index.js.map +1 -0
  748. package/dist/setting/repositories/metadata.repository.d.ts +7 -0
  749. package/dist/setting/repositories/metadata.repository.js +36 -0
  750. package/dist/setting/repositories/metadata.repository.js.map +1 -0
  751. package/dist/setting/repositories/setting.repository.d.ts +8 -0
  752. package/dist/setting/repositories/setting.repository.js +43 -0
  753. package/dist/setting/repositories/setting.repository.js.map +1 -0
  754. package/dist/setting/seeds/metadata.seed-model.d.ts +4 -0
  755. package/dist/setting/seeds/metadata.seed-model.js +10 -0
  756. package/dist/setting/seeds/metadata.seed-model.js.map +1 -0
  757. package/dist/setting/seeds/metadata.seed.d.ts +8 -0
  758. package/dist/setting/seeds/metadata.seed.js +32 -0
  759. package/dist/setting/seeds/metadata.seed.js.map +1 -0
  760. package/dist/setting/seeds/setting.seed-model.d.ts +152 -0
  761. package/dist/setting/seeds/setting.seed-model.js +178 -0
  762. package/dist/setting/seeds/setting.seed-model.js.map +1 -0
  763. package/dist/setting/seeds/setting.seed.d.ts +12 -0
  764. package/dist/setting/seeds/setting.seed.js +47 -0
  765. package/dist/setting/seeds/setting.seed.js.map +1 -0
  766. package/dist/setting/services/metadata.service.d.ts +12 -0
  767. package/dist/setting/services/metadata.service.js +46 -0
  768. package/dist/setting/services/metadata.service.js.map +1 -0
  769. package/dist/setting/services/setting.service.d.ts +21 -0
  770. package/dist/setting/services/setting.service.js +112 -0
  771. package/dist/setting/services/setting.service.js.map +1 -0
  772. package/dist/setting/setting.module.d.ts +2 -0
  773. package/dist/setting/setting.module.js +40 -0
  774. package/dist/setting/setting.module.js.map +1 -0
  775. package/dist/setting/types/index.d.ts +93 -0
  776. package/dist/setting/types/index.js +25 -0
  777. package/dist/setting/types/index.js.map +1 -0
  778. package/dist/static/assets/NlpEntity-pMPO8FJm.js +1 -0
  779. package/dist/static/assets/index-CdV7RB70.css +1 -0
  780. package/dist/static/assets/index-DYVFraRG.js +990 -0
  781. package/dist/static/assets/roboto-cyrillic-100-normal-BugLp6Ss.woff +0 -0
  782. package/dist/static/assets/roboto-cyrillic-100-normal-DDeB9qQX.woff2 +0 -0
  783. package/dist/static/assets/roboto-cyrillic-300-normal-BoeCr7ev.woff2 +0 -0
  784. package/dist/static/assets/roboto-cyrillic-300-normal-Cb01H779.woff +0 -0
  785. package/dist/static/assets/roboto-cyrillic-400-normal-C5q4FMUG.woff +0 -0
  786. package/dist/static/assets/roboto-cyrillic-400-normal-DAIM1_dR.woff2 +0 -0
  787. package/dist/static/assets/roboto-cyrillic-500-normal-DhPqGoNQ.woff +0 -0
  788. package/dist/static/assets/roboto-cyrillic-500-normal-hCeO1jFL.woff2 +0 -0
  789. package/dist/static/assets/roboto-cyrillic-700-normal-BiSG5NnW.woff2 +0 -0
  790. package/dist/static/assets/roboto-cyrillic-700-normal-bDW9bgt5.woff +0 -0
  791. package/dist/static/assets/roboto-cyrillic-900-normal-D4rFC7QP.woff2 +0 -0
  792. package/dist/static/assets/roboto-cyrillic-900-normal-M6LHKKZi.woff +0 -0
  793. package/dist/static/assets/roboto-cyrillic-ext-100-normal-BYYVzI3C.woff +0 -0
  794. package/dist/static/assets/roboto-cyrillic-ext-100-normal-eVx91DwW.woff2 +0 -0
  795. package/dist/static/assets/roboto-cyrillic-ext-300-normal-CUPJdUZp.woff2 +0 -0
  796. package/dist/static/assets/roboto-cyrillic-ext-300-normal-D2-2MTar.woff +0 -0
  797. package/dist/static/assets/roboto-cyrillic-ext-400-normal-5IDvadIC.woff +0 -0
  798. package/dist/static/assets/roboto-cyrillic-ext-400-normal-DzMWdK87.woff2 +0 -0
  799. package/dist/static/assets/roboto-cyrillic-ext-500-normal-B7rQpwPu.woff2 +0 -0
  800. package/dist/static/assets/roboto-cyrillic-ext-500-normal-aAFKCR76.woff +0 -0
  801. package/dist/static/assets/roboto-cyrillic-ext-700-normal-Ct5_lukf.woff +0 -0
  802. package/dist/static/assets/roboto-cyrillic-ext-700-normal-UFn0vR9r.woff2 +0 -0
  803. package/dist/static/assets/roboto-cyrillic-ext-900-normal-Bfn4Lcxa.woff2 +0 -0
  804. package/dist/static/assets/roboto-cyrillic-ext-900-normal-ntW-VpC0.woff +0 -0
  805. package/dist/static/assets/roboto-greek-100-normal-BQXKmI1c.woff2 +0 -0
  806. package/dist/static/assets/roboto-greek-100-normal-CiRHeoKM.woff +0 -0
  807. package/dist/static/assets/roboto-greek-300-normal-BMtCIBFp.woff +0 -0
  808. package/dist/static/assets/roboto-greek-300-normal-Cnub06j7.woff2 +0 -0
  809. package/dist/static/assets/roboto-greek-400-normal-DwVopRQH.woff +0 -0
  810. package/dist/static/assets/roboto-greek-400-normal-jFM2czAU.woff2 +0 -0
  811. package/dist/static/assets/roboto-greek-500-normal-B0wzjI_J.woff +0 -0
  812. package/dist/static/assets/roboto-greek-500-normal-BJMS0heP.woff2 +0 -0
  813. package/dist/static/assets/roboto-greek-700-normal-BcGn9doz.woff2 +0 -0
  814. package/dist/static/assets/roboto-greek-700-normal-Bi9oTykh.woff +0 -0
  815. package/dist/static/assets/roboto-greek-900-normal-Awt4eUGS.woff +0 -0
  816. package/dist/static/assets/roboto-greek-900-normal-BCuSXpbA.woff2 +0 -0
  817. package/dist/static/assets/roboto-latin-100-normal-DlpfXJCk.woff2 +0 -0
  818. package/dist/static/assets/roboto-latin-100-normal-yik7JM_q.woff +0 -0
  819. package/dist/static/assets/roboto-latin-300-normal--FIRE8Jd.woff +0 -0
  820. package/dist/static/assets/roboto-latin-300-normal-CztWkFGs.woff2 +0 -0
  821. package/dist/static/assets/roboto-latin-400-normal-BX2H0A0_.woff +0 -0
  822. package/dist/static/assets/roboto-latin-400-normal-CNwBRw8h.woff2 +0 -0
  823. package/dist/static/assets/roboto-latin-500-normal-CkrA1NAy.woff2 +0 -0
  824. package/dist/static/assets/roboto-latin-500-normal-CoDN7ZW2.woff +0 -0
  825. package/dist/static/assets/roboto-latin-700-normal-CXeAXeti.woff2 +0 -0
  826. package/dist/static/assets/roboto-latin-700-normal-DxC3k-1u.woff +0 -0
  827. package/dist/static/assets/roboto-latin-900-normal-93zEKV3C.woff2 +0 -0
  828. package/dist/static/assets/roboto-latin-900-normal-yeV1tgUt.woff +0 -0
  829. package/dist/static/assets/roboto-latin-ext-100-normal-1LaByAVy.woff2 +0 -0
  830. package/dist/static/assets/roboto-latin-ext-100-normal-DLDB2RRU.woff +0 -0
  831. package/dist/static/assets/roboto-latin-ext-300-normal-9Myisv2Z.woff +0 -0
  832. package/dist/static/assets/roboto-latin-ext-300-normal-BOz0oSmX.woff2 +0 -0
  833. package/dist/static/assets/roboto-latin-ext-400-normal-BG57dRWO.woff +0 -0
  834. package/dist/static/assets/roboto-latin-ext-400-normal-ZYmyxeOy.woff2 +0 -0
  835. package/dist/static/assets/roboto-latin-ext-500-normal-C_ARlJGk.woff2 +0 -0
  836. package/dist/static/assets/roboto-latin-ext-500-normal-EUd9mLnZ.woff +0 -0
  837. package/dist/static/assets/roboto-latin-ext-700-normal-70GS1MYH.woff2 +0 -0
  838. package/dist/static/assets/roboto-latin-ext-700-normal-B3Q5yJJO.woff +0 -0
  839. package/dist/static/assets/roboto-latin-ext-900-normal-BxNYdyfz.woff2 +0 -0
  840. package/dist/static/assets/roboto-latin-ext-900-normal-miBG-_G3.woff +0 -0
  841. package/dist/static/assets/roboto-math-100-normal-DesmuRQJ.woff2 +0 -0
  842. package/dist/static/assets/roboto-math-100-normal-Dt2kQgXZ.woff +0 -0
  843. package/dist/static/assets/roboto-math-300-normal-9fozW1Ii.woff +0 -0
  844. package/dist/static/assets/roboto-math-300-normal-BMxwzQmU.woff2 +0 -0
  845. package/dist/static/assets/roboto-math-400-normal-B3wgz80t.woff2 +0 -0
  846. package/dist/static/assets/roboto-math-400-normal-BRMeFL5Z.woff +0 -0
  847. package/dist/static/assets/roboto-math-500-normal-CFNaIMFC.woff2 +0 -0
  848. package/dist/static/assets/roboto-math-500-normal-nGmytUgK.woff +0 -0
  849. package/dist/static/assets/roboto-math-700-normal-De_Mfcv-.woff +0 -0
  850. package/dist/static/assets/roboto-math-700-normal-VUAI6Bz2.woff2 +0 -0
  851. package/dist/static/assets/roboto-math-900-normal-Bse64gO2.woff +0 -0
  852. package/dist/static/assets/roboto-math-900-normal-DVW2yWT0.woff2 +0 -0
  853. package/dist/static/assets/roboto-symbols-100-normal-B-PMwc8r.woff2 +0 -0
  854. package/dist/static/assets/roboto-symbols-100-normal-DWeMaoIY.woff +0 -0
  855. package/dist/static/assets/roboto-symbols-300-normal-BtHl5mYl.woff2 +0 -0
  856. package/dist/static/assets/roboto-symbols-300-normal-zmF1mPr_.woff +0 -0
  857. package/dist/static/assets/roboto-symbols-400-normal-B2LMqLB2.woff +0 -0
  858. package/dist/static/assets/roboto-symbols-400-normal-fF1SLJBj.woff2 +0 -0
  859. package/dist/static/assets/roboto-symbols-500-normal-B3xPS0M7.woff +0 -0
  860. package/dist/static/assets/roboto-symbols-500-normal-BXFTxrNR.woff2 +0 -0
  861. package/dist/static/assets/roboto-symbols-700-normal-BT-mnhPp.woff +0 -0
  862. package/dist/static/assets/roboto-symbols-700-normal-rJi6RjIy.woff2 +0 -0
  863. package/dist/static/assets/roboto-symbols-900-normal-CRdpsJ80.woff2 +0 -0
  864. package/dist/static/assets/roboto-symbols-900-normal-CVY_2yS0.woff +0 -0
  865. package/dist/static/assets/roboto-vietnamese-100-normal-CZkTm67L.woff +0 -0
  866. package/dist/static/assets/roboto-vietnamese-100-normal-DCm82-f1.woff2 +0 -0
  867. package/dist/static/assets/roboto-vietnamese-300-normal-CBwYb71Q.woff +0 -0
  868. package/dist/static/assets/roboto-vietnamese-300-normal-CNeuLW5X.woff2 +0 -0
  869. package/dist/static/assets/roboto-vietnamese-400-normal-BYP5tVVv.woff +0 -0
  870. package/dist/static/assets/roboto-vietnamese-400-normal-CDDxGrUb.woff2 +0 -0
  871. package/dist/static/assets/roboto-vietnamese-500-normal-CUzdRVXb.woff +0 -0
  872. package/dist/static/assets/roboto-vietnamese-500-normal-HYpufUYk.woff2 +0 -0
  873. package/dist/static/assets/roboto-vietnamese-700-normal-BhieYfot.woff +0 -0
  874. package/dist/static/assets/roboto-vietnamese-700-normal-iKxYNAzq.woff2 +0 -0
  875. package/dist/static/assets/roboto-vietnamese-900-normal-D60pXI5H.woff2 +0 -0
  876. package/dist/static/assets/roboto-vietnamese-900-normal-JmgrehrB.woff +0 -0
  877. package/dist/static/images/favicon.ico +0 -0
  878. package/dist/static/index.html +14 -0
  879. package/dist/static/locales/en/chatbot_settings.json +24 -0
  880. package/dist/static/locales/en/contact.json +18 -0
  881. package/dist/static/locales/en/nlp_settings.json +16 -0
  882. package/dist/static/locales/en/translation.json +677 -0
  883. package/dist/static/locales/fr/chatbot_settings.json +24 -0
  884. package/dist/static/locales/fr/contact.json +18 -0
  885. package/dist/static/locales/fr/nlp_settings.json +16 -0
  886. package/dist/static/locales/fr/translation.json +678 -0
  887. package/dist/swagger.d.ts +2 -0
  888. package/dist/swagger.js +14 -0
  889. package/dist/swagger.js.map +1 -0
  890. package/dist/templates/account_confirmation.mjml +40 -0
  891. package/dist/templates/invitation.mjml +42 -0
  892. package/dist/templates/password_reset.mjml +39 -0
  893. package/dist/tsconfig.build.tsbuildinfo +1 -0
  894. package/dist/types/event-emitter.d.ts +381 -0
  895. package/dist/types/express-session.d.ts +30 -0
  896. package/dist/types/socket.d.ts +15 -0
  897. package/dist/user/controllers/auth.controller.d.ts +27 -0
  898. package/dist/user/controllers/auth.controller.js +151 -0
  899. package/dist/user/controllers/auth.controller.js.map +1 -0
  900. package/dist/user/controllers/model.controller.d.ts +10 -0
  901. package/dist/user/controllers/model.controller.js +47 -0
  902. package/dist/user/controllers/model.controller.js.map +1 -0
  903. package/dist/user/controllers/permission.controller.d.ts +16 -0
  904. package/dist/user/controllers/permission.controller.js +89 -0
  905. package/dist/user/controllers/permission.controller.js.map +1 -0
  906. package/dist/user/controllers/role.controller.d.ts +20 -0
  907. package/dist/user/controllers/role.controller.js +137 -0
  908. package/dist/user/controllers/role.controller.js.map +1 -0
  909. package/dist/user/controllers/user.controller.d.ts +55 -0
  910. package/dist/user/controllers/user.controller.js +362 -0
  911. package/dist/user/controllers/user.controller.js.map +1 -0
  912. package/dist/user/dto/invitation.dto.d.ts +24 -0
  913. package/dist/user/dto/invitation.dto.js +71 -0
  914. package/dist/user/dto/invitation.dto.js.map +1 -0
  915. package/dist/user/dto/model.dto.d.ts +28 -0
  916. package/dist/user/dto/model.dto.js +91 -0
  917. package/dist/user/dto/model.dto.js.map +1 -0
  918. package/dist/user/dto/permission.dto.d.ts +30 -0
  919. package/dist/user/dto/permission.dto.js +97 -0
  920. package/dist/user/dto/permission.dto.js.map +1 -0
  921. package/dist/user/dto/role.dto.d.ts +32 -0
  922. package/dist/user/dto/role.dto.js +89 -0
  923. package/dist/user/dto/role.dto.js.map +1 -0
  924. package/dist/user/dto/user.dto.d.ts +66 -0
  925. package/dist/user/dto/user.dto.js +253 -0
  926. package/dist/user/dto/user.dto.js.map +1 -0
  927. package/dist/user/entities/invitation.entity.d.ts +10 -0
  928. package/dist/user/entities/invitation.entity.js +66 -0
  929. package/dist/user/entities/invitation.entity.js.map +1 -0
  930. package/dist/user/entities/model.entity.d.ts +10 -0
  931. package/dist/user/entities/model.entity.js +47 -0
  932. package/dist/user/entities/model.entity.js.map +1 -0
  933. package/dist/user/entities/permission.entity.d.ts +13 -0
  934. package/dist/user/entities/permission.entity.js +59 -0
  935. package/dist/user/entities/permission.entity.js.map +1 -0
  936. package/dist/user/entities/role.entity.d.ts +10 -0
  937. package/dist/user/entities/role.entity.js +42 -0
  938. package/dist/user/entities/role.entity.js.map +1 -0
  939. package/dist/user/entities/session.entity.d.ts +7 -0
  940. package/dist/user/entities/session.entity.js +37 -0
  941. package/dist/user/entities/session.entity.js.map +1 -0
  942. package/dist/user/entities/user.entity.d.ts +26 -0
  943. package/dist/user/entities/user.entity.js +148 -0
  944. package/dist/user/entities/user.entity.js.map +1 -0
  945. package/dist/user/guards/ability.guard.d.ts +9 -0
  946. package/dist/user/guards/ability.guard.js +76 -0
  947. package/dist/user/guards/ability.guard.js.map +1 -0
  948. package/dist/user/guards/local-auth.guard.d.ts +6 -0
  949. package/dist/user/guards/local-auth.guard.js +23 -0
  950. package/dist/user/guards/local-auth.guard.js.map +1 -0
  951. package/dist/user/index.d.ts +49 -0
  952. package/dist/user/index.js +66 -0
  953. package/dist/user/index.js.map +1 -0
  954. package/dist/user/passport/auth-strategy/local.strategy.d.ts +11 -0
  955. package/dist/user/passport/auth-strategy/local.strategy.js +37 -0
  956. package/dist/user/passport/auth-strategy/local.strategy.js.map +1 -0
  957. package/dist/user/passport/session.serializer.d.ts +10 -0
  958. package/dist/user/passport/session.serializer.js +38 -0
  959. package/dist/user/passport/session.serializer.js.map +1 -0
  960. package/dist/user/repositories/invitation.repository.d.ts +7 -0
  961. package/dist/user/repositories/invitation.repository.js +36 -0
  962. package/dist/user/repositories/invitation.repository.js.map +1 -0
  963. package/dist/user/repositories/model.repository.d.ts +7 -0
  964. package/dist/user/repositories/model.repository.js +33 -0
  965. package/dist/user/repositories/model.repository.js.map +1 -0
  966. package/dist/user/repositories/permission.repository.d.ts +7 -0
  967. package/dist/user/repositories/permission.repository.js +36 -0
  968. package/dist/user/repositories/permission.repository.js.map +1 -0
  969. package/dist/user/repositories/role.repository.d.ts +7 -0
  970. package/dist/user/repositories/role.repository.js +36 -0
  971. package/dist/user/repositories/role.repository.js.map +1 -0
  972. package/dist/user/repositories/user.repository.d.ts +8 -0
  973. package/dist/user/repositories/user.repository.js +41 -0
  974. package/dist/user/repositories/user.repository.js.map +1 -0
  975. package/dist/user/seeds/model.seed-model.d.ts +2 -0
  976. package/dist/user/seeds/model.seed-model.js +126 -0
  977. package/dist/user/seeds/model.seed-model.js.map +1 -0
  978. package/dist/user/seeds/model.seed.d.ts +8 -0
  979. package/dist/user/seeds/model.seed.js +27 -0
  980. package/dist/user/seeds/model.seed.js.map +1 -0
  981. package/dist/user/seeds/permission.seed-model.d.ts +2 -0
  982. package/dist/user/seeds/permission.seed-model.js +30 -0
  983. package/dist/user/seeds/permission.seed-model.js.map +1 -0
  984. package/dist/user/seeds/permission.seed.d.ts +8 -0
  985. package/dist/user/seeds/permission.seed.js +27 -0
  986. package/dist/user/seeds/permission.seed.js.map +1 -0
  987. package/dist/user/seeds/role.seed-model.d.ts +2 -0
  988. package/dist/user/seeds/role.seed-model.js +15 -0
  989. package/dist/user/seeds/role.seed-model.js.map +1 -0
  990. package/dist/user/seeds/role.seed.d.ts +8 -0
  991. package/dist/user/seeds/role.seed.js +27 -0
  992. package/dist/user/seeds/role.seed.js.map +1 -0
  993. package/dist/user/seeds/user.seed-model.d.ts +2 -0
  994. package/dist/user/seeds/user.seed-model.js +18 -0
  995. package/dist/user/seeds/user.seed-model.js.map +1 -0
  996. package/dist/user/seeds/user.seed.d.ts +8 -0
  997. package/dist/user/seeds/user.seed.js +27 -0
  998. package/dist/user/seeds/user.seed.js.map +1 -0
  999. package/dist/user/services/auth.service.d.ts +9 -0
  1000. package/dist/user/services/auth.service.js +48 -0
  1001. package/dist/user/services/auth.service.js.map +1 -0
  1002. package/dist/user/services/invitation.service.d.ts +23 -0
  1003. package/dist/user/services/invitation.service.js +89 -0
  1004. package/dist/user/services/invitation.service.js.map +1 -0
  1005. package/dist/user/services/model.service.d.ts +8 -0
  1006. package/dist/user/services/model.service.js +27 -0
  1007. package/dist/user/services/model.service.js.map +1 -0
  1008. package/dist/user/services/passwordReset.service.d.ts +21 -0
  1009. package/dist/user/services/passwordReset.service.js +104 -0
  1010. package/dist/user/services/passwordReset.service.js.map +1 -0
  1011. package/dist/user/services/permission.service.d.ts +14 -0
  1012. package/dist/user/services/permission.service.js +69 -0
  1013. package/dist/user/services/permission.service.js.map +1 -0
  1014. package/dist/user/services/role.service.d.ts +8 -0
  1015. package/dist/user/services/role.service.js +27 -0
  1016. package/dist/user/services/role.service.js.map +1 -0
  1017. package/dist/user/services/user.service.d.ts +8 -0
  1018. package/dist/user/services/user.service.js +27 -0
  1019. package/dist/user/services/user.service.js.map +1 -0
  1020. package/dist/user/services/validate-account.service.d.ts +27 -0
  1021. package/dist/user/services/validate-account.service.js +90 -0
  1022. package/dist/user/services/validate-account.service.js.map +1 -0
  1023. package/dist/user/types/action.type.d.ts +12 -0
  1024. package/dist/user/types/action.type.js +18 -0
  1025. package/dist/user/types/action.type.js.map +1 -0
  1026. package/dist/user/types/index.type.d.ts +1 -0
  1027. package/dist/user/types/index.type.js +3 -0
  1028. package/dist/user/types/index.type.js.map +1 -0
  1029. package/dist/user/types/model.type.d.ts +1 -0
  1030. package/dist/user/types/model.type.js +3 -0
  1031. package/dist/user/types/model.type.js.map +1 -0
  1032. package/dist/user/types/permission.type.d.ts +5 -0
  1033. package/dist/user/types/permission.type.js +3 -0
  1034. package/dist/user/types/permission.type.js.map +1 -0
  1035. package/dist/user/types/user-provider.type.d.ts +4 -0
  1036. package/dist/user/types/user-provider.type.js +3 -0
  1037. package/dist/user/types/user-provider.type.js.map +1 -0
  1038. package/dist/user/user.module.d.ts +2 -0
  1039. package/dist/user/user.module.js +98 -0
  1040. package/dist/user/user.module.js.map +1 -0
  1041. package/dist/user/utilities/bcryptjs.d.ts +1 -0
  1042. package/dist/user/utilities/bcryptjs.js +8 -0
  1043. package/dist/user/utilities/bcryptjs.js.map +1 -0
  1044. package/dist/user/utilities/hash.d.ts +1 -0
  1045. package/dist/user/utilities/hash.js +7 -0
  1046. package/dist/user/utilities/hash.js.map +1 -0
  1047. package/dist/utils/constants/cache.d.ts +7 -0
  1048. package/dist/utils/constants/cache.js +11 -0
  1049. package/dist/utils/constants/cache.js.map +1 -0
  1050. package/dist/utils/constants/mock.d.ts +1 -0
  1051. package/dist/utils/constants/mock.js +5 -0
  1052. package/dist/utils/constants/mock.js.map +1 -0
  1053. package/dist/utils/constants/nlp.d.ts +1 -0
  1054. package/dist/utils/constants/nlp.js +5 -0
  1055. package/dist/utils/constants/nlp.js.map +1 -0
  1056. package/dist/utils/constants/session-middleware.d.ts +2 -0
  1057. package/dist/utils/constants/session-middleware.js +34 -0
  1058. package/dist/utils/constants/session-middleware.js.map +1 -0
  1059. package/dist/utils/constants/session-store.d.ts +2 -0
  1060. package/dist/utils/constants/session-store.js +56 -0
  1061. package/dist/utils/constants/session-store.js.map +1 -0
  1062. package/dist/utils/decorators/cacheable.decorator.d.ts +1 -0
  1063. package/dist/utils/decorators/cacheable.decorator.js +33 -0
  1064. package/dist/utils/decorators/cacheable.decorator.js.map +1 -0
  1065. package/dist/utils/decorators/is-uuid.decorator.d.ts +2 -0
  1066. package/dist/utils/decorators/is-uuid.decorator.js +8 -0
  1067. package/dist/utils/decorators/is-uuid.decorator.js.map +1 -0
  1068. package/dist/utils/decorators/relation-ref.decorator.d.ts +5 -0
  1069. package/dist/utils/decorators/relation-ref.decorator.js +17 -0
  1070. package/dist/utils/decorators/relation-ref.decorator.js.map +1 -0
  1071. package/dist/utils/decorators/roles.decorator.d.ts +2 -0
  1072. package/dist/utils/decorators/roles.decorator.js +7 -0
  1073. package/dist/utils/decorators/roles.decorator.js.map +1 -0
  1074. package/dist/utils/decorators/validate.decorator.d.ts +3 -0
  1075. package/dist/utils/decorators/validate.decorator.js +30 -0
  1076. package/dist/utils/decorators/validate.decorator.js.map +1 -0
  1077. package/dist/utils/generics/base-orm.controller.d.ts +15 -0
  1078. package/dist/utils/generics/base-orm.controller.js +32 -0
  1079. package/dist/utils/generics/base-orm.controller.js.map +1 -0
  1080. package/dist/utils/generics/base-orm.repository.d.ts +82 -0
  1081. package/dist/utils/generics/base-orm.repository.js +291 -0
  1082. package/dist/utils/generics/base-orm.repository.js.map +1 -0
  1083. package/dist/utils/generics/base-orm.seeder.d.ts +11 -0
  1084. package/dist/utils/generics/base-orm.seeder.js +24 -0
  1085. package/dist/utils/generics/base-orm.seeder.js.map +1 -0
  1086. package/dist/utils/generics/base-orm.service.d.ts +25 -0
  1087. package/dist/utils/generics/base-orm.service.js +61 -0
  1088. package/dist/utils/generics/base-orm.service.js.map +1 -0
  1089. package/dist/utils/generics/extension.d.ts +14 -0
  1090. package/dist/utils/generics/extension.js +35 -0
  1091. package/dist/utils/generics/extension.js.map +1 -0
  1092. package/dist/utils/helpers/URL.d.ts +1 -0
  1093. package/dist/utils/helpers/URL.js +18 -0
  1094. package/dist/utils/helpers/URL.js.map +1 -0
  1095. package/dist/utils/helpers/avatar.d.ts +7 -0
  1096. package/dist/utils/helpers/avatar.js +51 -0
  1097. package/dist/utils/helpers/avatar.js.map +1 -0
  1098. package/dist/utils/helpers/flatten.d.ts +1 -0
  1099. package/dist/utils/helpers/flatten.js +23 -0
  1100. package/dist/utils/helpers/flatten.js.map +1 -0
  1101. package/dist/utils/helpers/fs.d.ts +2 -0
  1102. package/dist/utils/helpers/fs.js +42 -0
  1103. package/dist/utils/helpers/fs.js.map +1 -0
  1104. package/dist/utils/helpers/misc.d.ts +5 -0
  1105. package/dist/utils/helpers/misc.js +31 -0
  1106. package/dist/utils/helpers/misc.js.map +1 -0
  1107. package/dist/utils/helpers/safeRandom.d.ts +2 -0
  1108. package/dist/utils/helpers/safeRandom.js +16 -0
  1109. package/dist/utils/helpers/safeRandom.js.map +1 -0
  1110. package/dist/utils/helpers/svg.d.ts +13 -0
  1111. package/dist/utils/helpers/svg.js +28 -0
  1112. package/dist/utils/helpers/svg.js.map +1 -0
  1113. package/dist/utils/helpers/zod-validation.d.ts +2 -0
  1114. package/dist/utils/helpers/zod-validation.js +6 -0
  1115. package/dist/utils/helpers/zod-validation.js.map +1 -0
  1116. package/dist/utils/index.d.ts +33 -0
  1117. package/dist/utils/index.js +50 -0
  1118. package/dist/utils/index.js.map +1 -0
  1119. package/dist/utils/pipes/populate.pipe.d.ts +4 -0
  1120. package/dist/utils/pipes/populate.pipe.js +25 -0
  1121. package/dist/utils/pipes/populate.pipe.js.map +1 -0
  1122. package/dist/utils/pipes/sanitize-query.pipe.d.ts +7 -0
  1123. package/dist/utils/pipes/sanitize-query.pipe.js +46 -0
  1124. package/dist/utils/pipes/sanitize-query.pipe.js.map +1 -0
  1125. package/dist/utils/pipes/typeorm-search-filter.pipe.d.ts +44 -0
  1126. package/dist/utils/pipes/typeorm-search-filter.pipe.js +346 -0
  1127. package/dist/utils/pipes/typeorm-search-filter.pipe.js.map +1 -0
  1128. package/dist/utils/pipes/uuid.pipe.d.ts +9 -0
  1129. package/dist/utils/pipes/uuid.pipe.js +60 -0
  1130. package/dist/utils/pipes/uuid.pipe.js.map +1 -0
  1131. package/dist/utils/pipes/zod.pipe.d.ts +8 -0
  1132. package/dist/utils/pipes/zod.pipe.js +42 -0
  1133. package/dist/utils/pipes/zod.pipe.js.map +1 -0
  1134. package/dist/utils/test/constants.d.ts +1 -0
  1135. package/dist/utils/test/constants.js +5 -0
  1136. package/dist/utils/test/constants.js.map +1 -0
  1137. package/dist/utils/test/date.d.ts +1 -0
  1138. package/dist/utils/test/date.js +9 -0
  1139. package/dist/utils/test/date.js.map +1 -0
  1140. package/dist/utils/test/defaultValues.d.ts +5 -0
  1141. package/dist/utils/test/defaultValues.js +13 -0
  1142. package/dist/utils/test/defaultValues.js.map +1 -0
  1143. package/dist/utils/test/dummy/dto/dummy.dto.d.ts +23 -0
  1144. package/dist/utils/test/dummy/dto/dummy.dto.js +61 -0
  1145. package/dist/utils/test/dummy/dto/dummy.dto.js.map +1 -0
  1146. package/dist/utils/test/dummy/dummy.module.d.ts +2 -0
  1147. package/dist/utils/test/dummy/dummy.module.js +23 -0
  1148. package/dist/utils/test/dummy/dummy.module.js.map +1 -0
  1149. package/dist/utils/test/dummy/dummy.plugin.d.ts +17 -0
  1150. package/dist/utils/test/dummy/dummy.plugin.js +46 -0
  1151. package/dist/utils/test/dummy/dummy.plugin.js.map +1 -0
  1152. package/dist/utils/test/dummy/entities/dummy.entity.d.ts +5 -0
  1153. package/dist/utils/test/dummy/entities/dummy.entity.js +30 -0
  1154. package/dist/utils/test/dummy/entities/dummy.entity.js.map +1 -0
  1155. package/dist/utils/test/dummy/repositories/dummy.repository.d.ts +7 -0
  1156. package/dist/utils/test/dummy/repositories/dummy.repository.js +31 -0
  1157. package/dist/utils/test/dummy/repositories/dummy.repository.js.map +1 -0
  1158. package/dist/utils/test/dummy/services/dummy.service.d.ts +8 -0
  1159. package/dist/utils/test/dummy/services/dummy.service.js +27 -0
  1160. package/dist/utils/test/dummy/services/dummy.service.js.map +1 -0
  1161. package/dist/utils/test/dummy/settings.d.ts +2 -0
  1162. package/dist/utils/test/dummy/settings.js +4 -0
  1163. package/dist/utils/test/dummy/settings.js.map +1 -0
  1164. package/dist/utils/test/errors/messages.d.ts +1 -0
  1165. package/dist/utils/test/errors/messages.js +6 -0
  1166. package/dist/utils/test/errors/messages.js.map +1 -0
  1167. package/dist/utils/test/fixtures/attachment.d.ts +4 -0
  1168. package/dist/utils/test/fixtures/attachment.js +44 -0
  1169. package/dist/utils/test/fixtures/attachment.js.map +1 -0
  1170. package/dist/utils/test/fixtures/block.d.ts +10 -0
  1171. package/dist/utils/test/fixtures/block.js +212 -0
  1172. package/dist/utils/test/fixtures/block.js.map +1 -0
  1173. package/dist/utils/test/fixtures/botstats.d.ts +4 -0
  1174. package/dist/utils/test/fixtures/botstats.js +55 -0
  1175. package/dist/utils/test/fixtures/botstats.js.map +1 -0
  1176. package/dist/utils/test/fixtures/category.d.ts +9 -0
  1177. package/dist/utils/test/fixtures/category.js +41 -0
  1178. package/dist/utils/test/fixtures/category.js.map +1 -0
  1179. package/dist/utils/test/fixtures/content.d.ts +10 -0
  1180. package/dist/utils/test/fixtures/content.js +164 -0
  1181. package/dist/utils/test/fixtures/content.js.map +1 -0
  1182. package/dist/utils/test/fixtures/contenttype.d.ts +10 -0
  1183. package/dist/utils/test/fixtures/contenttype.js +121 -0
  1184. package/dist/utils/test/fixtures/contenttype.js.map +1 -0
  1185. package/dist/utils/test/fixtures/contextvar.d.ts +9 -0
  1186. package/dist/utils/test/fixtures/contextvar.js +45 -0
  1187. package/dist/utils/test/fixtures/contextvar.js.map +1 -0
  1188. package/dist/utils/test/fixtures/conversation.d.ts +8 -0
  1189. package/dist/utils/test/fixtures/conversation.js +210 -0
  1190. package/dist/utils/test/fixtures/conversation.js.map +1 -0
  1191. package/dist/utils/test/fixtures/dummy.d.ts +5 -0
  1192. package/dist/utils/test/fixtures/dummy.js +25 -0
  1193. package/dist/utils/test/fixtures/dummy.js.map +1 -0
  1194. package/dist/utils/test/fixtures/invitation.d.ts +10 -0
  1195. package/dist/utils/test/fixtures/invitation.js +47 -0
  1196. package/dist/utils/test/fixtures/invitation.js.map +1 -0
  1197. package/dist/utils/test/fixtures/label-group.d.ts +16 -0
  1198. package/dist/utils/test/fixtures/label-group.js +65 -0
  1199. package/dist/utils/test/fixtures/label-group.js.map +1 -0
  1200. package/dist/utils/test/fixtures/label.d.ts +9 -0
  1201. package/dist/utils/test/fixtures/label.js +67 -0
  1202. package/dist/utils/test/fixtures/label.js.map +1 -0
  1203. package/dist/utils/test/fixtures/language.d.ts +5 -0
  1204. package/dist/utils/test/fixtures/language.js +30 -0
  1205. package/dist/utils/test/fixtures/language.js.map +1 -0
  1206. package/dist/utils/test/fixtures/menu.d.ts +9 -0
  1207. package/dist/utils/test/fixtures/menu.js +135 -0
  1208. package/dist/utils/test/fixtures/menu.js.map +1 -0
  1209. package/dist/utils/test/fixtures/message.d.ts +7 -0
  1210. package/dist/utils/test/fixtures/message.js +87 -0
  1211. package/dist/utils/test/fixtures/message.js.map +1 -0
  1212. package/dist/utils/test/fixtures/metadata.d.ts +2 -0
  1213. package/dist/utils/test/fixtures/metadata.js +17 -0
  1214. package/dist/utils/test/fixtures/metadata.js.map +1 -0
  1215. package/dist/utils/test/fixtures/migration.d.ts +3 -0
  1216. package/dist/utils/test/fixtures/migration.js +22 -0
  1217. package/dist/utils/test/fixtures/migration.js.map +1 -0
  1218. package/dist/utils/test/fixtures/model.d.ts +14 -0
  1219. package/dist/utils/test/fixtures/model.js +35 -0
  1220. package/dist/utils/test/fixtures/model.js.map +1 -0
  1221. package/dist/utils/test/fixtures/nlpentity.d.ts +6 -0
  1222. package/dist/utils/test/fixtures/nlpentity.js +49 -0
  1223. package/dist/utils/test/fixtures/nlpentity.js.map +1 -0
  1224. package/dist/utils/test/fixtures/nlpsample.d.ts +9 -0
  1225. package/dist/utils/test/fixtures/nlpsample.js +66 -0
  1226. package/dist/utils/test/fixtures/nlpsample.js.map +1 -0
  1227. package/dist/utils/test/fixtures/nlpsampleentity.d.ts +5 -0
  1228. package/dist/utils/test/fixtures/nlpsampleentity.js +74 -0
  1229. package/dist/utils/test/fixtures/nlpsampleentity.js.map +1 -0
  1230. package/dist/utils/test/fixtures/nlpvalue.d.ts +5 -0
  1231. package/dist/utils/test/fixtures/nlpvalue.js +92 -0
  1232. package/dist/utils/test/fixtures/nlpvalue.js.map +1 -0
  1233. package/dist/utils/test/fixtures/permission.d.ts +17 -0
  1234. package/dist/utils/test/fixtures/permission.js +67 -0
  1235. package/dist/utils/test/fixtures/permission.js.map +1 -0
  1236. package/dist/utils/test/fixtures/role.d.ts +15 -0
  1237. package/dist/utils/test/fixtures/role.js +37 -0
  1238. package/dist/utils/test/fixtures/role.js.map +1 -0
  1239. package/dist/utils/test/fixtures/setting.d.ts +4 -0
  1240. package/dist/utils/test/fixtures/setting.js +128 -0
  1241. package/dist/utils/test/fixtures/setting.js.map +1 -0
  1242. package/dist/utils/test/fixtures/subscriber.d.ts +15 -0
  1243. package/dist/utils/test/fixtures/subscriber.js +138 -0
  1244. package/dist/utils/test/fixtures/subscriber.js.map +1 -0
  1245. package/dist/utils/test/fixtures/translation.d.ts +4 -0
  1246. package/dist/utils/test/fixtures/translation.js +20 -0
  1247. package/dist/utils/test/fixtures/translation.js.map +1 -0
  1248. package/dist/utils/test/fixtures/user.d.ts +12 -0
  1249. package/dist/utils/test/fixtures/user.js +56 -0
  1250. package/dist/utils/test/fixtures/user.js.map +1 -0
  1251. package/dist/utils/test/mocks/block.d.ts +27 -0
  1252. package/dist/utils/test/mocks/block.js +355 -0
  1253. package/dist/utils/test/mocks/block.js.map +1 -0
  1254. package/dist/utils/test/mocks/conversation.d.ts +8 -0
  1255. package/dist/utils/test/mocks/conversation.js +54 -0
  1256. package/dist/utils/test/mocks/conversation.js.map +1 -0
  1257. package/dist/utils/test/mocks/misc.d.ts +5 -0
  1258. package/dist/utils/test/mocks/misc.js +9 -0
  1259. package/dist/utils/test/mocks/misc.js.map +1 -0
  1260. package/dist/utils/test/mocks/nlp.d.ts +4 -0
  1261. package/dist/utils/test/mocks/nlp.js +49 -0
  1262. package/dist/utils/test/mocks/nlp.js.map +1 -0
  1263. package/dist/utils/test/mocks/subscriber.d.ts +4 -0
  1264. package/dist/utils/test/mocks/subscriber.js +37 -0
  1265. package/dist/utils/test/mocks/subscriber.js.map +1 -0
  1266. package/dist/utils/test/postman-collections/hexabot_REST.postman_collection.json +2235 -0
  1267. package/dist/utils/test/sort.d.ts +11 -0
  1268. package/dist/utils/test/sort.js +7 -0
  1269. package/dist/utils/test/sort.js.map +1 -0
  1270. package/dist/utils/test/test.d.ts +4 -0
  1271. package/dist/utils/test/test.js +20 -0
  1272. package/dist/utils/test/test.js.map +1 -0
  1273. package/dist/utils/test/types.d.ts +13 -0
  1274. package/dist/utils/test/types.js +3 -0
  1275. package/dist/utils/test/types.js.map +1 -0
  1276. package/dist/utils/test/utils.d.ts +36 -0
  1277. package/dist/utils/test/utils.js +154 -0
  1278. package/dist/utils/test/utils.js.map +1 -0
  1279. package/dist/utils/types/dto.types.d.ts +25 -0
  1280. package/dist/utils/types/dto.types.js +54 -0
  1281. package/dist/utils/types/dto.types.js.map +1 -0
  1282. package/dist/utils/types/extension.d.ts +5 -0
  1283. package/dist/utils/types/extension.js +3 -0
  1284. package/dist/utils/types/extension.js.map +1 -0
  1285. package/dist/utils/types/filter.types.d.ts +47 -0
  1286. package/dist/utils/types/filter.types.js +3 -0
  1287. package/dist/utils/types/filter.types.js.map +1 -0
  1288. package/dist/utils/types/format.types.d.ts +7 -0
  1289. package/dist/utils/types/format.types.js +11 -0
  1290. package/dist/utils/types/format.types.js.map +1 -0
  1291. package/dist/utils/types/misc.d.ts +1 -0
  1292. package/dist/utils/types/misc.js +3 -0
  1293. package/dist/utils/types/misc.js.map +1 -0
  1294. package/dist/websocket/adapters/redis-io.adapter.d.ts +7 -0
  1295. package/dist/websocket/adapters/redis-io.adapter.js +34 -0
  1296. package/dist/websocket/adapters/redis-io.adapter.js.map +1 -0
  1297. package/dist/websocket/decorators/socket-method.decorator.d.ts +7 -0
  1298. package/dist/websocket/decorators/socket-method.decorator.js +75 -0
  1299. package/dist/websocket/decorators/socket-method.decorator.js.map +1 -0
  1300. package/dist/websocket/decorators/socket-req.decorator.d.ts +1 -0
  1301. package/dist/websocket/decorators/socket-req.decorator.js +9 -0
  1302. package/dist/websocket/decorators/socket-req.decorator.js.map +1 -0
  1303. package/dist/websocket/decorators/socket-res.decorator.d.ts +1 -0
  1304. package/dist/websocket/decorators/socket-res.decorator.js +9 -0
  1305. package/dist/websocket/decorators/socket-res.decorator.js.map +1 -0
  1306. package/dist/websocket/decorators/websocket-exceptions.filter.d.ts +4 -0
  1307. package/dist/websocket/decorators/websocket-exceptions.filter.js +29 -0
  1308. package/dist/websocket/decorators/websocket-exceptions.filter.js.map +1 -0
  1309. package/dist/websocket/index.d.ts +14 -0
  1310. package/dist/websocket/index.js +31 -0
  1311. package/dist/websocket/index.js.map +1 -0
  1312. package/dist/websocket/pipes/io-message.pipe.d.ts +21 -0
  1313. package/dist/websocket/pipes/io-message.pipe.js +43 -0
  1314. package/dist/websocket/pipes/io-message.pipe.js.map +1 -0
  1315. package/dist/websocket/services/socket-event-dispatcher.service.d.ts +19 -0
  1316. package/dist/websocket/services/socket-event-dispatcher.service.js +127 -0
  1317. package/dist/websocket/services/socket-event-dispatcher.service.js.map +1 -0
  1318. package/dist/websocket/storage/socket-event-metadata.storage.d.ts +14 -0
  1319. package/dist/websocket/storage/socket-event-metadata.storage.js +18 -0
  1320. package/dist/websocket/storage/socket-event-metadata.storage.js.map +1 -0
  1321. package/dist/websocket/types.d.ts +8 -0
  1322. package/dist/websocket/types.js +9 -0
  1323. package/dist/websocket/types.js.map +1 -0
  1324. package/dist/websocket/utils/gateway-options.d.ts +2 -0
  1325. package/dist/websocket/utils/gateway-options.js +75 -0
  1326. package/dist/websocket/utils/gateway-options.js.map +1 -0
  1327. package/dist/websocket/utils/socket-request.d.ts +28 -0
  1328. package/dist/websocket/utils/socket-request.js +47 -0
  1329. package/dist/websocket/utils/socket-request.js.map +1 -0
  1330. package/dist/websocket/utils/socket-response.d.ts +20 -0
  1331. package/dist/websocket/utils/socket-response.js +48 -0
  1332. package/dist/websocket/utils/socket-response.js.map +1 -0
  1333. package/dist/websocket/websocket.gateway.d.ts +44 -0
  1334. package/dist/websocket/websocket.gateway.js +338 -0
  1335. package/dist/websocket/websocket.gateway.js.map +1 -0
  1336. package/dist/websocket/websocket.module.d.ts +2 -0
  1337. package/dist/websocket/websocket.module.js +23 -0
  1338. package/dist/websocket/websocket.module.js.map +1 -0
  1339. package/package.json +195 -0
  1340. package/src/analytics/analytics.module.ts +20 -0
  1341. package/src/analytics/controllers/bot-stats.controller.ts +133 -0
  1342. package/src/analytics/dto/bot-stats.dto.ts +116 -0
  1343. package/src/analytics/entities/bot-stats.entity.ts +114 -0
  1344. package/src/analytics/index.ts +21 -0
  1345. package/src/analytics/repositories/bot-stats.repository.ts +96 -0
  1346. package/src/analytics/services/bot-stats.service.ts +203 -0
  1347. package/src/analytics/utilities/index.ts +8 -0
  1348. package/src/analytics/validation-rules/is-less-than-date.ts +36 -0
  1349. package/src/app.controller.ts +50 -0
  1350. package/src/app.instance.ts +32 -0
  1351. package/src/app.module.ts +159 -0
  1352. package/src/app.service.ts +18 -0
  1353. package/src/attachment/attachment.module.ts +41 -0
  1354. package/src/attachment/controllers/attachment.controller.ts +203 -0
  1355. package/src/attachment/dto/attachment.dto.ts +216 -0
  1356. package/src/attachment/entities/attachment.entity.ts +91 -0
  1357. package/src/attachment/guards/attachment-ability.guard.ts +299 -0
  1358. package/src/attachment/index.ts +23 -0
  1359. package/src/attachment/mocks/attachment.mock.ts +48 -0
  1360. package/src/attachment/repositories/attachment.repository.ts +36 -0
  1361. package/src/attachment/services/attachment.service.ts +108 -0
  1362. package/src/attachment/types/index.ts +56 -0
  1363. package/src/attachment/utilities/index.ts +112 -0
  1364. package/src/bootstrap.ts +141 -0
  1365. package/src/channel/channel.controller.ts +28 -0
  1366. package/src/channel/channel.middleware.ts +33 -0
  1367. package/src/channel/channel.module.ts +51 -0
  1368. package/src/channel/channel.service.ts +209 -0
  1369. package/src/channel/index.ts +21 -0
  1370. package/src/channel/lib/EventWrapper.ts +410 -0
  1371. package/src/channel/lib/Handler.ts +395 -0
  1372. package/src/channel/lib/__test__/base.mock.ts +11 -0
  1373. package/src/channel/lib/__test__/common.mock.ts +176 -0
  1374. package/src/channel/lib/__test__/label.mock.ts +61 -0
  1375. package/src/channel/lib/__test__/subscriber.mock.ts +43 -0
  1376. package/src/channel/types.ts +19 -0
  1377. package/src/channel/webhook.controller.ts +98 -0
  1378. package/src/chat/chat.module.ts +109 -0
  1379. package/src/chat/constants/block.ts +18 -0
  1380. package/src/chat/constants/conversation.ts +30 -0
  1381. package/src/chat/controllers/block.controller.ts +334 -0
  1382. package/src/chat/controllers/category.controller.ts +162 -0
  1383. package/src/chat/controllers/context-var.controller.ts +157 -0
  1384. package/src/chat/controllers/label-group.controller.ts +171 -0
  1385. package/src/chat/controllers/label.controller.ts +149 -0
  1386. package/src/chat/controllers/message.controller.ts +191 -0
  1387. package/src/chat/controllers/subscriber.controller.ts +172 -0
  1388. package/src/chat/dto/block.dto.ts +320 -0
  1389. package/src/chat/dto/category.dto.ts +88 -0
  1390. package/src/chat/dto/context-var.dto.ts +64 -0
  1391. package/src/chat/dto/conversation.dto.ts +115 -0
  1392. package/src/chat/dto/label-group.dto.ts +57 -0
  1393. package/src/chat/dto/label.dto.ts +112 -0
  1394. package/src/chat/dto/message.dto.ts +145 -0
  1395. package/src/chat/dto/subscriber.dto.ts +222 -0
  1396. package/src/chat/entities/block.entity.ts +367 -0
  1397. package/src/chat/entities/category.entity.ts +54 -0
  1398. package/src/chat/entities/context-var.entity.ts +71 -0
  1399. package/src/chat/entities/conversation.entity.ts +68 -0
  1400. package/src/chat/entities/label-group.entity.ts +21 -0
  1401. package/src/chat/entities/label.entity.ts +66 -0
  1402. package/src/chat/entities/message.entity.ts +78 -0
  1403. package/src/chat/entities/subscriber.entity.ts +124 -0
  1404. package/src/chat/globals.d.ts +12 -0
  1405. package/src/chat/helpers/README.md +115 -0
  1406. package/src/chat/helpers/constants.ts +10 -0
  1407. package/src/chat/helpers/envelope-builder.ts +212 -0
  1408. package/src/chat/helpers/envelope-factory.ts +275 -0
  1409. package/src/chat/index.ts +129 -0
  1410. package/src/chat/repositories/block.repository.ts +164 -0
  1411. package/src/chat/repositories/category.repository.ts +36 -0
  1412. package/src/chat/repositories/context-var.repository.ts +36 -0
  1413. package/src/chat/repositories/conversation.repository.ts +47 -0
  1414. package/src/chat/repositories/label-group.repository.ts +36 -0
  1415. package/src/chat/repositories/label.repository.ts +36 -0
  1416. package/src/chat/repositories/message.repository.ts +151 -0
  1417. package/src/chat/repositories/subscriber.repository.ts +254 -0
  1418. package/src/chat/seeds/category.seed-model.ts +13 -0
  1419. package/src/chat/seeds/category.seed.ts +24 -0
  1420. package/src/chat/seeds/context-var.seed-model.ts +18 -0
  1421. package/src/chat/seeds/context-var.seed.ts +27 -0
  1422. package/src/chat/services/block.service.ts +815 -0
  1423. package/src/chat/services/bot.service.ts +713 -0
  1424. package/src/chat/services/category.service.ts +24 -0
  1425. package/src/chat/services/chat.service.ts +381 -0
  1426. package/src/chat/services/context-var.service.ts +57 -0
  1427. package/src/chat/services/conversation.service.ts +212 -0
  1428. package/src/chat/services/label-group.service.ts +27 -0
  1429. package/src/chat/services/label.service.ts +24 -0
  1430. package/src/chat/services/message.service.ts +125 -0
  1431. package/src/chat/services/subscriber.service.ts +343 -0
  1432. package/src/chat/types/attachment.ts +47 -0
  1433. package/src/chat/types/button.ts +43 -0
  1434. package/src/chat/types/capture-var.ts +17 -0
  1435. package/src/chat/types/channel.ts +30 -0
  1436. package/src/chat/types/context.ts +33 -0
  1437. package/src/chat/types/message.ts +393 -0
  1438. package/src/chat/types/options.ts +46 -0
  1439. package/src/chat/types/pattern.ts +77 -0
  1440. package/src/chat/types/position.ts +14 -0
  1441. package/src/chat/types/quick-reply.ts +43 -0
  1442. package/src/chat/types/subscriberContext.ts +13 -0
  1443. package/src/cli.ts +28 -0
  1444. package/src/cms/cms.module.ts +45 -0
  1445. package/src/cms/controllers/content-type.controller.ts +154 -0
  1446. package/src/cms/controllers/content.controller.ts +243 -0
  1447. package/src/cms/controllers/menu.controller.ts +202 -0
  1448. package/src/cms/decorators/unique-field-names.decorator.ts +21 -0
  1449. package/src/cms/dto/content.dto.ts +80 -0
  1450. package/src/cms/dto/contentType.dto.ts +92 -0
  1451. package/src/cms/dto/menu.dto.ts +108 -0
  1452. package/src/cms/entities/content-type.entity.ts +66 -0
  1453. package/src/cms/entities/content.entity.ts +105 -0
  1454. package/src/cms/entities/menu.entity.ts +111 -0
  1455. package/src/cms/index.ts +53 -0
  1456. package/src/cms/repositories/content-type.repository.ts +39 -0
  1457. package/src/cms/repositories/content.repository.ts +53 -0
  1458. package/src/cms/repositories/menu.repository.ts +36 -0
  1459. package/src/cms/services/content-type.service.ts +55 -0
  1460. package/src/cms/services/content.service.ts +176 -0
  1461. package/src/cms/services/menu.service.ts +121 -0
  1462. package/src/cms/types/content.ts +16 -0
  1463. package/src/cms/types/menu-types.ts +44 -0
  1464. package/src/cms/types/menu.ts +43 -0
  1465. package/src/cms/utilities/field-validation.utils.ts +11 -0
  1466. package/src/cms/utilities/verifyTree.ts +46 -0
  1467. package/src/cms/validators/validate-required-fields.validator.ts +63 -0
  1468. package/src/cms/validators/validate-unique-names.validator.ts +27 -0
  1469. package/src/config/csrf.ts +24 -0
  1470. package/src/config/i18n/en/messages.json +21 -0
  1471. package/src/config/i18n/fr/messages.json +20 -0
  1472. package/src/config/index.ts +256 -0
  1473. package/src/config/types.ts +143 -0
  1474. package/src/database/decorators/datetime-column.decorator.ts +31 -0
  1475. package/src/database/decorators/enum-column.decorator.ts +33 -0
  1476. package/src/database/decorators/json-column.decorator.ts +30 -0
  1477. package/src/database/entities/base.entity.ts +70 -0
  1478. package/src/database/index.ts +15 -0
  1479. package/src/database/typeorm-config.service.ts +59 -0
  1480. package/src/extension/cleanup.service.ts +107 -0
  1481. package/src/extension/extension.module.ts +37 -0
  1482. package/src/extension/index.ts +11 -0
  1483. package/src/extension/types.ts +39 -0
  1484. package/src/extensions/channels/console/globals.d.ts +29 -0
  1485. package/src/extensions/channels/console/i18n/en/label.json +21 -0
  1486. package/src/extensions/channels/console/i18n/en/title.json +3 -0
  1487. package/src/extensions/channels/console/i18n/fr/label.json +21 -0
  1488. package/src/extensions/channels/console/i18n/fr/title.json +3 -0
  1489. package/src/extensions/channels/console/index.channel.ts +58 -0
  1490. package/src/extensions/channels/console/package.json +7 -0
  1491. package/src/extensions/channels/console/settings.ts +78 -0
  1492. package/src/extensions/channels/web/__test__/data.mock.ts +144 -0
  1493. package/src/extensions/channels/web/__test__/events.mock.ts +159 -0
  1494. package/src/extensions/channels/web/base-web-channel.ts +1479 -0
  1495. package/src/extensions/channels/web/globals.d.ts +31 -0
  1496. package/src/extensions/channels/web/i18n/en/label.json +21 -0
  1497. package/src/extensions/channels/web/i18n/en/title.json +3 -0
  1498. package/src/extensions/channels/web/i18n/fr/label.json +21 -0
  1499. package/src/extensions/channels/web/i18n/fr/title.json +3 -0
  1500. package/src/extensions/channels/web/index.channel.ts +57 -0
  1501. package/src/extensions/channels/web/package.json +7 -0
  1502. package/src/extensions/channels/web/settings.ts +92 -0
  1503. package/src/extensions/channels/web/types.ts +220 -0
  1504. package/src/extensions/channels/web/wrapper.ts +322 -0
  1505. package/src/extensions/helpers/llm-nlu/globals.d.ts +20 -0
  1506. package/src/extensions/helpers/llm-nlu/i18n/en/help.json +5 -0
  1507. package/src/extensions/helpers/llm-nlu/i18n/en/label.json +5 -0
  1508. package/src/extensions/helpers/llm-nlu/i18n/en/title.json +3 -0
  1509. package/src/extensions/helpers/llm-nlu/i18n/fr/help.json +5 -0
  1510. package/src/extensions/helpers/llm-nlu/i18n/fr/label.json +5 -0
  1511. package/src/extensions/helpers/llm-nlu/i18n/fr/title.json +3 -0
  1512. package/src/extensions/helpers/llm-nlu/index.helper.ts +162 -0
  1513. package/src/extensions/helpers/llm-nlu/package.json +8 -0
  1514. package/src/extensions/helpers/llm-nlu/settings.ts +45 -0
  1515. package/src/extensions/helpers/local-storage/index.helper.ts +199 -0
  1516. package/src/extensions/helpers/local-storage/package.json +8 -0
  1517. package/src/extensions/helpers/local-storage/settings.ts +15 -0
  1518. package/src/extensions/index.ts +27 -0
  1519. package/src/extensions/plugins/.gitkeep +0 -0
  1520. package/src/extra/index.ts +7 -0
  1521. package/src/global.d.ts +16 -0
  1522. package/src/helper/helper.controller.ts +32 -0
  1523. package/src/helper/helper.module.ts +33 -0
  1524. package/src/helper/helper.service.ts +176 -0
  1525. package/src/helper/index.ts +23 -0
  1526. package/src/helper/lib/__test__/settings.ts +21 -0
  1527. package/src/helper/lib/base-flow-escape-helper.ts +50 -0
  1528. package/src/helper/lib/base-helper.ts +68 -0
  1529. package/src/helper/lib/base-llm-helper.ts +82 -0
  1530. package/src/helper/lib/base-nlp-helper.ts +389 -0
  1531. package/src/helper/lib/base-storage-helper.ts +74 -0
  1532. package/src/helper/types.ts +148 -0
  1533. package/src/i18n/controllers/i18n.controller.ts +37 -0
  1534. package/src/i18n/controllers/language.controller.ts +140 -0
  1535. package/src/i18n/controllers/translation.controller.ts +157 -0
  1536. package/src/i18n/dto/language.dto.ts +67 -0
  1537. package/src/i18n/dto/translation.dto.ts +52 -0
  1538. package/src/i18n/entities/language.entity.ts +61 -0
  1539. package/src/i18n/entities/translation.entity.ts +20 -0
  1540. package/src/i18n/i18n.module.ts +84 -0
  1541. package/src/i18n/index.ts +39 -0
  1542. package/src/i18n/repositories/language.repository.ts +35 -0
  1543. package/src/i18n/repositories/translation.repository.ts +35 -0
  1544. package/src/i18n/seeds/language.seed-model.ts +21 -0
  1545. package/src/i18n/seeds/language.seed.ts +47 -0
  1546. package/src/i18n/seeds/translation.seed-model.ts +17 -0
  1547. package/src/i18n/seeds/translation.seed.ts +27 -0
  1548. package/src/i18n/services/i18n.service.ts +72 -0
  1549. package/src/i18n/services/language.service.ts +101 -0
  1550. package/src/i18n/services/translation.service.ts +215 -0
  1551. package/src/index.ts +68 -0
  1552. package/src/jest-custom.d.ts +11 -0
  1553. package/src/logger/index.ts +9 -0
  1554. package/src/logger/logger.module.ts +16 -0
  1555. package/src/logger/logger.service.ts +57 -0
  1556. package/src/mailer/index.ts +9 -0
  1557. package/src/mailer/mailer.module.ts +69 -0
  1558. package/src/mailer/mailer.service.ts +9 -0
  1559. package/src/mailer/mjml-adapter.class.ts +41 -0
  1560. package/src/main.ts +12 -0
  1561. package/src/migration/README.md +127 -0
  1562. package/src/migration/index.ts +15 -0
  1563. package/src/migration/migration.command.ts +76 -0
  1564. package/src/migration/migration.entity.ts +39 -0
  1565. package/src/migration/migration.module.ts +37 -0
  1566. package/src/migration/migration.service.ts +652 -0
  1567. package/src/migration/migrations/.gitkeep +0 -0
  1568. package/src/migration/types.ts +41 -0
  1569. package/src/nlp/controllers/nlp-entity.controller.ts +238 -0
  1570. package/src/nlp/controllers/nlp-sample.controller.ts +409 -0
  1571. package/src/nlp/controllers/nlp-value.controller.ts +207 -0
  1572. package/src/nlp/dto/nlp-entity.dto.ts +137 -0
  1573. package/src/nlp/dto/nlp-sample-entity.dto.ts +95 -0
  1574. package/src/nlp/dto/nlp-sample.dto.ts +148 -0
  1575. package/src/nlp/dto/nlp-value.dto.ts +158 -0
  1576. package/src/nlp/entities/nlp-entity.entity.ts +60 -0
  1577. package/src/nlp/entities/nlp-sample-entity.entity.ts +64 -0
  1578. package/src/nlp/entities/nlp-sample.entity.ts +52 -0
  1579. package/src/nlp/entities/nlp-value.entity.ts +93 -0
  1580. package/src/nlp/index.ts +57 -0
  1581. package/src/nlp/nlp.module.ts +59 -0
  1582. package/src/nlp/repositories/nlp-entity.repository.ts +36 -0
  1583. package/src/nlp/repositories/nlp-sample-entity.repository.ts +36 -0
  1584. package/src/nlp/repositories/nlp-sample.repository.ts +214 -0
  1585. package/src/nlp/repositories/nlp-value.repository.ts +139 -0
  1586. package/src/nlp/seeds/nlp-entity.seed-model.ts +16 -0
  1587. package/src/nlp/seeds/nlp-entity.seed.ts +27 -0
  1588. package/src/nlp/seeds/nlp-value.seed-model.ts +9 -0
  1589. package/src/nlp/seeds/nlp-value.seed.ts +47 -0
  1590. package/src/nlp/services/nlp-entity.service.ts +212 -0
  1591. package/src/nlp/services/nlp-sample-entity.service.ts +116 -0
  1592. package/src/nlp/services/nlp-sample.service.ts +382 -0
  1593. package/src/nlp/services/nlp-value.service.ts +264 -0
  1594. package/src/nlp/services/nlp.service.ts +311 -0
  1595. package/src/nlp/types.ts +45 -0
  1596. package/src/plugins/base-block-plugin.ts +73 -0
  1597. package/src/plugins/base-event-plugin.ts +20 -0
  1598. package/src/plugins/base-plugin.service.ts +29 -0
  1599. package/src/plugins/index.ts +19 -0
  1600. package/src/plugins/map-types.ts +23 -0
  1601. package/src/plugins/plugins.module.ts +41 -0
  1602. package/src/plugins/plugins.service.ts +101 -0
  1603. package/src/plugins/types.ts +41 -0
  1604. package/src/repl.ts +16 -0
  1605. package/src/seeder.ts +160 -0
  1606. package/src/setting/controllers/setting.controller.ts +68 -0
  1607. package/src/setting/dto/metadata.dto.ts +50 -0
  1608. package/src/setting/dto/setting.dto.ts +150 -0
  1609. package/src/setting/entities/metadata.entity.ts +20 -0
  1610. package/src/setting/entities/setting.entity.ts +114 -0
  1611. package/src/setting/globals.d.ts +41 -0
  1612. package/src/setting/index.ts +35 -0
  1613. package/src/setting/repositories/metadata.repository.ts +35 -0
  1614. package/src/setting/repositories/setting.repository.ts +52 -0
  1615. package/src/setting/seeds/metadata.seed-model.ts +14 -0
  1616. package/src/setting/seeds/metadata.seed.ts +40 -0
  1617. package/src/setting/seeds/setting.seed-model.ts +182 -0
  1618. package/src/setting/seeds/setting.seed.ts +54 -0
  1619. package/src/setting/services/metadata.service.ts +90 -0
  1620. package/src/setting/services/setting.service.ts +181 -0
  1621. package/src/setting/setting.module.ts +34 -0
  1622. package/src/setting/types/index.ts +149 -0
  1623. package/src/swagger.ts +18 -0
  1624. package/src/templates/account_confirmation.mjml +40 -0
  1625. package/src/templates/invitation.mjml +42 -0
  1626. package/src/templates/password_reset.mjml +39 -0
  1627. package/src/user/controllers/auth.controller.ts +181 -0
  1628. package/src/user/controllers/model.controller.ts +54 -0
  1629. package/src/user/controllers/permission.controller.ts +118 -0
  1630. package/src/user/controllers/role.controller.ts +181 -0
  1631. package/src/user/controllers/user.controller.ts +497 -0
  1632. package/src/user/dto/invitation.dto.ts +65 -0
  1633. package/src/user/dto/model.dto.ts +83 -0
  1634. package/src/user/dto/permission.dto.ts +87 -0
  1635. package/src/user/dto/role.dto.ts +78 -0
  1636. package/src/user/dto/user.dto.ts +228 -0
  1637. package/src/user/entities/invitation.entity.ts +61 -0
  1638. package/src/user/entities/model.entity.ts +36 -0
  1639. package/src/user/entities/permission.entity.ts +54 -0
  1640. package/src/user/entities/role.entity.ts +32 -0
  1641. package/src/user/entities/session.entity.ts +30 -0
  1642. package/src/user/entities/user.entity.ts +128 -0
  1643. package/src/user/guards/ability.guard.ts +100 -0
  1644. package/src/user/guards/local-auth.guard.ts +18 -0
  1645. package/src/user/index.ts +103 -0
  1646. package/src/user/passport/auth-strategy/local.strategy.ts +30 -0
  1647. package/src/user/passport/session.serializer.ts +38 -0
  1648. package/src/user/repositories/invitation.repository.ts +36 -0
  1649. package/src/user/repositories/model.repository.ts +33 -0
  1650. package/src/user/repositories/permission.repository.ts +36 -0
  1651. package/src/user/repositories/role.repository.ts +36 -0
  1652. package/src/user/repositories/user.repository.ts +44 -0
  1653. package/src/user/seeds/model.seed-model.ts +130 -0
  1654. package/src/user/seeds/model.seed.ts +24 -0
  1655. package/src/user/seeds/permission.seed-model.ts +36 -0
  1656. package/src/user/seeds/permission.seed.ts +27 -0
  1657. package/src/user/seeds/role.seed-model.ts +19 -0
  1658. package/src/user/seeds/role.seed.ts +24 -0
  1659. package/src/user/seeds/user.seed-model.ts +21 -0
  1660. package/src/user/seeds/user.seed.ts +24 -0
  1661. package/src/user/services/auth.service.ts +59 -0
  1662. package/src/user/services/invitation.service.ts +128 -0
  1663. package/src/user/services/model.service.ts +24 -0
  1664. package/src/user/services/passwordReset.service.ts +144 -0
  1665. package/src/user/services/permission.service.ts +86 -0
  1666. package/src/user/services/role.service.ts +24 -0
  1667. package/src/user/services/user.service.ts +24 -0
  1668. package/src/user/services/validate-account.service.ts +130 -0
  1669. package/src/user/types/action.type.ts +19 -0
  1670. package/src/user/types/index.type.ts +7 -0
  1671. package/src/user/types/model.type.ts +31 -0
  1672. package/src/user/types/permission.type.ts +12 -0
  1673. package/src/user/types/user-provider.type.ts +10 -0
  1674. package/src/user/user.module.ts +93 -0
  1675. package/src/user/utilities/bcryptjs.ts +12 -0
  1676. package/src/user/utilities/hash.ts +10 -0
  1677. package/src/utils/constants/cache.ts +20 -0
  1678. package/src/utils/constants/mock.ts +7 -0
  1679. package/src/utils/constants/nlp.ts +7 -0
  1680. package/src/utils/constants/session-middleware.ts +39 -0
  1681. package/src/utils/constants/session-store.ts +71 -0
  1682. package/src/utils/decorators/cacheable.decorator.ts +53 -0
  1683. package/src/utils/decorators/is-uuid.decorator.ts +18 -0
  1684. package/src/utils/decorators/relation-ref.decorator.ts +28 -0
  1685. package/src/utils/decorators/roles.decorator.ts +11 -0
  1686. package/src/utils/decorators/validate.decorator.ts +37 -0
  1687. package/src/utils/generics/base-orm.controller.ts +44 -0
  1688. package/src/utils/generics/base-orm.repository.ts +489 -0
  1689. package/src/utils/generics/base-orm.seeder.ts +55 -0
  1690. package/src/utils/generics/base-orm.service.ts +137 -0
  1691. package/src/utils/generics/extension.ts +49 -0
  1692. package/src/utils/helpers/URL.ts +20 -0
  1693. package/src/utils/helpers/avatar.ts +65 -0
  1694. package/src/utils/helpers/flatten.ts +39 -0
  1695. package/src/utils/helpers/fs.ts +64 -0
  1696. package/src/utils/helpers/misc.ts +32 -0
  1697. package/src/utils/helpers/safeRandom.ts +28 -0
  1698. package/src/utils/helpers/svg.ts +60 -0
  1699. package/src/utils/helpers/zod-validation.ts +12 -0
  1700. package/src/utils/index.ts +71 -0
  1701. package/src/utils/pipes/populate.pipe.ts +21 -0
  1702. package/src/utils/pipes/sanitize-query.pipe.ts +57 -0
  1703. package/src/utils/pipes/typeorm-search-filter.pipe.ts +503 -0
  1704. package/src/utils/pipes/uuid.pipe.ts +72 -0
  1705. package/src/utils/pipes/zod.pipe.ts +57 -0
  1706. package/src/utils/test/constants.ts +7 -0
  1707. package/src/utils/test/date.ts +11 -0
  1708. package/src/utils/test/defaultValues.ts +23 -0
  1709. package/src/utils/test/dummy/dto/dummy.dto.ts +57 -0
  1710. package/src/utils/test/dummy/dummy.module.ts +18 -0
  1711. package/src/utils/test/dummy/dummy.plugin.ts +47 -0
  1712. package/src/utils/test/dummy/entities/dummy.entity.ts +19 -0
  1713. package/src/utils/test/dummy/repositories/dummy.repository.ts +27 -0
  1714. package/src/utils/test/dummy/services/dummy.service.ts +25 -0
  1715. package/src/utils/test/dummy/settings.ts +7 -0
  1716. package/src/utils/test/errors/messages.ts +8 -0
  1717. package/src/utils/test/fixtures/attachment.ts +56 -0
  1718. package/src/utils/test/fixtures/block.ts +243 -0
  1719. package/src/utils/test/fixtures/botstats.ts +66 -0
  1720. package/src/utils/test/fixtures/category.ts +68 -0
  1721. package/src/utils/test/fixtures/content.ts +209 -0
  1722. package/src/utils/test/fixtures/contenttype.ts +142 -0
  1723. package/src/utils/test/fixtures/contextvar.ts +66 -0
  1724. package/src/utils/test/fixtures/conversation.ts +254 -0
  1725. package/src/utils/test/fixtures/dummy.ts +34 -0
  1726. package/src/utils/test/fixtures/invitation.ts +68 -0
  1727. package/src/utils/test/fixtures/label-group.ts +96 -0
  1728. package/src/utils/test/fixtures/label.ts +88 -0
  1729. package/src/utils/test/fixtures/language.ts +41 -0
  1730. package/src/utils/test/fixtures/menu.ts +181 -0
  1731. package/src/utils/test/fixtures/message.ts +116 -0
  1732. package/src/utils/test/fixtures/metadata.ts +25 -0
  1733. package/src/utils/test/fixtures/migration.ts +30 -0
  1734. package/src/utils/test/fixtures/model.ts +51 -0
  1735. package/src/utils/test/fixtures/nlpentity.ts +61 -0
  1736. package/src/utils/test/fixtures/nlpsample.ts +91 -0
  1737. package/src/utils/test/fixtures/nlpsampleentity.ts +99 -0
  1738. package/src/utils/test/fixtures/nlpvalue.ts +115 -0
  1739. package/src/utils/test/fixtures/permission.ts +88 -0
  1740. package/src/utils/test/fixtures/role.ts +52 -0
  1741. package/src/utils/test/fixtures/setting.ts +134 -0
  1742. package/src/utils/test/fixtures/subscriber.ts +175 -0
  1743. package/src/utils/test/fixtures/translation.ts +29 -0
  1744. package/src/utils/test/fixtures/user.ts +76 -0
  1745. package/src/utils/test/mocks/block.ts +395 -0
  1746. package/src/utils/test/mocks/conversation.ts +66 -0
  1747. package/src/utils/test/mocks/misc.ts +11 -0
  1748. package/src/utils/test/mocks/nlp.ts +55 -0
  1749. package/src/utils/test/mocks/subscriber.ts +44 -0
  1750. package/src/utils/test/postman-collections/hexabot_REST.postman_collection.json +2235 -0
  1751. package/src/utils/test/sort.ts +32 -0
  1752. package/src/utils/test/test.ts +27 -0
  1753. package/src/utils/test/types.ts +38 -0
  1754. package/src/utils/test/utils.ts +311 -0
  1755. package/src/utils/types/dto.types.ts +67 -0
  1756. package/src/utils/types/extension.ts +14 -0
  1757. package/src/utils/types/filter.types.ts +101 -0
  1758. package/src/utils/types/format.types.ts +16 -0
  1759. package/src/utils/types/misc.ts +7 -0
  1760. package/src/websocket/README.md +42 -0
  1761. package/src/websocket/adapters/redis-io.adapter.ts +43 -0
  1762. package/src/websocket/decorators/socket-method.decorator.ts +105 -0
  1763. package/src/websocket/decorators/socket-req.decorator.ts +15 -0
  1764. package/src/websocket/decorators/socket-res.decorator.ts +15 -0
  1765. package/src/websocket/decorators/websocket-exceptions.filter.ts +29 -0
  1766. package/src/websocket/index.ts +33 -0
  1767. package/src/websocket/pipes/io-message.pipe.ts +73 -0
  1768. package/src/websocket/services/socket-event-dispatcher.service.ts +167 -0
  1769. package/src/websocket/storage/socket-event-metadata.storage.ts +44 -0
  1770. package/src/websocket/types.ts +15 -0
  1771. package/src/websocket/utils/gateway-options.ts +85 -0
  1772. package/src/websocket/utils/socket-request.ts +116 -0
  1773. package/src/websocket/utils/socket-response.ts +84 -0
  1774. package/src/websocket/websocket.gateway.ts +422 -0
  1775. package/src/websocket/websocket.module.ts +17 -0
  1776. package/types/event-emitter.d.ts +381 -0
  1777. package/types/express-session.d.ts +30 -0
  1778. package/types/socket.d.ts +15 -0
@@ -0,0 +1,1479 @@
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 {
8
+ BadRequestException,
9
+ HttpException,
10
+ HttpStatus,
11
+ Injectable,
12
+ } from '@nestjs/common';
13
+ import { EventEmitter2, OnEvent } from '@nestjs/event-emitter';
14
+ import bodyParser from 'body-parser';
15
+ import { NextFunction, Request, Response } from 'express';
16
+ import multer, { diskStorage, memoryStorage } from 'multer';
17
+ import { Socket } from 'socket.io';
18
+ import { Raw } from 'typeorm';
19
+ import { v4 as uuidv4 } from 'uuid';
20
+
21
+ import { Attachment } from '@/attachment/dto/attachment.dto';
22
+ import { AttachmentOrmEntity } from '@/attachment/entities/attachment.entity';
23
+ import { AttachmentService } from '@/attachment/services/attachment.service';
24
+ import {
25
+ AttachmentAccess,
26
+ AttachmentCreatedByRef,
27
+ AttachmentResourceRef,
28
+ } from '@/attachment/types';
29
+ import { ChannelService } from '@/channel/channel.service';
30
+ import ChannelHandler from '@/channel/lib/Handler';
31
+ import { ChannelName } from '@/channel/types';
32
+ import { MessageCreateDto } from '@/chat/dto/message.dto';
33
+ import {
34
+ Subscriber,
35
+ SubscriberCreateDto,
36
+ SubscriberFull,
37
+ SubscriberStub,
38
+ } from '@/chat/dto/subscriber.dto';
39
+ import { VIEW_MORE_PAYLOAD } from '@/chat/helpers/constants';
40
+ import { MessageService } from '@/chat/services/message.service';
41
+ import { SubscriberService } from '@/chat/services/subscriber.service';
42
+ import { AttachmentRef } from '@/chat/types/attachment';
43
+ import { Button, ButtonType, PayloadType } from '@/chat/types/button';
44
+ import {
45
+ AnyMessage,
46
+ ContentElement,
47
+ IncomingMessage,
48
+ IncomingMessageType,
49
+ OutgoingMessage,
50
+ OutgoingMessageFormat,
51
+ StdEventType,
52
+ StdOutgoingAttachmentMessage,
53
+ StdOutgoingButtonsMessage,
54
+ StdOutgoingEnvelope,
55
+ StdOutgoingListMessage,
56
+ StdOutgoingMessage,
57
+ StdOutgoingQuickRepliesMessage,
58
+ StdOutgoingTextMessage,
59
+ } from '@/chat/types/message';
60
+ import { BlockOptions } from '@/chat/types/options';
61
+ import { ContentOrmEntity } from '@/cms/entities/content.entity';
62
+ import { MenuService } from '@/cms/services/menu.service';
63
+ import { config } from '@/config';
64
+ import { I18nService } from '@/i18n/services/i18n.service';
65
+ import { LoggerService } from '@/logger/logger.service';
66
+ import { SettingService } from '@/setting/services/setting.service';
67
+ import { SocketRequest } from '@/websocket/utils/socket-request';
68
+ import { SocketResponse } from '@/websocket/utils/socket-response';
69
+ import { WebsocketGateway } from '@/websocket/websocket.gateway';
70
+
71
+ import { WEB_CHANNEL_NAME, WEB_CHANNEL_NAMESPACE } from './settings';
72
+ import { Web } from './types';
73
+ import WebEventWrapper from './wrapper';
74
+
75
+ // Handle multipart uploads (Long Pooling only)
76
+ const upload = multer({
77
+ limits: {
78
+ fileSize: config.parameters.maxUploadSize,
79
+ },
80
+ storage: (() => {
81
+ if (config.parameters.storageMode === 'memory') {
82
+ return memoryStorage();
83
+ } else {
84
+ return diskStorage({});
85
+ }
86
+ })(),
87
+ }).single('file'); // 'file' is the field name in the form
88
+
89
+ @Injectable()
90
+ export default abstract class BaseWebChannelHandler<
91
+ N extends ChannelName,
92
+ > extends ChannelHandler<N> {
93
+ constructor(
94
+ name: N,
95
+ settingService: SettingService,
96
+ channelService: ChannelService,
97
+ logger: LoggerService,
98
+ protected readonly eventEmitter: EventEmitter2,
99
+ protected readonly i18n: I18nService,
100
+ protected readonly subscriberService: SubscriberService,
101
+ public readonly attachmentService: AttachmentService,
102
+ protected readonly messageService: MessageService,
103
+ protected readonly menuService: MenuService,
104
+ protected readonly websocketGateway: WebsocketGateway,
105
+ ) {
106
+ super(name, settingService, channelService, logger);
107
+ }
108
+
109
+ /**
110
+ * No init needed for the moment
111
+ *
112
+ * @returns -
113
+ */
114
+ init(): void {
115
+ this.logger.debug('initialization ...');
116
+ }
117
+
118
+ /**
119
+ * Verify web websocket connection and return settings
120
+ *
121
+ * @param client - The socket client
122
+ */
123
+ @OnEvent('hook:websocket:connection', { async: true })
124
+ async onWebSocketConnection(client: Socket) {
125
+ try {
126
+ const settings = await this.getSettings();
127
+ const handshake = client.handshake;
128
+ const { channel } = handshake.query;
129
+ const profile = client.request.session.web?.profile;
130
+
131
+ if (channel !== this.getName()) {
132
+ return;
133
+ }
134
+
135
+ let messages: Web.Message[] | undefined;
136
+
137
+ if (profile?.foreign_id) {
138
+ await client.join(profile.foreign_id);
139
+ const messagesHistory =
140
+ await this.messageService.findHistoryUntilDate(profile);
141
+ messages = await this.formatMessages(
142
+ messagesHistory.reverse() as unknown as AnyMessage[],
143
+ );
144
+ }
145
+
146
+ this.logger.debug('WS connected .. sending settings');
147
+
148
+ try {
149
+ const menu = await this.menuService.getTree();
150
+
151
+ client.emit('settings', {
152
+ menu,
153
+ profile,
154
+ messages,
155
+ ...settings,
156
+ });
157
+ } catch (err) {
158
+ this.logger.warn('Unable to retrieve menu ', err);
159
+ client.emit('settings', { profile, messages, ...settings });
160
+ }
161
+ } catch (err) {
162
+ this.logger.error('Unable to initiate websocket connection', err);
163
+ client.disconnect();
164
+ }
165
+ }
166
+
167
+ @OnEvent('hook:websocket:error')
168
+ broadcastError(socket: Socket, error: HttpException): void {
169
+ const response = (
170
+ error instanceof HttpException
171
+ ? error.getResponse()
172
+ : {
173
+ statusCode: HttpStatus.INTERNAL_SERVER_ERROR,
174
+ message: 'Internal Server Error',
175
+ }
176
+ ) as SocketResponse;
177
+ const subscriber = socket.request.session.web?.profile as
178
+ | Subscriber
179
+ | undefined;
180
+
181
+ if (socket.handshake.query.channel !== this.getName() || !subscriber) {
182
+ return;
183
+ }
184
+
185
+ this.broadcast(subscriber, StdEventType.error, response, [socket.id]);
186
+ }
187
+
188
+ /**
189
+ * Adapt incoming message structure for web channel
190
+ *
191
+ * @param incoming - Incoming message
192
+ * @returns Formatted web message
193
+ */
194
+ private async formatIncomingHistoryMessage(
195
+ incoming: IncomingMessage,
196
+ ): Promise<Web.IncomingMessageBase> {
197
+ // Format incoming message
198
+ if ('type' in incoming.message) {
199
+ if (incoming.message.type === PayloadType.location) {
200
+ const coordinates = incoming.message.coordinates;
201
+
202
+ return {
203
+ type: Web.IncomingMessageType.location,
204
+ data: {
205
+ coordinates: {
206
+ lat: coordinates.lat,
207
+ lng: coordinates.lon,
208
+ },
209
+ },
210
+ };
211
+ } else {
212
+ // @TODO : handle multiple files
213
+ const attachmentPayload = Array.isArray(incoming.message.attachment)
214
+ ? incoming.message.attachment[0]
215
+ : incoming.message.attachment;
216
+
217
+ return {
218
+ type: Web.IncomingMessageType.file,
219
+ data: {
220
+ type: attachmentPayload.type,
221
+ url: await this.getPublicUrl(attachmentPayload.payload),
222
+ },
223
+ };
224
+ }
225
+ } else {
226
+ return {
227
+ type: Web.IncomingMessageType.text,
228
+ data: incoming.message,
229
+ };
230
+ }
231
+ }
232
+
233
+ /**
234
+ * Adapt the outgoing message structure for web channel
235
+ *
236
+ * @param outgoing - The outgoing message
237
+ * @returns Formatted web message
238
+ */
239
+ private async formatOutgoingHistoryMessage(
240
+ outgoing: OutgoingMessage,
241
+ ): Promise<Web.OutgoingMessageBase> {
242
+ // Format outgoing message
243
+ if ('buttons' in outgoing.message) {
244
+ return this._buttonsFormat(outgoing.message);
245
+ } else if ('attachment' in outgoing.message) {
246
+ return this._attachmentFormat(outgoing.message);
247
+ } else if ('quickReplies' in outgoing.message) {
248
+ return this._quickRepliesFormat(outgoing.message);
249
+ } else if ('options' in outgoing.message) {
250
+ if (outgoing.message.options.display === 'carousel') {
251
+ return await this._carouselFormat(outgoing.message, {
252
+ content: outgoing.message.options,
253
+ });
254
+ } else {
255
+ return await this._listFormat(outgoing.message, {
256
+ content: outgoing.message.options,
257
+ });
258
+ }
259
+ } else {
260
+ return this._textFormat(outgoing.message);
261
+ }
262
+ }
263
+
264
+ /**
265
+ * Checks if a given message is an IncomingMessage
266
+ *
267
+ * @param message Any type of message
268
+ * @returns True, if it's a incoming message
269
+ */
270
+ private isIncomingMessage(message: AnyMessage): message is IncomingMessage {
271
+ return 'sender' in message && !!message.sender;
272
+ }
273
+
274
+ /**
275
+ * Adapt the message structure for web channel
276
+ *
277
+ * @param messages - The messages to be formatted
278
+ *
279
+ * @returns Formatted message
280
+ */
281
+ protected async formatMessages(
282
+ messages: AnyMessage[],
283
+ ): Promise<Web.Message[]> {
284
+ const formattedMessages: Web.Message[] = [];
285
+
286
+ for (const anyMessage of messages) {
287
+ const messageMid = anyMessage.mid ?? this.generateId();
288
+ if (this.isIncomingMessage(anyMessage)) {
289
+ const message = await this.formatIncomingHistoryMessage(anyMessage);
290
+ formattedMessages.push({
291
+ ...message,
292
+ author: anyMessage.sender,
293
+ read: true, // Temporary fix as read is false in the bd
294
+ mid: messageMid,
295
+ createdAt: anyMessage.createdAt,
296
+ });
297
+ } else {
298
+ const message = await this.formatOutgoingHistoryMessage(anyMessage);
299
+ formattedMessages.push({
300
+ ...message,
301
+ author: 'chatbot',
302
+ read: true, // Temporary fix as read is false in the bd
303
+ mid: messageMid,
304
+ handover: !!anyMessage.handover,
305
+ createdAt: anyMessage.createdAt,
306
+ });
307
+ }
308
+ }
309
+
310
+ return formattedMessages;
311
+ }
312
+
313
+ /**
314
+ * Fetches the messaging history from the DB.
315
+ * @param req - Either an HTTP Express request or a WS SocketRequest (synthetic)
316
+ * @param [until=new Date()] - Date before which to fetch
317
+ * @param [n=30] - Number of messages to fetch
318
+ * @returns Promise resolving to an array of messages.
319
+ * Fetches the last 'n' messages for the session profile up to the given date.
320
+ */
321
+ protected async fetchHistory(
322
+ req: Request | SocketRequest,
323
+ until: Date = new Date(),
324
+ n: number = 30,
325
+ ): Promise<Web.Message[]> {
326
+ const profile = req.session.web?.profile;
327
+ if (profile) {
328
+ const messages = await this.messageService.findHistoryUntilDate(
329
+ profile,
330
+ until,
331
+ n,
332
+ );
333
+
334
+ return await this.formatMessages(
335
+ messages.reverse() as unknown as AnyMessage[],
336
+ );
337
+ }
338
+
339
+ return [];
340
+ }
341
+
342
+ /**
343
+ * Poll new messages by a given start datetime
344
+ * @param req - HTTP Express Request
345
+ * @param since - Date after which to fetch
346
+ * @param n - Number of messages to fetch
347
+ * @returns Promise resolving to an array of messages.
348
+ * Fetches the last 'n' new messages for the session profile since the given date.
349
+ */
350
+ private async pollMessages(
351
+ req: Request,
352
+ since: Date = new Date(10e14),
353
+ n: number = 30,
354
+ ): Promise<Web.Message[]> {
355
+ const profile = req.session.web?.profile;
356
+ if (profile) {
357
+ const messages = await this.messageService.findHistorySinceDate(
358
+ profile,
359
+ since,
360
+ n,
361
+ );
362
+
363
+ return await this.formatMessages(messages as unknown as AnyMessage[]);
364
+ }
365
+
366
+ return [];
367
+ }
368
+
369
+ /**
370
+ * Verify the origin against whitelisted domains.
371
+ *
372
+ * @param req
373
+ * @param res
374
+ */
375
+ private async validateCors(
376
+ req: Request | SocketRequest,
377
+ res: Response | SocketResponse,
378
+ ) {
379
+ const settings = await this.getSettings<typeof WEB_CHANNEL_NAMESPACE>();
380
+
381
+ // Check if we have an origin header...
382
+ if (!req.headers?.origin) {
383
+ this.logger.debug('No origin ', req.headers);
384
+ throw new Error('CORS - No origin provided!');
385
+ }
386
+
387
+ const originUrl = new URL(req.headers.origin);
388
+ const allowedProtocols = new Set(['http:', 'https:']);
389
+ if (!allowedProtocols.has(originUrl.protocol)) {
390
+ throw new Error('CORS - Invalid origin!');
391
+ }
392
+
393
+ // Get the allowed origins
394
+ const origins: string[] = settings.allowed_domains.split(',');
395
+ const foundOrigin = origins
396
+ .filter((origin) => origin.trim() !== '*') // Skip "*"
397
+ .map((origin) => {
398
+ try {
399
+ return new URL(origin.trim()).origin;
400
+ } catch (error) {
401
+ this.logger.error(`Invalid URL in allowed domains: ${origin}`, error);
402
+
403
+ return null;
404
+ }
405
+ })
406
+ .filter(
407
+ (normalizedOrigin): normalizedOrigin is string =>
408
+ normalizedOrigin !== null,
409
+ )
410
+ .some((origin: string) => {
411
+ // If we find a whitelisted origin, send the Access-Control-Allow-Origin header
412
+ // to greenlight the request.
413
+ return origin === originUrl.origin;
414
+ });
415
+
416
+ if (!foundOrigin && !origins.includes('*')) {
417
+ // For HTTP requests, set the Access-Control-Allow-Origin header to '', which the browser will
418
+ // interpret as, 'no way Jose.'
419
+ res.set('Access-Control-Allow-Origin', '');
420
+ this.logger.debug('No origin found ', req.headers.origin);
421
+ throw new Error('CORS - Domain not allowed!');
422
+ } else {
423
+ res.set('Access-Control-Allow-Origin', originUrl.origin);
424
+ }
425
+ // Determine whether or not to allow cookies to be passed cross-origin
426
+ res.set('Access-Control-Allow-Credentials', 'true');
427
+ // This header lets a server whitelist headers that browsers are allowed to access
428
+ res.set('Access-Control-Expose-Headers', '');
429
+ // Handle preflight requests
430
+ if (req.method == 'OPTIONS') {
431
+ res.set('Access-Control-Allow-Methods', 'GET, POST');
432
+ res.set('Access-Control-Allow-Headers', 'content-type');
433
+ }
434
+ }
435
+
436
+ /**
437
+ * Makes sure that message request is legitimate.
438
+ *
439
+ * @param req
440
+ * @param res
441
+ */
442
+ private validateSession(
443
+ req: Request | SocketRequest,
444
+ res: Response | SocketResponse,
445
+ next: <S extends SubscriberStub>(profile: S) => void,
446
+ ) {
447
+ if (!req.session.web?.profile?.id) {
448
+ this.logger.warn('No session ID to be found!', req.session);
449
+
450
+ return res
451
+ .status(403)
452
+ .json({ err: 'Web Channel Handler : Unauthorized!' });
453
+ } else if (
454
+ (this.isSocketRequest(req) &&
455
+ !!req.isSocket !== req.session.web.isSocket) ||
456
+ !Array.isArray(req.session.web.messageQueue)
457
+ ) {
458
+ this.logger.warn(
459
+ 'Mixed channel request or invalid session data!',
460
+ req.session,
461
+ );
462
+
463
+ return res
464
+ .status(403)
465
+ .json({ err: 'Web Channel Handler : Unauthorized!' });
466
+ }
467
+ next(req.session.web?.profile);
468
+ }
469
+
470
+ /**
471
+ * Perform all security measures on the request
472
+ *
473
+ * @param req
474
+ * @param res
475
+ */
476
+ protected async checkRequest(
477
+ req: Request | SocketRequest,
478
+ res: Response | SocketResponse,
479
+ ) {
480
+ try {
481
+ await this.validateCors(req, res);
482
+ } catch (err) {
483
+ this.logger.warn('Attempt to access from an unauthorized origin', err);
484
+ throw new Error('Unauthorized, invalid origin !');
485
+ }
486
+ }
487
+
488
+ /**
489
+ * Get or create a session profile for the subscriber
490
+ *
491
+ * @param req
492
+ *
493
+ * @returns Subscriber's profile
494
+ */
495
+ protected async getOrCreateSession(
496
+ req: Request | SocketRequest,
497
+ ): Promise<SubscriberFull> {
498
+ const data = req.query;
499
+ // Subscriber has already a session
500
+ const sessionProfile = req.session.web?.profile;
501
+ if (sessionProfile) {
502
+ const subscriber = await this.subscriberService.findOneAndPopulate(
503
+ sessionProfile.id,
504
+ );
505
+ if (!subscriber || !req.session.web) {
506
+ throw new Error('Subscriber session was not persisted in DB');
507
+ }
508
+ req.session.web.profile = subscriber;
509
+
510
+ return subscriber;
511
+ }
512
+
513
+ const newProfile: SubscriberCreateDto = {
514
+ foreign_id: this.generateId(),
515
+ first_name: data.first_name ? data.first_name.toString() : 'Anon.',
516
+ last_name: data.last_name ? data.last_name.toString() : 'Web User',
517
+ assignedTo: null,
518
+ assignedAt: null,
519
+ lastvisit: new Date(),
520
+ retainedFrom: new Date(),
521
+ avatar: null,
522
+ channel: {
523
+ name: this.getName(),
524
+ data: this.getChannelAttributes(req),
525
+ },
526
+ language: '',
527
+ locale: '',
528
+ timezone: 0,
529
+ gender: 'male',
530
+ country: '',
531
+ labels: [],
532
+ context: { vars: {} },
533
+ };
534
+ const subscriber = await this.subscriberService.create(newProfile);
535
+ // Init session
536
+ const profile: SubscriberFull = {
537
+ ...subscriber,
538
+ labels: [],
539
+ assignedTo: null,
540
+ avatar: null,
541
+ };
542
+
543
+ req.session.web = {
544
+ profile,
545
+ isSocket: this.isSocketRequest(req),
546
+ messageQueue: [],
547
+ polling: false,
548
+ };
549
+
550
+ return profile;
551
+ }
552
+
553
+ /**
554
+ * Return message queue (using by long polling case only)
555
+ *
556
+ * @param req HTTP Express Request
557
+ * @param res HTTP Express Response
558
+ */
559
+ private getMessageQueue(req: Request, res: Response) {
560
+ // Polling not authorized when using websockets
561
+ if (this.isSocketRequest(req)) {
562
+ this.logger.warn('Polling not authorized when using websockets');
563
+
564
+ return res
565
+ .status(403)
566
+ .json({ err: 'Polling not authorized when using websockets' });
567
+ }
568
+ // Session must be active
569
+ if (!(req.session && req.session.web && req.session.web?.profile?.id)) {
570
+ this.logger.warn('Must be connected to poll messages');
571
+
572
+ return res
573
+ .status(403)
574
+ .json({ err: 'Polling not authorized : Must be connected' });
575
+ }
576
+
577
+ // Can only request polling once at a time
578
+ if (req.session && req.session.web && req.session.web.polling) {
579
+ this.logger.warn('Poll rejected ... already requested');
580
+
581
+ return res
582
+ .status(403)
583
+ .json({ err: 'Poll rejected ... already requested' });
584
+ }
585
+
586
+ req.session.web.polling = true;
587
+
588
+ const fetchMessages = async (req: Request, res: Response, retrials = 1) => {
589
+ try {
590
+ if (!req.query.since)
591
+ throw new BadRequestException(`QueryParam 'since' is missing`);
592
+
593
+ const since = new Date(req.query.since.toString());
594
+ const messages = await this.pollMessages(req, since);
595
+ if (messages.length === 0 && retrials <= 5) {
596
+ // No messages found, retry after 5 sec
597
+ setTimeout(async () => {
598
+ await fetchMessages(req, res, retrials * 2);
599
+ }, retrials * 1000);
600
+ } else if (req.session.web) {
601
+ req.session.web.polling = false;
602
+
603
+ return res.status(200).json(messages.map((msg) => ['message', msg]));
604
+ } else {
605
+ this.logger.error('Polling failed .. no session data');
606
+
607
+ return res.status(500).json({ err: 'No session data' });
608
+ }
609
+ } catch (err) {
610
+ if (req.session.web) {
611
+ req.session.web.polling = false;
612
+ }
613
+ this.logger.error('Polling failed', err);
614
+
615
+ return res.status(500).json({ err: 'Polling failed' });
616
+ }
617
+ };
618
+ fetchMessages(req, res);
619
+ }
620
+
621
+ /**
622
+ * Allow the subscription to a web's webhook after verification
623
+ *
624
+ * @param req
625
+ * @param res
626
+ */
627
+ protected async subscribe(
628
+ req: Request | SocketRequest,
629
+ res: Response | SocketResponse,
630
+ ) {
631
+ this.logger.debug('subscribe (isSocket=' + this.isSocketRequest(req) + ')');
632
+ try {
633
+ const profile = await this.getOrCreateSession(req);
634
+ // Join socket room when using websocket
635
+ if (this.isSocketRequest(req)) {
636
+ try {
637
+ await req.socket.join(profile.foreign_id);
638
+ } catch (err) {
639
+ this.logger.error('Unable to subscribe via websocket', err);
640
+ }
641
+ }
642
+ // Fetch message history
643
+ const criteria =
644
+ 'since' in req.query
645
+ ? req.query.since // Long polling case
646
+ : req.body?.since || undefined; // Websocket case
647
+ const messages = await this.fetchHistory(req, criteria);
648
+
649
+ return res.status(200).json({ profile, messages });
650
+ } catch (err) {
651
+ this.logger.warn('Unable to subscribe ', err);
652
+
653
+ return res.status(500).json({ err: 'Unable to subscribe' });
654
+ }
655
+ }
656
+
657
+ /**
658
+ * Handles upload via WebSocket.
659
+ *
660
+ * @param req - The WebSocket request containing the session and the file data.
661
+ * @returns A Promise that resolves to the stored `Attachment`, or `null` if
662
+ * the session is invalid or no file is provided.
663
+ * @throws Error if the max upload size is exceeded.
664
+ * @throws Error when storing the uploaded file fails.
665
+ */
666
+ async handleWsUpload(req: SocketRequest): Promise<Attachment | null> {
667
+ try {
668
+ const { type, data } = req.body as Web.IncomingMessage;
669
+
670
+ if (!req.session.web?.profile?.id) {
671
+ this.logger.debug('No session');
672
+
673
+ return null;
674
+ }
675
+
676
+ // Check if any file is provided
677
+ if (
678
+ type !== Web.IncomingMessageType.file ||
679
+ !('file' in data) ||
680
+ !data.file
681
+ ) {
682
+ this.logger.debug('No files provided');
683
+
684
+ return null;
685
+ }
686
+
687
+ const size = Buffer.byteLength(data.file);
688
+
689
+ if (size > config.parameters.maxUploadSize) {
690
+ throw new Error('Max upload size has been exceeded');
691
+ }
692
+
693
+ return await this.attachmentService.store(data.file, {
694
+ name: data.name,
695
+ size,
696
+ type: data.type,
697
+ resourceRef: AttachmentResourceRef.MessageAttachment,
698
+ access: AttachmentAccess.Private,
699
+ createdByRef: AttachmentCreatedByRef.Subscriber,
700
+ createdBy: req.session.web.profile.id,
701
+ });
702
+ } catch (err) {
703
+ this.logger.error('Unable to store uploaded file', err);
704
+ throw new Error('Unable to upload file!');
705
+ }
706
+ }
707
+
708
+ /**
709
+ * Handles file upload via HTTP multipart/form-data requests.
710
+ *
711
+ * @param req - The Express HTTP request.
712
+ * @param _res - The Express HTTP response.
713
+ * @returns A Promise that resolves to the stored `Attachment`, or `null`/`undefined`
714
+ * if the session is invalid or no file is provided.
715
+ * @throws Error when storing the uploaded file fails.
716
+ */
717
+ async handleWebUpload(
718
+ req: Request,
719
+ _res: Response,
720
+ ): Promise<Attachment | null | undefined> {
721
+ try {
722
+ if (!req.session.web?.profile?.id) {
723
+ this.logger.debug('Upload denied, no session is defined');
724
+
725
+ return null;
726
+ }
727
+
728
+ // Check if any file is provided
729
+ if (!req.file) {
730
+ this.logger.debug('No files provided');
731
+
732
+ return null;
733
+ }
734
+
735
+ return await this.attachmentService.store(req.file, {
736
+ name: req.file.originalname,
737
+ size: req.file.size,
738
+ type: req.file.mimetype,
739
+ resourceRef: AttachmentResourceRef.MessageAttachment,
740
+ access: AttachmentAccess.Private,
741
+ createdByRef: AttachmentCreatedByRef.Subscriber,
742
+ createdBy: req.session.web.profile.id,
743
+ });
744
+ } catch (err) {
745
+ this.logger.error('Unable to store uploaded file', err);
746
+ throw err;
747
+ }
748
+ }
749
+
750
+ /**
751
+ * Upload file as attachment if provided
752
+ *
753
+ * @param req Either a HTTP Express request or a WS request (Synthetic Object)
754
+ * @param res Either a HTTP Express response or a WS response (Synthetic Object)
755
+ * @returns A Promise that resolves to the uploaded Attachment, or `null`/`undefined` if no file is uploaded.
756
+ * @throws Error Propagated from underlying upload handlers.
757
+ */
758
+ async handleUpload(
759
+ req: Request | SocketRequest,
760
+ res: Response | SocketResponse,
761
+ ): Promise<Attachment | null | undefined> {
762
+ // Check if any file is provided
763
+ if (!req.session.web) {
764
+ this.logger.debug('No session provided');
765
+
766
+ return null;
767
+ }
768
+
769
+ if (this.isSocketRequest(req)) {
770
+ return this.handleWsUpload(req);
771
+ } else {
772
+ return this.handleWebUpload(req, res as Response);
773
+ }
774
+ }
775
+
776
+ /**
777
+ * Returns the request client IP address
778
+ *
779
+ * @param req Either a HTTP request or a WS Request (Synthetic object)
780
+ *
781
+ * @returns IP Address
782
+ */
783
+ protected getIpAddress(req: Request | SocketRequest): string {
784
+ if (this.isSocketRequest(req)) {
785
+ return req.socket.handshake.address;
786
+ } else if (Array.isArray(req.ips) && req.ips.length > 0) {
787
+ // If config.http.trustProxy is enabled, this variable contains the IP addresses
788
+ // in this request's "X-Forwarded-For" header as an array of the IP address strings.
789
+ // Otherwise an empty array is returned.
790
+ return req.ips.join(',');
791
+ } else {
792
+ return req.ip || '0.0.0.0';
793
+ }
794
+ }
795
+
796
+ /**
797
+ * Return subscriber channel specific attributes
798
+ *
799
+ * @param req Either a HTTP Express request or a WS request (Synthetic Object)
800
+ *
801
+ * @returns The subscriber channel's attributes
802
+ */
803
+ getChannelAttributes(
804
+ req: Request | SocketRequest,
805
+ ): SubscriberChannelDict[typeof WEB_CHANNEL_NAME] {
806
+ return {
807
+ isSocket: this.isSocketRequest(req),
808
+ ipAddress: this.getIpAddress(req),
809
+ agent: req.headers['user-agent'] || 'browser',
810
+ };
811
+ }
812
+
813
+ /**
814
+ * Handle channel event (probably a message)
815
+ *
816
+ * @param req Either a HTTP Express request or a WS request (Synthetic Object)
817
+ * @param res Either a HTTP Express response or a WS response (Synthetic Object)
818
+ */
819
+ _handleEvent(
820
+ req: Request | SocketRequest,
821
+ res: Response | SocketResponse,
822
+ ): void {
823
+ // @TODO: perform payload validation
824
+ if (!req.body) {
825
+ this.logger.debug('Empty body');
826
+ res.status(400).json({ err: 'Web Channel Handler : Bad Request!' });
827
+
828
+ return;
829
+ } else {
830
+ // Parse json form data (in case of content-type multipart/form-data)
831
+ req.body.data =
832
+ typeof req.body.data === 'string'
833
+ ? JSON.parse(req.body.data)
834
+ : req.body.data;
835
+ }
836
+
837
+ this.validateSession(req, res, async (profile) => {
838
+ // Set data in file upload case
839
+ const body: Web.IncomingMessage = req.body;
840
+ const channelAttrs = this.getChannelAttributes(req);
841
+ const event = new WebEventWrapper<N>(this, body, channelAttrs);
842
+ if (event._adapter.eventType === StdEventType.message) {
843
+ // Handle upload when files are provided
844
+ if (event._adapter.messageType === IncomingMessageType.attachments) {
845
+ try {
846
+ const attachment = await this.handleUpload(req, res);
847
+ if (attachment) {
848
+ event._adapter.attachment = attachment;
849
+ event._adapter.raw.data = {
850
+ type: AttachmentOrmEntity.getTypeByMime(attachment.type),
851
+ url: await this.getPublicUrl(attachment),
852
+ };
853
+ }
854
+ } catch (err) {
855
+ this.logger.warn('Unable to upload file ', err);
856
+
857
+ return res
858
+ .status(403)
859
+ .json({ err: 'Web Channel Handler : File upload failed!' });
860
+ }
861
+ }
862
+
863
+ // Handler sync message sent by chatbot
864
+ if (body.sync && body.author === 'chatbot') {
865
+ const sentMessage: MessageCreateDto = {
866
+ mid: event.getId(),
867
+ message: event.getMessage() as StdOutgoingMessage,
868
+ recipient: profile.id,
869
+ read: true,
870
+ delivery: true,
871
+ };
872
+ this.eventEmitter.emit('hook:chatbot:sent', sentMessage, event);
873
+
874
+ return res.status(200).json(event._adapter.raw);
875
+ } else {
876
+ // Generate unique ID and handle message
877
+ event._adapter.raw.mid = this.generateId();
878
+ // Force author id from session
879
+ event._adapter.raw.author = profile.foreign_id;
880
+ }
881
+ }
882
+
883
+ event.setSender(profile as unknown as Subscriber);
884
+
885
+ const type = event.getEventType();
886
+ if (type) {
887
+ this.broadcast(
888
+ profile as unknown as Subscriber,
889
+ type,
890
+ event._adapter.raw,
891
+ );
892
+ this.eventEmitter.emit(`hook:chatbot:${type}`, event);
893
+ } else {
894
+ this.logger.error('Webhook received unknown event ', event);
895
+ }
896
+ res.status(200).json(event._adapter.raw);
897
+ });
898
+ }
899
+
900
+ /**
901
+ * Checks if a given request is a socket request
902
+ *
903
+ * @param req Either a HTTP express request or a WS request
904
+ * @returns True if it's a WS request
905
+ */
906
+ isSocketRequest(req: Request | SocketRequest): req is SocketRequest {
907
+ return 'isSocket' in req && req.isSocket;
908
+ }
909
+
910
+ /**
911
+ * Process incoming Web Channel data (finding out its type and assigning it to its proper handler)
912
+ *
913
+ * @param req Either a HTTP Express request or a WS request (Synthetic Object)
914
+ * @param res Either a HTTP Express response or a WS response (Synthetic Object)
915
+ */
916
+ async handle(req: Request | SocketRequest, res: Response | SocketResponse) {
917
+ const settings = await this.getSettings();
918
+ // Web Channel messaging can be done through websockets or long-polling
919
+ try {
920
+ await this.checkRequest(req, res);
921
+ if (req.method === 'GET') {
922
+ if (!this.isSocketRequest(req) && req.query._get) {
923
+ switch (req.query._get) {
924
+ case 'settings':
925
+ this.logger.debug('connected .. sending settings');
926
+ try {
927
+ const menu = await this.menuService.getTree();
928
+
929
+ return res.status(200).json({
930
+ menu,
931
+ server_date: new Date().toISOString(),
932
+ ...settings,
933
+ });
934
+ } catch (err) {
935
+ this.logger.warn('Unable to retrieve menu ', err);
936
+
937
+ return res.status(500).json({ err: 'Unable to retrieve menu' });
938
+ }
939
+ case 'polling':
940
+ // Handle polling when user is not connected via websocket
941
+ return this.getMessageQueue(req, res as Response);
942
+ default:
943
+ this.logger.error('Webhook received unknown command');
944
+
945
+ return res
946
+ .status(500)
947
+ .json({ err: 'Webhook received unknown command' });
948
+ }
949
+ } else if (req.query._disconnect) {
950
+ req.session.web = undefined;
951
+
952
+ return res.status(200).json({ _disconnect: true });
953
+ } else {
954
+ // Handle webhook subscribe requests
955
+ return await this.subscribe(req, res);
956
+ }
957
+ } else {
958
+ // Handle incoming messages (through POST)
959
+ return this._handleEvent(req, res);
960
+ }
961
+ } catch (err) {
962
+ this.logger.warn('Request check failed', err);
963
+
964
+ return res
965
+ .status(403)
966
+ .json({ err: 'Web Channel Handler : Unauthorized!' });
967
+ }
968
+ }
969
+
970
+ /**
971
+ * Returns a unique identifier for the subscriber
972
+ *
973
+ * @returns UUID
974
+ */
975
+ generateId(): string {
976
+ return 'web-' + uuidv4();
977
+ }
978
+
979
+ /**
980
+ * Formats a text message that will be sent to the widget
981
+ *
982
+ * @param message - A text to be sent to the end user
983
+ * @param _options - might contain additional settings
984
+ *
985
+ * @returns A ready to be sent text message
986
+ */
987
+ _textFormat(
988
+ message: StdOutgoingTextMessage,
989
+ _options?: BlockOptions,
990
+ ): Web.OutgoingMessageBase {
991
+ return {
992
+ type: Web.OutgoingMessageType.text,
993
+ data: message,
994
+ };
995
+ }
996
+
997
+ /**
998
+ * Formats a text + quick replies message that can be sent back
999
+ *
1000
+ * @param message - A text + quick replies to be sent to the end user
1001
+ * @param _options - might contain additional settings
1002
+ *
1003
+ * @returns A ready to be sent text message
1004
+ */
1005
+ _quickRepliesFormat(
1006
+ message: StdOutgoingQuickRepliesMessage,
1007
+ _options?: BlockOptions,
1008
+ ): Web.OutgoingMessageBase {
1009
+ return {
1010
+ type: Web.OutgoingMessageType.quick_replies,
1011
+ data: {
1012
+ text: message.text,
1013
+ quick_replies: message.quickReplies,
1014
+ },
1015
+ };
1016
+ }
1017
+
1018
+ /**
1019
+ * Formats a text + buttons message that can be sent back
1020
+ *
1021
+ * @param message - A text + buttons to be sent to the end user
1022
+ * @param _options - Might contain additional settings
1023
+ *
1024
+ * @returns A formatted Object understandable by the widget
1025
+ */
1026
+ _buttonsFormat(
1027
+ message: StdOutgoingButtonsMessage,
1028
+ _options?: BlockOptions,
1029
+ ): Web.OutgoingMessageBase {
1030
+ return {
1031
+ type: Web.OutgoingMessageType.buttons,
1032
+ data: {
1033
+ text: message.text,
1034
+ buttons: message.buttons,
1035
+ },
1036
+ };
1037
+ }
1038
+
1039
+ /**
1040
+ * Formats an attachment + quick replies message that can be sent to the widget
1041
+ *
1042
+ * @param message - An attachment + quick replies to be sent to the end user
1043
+ * @param _options - Might contain additional settings
1044
+ *
1045
+ * @returns A ready to be sent attachment message
1046
+ */
1047
+ async _attachmentFormat(
1048
+ message: StdOutgoingAttachmentMessage,
1049
+ _options?: BlockOptions,
1050
+ ): Promise<Web.OutgoingMessageBase> {
1051
+ const payload: Web.OutgoingMessageBase = {
1052
+ type: Web.OutgoingMessageType.file,
1053
+ data: {
1054
+ type: message.attachment.type,
1055
+ url: await this.getPublicUrl(message.attachment.payload),
1056
+ },
1057
+ };
1058
+ if (message.quickReplies && message.quickReplies.length > 0) {
1059
+ return {
1060
+ ...payload,
1061
+ data: {
1062
+ ...payload.data,
1063
+ quick_replies: message.quickReplies,
1064
+ } as Web.OutgoingFileMessageData,
1065
+ };
1066
+ }
1067
+
1068
+ return payload;
1069
+ }
1070
+
1071
+ /**
1072
+ * Formats a collection of items to be sent to the widget (carousel/list)
1073
+ *
1074
+ * @param data - A list of data items to be sent to the end user
1075
+ * @param options - Might contain additional settings
1076
+ *
1077
+ * @returns An array of elements object
1078
+ */
1079
+ async _formatElements(
1080
+ data: ContentElement[],
1081
+ options: BlockOptions,
1082
+ ): Promise<Web.MessageElement[]> {
1083
+ if (!options.content || !options.content.fields) {
1084
+ throw new Error('Content options are missing the fields');
1085
+ }
1086
+
1087
+ const fields = options.content.fields;
1088
+ const buttons: Button[] = options.content.buttons;
1089
+ const result: Web.MessageElement[] = [];
1090
+
1091
+ for (const item of data) {
1092
+ const element: Web.MessageElement = {
1093
+ title: item[fields.title],
1094
+ buttons: item.buttons || [],
1095
+ };
1096
+
1097
+ if (fields.subtitle && item[fields.subtitle]) {
1098
+ element.subtitle = item[fields.subtitle];
1099
+ }
1100
+
1101
+ if (fields.image_url && item[fields.image_url]) {
1102
+ const attachmentRef =
1103
+ typeof item[fields.image_url] === 'string'
1104
+ ? { url: item[fields.image_url] }
1105
+ : (item[fields.image_url].payload as AttachmentRef);
1106
+ element.image_url = await this.getPublicUrl(attachmentRef);
1107
+ }
1108
+
1109
+ buttons.forEach((button: Button, index) => {
1110
+ const btn = { ...button };
1111
+ if (btn.type === ButtonType.web_url) {
1112
+ // Get built-in or an external URL from custom field
1113
+ const urlField = fields.url;
1114
+ btn.url =
1115
+ urlField && item[urlField]
1116
+ ? item[urlField]
1117
+ : ContentOrmEntity.getUrl(item);
1118
+ if (!btn.url.startsWith('http')) {
1119
+ btn.url = 'https://' + btn.url;
1120
+ }
1121
+ // Set default action the same as the first web_url button
1122
+ if (!element.default_action) {
1123
+ const { title: _title, ...defaultAction } = btn;
1124
+ element.default_action = defaultAction;
1125
+ }
1126
+ } else {
1127
+ if (
1128
+ 'action_payload' in fields &&
1129
+ fields.action_payload &&
1130
+ fields.action_payload in item
1131
+ ) {
1132
+ btn.payload = btn.title + ':' + item[fields.action_payload];
1133
+ } else {
1134
+ const postback = ContentOrmEntity.getPayload(item);
1135
+ btn.payload = btn.title + ':' + postback;
1136
+ }
1137
+ }
1138
+ // Set custom title for first button if provided
1139
+ if (index === 0 && fields.action_title && item[fields.action_title]) {
1140
+ btn.title = item[fields.action_title];
1141
+ }
1142
+ element.buttons?.push(btn);
1143
+ });
1144
+
1145
+ if (Array.isArray(element.buttons) && element.buttons.length === 0) {
1146
+ delete element.buttons;
1147
+ }
1148
+
1149
+ result.push(element);
1150
+ }
1151
+
1152
+ return result;
1153
+ }
1154
+
1155
+ /**
1156
+ * Format a list of elements
1157
+ *
1158
+ * @param message - Contains elements to be sent to the end user
1159
+ * @param options - Might contain additional settings
1160
+ *
1161
+ * @returns A ready to be sent list template message
1162
+ */
1163
+ async _listFormat(
1164
+ message: StdOutgoingListMessage,
1165
+ options: BlockOptions,
1166
+ ): Promise<Web.OutgoingMessageBase> {
1167
+ const data = message.elements || [];
1168
+ const pagination = message.pagination;
1169
+ let buttons: Button[] = [],
1170
+ elements: Web.MessageElement[] = [];
1171
+
1172
+ // Items count min check
1173
+ if (!data.length) {
1174
+ this.logger.error('Insufficient content count (must be >= 0 for list)');
1175
+ throw new Error('Insufficient content count (list >= 0)');
1176
+ }
1177
+
1178
+ // Toggle "View More" button (check if there's more items to display)
1179
+ if (pagination.total - pagination.skip - pagination.limit > 0) {
1180
+ buttons = [
1181
+ {
1182
+ type: ButtonType.postback,
1183
+ title: this.i18n.t('View More'),
1184
+ payload: VIEW_MORE_PAYLOAD,
1185
+ },
1186
+ ];
1187
+ }
1188
+
1189
+ // Populate items (elements/cards) with content
1190
+ elements = await this._formatElements(data, options);
1191
+ const topElementStyle = options.content?.top_element_style
1192
+ ? {
1193
+ top_element_style: options.content?.top_element_style,
1194
+ }
1195
+ : {};
1196
+
1197
+ return {
1198
+ type: Web.OutgoingMessageType.list,
1199
+ data: {
1200
+ elements,
1201
+ buttons,
1202
+ ...topElementStyle,
1203
+ },
1204
+ };
1205
+ }
1206
+
1207
+ /**
1208
+ * Format a carousel message
1209
+ *
1210
+ * @param message - Contains elements to be sent to the end user
1211
+ * @param options - Might contain additional settings
1212
+ *
1213
+ * @returns A carousel ready to be sent as a message
1214
+ */
1215
+ async _carouselFormat(
1216
+ message: StdOutgoingListMessage,
1217
+ options: BlockOptions,
1218
+ ): Promise<Web.OutgoingMessageBase> {
1219
+ const data = message.elements || [];
1220
+ // Items count min check
1221
+ if (data.length === 0) {
1222
+ this.logger.error(
1223
+ 'Insufficient content count (must be > 0 for carousel)',
1224
+ );
1225
+ throw new Error('Insufficient content count (carousel > 0)');
1226
+ }
1227
+
1228
+ // Populate items (elements/cards) with content
1229
+ const elements = await this._formatElements(data, options);
1230
+
1231
+ return {
1232
+ type: Web.OutgoingMessageType.carousel,
1233
+ data: {
1234
+ elements,
1235
+ },
1236
+ };
1237
+ }
1238
+
1239
+ /**
1240
+ * Creates an widget compliant data structure for any message envelope
1241
+ *
1242
+ * @param envelope - The message standard envelope
1243
+ * @param options - The block options related to the message
1244
+ *
1245
+ * @returns A template filled with its payload
1246
+ */
1247
+ async _formatMessage(
1248
+ envelope: StdOutgoingEnvelope,
1249
+ options: BlockOptions,
1250
+ ): Promise<Web.OutgoingMessageBase> {
1251
+ switch (envelope.format) {
1252
+ case OutgoingMessageFormat.attachment:
1253
+ return await this._attachmentFormat(envelope.message, options);
1254
+ case OutgoingMessageFormat.buttons:
1255
+ return this._buttonsFormat(envelope.message, options);
1256
+ case OutgoingMessageFormat.carousel:
1257
+ return await this._carouselFormat(envelope.message, options);
1258
+ case OutgoingMessageFormat.list:
1259
+ return await this._listFormat(envelope.message, options);
1260
+ case OutgoingMessageFormat.quickReplies:
1261
+ return this._quickRepliesFormat(envelope.message, options);
1262
+ case OutgoingMessageFormat.text:
1263
+ return this._textFormat(envelope.message, options);
1264
+
1265
+ default:
1266
+ throw new Error('Unknown message format');
1267
+ }
1268
+ }
1269
+
1270
+ /**
1271
+ * Sends a message to the end-user using websocket
1272
+ *
1273
+ * @param subscriber - End-user toward which message will be sent
1274
+ * @param type - The message to be sent (message, typing, ...)
1275
+ * @param content - The message payload contain additional settings
1276
+ * @param [excludedRooms=[]] - Array of room names to exclude from receiving the message.
1277
+ */
1278
+ private broadcast(
1279
+ subscriber: Subscriber,
1280
+ type: StdEventType,
1281
+ content: any,
1282
+ excludedRooms: string[] = [],
1283
+ ): void {
1284
+ const channelData = subscriber.channel;
1285
+ if (channelData.data?.isSocket) {
1286
+ this.websocketGateway.broadcast(subscriber, type, content, excludedRooms);
1287
+ } else {
1288
+ // Do nothing, messages will be retrieved via polling
1289
+ }
1290
+ }
1291
+
1292
+ /**
1293
+ * Send a Web Channel Message to the end-user
1294
+ *
1295
+ * @param event - Incoming event/message being responded to
1296
+ * @param envelope - The message to be sent {format, message}
1297
+ * @param options - Might contain additional settings
1298
+ * @param _context - Contextual data
1299
+ *
1300
+ * @returns The web's response, otherwise an error
1301
+ */
1302
+ async sendMessage(
1303
+ event: WebEventWrapper<N>,
1304
+ envelope: StdOutgoingEnvelope,
1305
+ options: BlockOptions,
1306
+ _context?: any,
1307
+ ): Promise<{ mid: string }> {
1308
+ const messageBase: Web.OutgoingMessageBase = await this._formatMessage(
1309
+ envelope,
1310
+ options,
1311
+ );
1312
+ const subscriber = event.getSender();
1313
+ const message: Web.OutgoingMessage = {
1314
+ ...messageBase,
1315
+ mid: this.generateId(),
1316
+ author: 'chatbot',
1317
+ createdAt: new Date(),
1318
+ handover: !!(options && options.assignTo),
1319
+ };
1320
+ const next = async (): Promise<any> => {
1321
+ this.broadcast(subscriber, StdEventType.message, message);
1322
+
1323
+ return { mid: message.mid };
1324
+ };
1325
+
1326
+ if (options && options.typing) {
1327
+ const autoTimeout =
1328
+ message && message.data && 'text' in message.data
1329
+ ? message.data.text.length * 10
1330
+ : 1000;
1331
+ const timeout =
1332
+ typeof options.typing === 'number' ? options.typing : autoTimeout;
1333
+ try {
1334
+ await this.sendTypingIndicator(subscriber, timeout);
1335
+
1336
+ return next();
1337
+ } catch (err) {
1338
+ this.logger.error('Failed in sending typing indicator ', err);
1339
+ }
1340
+ }
1341
+
1342
+ return next();
1343
+ }
1344
+
1345
+ /**
1346
+ * Send a typing indicator (waterline) to the end user for a given duration
1347
+ *
1348
+ * @param recipient - The end-user object
1349
+ * @param timeout - Duration of the typing indicator in milliseconds
1350
+ */
1351
+ async sendTypingIndicator(
1352
+ recipient: Subscriber,
1353
+ timeout: number,
1354
+ ): Promise<void> {
1355
+ return new Promise((resolve, reject) => {
1356
+ try {
1357
+ this.broadcast(recipient, StdEventType.typing, true);
1358
+ setTimeout(() => {
1359
+ this.broadcast(recipient, StdEventType.typing, false);
1360
+
1361
+ return resolve();
1362
+ }, timeout);
1363
+ } catch (err) {
1364
+ reject(err);
1365
+ }
1366
+ });
1367
+ }
1368
+
1369
+ /**
1370
+ * Fetch the end-user profile data
1371
+ *
1372
+ * @param event - The message event received
1373
+ *
1374
+ * @returns The web's response, otherwise an error
1375
+ */
1376
+ async getSubscriberData(
1377
+ event: WebEventWrapper<N>,
1378
+ ): Promise<SubscriberCreateDto> {
1379
+ const sender = event.getSender();
1380
+ const {
1381
+ id: _id,
1382
+ createdAt: _createdAt,
1383
+ updatedAt: _updatedAt,
1384
+ ...rest
1385
+ } = sender;
1386
+ const subscriber: SubscriberCreateDto = {
1387
+ ...rest,
1388
+ channel: sender.channel,
1389
+ };
1390
+
1391
+ return subscriber;
1392
+ }
1393
+
1394
+ /**
1395
+ * Checks if the request is authorized to download a given attachment file.
1396
+ *
1397
+ * @param attachment The attachment object
1398
+ * @param req - The HTTP express request object.
1399
+ * @return True, if requester is authorized to download the attachment
1400
+ */
1401
+ public async hasDownloadAccess(
1402
+ attachment: AttachmentOrmEntity,
1403
+ req: Request,
1404
+ ) {
1405
+ const subscriberId = req.session.web?.profile?.id as string;
1406
+ if (attachment.access === AttachmentAccess.Public) {
1407
+ return true;
1408
+ } else if (!subscriberId) {
1409
+ this.logger.warn(
1410
+ `Unauthorized access attempt to attachment ${attachment.id}`,
1411
+ );
1412
+
1413
+ return false;
1414
+ } else if (
1415
+ attachment.createdByRef === AttachmentCreatedByRef.Subscriber &&
1416
+ subscriberId === attachment.createdBy
1417
+ ) {
1418
+ // Either subscriber wants to access the attachment he sent
1419
+ return true;
1420
+ } else {
1421
+ // Or, he would like to access an attachment sent to him privately
1422
+ const message = await this.messageService.findOne({
1423
+ where: {
1424
+ recipient: { id: subscriberId },
1425
+ // "message" is your JSONB column
1426
+ message: Raw(
1427
+ (alias) => `
1428
+ (
1429
+ jsonb_typeof(${alias}->'attachment') = 'object'
1430
+ AND (${alias}->'attachment'->'payload'->>'id') = :attId
1431
+ ) OR (
1432
+ jsonb_typeof(${alias}->'attachment') = 'array'
1433
+ AND EXISTS (
1434
+ SELECT 1 FROM jsonb_array_elements(${alias}->'attachment') a
1435
+ WHERE a->'payload'->>'id' = :attId
1436
+ )
1437
+ )
1438
+ `,
1439
+ { attId: attachment.id },
1440
+ ),
1441
+ },
1442
+ });
1443
+
1444
+ return !!message;
1445
+ }
1446
+ }
1447
+
1448
+ /**
1449
+ * Web channel middleware
1450
+ *
1451
+ * @param req Express Request
1452
+ * @param res Express Response
1453
+ * @param next Callback function
1454
+ */
1455
+ async middleware(req: Request, res: Response, next: NextFunction) {
1456
+ if (!this.isSocketRequest(req)) {
1457
+ if (req.headers['content-type']?.includes('multipart/form-data')) {
1458
+ // Handle multipart uploads (Long Pooling only)
1459
+ return upload(req, res, next);
1460
+ } else if (req.headers['content-type']?.includes('text/plain')) {
1461
+ // Handle plain text payloads as JSON (retro-compatibility)
1462
+ const textParser = bodyParser.text({ type: 'text/plain' });
1463
+
1464
+ return textParser(req, res, () => {
1465
+ try {
1466
+ req.body =
1467
+ typeof req.body === 'string' ? JSON.parse(req.body) : req.body;
1468
+ next();
1469
+ } catch (err) {
1470
+ next(err);
1471
+ }
1472
+ });
1473
+ }
1474
+ }
1475
+
1476
+ // Do nothing
1477
+ next();
1478
+ }
1479
+ }