@hed-hog/core 0.0.398 → 0.0.400

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 (664) hide show
  1. package/dist/ai/ai-agent.sort.d.ts +6 -0
  2. package/dist/ai/ai-agent.sort.d.ts.map +1 -0
  3. package/dist/ai/ai-agent.sort.js +21 -0
  4. package/dist/ai/ai-agent.sort.js.map +1 -0
  5. package/dist/ai/ai.controller.d.ts +4 -4
  6. package/dist/ai/ai.service.d.ts +35 -4
  7. package/dist/ai/ai.service.d.ts.map +1 -1
  8. package/dist/ai/ai.service.js +51 -137
  9. package/dist/ai/ai.service.js.map +1 -1
  10. package/dist/ai-instruction/ai-instruction.service.d.ts.map +1 -1
  11. package/dist/ai-instruction/ai-instruction.service.js +26 -23
  12. package/dist/ai-instruction/ai-instruction.service.js.map +1 -1
  13. package/dist/ai-instruction/ai-instruction.sort.d.ts +16 -0
  14. package/dist/ai-instruction/ai-instruction.sort.d.ts.map +1 -0
  15. package/dist/ai-instruction/ai-instruction.sort.js +32 -0
  16. package/dist/ai-instruction/ai-instruction.sort.js.map +1 -0
  17. package/dist/auth/auth.controller.d.ts +24 -8
  18. package/dist/auth/auth.controller.d.ts.map +1 -1
  19. package/dist/auth/auth.module.d.ts.map +1 -1
  20. package/dist/auth/auth.module.js +8 -1
  21. package/dist/auth/auth.module.js.map +1 -1
  22. package/dist/auth/auth.service.d.ts +72 -25
  23. package/dist/auth/auth.service.d.ts.map +1 -1
  24. package/dist/auth/auth.service.js +41 -4
  25. package/dist/auth/auth.service.js.map +1 -1
  26. package/dist/auth/guards/auth.guard.d.ts +3 -1
  27. package/dist/auth/guards/auth.guard.d.ts.map +1 -1
  28. package/dist/auth/guards/auth.guard.js +12 -3
  29. package/dist/auth/guards/auth.guard.js.map +1 -1
  30. package/dist/authorize/authorize.controller.d.ts +30 -6
  31. package/dist/authorize/authorize.controller.d.ts.map +1 -1
  32. package/dist/authorize/authorize.controller.js +120 -13
  33. package/dist/authorize/authorize.controller.js.map +1 -1
  34. package/dist/authorize/authorize.errors.d.ts +34 -0
  35. package/dist/authorize/authorize.errors.d.ts.map +1 -0
  36. package/dist/authorize/authorize.errors.js +37 -0
  37. package/dist/authorize/authorize.errors.js.map +1 -0
  38. package/dist/authorize/authorize.module.d.ts.map +1 -1
  39. package/dist/authorize/authorize.module.js +6 -1
  40. package/dist/authorize/authorize.module.js.map +1 -1
  41. package/dist/authorize/authorize.service.d.ts +78 -4
  42. package/dist/authorize/authorize.service.d.ts.map +1 -1
  43. package/dist/authorize/authorize.service.js +212 -21
  44. package/dist/authorize/authorize.service.js.map +1 -1
  45. package/dist/authorize/dto/authorize-info.dto.d.ts +10 -1
  46. package/dist/authorize/dto/authorize-info.dto.d.ts.map +1 -1
  47. package/dist/authorize/dto/authorize-info.dto.js +16 -1
  48. package/dist/authorize/dto/authorize-info.dto.js.map +1 -1
  49. package/dist/authorize/dto/consent.dto.d.ts +10 -1
  50. package/dist/authorize/dto/consent.dto.d.ts.map +1 -1
  51. package/dist/authorize/dto/consent.dto.js +16 -1
  52. package/dist/authorize/dto/consent.dto.js.map +1 -1
  53. package/dist/authorize/dto/token.dto.d.ts +12 -0
  54. package/dist/authorize/dto/token.dto.d.ts.map +1 -1
  55. package/dist/authorize/dto/token.dto.js +21 -1
  56. package/dist/authorize/dto/token.dto.js.map +1 -1
  57. package/dist/authorize/oauth-exception.filter.d.ts +17 -0
  58. package/dist/authorize/oauth-exception.filter.d.ts.map +1 -0
  59. package/dist/authorize/oauth-exception.filter.js +54 -0
  60. package/dist/authorize/oauth-exception.filter.js.map +1 -0
  61. package/dist/authorize/oauth-metadata.service.d.ts +39 -0
  62. package/dist/authorize/oauth-metadata.service.d.ts.map +1 -0
  63. package/dist/authorize/oauth-metadata.service.js +81 -0
  64. package/dist/authorize/oauth-metadata.service.js.map +1 -0
  65. package/dist/authorize/well-known.controller.d.ts +67 -0
  66. package/dist/authorize/well-known.controller.d.ts.map +1 -0
  67. package/dist/authorize/well-known.controller.js +126 -0
  68. package/dist/authorize/well-known.controller.js.map +1 -0
  69. package/dist/captcha/captcha.service.d.ts +32 -2
  70. package/dist/captcha/captcha.service.d.ts.map +1 -1
  71. package/dist/captcha/captcha.service.js +85 -12
  72. package/dist/captcha/captcha.service.js.map +1 -1
  73. package/dist/challenge/challenge.service.d.ts +2 -2
  74. package/dist/core.module.d.ts.map +1 -1
  75. package/dist/core.module.js +6 -0
  76. package/dist/core.module.js.map +1 -1
  77. package/dist/dashboard/dashboard/dashboard.controller.d.ts +9 -9
  78. package/dist/dashboard/dashboard/dashboard.service.d.ts +9 -9
  79. package/dist/dashboard/dashboard-component/dashboard-component.controller.d.ts +3 -3
  80. package/dist/dashboard/dashboard-component/dashboard-component.service.d.ts +3 -3
  81. package/dist/dashboard/dashboard-component-role/dashboard-component-role.controller.d.ts +3 -3
  82. package/dist/dashboard/dashboard-component-role/dashboard-component-role.service.d.ts +3 -3
  83. package/dist/dashboard/dashboard-component-role/dashboard-component-role.service.d.ts.map +1 -1
  84. package/dist/dashboard/dashboard-component-role/dashboard-component-role.service.js +2 -4
  85. package/dist/dashboard/dashboard-component-role/dashboard-component-role.service.js.map +1 -1
  86. package/dist/dashboard/dashboard-component-role/dashboard-component-role.sort.d.ts +8 -0
  87. package/dist/dashboard/dashboard-component-role/dashboard-component-role.sort.d.ts.map +1 -0
  88. package/dist/dashboard/dashboard-component-role/dashboard-component-role.sort.js +18 -0
  89. package/dist/dashboard/dashboard-component-role/dashboard-component-role.sort.js.map +1 -0
  90. package/dist/dashboard/dashboard-item/dashboard-item.service.d.ts.map +1 -1
  91. package/dist/dashboard/dashboard-item/dashboard-item.service.js +2 -4
  92. package/dist/dashboard/dashboard-item/dashboard-item.service.js.map +1 -1
  93. package/dist/dashboard/dashboard-item/dashboard-item.sort.d.ts +9 -0
  94. package/dist/dashboard/dashboard-item/dashboard-item.sort.d.ts.map +1 -0
  95. package/dist/dashboard/dashboard-item/dashboard-item.sort.js +19 -0
  96. package/dist/dashboard/dashboard-item/dashboard-item.sort.js.map +1 -0
  97. package/dist/dashboard/dashboard-role/dashboard-role.controller.d.ts +3 -3
  98. package/dist/dashboard/dashboard-role/dashboard-role.service.d.ts +3 -3
  99. package/dist/dashboard/dashboard-role/dashboard-role.service.d.ts.map +1 -1
  100. package/dist/dashboard/dashboard-role/dashboard-role.service.js +2 -4
  101. package/dist/dashboard/dashboard-role/dashboard-role.service.js.map +1 -1
  102. package/dist/dashboard/dashboard-role/dashboard-role.sort.d.ts +8 -0
  103. package/dist/dashboard/dashboard-role/dashboard-role.sort.d.ts.map +1 -0
  104. package/dist/dashboard/dashboard-role/dashboard-role.sort.js +16 -0
  105. package/dist/dashboard/dashboard-role/dashboard-role.sort.js.map +1 -0
  106. package/dist/file/file-upload-ticket.service.d.ts +160 -0
  107. package/dist/file/file-upload-ticket.service.d.ts.map +1 -0
  108. package/dist/file/file-upload-ticket.service.js +382 -0
  109. package/dist/file/file-upload-ticket.service.js.map +1 -0
  110. package/dist/file/file.controller.d.ts +24 -1
  111. package/dist/file/file.controller.d.ts.map +1 -1
  112. package/dist/file/file.controller.js +63 -2
  113. package/dist/file/file.controller.js.map +1 -1
  114. package/dist/file/file.module.d.ts.map +1 -1
  115. package/dist/file/file.module.js +14 -2
  116. package/dist/file/file.module.js.map +1 -1
  117. package/dist/file/file.service.d.ts +182 -6
  118. package/dist/file/file.service.d.ts.map +1 -1
  119. package/dist/file/file.service.js +385 -36
  120. package/dist/file/file.service.js.map +1 -1
  121. package/dist/file/filename-encoding.util.d.ts +24 -0
  122. package/dist/file/filename-encoding.util.d.ts.map +1 -0
  123. package/dist/file/filename-encoding.util.js +63 -0
  124. package/dist/file/filename-encoding.util.js.map +1 -0
  125. package/dist/file/image-optimization.service.d.ts +27 -0
  126. package/dist/file/image-optimization.service.d.ts.map +1 -1
  127. package/dist/file/image-optimization.service.js +63 -14
  128. package/dist/file/image-optimization.service.js.map +1 -1
  129. package/dist/file/mcp-file-source.schema.d.ts +33 -0
  130. package/dist/file/mcp-file-source.schema.d.ts.map +1 -0
  131. package/dist/file/mcp-file-source.schema.js +75 -0
  132. package/dist/file/mcp-file-source.schema.js.map +1 -0
  133. package/dist/file/mcp-file-source.service.d.ts +124 -0
  134. package/dist/file/mcp-file-source.service.d.ts.map +1 -0
  135. package/dist/file/mcp-file-source.service.js +262 -0
  136. package/dist/file/mcp-file-source.service.js.map +1 -0
  137. package/dist/file/mimetype-sniff.util.d.ts +62 -0
  138. package/dist/file/mimetype-sniff.util.d.ts.map +1 -0
  139. package/dist/file/mimetype-sniff.util.js +226 -0
  140. package/dist/file/mimetype-sniff.util.js.map +1 -0
  141. package/dist/file/remote-fetch.util.d.ts +35 -0
  142. package/dist/file/remote-fetch.util.d.ts.map +1 -0
  143. package/dist/file/remote-fetch.util.js +236 -0
  144. package/dist/file/remote-fetch.util.js.map +1 -0
  145. package/dist/impersonation/dto/start-impersonation.dto.d.ts +4 -1
  146. package/dist/impersonation/dto/start-impersonation.dto.d.ts.map +1 -1
  147. package/dist/impersonation/dto/start-impersonation.dto.js +1 -1
  148. package/dist/impersonation/dto/start-impersonation.dto.js.map +1 -1
  149. package/dist/impersonation/impersonation.service.d.ts +8 -3
  150. package/dist/impersonation/impersonation.service.d.ts.map +1 -1
  151. package/dist/impersonation/impersonation.service.js +14 -4
  152. package/dist/impersonation/impersonation.service.js.map +1 -1
  153. package/dist/incident/incident.controller.d.ts +2 -1
  154. package/dist/incident/incident.controller.d.ts.map +1 -1
  155. package/dist/incident/incident.controller.js +10 -6
  156. package/dist/incident/incident.controller.js.map +1 -1
  157. package/dist/incident/incident.service.d.ts +2 -0
  158. package/dist/incident/incident.service.d.ts.map +1 -1
  159. package/dist/incident/incident.service.js +4 -0
  160. package/dist/incident/incident.service.js.map +1 -1
  161. package/dist/index.d.ts +17 -0
  162. package/dist/index.d.ts.map +1 -1
  163. package/dist/index.js +17 -0
  164. package/dist/index.js.map +1 -1
  165. package/dist/integration-profile/integration-profile.secrets.d.ts.map +1 -1
  166. package/dist/integration-profile/integration-profile.secrets.js +7 -0
  167. package/dist/integration-profile/integration-profile.secrets.js.map +1 -1
  168. package/dist/integration-profile/integration-profile.service.d.ts +0 -13
  169. package/dist/integration-profile/integration-profile.service.d.ts.map +1 -1
  170. package/dist/integration-profile/integration-profile.service.js +5 -40
  171. package/dist/integration-profile/integration-profile.service.js.map +1 -1
  172. package/dist/integration-profile/integration-profile.utils.js +5 -5
  173. package/dist/integration-profile/integration-profile.utils.js.map +1 -1
  174. package/dist/integration-profile/testers/index.d.ts.map +1 -1
  175. package/dist/integration-profile/testers/index.js +2 -0
  176. package/dist/integration-profile/testers/index.js.map +1 -1
  177. package/dist/integration-profile/testers/shipping.testers.d.ts +3 -0
  178. package/dist/integration-profile/testers/shipping.testers.d.ts.map +1 -0
  179. package/dist/integration-profile/testers/shipping.testers.js +71 -0
  180. package/dist/integration-profile/testers/shipping.testers.js.map +1 -0
  181. package/dist/locale/locale.controller.d.ts +1 -1
  182. package/dist/locale/locale.service.d.ts +1 -1
  183. package/dist/mail/dto/send.dto.d.ts +6 -1
  184. package/dist/mail/dto/send.dto.d.ts.map +1 -1
  185. package/dist/mail/dto/send.dto.js.map +1 -1
  186. package/dist/mail/mail.service.d.ts +9 -0
  187. package/dist/mail/mail.service.d.ts.map +1 -1
  188. package/dist/mail/mail.service.js +34 -14
  189. package/dist/mail/mail.service.js.map +1 -1
  190. package/dist/mail-sent/mail-sent.controller.d.ts +1 -1
  191. package/dist/mail-sent/mail-sent.service.d.ts +1 -1
  192. package/dist/mail-sent/mail-sent.service.d.ts.map +1 -1
  193. package/dist/mail-sent/mail-sent.service.js +2 -1
  194. package/dist/mail-sent/mail-sent.service.js.map +1 -1
  195. package/dist/mail-sent/mail-sent.sort.d.ts +9 -0
  196. package/dist/mail-sent/mail-sent.sort.d.ts.map +1 -0
  197. package/dist/mail-sent/mail-sent.sort.js +19 -0
  198. package/dist/mail-sent/mail-sent.sort.js.map +1 -0
  199. package/dist/mcp/filters/mcp-challenge.filter.d.ts +20 -0
  200. package/dist/mcp/filters/mcp-challenge.filter.d.ts.map +1 -0
  201. package/dist/mcp/filters/mcp-challenge.filter.js +69 -0
  202. package/dist/mcp/filters/mcp-challenge.filter.js.map +1 -0
  203. package/dist/mcp/guards/mcp-auth.guard.d.ts +4 -1
  204. package/dist/mcp/guards/mcp-auth.guard.d.ts.map +1 -1
  205. package/dist/mcp/guards/mcp-auth.guard.js +19 -5
  206. package/dist/mcp/guards/mcp-auth.guard.js.map +1 -1
  207. package/dist/mcp/guards/mcp-permission.guard.d.ts +25 -3
  208. package/dist/mcp/guards/mcp-permission.guard.d.ts.map +1 -1
  209. package/dist/mcp/guards/mcp-permission.guard.js +46 -26
  210. package/dist/mcp/guards/mcp-permission.guard.js.map +1 -1
  211. package/dist/mcp/mcp-audit.service.d.ts +17 -0
  212. package/dist/mcp/mcp-audit.service.d.ts.map +1 -1
  213. package/dist/mcp/mcp-audit.service.js +32 -3
  214. package/dist/mcp/mcp-audit.service.js.map +1 -1
  215. package/dist/mcp/mcp-permission.service.d.ts +64 -0
  216. package/dist/mcp/mcp-permission.service.d.ts.map +1 -0
  217. package/dist/mcp/mcp-permission.service.js +178 -0
  218. package/dist/mcp/mcp-permission.service.js.map +1 -0
  219. package/dist/mcp/mcp-server.service.d.ts +3 -1
  220. package/dist/mcp/mcp-server.service.d.ts.map +1 -1
  221. package/dist/mcp/mcp-server.service.js +36 -15
  222. package/dist/mcp/mcp-server.service.js.map +1 -1
  223. package/dist/mcp/mcp.controller.d.ts.map +1 -1
  224. package/dist/mcp/mcp.controller.js +10 -2
  225. package/dist/mcp/mcp.controller.js.map +1 -1
  226. package/dist/mcp/mcp.module.d.ts.map +1 -1
  227. package/dist/mcp/mcp.module.js +5 -1
  228. package/dist/mcp/mcp.module.js.map +1 -1
  229. package/dist/mcp/tools/core-ai.mcp-tools.js +2 -9
  230. package/dist/mcp/tools/core-ai.mcp-tools.js.map +1 -1
  231. package/dist/mcp/tools/core-dashboard-items.mcp-tools.js +1 -1
  232. package/dist/mcp/tools/core-dashboard-items.mcp-tools.js.map +1 -1
  233. package/dist/mcp/tools/core-dashboard.mcp-tools.js +2 -9
  234. package/dist/mcp/tools/core-dashboard.mcp-tools.js.map +1 -1
  235. package/dist/mcp/tools/core-event-webhooks.mcp-tools.d.ts.map +1 -1
  236. package/dist/mcp/tools/core-event-webhooks.mcp-tools.js +2 -10
  237. package/dist/mcp/tools/core-event-webhooks.mcp-tools.js.map +1 -1
  238. package/dist/mcp/tools/core-files.mcp-tools.d.ts +17 -5
  239. package/dist/mcp/tools/core-files.mcp-tools.d.ts.map +1 -1
  240. package/dist/mcp/tools/core-files.mcp-tools.js +186 -24
  241. package/dist/mcp/tools/core-files.mcp-tools.js.map +1 -1
  242. package/dist/mcp/tools/core-integration-events.mcp-tools.js +2 -9
  243. package/dist/mcp/tools/core-integration-events.mcp-tools.js.map +1 -1
  244. package/dist/mcp/tools/core-mail-sent.mcp-tools.js +2 -14
  245. package/dist/mcp/tools/core-mail-sent.mcp-tools.js.map +1 -1
  246. package/dist/mcp/tools/core-mail.mcp-tools.js +2 -9
  247. package/dist/mcp/tools/core-mail.mcp-tools.js.map +1 -1
  248. package/dist/mcp/tools/core-menus.mcp-tools.d.ts.map +1 -1
  249. package/dist/mcp/tools/core-menus.mcp-tools.js +2 -10
  250. package/dist/mcp/tools/core-menus.mcp-tools.js.map +1 -1
  251. package/dist/mcp/tools/core-notifications.mcp-tools.d.ts.map +1 -1
  252. package/dist/mcp/tools/core-notifications.mcp-tools.js +0 -1
  253. package/dist/mcp/tools/core-notifications.mcp-tools.js.map +1 -1
  254. package/dist/mcp/tools/core-roles.mcp-tools.d.ts.map +1 -1
  255. package/dist/mcp/tools/core-roles.mcp-tools.js +2 -13
  256. package/dist/mcp/tools/core-roles.mcp-tools.js.map +1 -1
  257. package/dist/mcp/tools/core-routes.mcp-tools.d.ts.map +1 -1
  258. package/dist/mcp/tools/core-routes.mcp-tools.js +2 -11
  259. package/dist/mcp/tools/core-routes.mcp-tools.js.map +1 -1
  260. package/dist/mcp/tools/core-screens.mcp-tools.d.ts.map +1 -1
  261. package/dist/mcp/tools/core-screens.mcp-tools.js +2 -11
  262. package/dist/mcp/tools/core-screens.mcp-tools.js.map +1 -1
  263. package/dist/mcp/tools/core-sessions.mcp-tools.d.ts.map +1 -1
  264. package/dist/mcp/tools/core-sessions.mcp-tools.js +0 -2
  265. package/dist/mcp/tools/core-sessions.mcp-tools.js.map +1 -1
  266. package/dist/mcp/tools/core-settings.mcp-tools.d.ts.map +1 -1
  267. package/dist/mcp/tools/core-settings.mcp-tools.js +2 -10
  268. package/dist/mcp/tools/core-settings.mcp-tools.js.map +1 -1
  269. package/dist/mcp/tools/core-users.mcp-tools.js +2 -9
  270. package/dist/mcp/tools/core-users.mcp-tools.js.map +1 -1
  271. package/dist/mcp/tools/core-webhooks.mcp-tools.d.ts.map +1 -1
  272. package/dist/mcp/tools/core-webhooks.mcp-tools.js +2 -10
  273. package/dist/mcp/tools/core-webhooks.mcp-tools.js.map +1 -1
  274. package/dist/mcp/types/mcp-context.type.d.ts +9 -0
  275. package/dist/mcp/types/mcp-context.type.d.ts.map +1 -1
  276. package/dist/mcp-chat/mcp-chat.service.d.ts.map +1 -1
  277. package/dist/mcp-chat/mcp-chat.service.js +8 -0
  278. package/dist/mcp-chat/mcp-chat.service.js.map +1 -1
  279. package/dist/meeting/meeting-provider.registry.d.ts +115 -0
  280. package/dist/meeting/meeting-provider.registry.d.ts.map +1 -1
  281. package/dist/meeting/meeting-provider.registry.js.map +1 -1
  282. package/dist/meeting/meeting.constants.d.ts +70 -0
  283. package/dist/meeting/meeting.constants.d.ts.map +1 -1
  284. package/dist/meeting/meeting.constants.js +9 -1
  285. package/dist/meeting/meeting.constants.js.map +1 -1
  286. package/dist/menu/menu.service.d.ts.map +1 -1
  287. package/dist/menu/menu.service.js +29 -9
  288. package/dist/menu/menu.service.js.map +1 -1
  289. package/dist/message-template/dto/update-message-template.dto.d.ts +18 -0
  290. package/dist/message-template/dto/update-message-template.dto.d.ts.map +1 -0
  291. package/dist/message-template/dto/update-message-template.dto.js +38 -0
  292. package/dist/message-template/dto/update-message-template.dto.js.map +1 -0
  293. package/dist/message-template/message-template-admin.service.d.ts +70 -0
  294. package/dist/message-template/message-template-admin.service.d.ts.map +1 -0
  295. package/dist/message-template/message-template-admin.service.js +226 -0
  296. package/dist/message-template/message-template-admin.service.js.map +1 -0
  297. package/dist/message-template/message-template.controller.d.ts +29 -0
  298. package/dist/message-template/message-template.controller.d.ts.map +1 -0
  299. package/dist/message-template/message-template.controller.js +101 -0
  300. package/dist/message-template/message-template.controller.js.map +1 -0
  301. package/dist/message-template/message-template.module.d.ts +10 -0
  302. package/dist/message-template/message-template.module.d.ts.map +1 -0
  303. package/dist/message-template/message-template.module.js +33 -0
  304. package/dist/message-template/message-template.module.js.map +1 -0
  305. package/dist/message-template/message-template.registry.d.ts +55 -0
  306. package/dist/message-template/message-template.registry.d.ts.map +1 -0
  307. package/dist/message-template/message-template.registry.js +64 -0
  308. package/dist/message-template/message-template.registry.js.map +1 -0
  309. package/dist/message-template/message-template.service.d.ts +59 -0
  310. package/dist/message-template/message-template.service.d.ts.map +1 -0
  311. package/dist/message-template/message-template.service.js +166 -0
  312. package/dist/message-template/message-template.service.js.map +1 -0
  313. package/dist/notification/notification.constants.d.ts +11 -0
  314. package/dist/notification/notification.constants.d.ts.map +1 -0
  315. package/dist/notification/notification.constants.js +14 -0
  316. package/dist/notification/notification.constants.js.map +1 -0
  317. package/dist/notification/notification.controller.d.ts +20 -20
  318. package/dist/notification/notification.module.d.ts.map +1 -1
  319. package/dist/notification/notification.module.js +3 -0
  320. package/dist/notification/notification.module.js.map +1 -1
  321. package/dist/notification/notification.service.d.ts +33 -21
  322. package/dist/notification/notification.service.d.ts.map +1 -1
  323. package/dist/notification/notification.service.js +36 -2
  324. package/dist/notification/notification.service.js.map +1 -1
  325. package/dist/oauth/oauth.controller.d.ts +4 -6
  326. package/dist/oauth/oauth.controller.d.ts.map +1 -1
  327. package/dist/oauth/oauth.controller.js +0 -1
  328. package/dist/oauth/oauth.controller.js.map +1 -1
  329. package/dist/oauth/oauth.errors.d.ts +15 -1
  330. package/dist/oauth/oauth.errors.d.ts.map +1 -1
  331. package/dist/oauth/oauth.errors.js +9 -1
  332. package/dist/oauth/oauth.errors.js.map +1 -1
  333. package/dist/oauth/oauth.module.d.ts.map +1 -1
  334. package/dist/oauth/oauth.module.js +6 -1
  335. package/dist/oauth/oauth.module.js.map +1 -1
  336. package/dist/oauth/oauth.service.d.ts +25 -5
  337. package/dist/oauth/oauth.service.d.ts.map +1 -1
  338. package/dist/oauth/oauth.service.js +63 -27
  339. package/dist/oauth/oauth.service.js.map +1 -1
  340. package/dist/oauth/providers/abstract.provider.d.ts +10 -0
  341. package/dist/oauth/providers/abstract.provider.d.ts.map +1 -1
  342. package/dist/oauth/providers/abstract.provider.js +39 -12
  343. package/dist/oauth/providers/abstract.provider.js.map +1 -1
  344. package/dist/oauth/providers/github.provider.d.ts +1 -1
  345. package/dist/oauth/providers/github.provider.d.ts.map +1 -1
  346. package/dist/oauth/providers/github.provider.js +48 -22
  347. package/dist/oauth/providers/github.provider.js.map +1 -1
  348. package/dist/oauth/providers/microsoft-entra-id.provider.d.ts.map +1 -1
  349. package/dist/oauth/providers/microsoft-entra-id.provider.js +6 -0
  350. package/dist/oauth/providers/microsoft-entra-id.provider.js.map +1 -1
  351. package/dist/observability/monitored-cron.d.ts +29 -12
  352. package/dist/observability/monitored-cron.d.ts.map +1 -1
  353. package/dist/observability/monitored-cron.js +131 -46
  354. package/dist/observability/monitored-cron.js.map +1 -1
  355. package/dist/pairing/pairing.controller.d.ts +9 -9
  356. package/dist/pairing/pairing.service.d.ts +15 -11
  357. package/dist/pairing/pairing.service.d.ts.map +1 -1
  358. package/dist/profile/dto/change-password.dto.d.ts.map +1 -1
  359. package/dist/profile/dto/change-password.dto.js +4 -6
  360. package/dist/profile/dto/change-password.dto.js.map +1 -1
  361. package/dist/profile/profile.controller.d.ts +1 -1
  362. package/dist/profile/profile.service.d.ts +1 -1
  363. package/dist/profile/profile.service.d.ts.map +1 -1
  364. package/dist/profile/profile.service.js +9 -3
  365. package/dist/profile/profile.service.js.map +1 -1
  366. package/dist/realtime/realtime-tick.coalescer.d.ts +34 -0
  367. package/dist/realtime/realtime-tick.coalescer.d.ts.map +1 -0
  368. package/dist/realtime/realtime-tick.coalescer.js +60 -0
  369. package/dist/realtime/realtime-tick.coalescer.js.map +1 -0
  370. package/dist/realtime/realtime.service.d.ts +2 -0
  371. package/dist/realtime/realtime.service.d.ts.map +1 -1
  372. package/dist/realtime/realtime.service.js +22 -2
  373. package/dist/realtime/realtime.service.js.map +1 -1
  374. package/dist/redis/redis-kv.service.d.ts +90 -0
  375. package/dist/redis/redis-kv.service.d.ts.map +1 -0
  376. package/dist/redis/redis-kv.service.js +247 -0
  377. package/dist/redis/redis-kv.service.js.map +1 -0
  378. package/dist/redis/redis-master.d.ts +29 -0
  379. package/dist/redis/redis-master.d.ts.map +1 -0
  380. package/dist/redis/redis-master.js +81 -0
  381. package/dist/redis/redis-master.js.map +1 -0
  382. package/dist/redis/redis-pubsub.d.ts +12 -0
  383. package/dist/redis/redis-pubsub.d.ts.map +1 -1
  384. package/dist/redis/redis-pubsub.js +25 -2
  385. package/dist/redis/redis-pubsub.js.map +1 -1
  386. package/dist/redis/redis.module.d.ts +11 -0
  387. package/dist/redis/redis.module.d.ts.map +1 -0
  388. package/dist/redis/redis.module.js +30 -0
  389. package/dist/redis/redis.module.js.map +1 -0
  390. package/dist/session/session.controller.d.ts +6 -2
  391. package/dist/session/session.controller.d.ts.map +1 -1
  392. package/dist/session/session.service.d.ts +118 -15
  393. package/dist/session/session.service.d.ts.map +1 -1
  394. package/dist/session/session.service.js +251 -77
  395. package/dist/session/session.service.js.map +1 -1
  396. package/dist/setting/setting.controller.d.ts +5 -0
  397. package/dist/setting/setting.controller.d.ts.map +1 -1
  398. package/dist/setting/setting.service.d.ts +7 -0
  399. package/dist/setting/setting.service.d.ts.map +1 -1
  400. package/dist/setting/setting.service.js +38 -3
  401. package/dist/setting/setting.service.js.map +1 -1
  402. package/dist/task/task.service.d.ts +17 -0
  403. package/dist/task/task.service.d.ts.map +1 -1
  404. package/dist/task/task.service.js +48 -13
  405. package/dist/task/task.service.js.map +1 -1
  406. package/dist/token/token.service.d.ts +19 -1
  407. package/dist/token/token.service.d.ts.map +1 -1
  408. package/dist/token/token.service.js +39 -2
  409. package/dist/token/token.service.js.map +1 -1
  410. package/dist/user/user-credential.util.d.ts +10 -0
  411. package/dist/user/user-credential.util.d.ts.map +1 -1
  412. package/dist/user/user-credential.util.js +14 -1
  413. package/dist/user/user-credential.util.js.map +1 -1
  414. package/dist/user/user.service.d.ts +12 -4
  415. package/dist/user/user.service.d.ts.map +1 -1
  416. package/dist/user/user.service.js +2 -11
  417. package/dist/user/user.service.js.map +1 -1
  418. package/dist/user/user.sort.d.ts +16 -0
  419. package/dist/user/user.sort.d.ts.map +1 -0
  420. package/dist/user/user.sort.js +25 -0
  421. package/dist/user/user.sort.js.map +1 -0
  422. package/dist/utils/abbreviate-name.d.ts +13 -0
  423. package/dist/utils/abbreviate-name.d.ts.map +1 -0
  424. package/dist/utils/abbreviate-name.js +42 -0
  425. package/dist/utils/abbreviate-name.js.map +1 -0
  426. package/dist/utils/date-range-query.dto.d.ts +11 -0
  427. package/dist/utils/date-range-query.dto.d.ts.map +1 -0
  428. package/dist/utils/date-range-query.dto.js +63 -0
  429. package/dist/utils/date-range-query.dto.js.map +1 -0
  430. package/dist/utils/date-range.d.ts +96 -0
  431. package/dist/utils/date-range.d.ts.map +1 -0
  432. package/dist/utils/date-range.js +172 -0
  433. package/dist/utils/date-range.js.map +1 -0
  434. package/dist/webhook-integration/webhook-utils.d.ts.map +1 -1
  435. package/dist/webhook-integration/webhook-utils.js +24 -0
  436. package/dist/webhook-integration/webhook-utils.js.map +1 -1
  437. package/dist/whatsapp-sender/whatsapp-recipients.d.ts +49 -0
  438. package/dist/whatsapp-sender/whatsapp-recipients.d.ts.map +1 -0
  439. package/dist/whatsapp-sender/whatsapp-recipients.js +66 -0
  440. package/dist/whatsapp-sender/whatsapp-recipients.js.map +1 -0
  441. package/dist/whatsapp-sender/whatsapp-sender.service.d.ts +25 -0
  442. package/dist/whatsapp-sender/whatsapp-sender.service.d.ts.map +1 -1
  443. package/dist/whatsapp-sender/whatsapp-sender.service.js +46 -5
  444. package/dist/whatsapp-sender/whatsapp-sender.service.js.map +1 -1
  445. package/hedhog/data/integration_provider.yaml +9 -0
  446. package/hedhog/data/integration_type.yaml +6 -0
  447. package/hedhog/data/locale.yaml +0 -1
  448. package/hedhog/data/mail.yaml +2 -2
  449. package/hedhog/data/mail_layout.yaml +6 -3
  450. package/hedhog/data/menu.yaml +25 -5
  451. package/hedhog/data/route.yaml +140 -0
  452. package/hedhog/data/setting_group.yaml +137 -3
  453. package/hedhog/frontend/app/access-log/page.tsx.ejs +47 -53
  454. package/hedhog/frontend/app/account/components/active-sessions.tsx.ejs +33 -8
  455. package/hedhog/frontend/app/account/components/mcp-tokens.tsx.ejs +54 -13
  456. package/hedhog/frontend/app/account/components/mfa-method-card.tsx.ejs +7 -1
  457. package/hedhog/frontend/app/account/components/recovery-codes-dialog.tsx.ejs +1 -0
  458. package/hedhog/frontend/app/account/components/tokens.tsx.ejs +47 -17
  459. package/hedhog/frontend/app/ai_agent/page.tsx.ejs +46 -5
  460. package/hedhog/frontend/app/ai_instruction/_components/ai-instruction-form.tsx.ejs +101 -30
  461. package/hedhog/frontend/app/ai_instruction/_components/ai-instruction-versions.tsx.ejs +24 -8
  462. package/hedhog/frontend/app/ai_instruction/page.tsx.ejs +80 -15
  463. package/hedhog/frontend/app/configurations/[slug]/components/image-optimization-action.tsx.ejs +166 -0
  464. package/hedhog/frontend/app/configurations/[slug]/components/setting-field.test.tsx.ejs +145 -45
  465. package/hedhog/frontend/app/configurations/[slug]/components/setting-field.tsx.ejs +99 -219
  466. package/hedhog/frontend/app/configurations/[slug]/page.tsx.ejs +19 -1
  467. package/hedhog/frontend/app/configurations/layout.tsx.ejs +19 -5
  468. package/hedhog/frontend/app/dashboard/[slug]/widget-renderer.tsx.ejs +2 -8
  469. package/hedhog/frontend/app/dashboard/components/dynamic-widget.tsx.ejs +3 -0
  470. package/hedhog/frontend/app/dashboard/components/widget-wrapper.tsx.ejs +4 -0
  471. package/hedhog/frontend/app/dashboard/dashboard-home-tabs.tsx.ejs +43 -44
  472. package/hedhog/frontend/app/dashboard/management/tabs/component-roles-tab.tsx.ejs +41 -3
  473. package/hedhog/frontend/app/dashboard/management/tabs/components-tab.tsx.ejs +42 -2
  474. package/hedhog/frontend/app/dashboard/management/tabs/dashboard-roles-tab.tsx.ejs +41 -3
  475. package/hedhog/frontend/app/dashboard/management/tabs/dashboards-tab.tsx.ejs +39 -4
  476. package/hedhog/frontend/app/dashboard/management/tabs/items-tab.tsx.ejs +42 -3
  477. package/hedhog/frontend/app/incidents/page.tsx.ejs +60 -31
  478. package/hedhog/frontend/app/integration/profiles/page.tsx.ejs +45 -5
  479. package/hedhog/frontend/app/integrations-webhooks/page.tsx.ejs +92 -15
  480. package/hedhog/frontend/app/mail/log/page.tsx.ejs +109 -61
  481. package/hedhog/frontend/app/mail/template/page.tsx.ejs +125 -23
  482. package/hedhog/frontend/app/mcp_chat/chat-components.tsx.ejs +13 -15
  483. package/hedhog/frontend/app/mcp_chat/page.tsx.ejs +116 -110
  484. package/hedhog/frontend/app/message-templates/_components/message-template-sheet.tsx.ejs +245 -0
  485. package/hedhog/frontend/app/message-templates/_lib/types.ts.ejs +24 -0
  486. package/hedhog/frontend/app/message-templates/page.tsx.ejs +182 -0
  487. package/hedhog/frontend/app/pages/_components/page-wizard-sheet.tsx.ejs +1 -0
  488. package/hedhog/frontend/app/pages/page.tsx.ejs +94 -9
  489. package/hedhog/frontend/app/roles/menus.tsx.ejs +4 -4
  490. package/hedhog/frontend/app/roles/routes.tsx.ejs +4 -4
  491. package/hedhog/frontend/app/roles/users.tsx.ejs +4 -4
  492. package/hedhog/frontend/app/setting-list/page.tsx.ejs +71 -9
  493. package/hedhog/frontend/app/users/page.tsx.ejs +77 -67
  494. package/hedhog/frontend/messages/en.json +183 -36
  495. package/hedhog/frontend/messages/pt.json +183 -36
  496. package/hedhog/table/cron_lock.yaml +17 -0
  497. package/hedhog/table/file.yaml +13 -1
  498. package/hedhog/table/file_upload_chunk.yaml +23 -0
  499. package/hedhog/table/file_upload_ticket.yaml +67 -0
  500. package/hedhog/table/mcp_tool_call_log.yaml +30 -22
  501. package/hedhog/table/message_template.yaml +33 -0
  502. package/hedhog/table/setting.yaml +8 -0
  503. package/hedhog/table/user_session.yaml +36 -1
  504. package/package.json +8 -6
  505. package/src/ai/ai-agent.sort.ts +21 -0
  506. package/src/ai/ai.service.spec.ts +173 -1
  507. package/src/ai/ai.service.ts +64 -193
  508. package/src/ai-instruction/ai-instruction.service.ts +32 -28
  509. package/src/ai-instruction/ai-instruction.sort.ts +32 -0
  510. package/src/auth/auth.module.ts +8 -1
  511. package/src/auth/auth.service.spec.ts +108 -1
  512. package/src/auth/auth.service.ts +59 -5
  513. package/src/auth/guards/auth.guard.ts +9 -1
  514. package/src/authorize/authorize.controller.ts +126 -11
  515. package/src/authorize/authorize.errors.ts +55 -0
  516. package/src/authorize/authorize.module.ts +6 -1
  517. package/src/authorize/authorize.service.spec.ts +379 -7
  518. package/src/authorize/authorize.service.ts +309 -23
  519. package/src/authorize/dto/authorize-info.dto.ts +21 -3
  520. package/src/authorize/dto/consent.dto.ts +21 -3
  521. package/src/authorize/dto/token.dto.ts +24 -2
  522. package/src/authorize/oauth-exception.filter.ts +58 -0
  523. package/src/authorize/oauth-metadata.service.ts +67 -0
  524. package/src/authorize/well-known.controller.spec.ts +84 -0
  525. package/src/authorize/well-known.controller.ts +96 -0
  526. package/src/captcha/captcha.service.spec.ts +211 -4
  527. package/src/captcha/captcha.service.ts +127 -10
  528. package/src/core.module.ts +6 -0
  529. package/src/dashboard/dashboard-component-role/dashboard-component-role.service.ts +2 -3
  530. package/src/dashboard/dashboard-component-role/dashboard-component-role.sort.ts +18 -0
  531. package/src/dashboard/dashboard-item/dashboard-item.service.ts +2 -3
  532. package/src/dashboard/dashboard-item/dashboard-item.sort.ts +19 -0
  533. package/src/dashboard/dashboard-role/dashboard-role.service.ts +2 -3
  534. package/src/dashboard/dashboard-role/dashboard-role.sort.ts +16 -0
  535. package/src/file/file-upload-ticket.service.spec.ts +422 -0
  536. package/src/file/file-upload-ticket.service.ts +513 -0
  537. package/src/file/file.controller.ts +65 -0
  538. package/src/file/file.module.ts +14 -2
  539. package/src/file/file.service.spec.ts +94 -0
  540. package/src/file/file.service.ts +432 -30
  541. package/src/file/filename-encoding.util.spec.ts +54 -0
  542. package/src/file/filename-encoding.util.ts +67 -0
  543. package/src/file/image-optimization.service.spec.ts +156 -19
  544. package/src/file/image-optimization.service.ts +106 -21
  545. package/src/file/mcp-file-source.schema.ts +83 -0
  546. package/src/file/mcp-file-source.service.spec.ts +473 -0
  547. package/src/file/mcp-file-source.service.ts +445 -0
  548. package/src/file/mimetype-sniff.util.spec.ts +126 -0
  549. package/src/file/mimetype-sniff.util.ts +265 -0
  550. package/src/file/remote-fetch.util.spec.ts +117 -0
  551. package/src/file/remote-fetch.util.ts +330 -0
  552. package/src/impersonation/dto/start-impersonation.dto.ts +5 -2
  553. package/src/impersonation/impersonation.service.spec.ts +24 -1
  554. package/src/impersonation/impersonation.service.ts +14 -4
  555. package/src/incident/incident.controller.ts +9 -1
  556. package/src/incident/incident.service.ts +7 -0
  557. package/src/index.ts +17 -0
  558. package/src/integration-profile/integration-profile.secrets.ts +7 -0
  559. package/src/integration-profile/integration-profile.service.ts +7 -64
  560. package/src/integration-profile/integration-profile.utils.spec.ts +9 -0
  561. package/src/integration-profile/integration-profile.utils.ts +5 -5
  562. package/src/integration-profile/testers/index.ts +2 -0
  563. package/src/integration-profile/testers/remaining.testers.spec.ts +79 -0
  564. package/src/integration-profile/testers/shipping.testers.ts +94 -0
  565. package/src/mail/dto/send.dto.ts +6 -1
  566. package/src/mail/mail-template.spec.ts +58 -1
  567. package/src/mail/mail.service.spec.ts +112 -0
  568. package/src/mail/mail.service.ts +42 -4
  569. package/src/mail-sent/mail-sent.service.ts +3 -0
  570. package/src/mail-sent/mail-sent.sort.ts +19 -0
  571. package/src/mcp/filters/mcp-challenge.filter.spec.ts +76 -0
  572. package/src/mcp/filters/mcp-challenge.filter.ts +70 -0
  573. package/src/mcp/guards/mcp-auth.guard.spec.ts +51 -2
  574. package/src/mcp/guards/mcp-auth.guard.ts +24 -1
  575. package/src/mcp/guards/mcp-permission.guard.spec.ts +109 -15
  576. package/src/mcp/guards/mcp-permission.guard.ts +76 -51
  577. package/src/mcp/mcp-audit.service.spec.ts +107 -0
  578. package/src/mcp/mcp-audit.service.ts +37 -1
  579. package/src/mcp/mcp-permission.service.spec.ts +197 -0
  580. package/src/mcp/mcp-permission.service.ts +184 -0
  581. package/src/mcp/mcp-server.service.spec.ts +84 -2
  582. package/src/mcp/mcp-server.service.ts +111 -87
  583. package/src/mcp/mcp.controller.ts +8 -1
  584. package/src/mcp/mcp.module.ts +5 -1
  585. package/src/mcp/tools/core-ai.mcp-tools.ts +1 -1
  586. package/src/mcp/tools/core-dashboard-items.mcp-tools.ts +1 -1
  587. package/src/mcp/tools/core-dashboard.mcp-tools.ts +1 -1
  588. package/src/mcp/tools/core-event-webhooks.mcp-tools.ts +1 -2
  589. package/src/mcp/tools/core-files.mcp-tools.ts +202 -22
  590. package/src/mcp/tools/core-integration-events.mcp-tools.ts +1 -1
  591. package/src/mcp/tools/core-mail-sent.mcp-tools.ts +1 -1
  592. package/src/mcp/tools/core-mail.mcp-tools.ts +1 -1
  593. package/src/mcp/tools/core-menus.mcp-tools.ts +1 -2
  594. package/src/mcp/tools/core-notifications.mcp-tools.ts +0 -1
  595. package/src/mcp/tools/core-roles.mcp-tools.ts +1 -5
  596. package/src/mcp/tools/core-routes.mcp-tools.ts +1 -3
  597. package/src/mcp/tools/core-screens.mcp-tools.ts +1 -3
  598. package/src/mcp/tools/core-sessions.mcp-tools.ts +0 -2
  599. package/src/mcp/tools/core-settings.mcp-tools.ts +1 -2
  600. package/src/mcp/tools/core-users.mcp-tools.ts +1 -1
  601. package/src/mcp/tools/core-webhooks.mcp-tools.ts +1 -2
  602. package/src/mcp/types/mcp-context.type.ts +15 -6
  603. package/src/mcp-chat/mcp-chat.service.ts +8 -0
  604. package/src/meeting/meeting-provider.registry.ts +121 -0
  605. package/src/meeting/meeting.constants.ts +74 -0
  606. package/src/menu/menu.service.spec.ts +89 -0
  607. package/src/menu/menu.service.ts +29 -11
  608. package/src/message-template/dto/update-message-template.dto.ts +22 -0
  609. package/src/message-template/message-template-admin.service.spec.ts +163 -0
  610. package/src/message-template/message-template-admin.service.ts +239 -0
  611. package/src/message-template/message-template.controller.ts +52 -0
  612. package/src/message-template/message-template.module.ts +21 -0
  613. package/src/message-template/message-template.registry.spec.ts +62 -0
  614. package/src/message-template/message-template.registry.ts +125 -0
  615. package/src/message-template/message-template.service.spec.ts +149 -0
  616. package/src/message-template/message-template.service.ts +149 -0
  617. package/src/notification/notification.constants.ts +10 -0
  618. package/src/notification/notification.module.ts +3 -0
  619. package/src/notification/notification.service.spec.ts +75 -1
  620. package/src/notification/notification.service.ts +39 -1
  621. package/src/oauth/oauth.controller.ts +0 -1
  622. package/src/oauth/oauth.errors.ts +7 -0
  623. package/src/oauth/oauth.module.ts +6 -1
  624. package/src/oauth/oauth.service.spec.ts +58 -7
  625. package/src/oauth/oauth.service.ts +71 -32
  626. package/src/oauth/providers/abstract.provider.spec.ts +192 -0
  627. package/src/oauth/providers/abstract.provider.ts +46 -14
  628. package/src/oauth/providers/github.provider.ts +57 -34
  629. package/src/oauth/providers/microsoft-entra-id.provider.ts +8 -1
  630. package/src/observability/monitored-cron.spec.ts +164 -31
  631. package/src/observability/monitored-cron.ts +154 -62
  632. package/src/profile/dto/change-password.dto.ts +25 -7
  633. package/src/profile/profile.service.spec.ts +97 -0
  634. package/src/profile/profile.service.ts +9 -3
  635. package/src/realtime/realtime-tick.coalescer.spec.ts +92 -0
  636. package/src/realtime/realtime-tick.coalescer.ts +60 -0
  637. package/src/realtime/realtime.service.spec.ts +33 -0
  638. package/src/realtime/realtime.service.ts +28 -2
  639. package/src/redis/redis-kv.service.ts +261 -0
  640. package/src/redis/redis-master.spec.ts +111 -0
  641. package/src/redis/redis-master.ts +86 -0
  642. package/src/redis/redis-pubsub.ts +27 -3
  643. package/src/redis/redis.module.ts +17 -0
  644. package/src/session/session.service.spec.ts +121 -42
  645. package/src/session/session.service.ts +279 -82
  646. package/src/setting/setting.service.ts +44 -3
  647. package/src/task/task.service.spec.ts +41 -0
  648. package/src/task/task.service.ts +53 -13
  649. package/src/token/token.service.spec.ts +90 -0
  650. package/src/token/token.service.ts +48 -2
  651. package/src/user/user-credential.util.ts +14 -5
  652. package/src/user/user.service.ts +2 -12
  653. package/src/user/user.sort.ts +25 -0
  654. package/src/utils/abbreviate-name.spec.ts +50 -0
  655. package/src/utils/abbreviate-name.ts +44 -0
  656. package/src/utils/date-range-query.dto.ts +56 -0
  657. package/src/utils/date-range.spec.ts +175 -0
  658. package/src/utils/date-range.ts +246 -0
  659. package/src/webhook-integration/webhook-utils.spec.ts +67 -0
  660. package/src/webhook-integration/webhook-utils.ts +26 -0
  661. package/src/whatsapp-sender/whatsapp-recipients.spec.ts +89 -0
  662. package/src/whatsapp-sender/whatsapp-recipients.ts +83 -0
  663. package/src/whatsapp-sender/whatsapp-sender.service.spec.ts +112 -0
  664. package/src/whatsapp-sender/whatsapp-sender.service.ts +58 -5
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.DateRangeQueryDTO = void 0;
13
+ const class_transformer_1 = require("class-transformer");
14
+ const class_validator_1 = require("class-validator");
15
+ /**
16
+ * `?from=yyyy-MM-dd&to=yyyy-MM-dd` — o par padrão de recorte por período de
17
+ * toda listagem nova. Endpoint que já tem nome próprio (`dateFrom`/`dateTo` da
18
+ * fila, `createdAtFrom`/`createdAtTo` do mail-sent, `date_from`/`date_to` do
19
+ * sac) mantém o nome dele: só o que nasce daqui em diante usa `from`/`to`.
20
+ *
21
+ * Composto, e não herdado de `PaginationDTO`, porque quase todo adotante é o
22
+ * **segundo** argumento `@Query()` do controller, ao lado do `@Pagination()` —
23
+ * que descarta tudo que não é paginação. Carregar `page`/`pageSize` junto
24
+ * duplicaria campo que o DTO de filtro não é dono. Onde o DTO de filtro já
25
+ * estende `PaginationDTO`, o jeito de juntar os dois é o `IntersectionType`:
26
+ *
27
+ * ```ts
28
+ * export class ListContractsDto extends IntersectionType(
29
+ * PaginationDTO,
30
+ * DateRangeQueryDTO,
31
+ * ) {}
32
+ * ```
33
+ *
34
+ * Quem traduz este par para o `where` do banco é o `resolveDateRange` /
35
+ * `dateRangeWhere` (`./date-range`).
36
+ */
37
+ /**
38
+ * O admin manda `?from=` quando o usuário **limpa** o campo. O `@IsOptional()`
39
+ * só pula `null`/`undefined`, então sem isto o campo limpo viraria 400 — uma
40
+ * regressão de tela causada por um parâmetro que nem deveria existir. O
41
+ * `@Transform` roda no `plainToInstance` do `ValidationPipe`, antes do
42
+ * `validate`, então a string vazia nunca chega ao validador.
43
+ */
44
+ const blankToUndefined = ({ value }) => {
45
+ const raw = typeof value === 'string' ? value.trim() : value;
46
+ return raw === '' || raw === null ? undefined : raw;
47
+ };
48
+ class DateRangeQueryDTO {
49
+ }
50
+ exports.DateRangeQueryDTO = DateRangeQueryDTO;
51
+ __decorate([
52
+ (0, class_validator_1.IsOptional)(),
53
+ (0, class_transformer_1.Transform)(blankToUndefined),
54
+ (0, class_validator_1.IsDateString)({}, { message: 'from must be a date in the yyyy-MM-dd format' }),
55
+ __metadata("design:type", String)
56
+ ], DateRangeQueryDTO.prototype, "from", void 0);
57
+ __decorate([
58
+ (0, class_validator_1.IsOptional)(),
59
+ (0, class_transformer_1.Transform)(blankToUndefined),
60
+ (0, class_validator_1.IsDateString)({}, { message: 'to must be a date in the yyyy-MM-dd format' }),
61
+ __metadata("design:type", String)
62
+ ], DateRangeQueryDTO.prototype, "to", void 0);
63
+ //# sourceMappingURL=date-range-query.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-range-query.dto.js","sourceRoot":"","sources":["../../src/utils/date-range-query.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yDAA8C;AAC9C,qDAA2D;AAE3D;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH;;;;;;GAMG;AACH,MAAM,gBAAgB,GAAG,CAAC,EAAE,KAAK,EAAsB,EAAE,EAAE;IACzD,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IAE7D,OAAO,GAAG,KAAK,EAAE,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;AACtD,CAAC,CAAC;AAEF,MAAa,iBAAiB;CAgB7B;AAhBD,8CAgBC;AAXC;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,6BAAS,EAAC,gBAAgB,CAAC;IAC3B,IAAA,8BAAY,EAAC,EAAE,EAAE,EAAE,OAAO,EAAE,8CAA8C,EAAE,CAAC;;+CAChE;AAUd;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,6BAAS,EAAC,gBAAgB,CAAC;IAC3B,IAAA,8BAAY,EAAC,EAAE,EAAE,EAAE,OAAO,EAAE,4CAA4C,EAAE,CAAC;;6CAChE"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Tradução única de `?from=yyyy-MM-dd&to=yyyy-MM-dd` para limites comparáveis
3
+ * no banco.
4
+ *
5
+ * A janela é **meio-aberta** — `[from 00:00, to+1d 00:00)` — e nunca inclusiva.
6
+ * `lte new Date('2026-08-31')` compara contra o *instante* `T00:00:00Z` e
7
+ * derruba o dia 31 inteiro; `lte 23:59:59.999` perde o último milissegundo e
8
+ * mente sobre o modelo de dados. A forma meio-aberta é a única que vale igual
9
+ * para coluna `@db.Date` e para coluna `@db.Timestamptz(6)`, sem flag nenhum.
10
+ *
11
+ * Diferenças de propósito para o `resolveRangeWindow` do operations
12
+ * (`libraries/operations/src/services/shared/operations-activity-window.helper.ts`),
13
+ * que serve relatório e não listagem:
14
+ *
15
+ * - sem `from` e sem `to` devolve `null` (= sem recorte), e não o dia de hoje:
16
+ * listagem sem filtro tem de devolver tudo;
17
+ * - **não limita o fim em agora**: reunião de amanhã, contrato que vence em
18
+ * 2027 e assinatura com período à frente são justamente o que essas telas
19
+ * procuram;
20
+ * - aceita janela aberta de um lado só.
21
+ *
22
+ * Os dois hão de convergir, mas depois: aquele alimenta o e-mail do relatório
23
+ * diário e depende do clamp.
24
+ */
25
+ export interface DateRangeBounds {
26
+ gte?: Date;
27
+ lt?: Date;
28
+ }
29
+ export interface DateRange {
30
+ /** Início inclusivo, no fuso pedido. Ausente quando só veio `to`. */
31
+ gte?: Date;
32
+ /** Fim EXCLUSIVO (`to` + 1 dia), no fuso pedido. Ausente quando só veio `from`. */
33
+ lt?: Date;
34
+ /**
35
+ * As mesmas bordas em UTC puro — o que uma coluna `@db.Date` entende.
36
+ *
37
+ * O Prisma manda o parâmetro como `DATE` e o trunca pela leitura **UTC** do
38
+ * `Date`. Uma borda deslocada para fuso a leste derruba um dia inteiro sem
39
+ * erro nenhum: meia-noite de 01/09 em `Asia/Tokyo` é `2026-08-31T15:00Z`,
40
+ * que trunca para `2026-08-31`. Coluna de data pura não tem fuso, então
41
+ * converter fuso nela é sempre errado.
42
+ */
43
+ dateOnly: DateRangeBounds;
44
+ /** `yyyy-MM-dd` normalizado, já desinvertido. */
45
+ fromIso?: string;
46
+ /** `to + 1 dia`, para o `< $n::date` do SQL cru. */
47
+ toExclusiveIso?: string;
48
+ }
49
+ export interface DateRangeOptions {
50
+ /**
51
+ * Fuso IANA das bordas civis; o padrão é UTC, que é o fuso dos pods da API.
52
+ * Só afeta coluna com hora — veja `dateOnly`.
53
+ */
54
+ timezone?: string;
55
+ }
56
+ /**
57
+ * Soma dias de **calendário**. Somar 86400000 ms a um instante zonado erra o
58
+ * dia em toda virada de horário de verão.
59
+ */
60
+ export declare function addIsoDays(isoDate: string, days: number): string;
61
+ /**
62
+ * Resolve o par `from`/`to` da query.
63
+ *
64
+ * Devolve `null` quando nenhuma das pontas é data utilizável — o que cobre de
65
+ * uma vez "o cliente não filtrou", "o cliente limpou o campo e mandou
66
+ * `?from=`" e "o cliente mandou `31/08/2026`". Filtro ilegível vira "sem
67
+ * filtro", não 500: o `ValidationPipe` barra o que dá para barrar na borda, e
68
+ * aqui dentro a listagem não pode cair.
69
+ *
70
+ * Intervalo invertido é desinvertido: arrastar o calendário de trás para
71
+ * frente não deve devolver lista vazia.
72
+ */
73
+ export declare function resolveDateRange(from?: string | null, to?: string | null, options?: DateRangeOptions): DateRange | null;
74
+ export interface DateRangeWhereOptions extends DateRangeOptions {
75
+ /**
76
+ * `true` para coluna `@db.Date`. Usa as bordas UTC puras, que são as únicas
77
+ * que o `DATE` do Postgres trunca para o dia certo.
78
+ */
79
+ dateOnly?: boolean;
80
+ }
81
+ /**
82
+ * Fragmento pronto para espalhar dentro de um `where` do Prisma:
83
+ *
84
+ * ```ts
85
+ * const where = {
86
+ * deleted_at: null,
87
+ * ...dateRangeWhere('created_at', filters?.from, filters?.to),
88
+ * };
89
+ * ```
90
+ *
91
+ * Devolve `{}` quando não há recorte, então espalhar é sempre seguro e não
92
+ * existe o caminho "montei um `created_at: {}` vazio". As chaves ausentes são
93
+ * omitidas de verdade, não postas como `undefined`.
94
+ */
95
+ export declare function dateRangeWhere(field: string, from?: string | null, to?: string | null, options?: DateRangeWhereOptions): Record<string, DateRangeBounds>;
96
+ //# sourceMappingURL=date-range.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-range.d.ts","sourceRoot":"","sources":["../../src/utils/date-range.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,MAAM,WAAW,eAAe;IAC9B,GAAG,CAAC,EAAE,IAAI,CAAC;IACX,EAAE,CAAC,EAAE,IAAI,CAAC;CACX;AAED,MAAM,WAAW,SAAS;IACxB,qEAAqE;IACrE,GAAG,CAAC,EAAE,IAAI,CAAC;IACX,mFAAmF;IACnF,EAAE,CAAC,EAAE,IAAI,CAAC;IACV;;;;;;;;OAQG;IACH,QAAQ,EAAE,eAAe,CAAC;IAC1B,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oDAAoD;IACpD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAyCD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAMhE;AAuDD;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,EACpB,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,EAClB,OAAO,GAAE,gBAAqB,GAC7B,SAAS,GAAG,IAAI,CAwBlB;AAED,MAAM,WAAW,qBAAsB,SAAQ,gBAAgB;IAC7D;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,EACpB,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,EAClB,OAAO,GAAE,qBAA0B,GAClC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAajC"}
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+ /**
3
+ * Tradução única de `?from=yyyy-MM-dd&to=yyyy-MM-dd` para limites comparáveis
4
+ * no banco.
5
+ *
6
+ * A janela é **meio-aberta** — `[from 00:00, to+1d 00:00)` — e nunca inclusiva.
7
+ * `lte new Date('2026-08-31')` compara contra o *instante* `T00:00:00Z` e
8
+ * derruba o dia 31 inteiro; `lte 23:59:59.999` perde o último milissegundo e
9
+ * mente sobre o modelo de dados. A forma meio-aberta é a única que vale igual
10
+ * para coluna `@db.Date` e para coluna `@db.Timestamptz(6)`, sem flag nenhum.
11
+ *
12
+ * Diferenças de propósito para o `resolveRangeWindow` do operations
13
+ * (`libraries/operations/src/services/shared/operations-activity-window.helper.ts`),
14
+ * que serve relatório e não listagem:
15
+ *
16
+ * - sem `from` e sem `to` devolve `null` (= sem recorte), e não o dia de hoje:
17
+ * listagem sem filtro tem de devolver tudo;
18
+ * - **não limita o fim em agora**: reunião de amanhã, contrato que vence em
19
+ * 2027 e assinatura com período à frente são justamente o que essas telas
20
+ * procuram;
21
+ * - aceita janela aberta de um lado só.
22
+ *
23
+ * Os dois hão de convergir, mas depois: aquele alimenta o e-mail do relatório
24
+ * diário e depende do clamp.
25
+ */
26
+ Object.defineProperty(exports, "__esModule", { value: true });
27
+ exports.addIsoDays = addIsoDays;
28
+ exports.resolveDateRange = resolveDateRange;
29
+ exports.dateRangeWhere = dateRangeWhere;
30
+ /** Tolera ISO completo: só o prefixo `yyyy-MM-dd` interessa. */
31
+ const ISO_DATE_PREFIX = /^(\d{4})-(\d{2})-(\d{2})/;
32
+ function normalizeTimezone(timezone) {
33
+ const candidate = String(timezone !== null && timezone !== void 0 ? timezone : '').trim();
34
+ if (!candidate)
35
+ return 'UTC';
36
+ try {
37
+ new Intl.DateTimeFormat('en-US', { timeZone: candidate });
38
+ return candidate;
39
+ }
40
+ catch (_a) {
41
+ // Fuso inventado não pode derrubar uma listagem: cai no fuso dos pods.
42
+ return 'UTC';
43
+ }
44
+ }
45
+ function toIsoDate(value) {
46
+ const match = ISO_DATE_PREFIX.exec(String(value !== null && value !== void 0 ? value : '').trim());
47
+ if (!match)
48
+ return null;
49
+ const [, yearText, monthText, dayText] = match;
50
+ const year = Number(yearText);
51
+ const month = Number(monthText);
52
+ const day = Number(dayText);
53
+ // `2026-02-31` casa com o regex e o `Date.UTC` o aceita virando 03/03.
54
+ // Só a volta denuncia.
55
+ const probe = new Date(Date.UTC(year, month - 1, day));
56
+ if (probe.getUTCFullYear() !== year ||
57
+ probe.getUTCMonth() !== month - 1 ||
58
+ probe.getUTCDate() !== day) {
59
+ return null;
60
+ }
61
+ return `${yearText}-${monthText}-${dayText}`;
62
+ }
63
+ /**
64
+ * Soma dias de **calendário**. Somar 86400000 ms a um instante zonado erra o
65
+ * dia em toda virada de horário de verão.
66
+ */
67
+ function addIsoDays(isoDate, days) {
68
+ const [year, month, day] = isoDate.split('-').map(Number);
69
+ return new Date(Date.UTC(year, month - 1, day + days))
70
+ .toISOString()
71
+ .slice(0, 10);
72
+ }
73
+ function utcMidnight(isoDate) {
74
+ return new Date(`${isoDate}T00:00:00.000Z`);
75
+ }
76
+ /**
77
+ * Deslocamento do fuso, em ms, no instante informado. Formatar a data no fuso
78
+ * e reinterpretar as partes como UTC devolve o offset vigente — inclusive em
79
+ * fuso com horário de verão.
80
+ */
81
+ function timezoneOffsetMs(at, timezone) {
82
+ const parts = new Intl.DateTimeFormat('en-US', {
83
+ timeZone: timezone,
84
+ hour12: false,
85
+ year: 'numeric',
86
+ month: '2-digit',
87
+ day: '2-digit',
88
+ hour: '2-digit',
89
+ minute: '2-digit',
90
+ second: '2-digit',
91
+ }).formatToParts(at);
92
+ const part = (type) => { var _a, _b; return Number((_b = (_a = parts.find((item) => item.type === type)) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : 0); };
93
+ const asUtc = Date.UTC(part('year'), part('month') - 1, part('day'),
94
+ // Algumas engines devolvem "24" para a meia-noite em hour12:false.
95
+ part('hour') % 24, part('minute'), part('second'));
96
+ return asUtc - at.getTime();
97
+ }
98
+ /** Meia-noite civil de `isoDate` naquele fuso, como instante UTC. */
99
+ function zonedMidnight(isoDate, timezone) {
100
+ if (timezone === 'UTC')
101
+ return utcMidnight(isoDate);
102
+ const naive = Date.parse(`${isoDate}T00:00:00.000Z`);
103
+ // Duas passadas: a primeira usa o offset do palpite, a segunda o do instante
104
+ // já corrigido — é o que resolve a virada de horário de verão.
105
+ let utc = naive;
106
+ for (let pass = 0; pass < 2; pass += 1) {
107
+ utc = naive - timezoneOffsetMs(new Date(utc), timezone);
108
+ }
109
+ return new Date(utc);
110
+ }
111
+ /**
112
+ * Resolve o par `from`/`to` da query.
113
+ *
114
+ * Devolve `null` quando nenhuma das pontas é data utilizável — o que cobre de
115
+ * uma vez "o cliente não filtrou", "o cliente limpou o campo e mandou
116
+ * `?from=`" e "o cliente mandou `31/08/2026`". Filtro ilegível vira "sem
117
+ * filtro", não 500: o `ValidationPipe` barra o que dá para barrar na borda, e
118
+ * aqui dentro a listagem não pode cair.
119
+ *
120
+ * Intervalo invertido é desinvertido: arrastar o calendário de trás para
121
+ * frente não deve devolver lista vazia.
122
+ */
123
+ function resolveDateRange(from, to, options = {}) {
124
+ const timezone = normalizeTimezone(options.timezone);
125
+ let fromIso = toIsoDate(from);
126
+ let toIso = toIsoDate(to);
127
+ if (!fromIso && !toIso)
128
+ return null;
129
+ if (fromIso && toIso && toIso < fromIso) {
130
+ [fromIso, toIso] = [toIso, fromIso];
131
+ }
132
+ const toExclusiveIso = toIso ? addIsoDays(toIso, 1) : undefined;
133
+ return {
134
+ gte: fromIso ? zonedMidnight(fromIso, timezone) : undefined,
135
+ lt: toExclusiveIso ? zonedMidnight(toExclusiveIso, timezone) : undefined,
136
+ dateOnly: {
137
+ gte: fromIso ? utcMidnight(fromIso) : undefined,
138
+ lt: toExclusiveIso ? utcMidnight(toExclusiveIso) : undefined,
139
+ },
140
+ fromIso: fromIso !== null && fromIso !== void 0 ? fromIso : undefined,
141
+ toExclusiveIso,
142
+ };
143
+ }
144
+ /**
145
+ * Fragmento pronto para espalhar dentro de um `where` do Prisma:
146
+ *
147
+ * ```ts
148
+ * const where = {
149
+ * deleted_at: null,
150
+ * ...dateRangeWhere('created_at', filters?.from, filters?.to),
151
+ * };
152
+ * ```
153
+ *
154
+ * Devolve `{}` quando não há recorte, então espalhar é sempre seguro e não
155
+ * existe o caminho "montei um `created_at: {}` vazio". As chaves ausentes são
156
+ * omitidas de verdade, não postas como `undefined`.
157
+ */
158
+ function dateRangeWhere(field, from, to, options = {}) {
159
+ const range = resolveDateRange(from, to, options);
160
+ if (!range)
161
+ return {};
162
+ const source = options.dateOnly
163
+ ? range.dateOnly
164
+ : { gte: range.gte, lt: range.lt };
165
+ const bounds = {};
166
+ if (source.gte)
167
+ bounds.gte = source.gte;
168
+ if (source.lt)
169
+ bounds.lt = source.lt;
170
+ return Object.keys(bounds).length > 0 ? { [field]: bounds } : {};
171
+ }
172
+ //# sourceMappingURL=date-range.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-range.js","sourceRoot":"","sources":["../../src/utils/date-range.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"webhook-utils.d.ts","sourceRoot":"","sources":["../../src/webhook-integration/webhook-utils.ts"],"names":[],"mappings":"AAGA,wBAAgB,gBAAgB,wDAE/B;AAED,wBAAgB,gBAAgB,WAE/B;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,UAEtC;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,OAuB3E;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,OAoB9C;AAqBD,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,OAAO,EACd,OAAO,SAAK,GACX,OAAO,CAiCT;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,OAejD"}
1
+ {"version":3,"file":"webhook-utils.d.ts","sourceRoot":"","sources":["../../src/webhook-integration/webhook-utils.ts"],"names":[],"mappings":"AAGA,wBAAgB,gBAAgB,wDAE/B;AAED,wBAAgB,gBAAgB,WAE/B;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,UAEtC;AA4BD,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,OAuB3E;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,OAoB9C;AAqBD,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,OAAO,EACd,OAAO,SAAK,GACX,OAAO,CAiCT;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,OAejD"}
@@ -51,6 +51,30 @@ function createPlainToken() {
51
51
  function hashToken(token) {
52
52
  return (0, crypto_1.createHash)('sha256').update(token).digest('hex');
53
53
  }
54
+ /**
55
+ * Handlebars puro não compara valores: `{{#if}}` só testa se algo é vazio. Sem
56
+ * isto um template não consegue reagir ao conteúdo do payload — o caso que
57
+ * motivou os helpers foi o webhook do Alertmanager, onde `status` chega como
58
+ * "firing" ou "resolved" e a mensagem precisa ser diferente em cada caso (mandar
59
+ * o texto de alerta quando o problema acabou é pior do que não mandar nada).
60
+ *
61
+ * Registrados uma vez, no import do módulo: `Handlebars.registerHelper` é global
62
+ * e chamá-lo a cada render só repetiria trabalho.
63
+ */
64
+ const HELPERS = {
65
+ // `{{#if (eq status "firing")}}`. A comparação é frouxa de propósito: o payload
66
+ // vem de JSON externo, onde 200 e "200" são a mesma coisa para quem escreve o
67
+ // template.
68
+ eq: (a, b) => String(a) === String(b),
69
+ ne: (a, b) => String(a) !== String(b),
70
+ gt: (a, b) => Number(a) > Number(b),
71
+ lt: (a, b) => Number(a) < Number(b),
72
+ upper: (value) => String(value !== null && value !== void 0 ? value : '').toUpperCase(),
73
+ lower: (value) => String(value !== null && value !== void 0 ? value : '').toLowerCase(),
74
+ };
75
+ for (const [name, fn] of Object.entries(HELPERS)) {
76
+ Handlebars.registerHelper(name, fn);
77
+ }
54
78
  function renderTemplate(source, context) {
55
79
  if (source === undefined || source === null) {
56
80
  return source;
@@ -1 +1 @@
1
- {"version":3,"file":"webhook-utils.js","sourceRoot":"","sources":["../../src/webhook-integration/webhook-utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,4CAEC;AAED,4CAEC;AAED,8BAEC;AAED,wCAuBC;AAED,4CAoBC;AAqBD,sDAoCC;AAED,kDAeC;AAtID,mCAA6D;AAC7D,uDAAyC;AAEzC,SAAgB,gBAAgB;IAC9B,OAAO,IAAA,mBAAU,GAAE,CAAC;AACtB,CAAC;AAED,SAAgB,gBAAgB;IAC9B,OAAO,IAAA,oBAAW,EAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC;AAED,SAAgB,SAAS,CAAC,KAAa;IACrC,OAAO,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1D,CAAC;AAED,SAAgB,cAAc,CAAC,MAAe,EAAE,OAA4B;IAC1E,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAC5C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,MAAiC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;YACtE,GAAG;YACH,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC;SAC/B,CAAC,CACH,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,gBAAgB,CAAC,KAAc;IAC7C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,UAAU,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;YAC9B,OAAO,KAAY,CAAC;QACtB,CAAC;QAED,OAAO;YACL,SAAS,EAAE,IAAI;YACf,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;SACnC,CAAC;IACJ,CAAC;IAAC,WAAM,CAAC;QACP,OAAO;YACL,WAAW,EAAE,IAAI;SAClB,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,qBAAqB,GACzB,yEAAyE,CAAC;AAE5E,SAAS,UAAU,CAAC,KAAa;IAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACrD,CAAC;AAED,SAAgB,qBAAqB,CACnC,KAAc,EACd,OAAO,GAAG,EAAE;IAEZ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAC/B,qBAAqB,CAAC,IAAI,EAAE,GAAG,OAAO,IAAI,KAAK,GAAG,CAAC,CACpD,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YACpE,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;YACrD,IAAI,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAC9B,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;gBAClC,CAAC;gBAED,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YAC7B,CAAC;YAED,OAAO,CAAC,GAAG,EAAE,qBAAqB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;QACvD,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACrE,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,mBAAmB,CAAC,KAAc;IAChD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"webhook-utils.js","sourceRoot":"","sources":["../../src/webhook-integration/webhook-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import { WhatsappTargetType } from './whatsapp-sender.service';
2
+ /**
3
+ * Destino de um aviso interno por WhatsApp: celular ou grupo.
4
+ *
5
+ * Mora no core, e nao na library que avisa, porque ja sao duas a ler a mesma
6
+ * lista digitada a mao — o SAC, para o grupo do atendimento, e o commerce, para
7
+ * os grupos de venda. Reconhecedor de JID de grupo duplicado e como as duas
8
+ * divergem: uma passa a aceitar o id sem sufixo e a outra nao, e o destino some
9
+ * em silencio no modulo que ficou para tras.
10
+ */
11
+ export type WhatsappRecipient = {
12
+ to: string;
13
+ targetType: WhatsappTargetType;
14
+ };
15
+ /**
16
+ * Id de grupo do WhatsApp (`...@g.us`), ou null quando o item nao e grupo.
17
+ *
18
+ * Grupo tem duas formas: a atual, so digitos (`120363...@g.us`), e a antiga,
19
+ * derivada de quem criou o grupo (`5511999998888-1564082267@g.us`). As duas
20
+ * saem do painel da Evolution ja com o sufixo.
21
+ *
22
+ * Sem sufixo tambem vale: um id colado do painel tem 18 digitos, e acima do teto
23
+ * do E.164 (15) nao existe telefone — a alternativa seria o descarte silencioso
24
+ * por "longo demais", que e o modo de falha que este canal combate. O corte em
25
+ * 20 digitos deixa de fora a colagem de dois telefones grudados, que nao e
26
+ * destino nenhum.
27
+ */
28
+ export declare function toWhatsappGroupJid(value: string): string | null;
29
+ /**
30
+ * Destinos de WhatsApp de uma lista digitada a mao: celulares e grupos.
31
+ *
32
+ * Nao da para reusar um `split` de e-mail: `WhatsappSenderService.normalizeTarget`
33
+ * apenas remove os nao-digitos e **nao acrescenta DDI**. Um `(11) 99999-8888`
34
+ * digitado no admin viraria `11999998888`, um numero que o provedor aceita e
35
+ * entrega em outro lugar — falha silenciosa, que e exatamente o que este canal
36
+ * existe para evitar. Por isso o DDI 55 e completado aqui quando o que sobrou
37
+ * tem cara de numero nacional (DDD + 8 ou 9 digitos).
38
+ *
39
+ * A separacao e so por virgula, ponto-e-virgula e quebra de linha — nao por
40
+ * espaco. Espaco faz parte da mascara de um telefone (`+55 (11) 3333-4444`), e
41
+ * quebrar ali produziria os fragmentos `+55`, `(11)` e `3333-4444`, todos
42
+ * descartados: a lista inteira sumiria em silencio.
43
+ *
44
+ * Menos de 10 digitos nao e telefone com DDD, e mais de 15 nao e telefone nenhum
45
+ * (o teto do E.164) — normalmente sao dois numeros que alguem separou so com
46
+ * espaco. Descartar e melhor que enviar para um numero inventado.
47
+ */
48
+ export declare function parseWhatsappRecipients(raw: string | null | undefined): WhatsappRecipient[];
49
+ //# sourceMappingURL=whatsapp-recipients.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whatsapp-recipients.d.ts","sourceRoot":"","sources":["../../src/whatsapp-sender/whatsapp-recipients.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D;;;;;;;;GAQG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,kBAAkB,CAAC;CAChC,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK/D;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC7B,iBAAiB,EAAE,CAyBrB"}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toWhatsappGroupJid = toWhatsappGroupJid;
4
+ exports.parseWhatsappRecipients = parseWhatsappRecipients;
5
+ /**
6
+ * Id de grupo do WhatsApp (`...@g.us`), ou null quando o item nao e grupo.
7
+ *
8
+ * Grupo tem duas formas: a atual, so digitos (`120363...@g.us`), e a antiga,
9
+ * derivada de quem criou o grupo (`5511999998888-1564082267@g.us`). As duas
10
+ * saem do painel da Evolution ja com o sufixo.
11
+ *
12
+ * Sem sufixo tambem vale: um id colado do painel tem 18 digitos, e acima do teto
13
+ * do E.164 (15) nao existe telefone — a alternativa seria o descarte silencioso
14
+ * por "longo demais", que e o modo de falha que este canal combate. O corte em
15
+ * 20 digitos deixa de fora a colagem de dois telefones grudados, que nao e
16
+ * destino nenhum.
17
+ */
18
+ function toWhatsappGroupJid(value) {
19
+ const match = /^(\d{5,}(?:-\d{5,})?)@g\.us$/i.exec(value);
20
+ if (match)
21
+ return `${match[1]}@g.us`;
22
+ return /^\d{16,20}$/.test(value) ? `${value}@g.us` : null;
23
+ }
24
+ /**
25
+ * Destinos de WhatsApp de uma lista digitada a mao: celulares e grupos.
26
+ *
27
+ * Nao da para reusar um `split` de e-mail: `WhatsappSenderService.normalizeTarget`
28
+ * apenas remove os nao-digitos e **nao acrescenta DDI**. Um `(11) 99999-8888`
29
+ * digitado no admin viraria `11999998888`, um numero que o provedor aceita e
30
+ * entrega em outro lugar — falha silenciosa, que e exatamente o que este canal
31
+ * existe para evitar. Por isso o DDI 55 e completado aqui quando o que sobrou
32
+ * tem cara de numero nacional (DDD + 8 ou 9 digitos).
33
+ *
34
+ * A separacao e so por virgula, ponto-e-virgula e quebra de linha — nao por
35
+ * espaco. Espaco faz parte da mascara de um telefone (`+55 (11) 3333-4444`), e
36
+ * quebrar ali produziria os fragmentos `+55`, `(11)` e `3333-4444`, todos
37
+ * descartados: a lista inteira sumiria em silencio.
38
+ *
39
+ * Menos de 10 digitos nao e telefone com DDD, e mais de 15 nao e telefone nenhum
40
+ * (o teto do E.164) — normalmente sao dois numeros que alguem separou so com
41
+ * espaco. Descartar e melhor que enviar para um numero inventado.
42
+ */
43
+ function parseWhatsappRecipients(raw) {
44
+ if (!raw)
45
+ return [];
46
+ // Map, e nao Set: o mesmo destino escrito de duas formas continua contando uma
47
+ // vez so, e o tipo precisa vir junto do valor.
48
+ const seen = new Map();
49
+ for (const item of raw.split(/[,;\n]+/)) {
50
+ const value = item.trim();
51
+ if (!value)
52
+ continue;
53
+ const group = toWhatsappGroupJid(value);
54
+ if (group) {
55
+ seen.set(group, { to: group, targetType: 'group' });
56
+ continue;
57
+ }
58
+ const digits = value.replace(/\D+/g, '');
59
+ if (digits.length < 10 || digits.length > 15)
60
+ continue;
61
+ const phone = digits.length <= 11 ? `55${digits}` : digits;
62
+ seen.set(phone, { to: phone, targetType: 'phone' });
63
+ }
64
+ return [...seen.values()];
65
+ }
66
+ //# sourceMappingURL=whatsapp-recipients.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whatsapp-recipients.js","sourceRoot":"","sources":["../../src/whatsapp-sender/whatsapp-recipients.ts"],"names":[],"mappings":";;AA6BA,gDAKC;AAqBD,0DA2BC;AAlED;;;;;;;;;;;;GAYG;AACH,SAAgB,kBAAkB,CAAC,KAAa;IAC9C,MAAM,KAAK,GAAG,+BAA+B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1D,IAAI,KAAK;QAAE,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;IAErC,OAAO,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5D,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAgB,uBAAuB,CACrC,GAA8B;IAE9B,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IAEpB,+EAA+E;IAC/E,+CAA+C;IAC/C,MAAM,IAAI,GAAG,IAAI,GAAG,EAA6B,CAAC;IAElD,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC,KAAK;YAAE,SAAS;QAErB,MAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAExC,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;YACpD,SAAS;QACX,CAAC;QAED,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACzC,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE;YAAE,SAAS;QACvD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;QAC3D,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAC5B,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { PrismaService } from '@hed-hog/api-prisma';
2
+ import { BadRequestException } from '@nestjs/common';
2
3
  export type WhatsappTargetType = 'phone' | 'group';
3
4
  export type WhatsappMedia = {
4
5
  /** Bare base64 (sem prefixo data:) ou data URL — ambos aceitos. */
@@ -23,6 +24,16 @@ export type WhatsappSendInput = {
23
24
  params?: string[];
24
25
  };
25
26
  };
27
+ /**
28
+ * Erro de envio classificado: `retryable` diz se tentar de novo pode dar
29
+ * resultado diferente. Um HTTP 4xx da Graph API (id inexistente, sem
30
+ * permissão, token ruim) não muda em cinco minutos; um 5xx ou falha de rede
31
+ * pode ser uma instabilidade passageira do provedor.
32
+ */
33
+ export declare class WhatsappSendError extends BadRequestException {
34
+ readonly retryable: boolean;
35
+ constructor(message: string, retryable: boolean);
36
+ }
26
37
  /**
27
38
  * Envio de WhatsApp usando um perfil de integração escolhido pelo usuário.
28
39
  *
@@ -37,6 +48,20 @@ export declare class WhatsappSenderService {
37
48
  send(input: WhatsappSendInput): Promise<void>;
38
49
  /** Diz se há perfil utilizável, para o chamador decidir por um fallback sem tentar o envio. */
39
50
  isConfigured(profileSlug?: string): Promise<boolean>;
51
+ /**
52
+ * Identidade do perfil que o `send` usaria, sem o `config`.
53
+ *
54
+ * Quem envia pelo provider oficial precisa dizer por qual número a mensagem
55
+ * sai, e cada módulo guarda esse id no próprio cadastro. Para achar o cadastro
56
+ * certo é preciso saber qual perfil foi resolvido — inclusive quando o slug
57
+ * veio vazio e a escolha coube a este serviço. O `config` fica de fora de
58
+ * propósito: é onde moram `access_token` e `app_secret`.
59
+ */
60
+ describeProfile(profileSlug?: string): Promise<{
61
+ id: number;
62
+ slug: string;
63
+ providerSlug: string;
64
+ }>;
40
65
  /**
41
66
  * Normaliza o destino: número vira só dígitos, id de grupo passa intacto
42
67
  * (grupos do WhatsApp têm sufixo `@g.us`, que seria destruído por um strip).
@@ -1 +1 @@
1
- {"version":3,"file":"whatsapp-sender.service.d.ts","sourceRoot":"","sources":["../../src/whatsapp-sender/whatsapp-sender.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAapD,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,OAAO,CAAC;AAEnD,MAAM,MAAM,aAAa,GAAG;IAC1B,mEAAmE;IACnE,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,qFAAqF;IACrF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,wEAAwE;IACxE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CACnE,CAAC;AAQF;;;;;;GAMG;AACH,qBACa,qBAAqB;IAK9B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0C;gBAI9C,MAAM,EAAE,aAAa;IAGlC,IAAI,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAenD,+FAA+F;IACzF,YAAY,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAoB1D;;;OAGG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,GAAE,kBAA4B,GAAG,MAAM;YAsBnE,cAAc;IAyC5B,OAAO,CAAC,mBAAmB;YAUb,iBAAiB;YAmDjB,gBAAgB;CAoF/B"}
1
+ {"version":3,"file":"whatsapp-sender.service.d.ts","sourceRoot":"","sources":["../../src/whatsapp-sender/whatsapp-sender.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EACL,mBAAmB,EAMpB,MAAM,gBAAgB,CAAC;AAKxB,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,OAAO,CAAC;AAEnD,MAAM,MAAM,aAAa,GAAG;IAC1B,mEAAmE;IACnE,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,qFAAqF;IACrF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,wEAAwE;IACxE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CACnE,CAAC;AASF;;;;;GAKG;AACH,qBAAa,iBAAkB,SAAQ,mBAAmB;aAGtC,SAAS,EAAE,OAAO;gBADlC,OAAO,EAAE,MAAM,EACC,SAAS,EAAE,OAAO;CAIrC;AAED;;;;;;GAMG;AACH,qBACa,qBAAqB;IAK9B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0C;gBAI9C,MAAM,EAAE,aAAa;IAGlC,IAAI,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAenD,+FAA+F;IACzF,YAAY,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAoB1D;;;;;;;;OAQG;IACG,eAAe,CACnB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAK9D;;;OAGG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,GAAE,kBAA4B,GAAG,MAAM;YAsBnE,cAAc;IA0C5B,OAAO,CAAC,mBAAmB;YAUb,iBAAiB;YAmDjB,gBAAgB;CAwG/B"}