@hed-hog/core 0.0.350 → 0.0.353

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 (284) hide show
  1. package/dist/access-log/access-log.controller.d.ts +16 -0
  2. package/dist/access-log/access-log.controller.d.ts.map +1 -0
  3. package/dist/access-log/access-log.controller.js +44 -0
  4. package/dist/access-log/access-log.controller.js.map +1 -0
  5. package/dist/access-log/access-log.interceptor.d.ts +9 -0
  6. package/dist/access-log/access-log.interceptor.d.ts.map +1 -0
  7. package/dist/access-log/access-log.interceptor.js +46 -0
  8. package/dist/access-log/access-log.interceptor.js.map +1 -0
  9. package/dist/access-log/access-log.module.d.ts +3 -0
  10. package/dist/access-log/access-log.module.d.ts.map +1 -0
  11. package/dist/access-log/access-log.module.js +29 -0
  12. package/dist/access-log/access-log.module.js.map +1 -0
  13. package/dist/access-log/access-log.service.d.ts +47 -0
  14. package/dist/access-log/access-log.service.d.ts.map +1 -0
  15. package/dist/access-log/access-log.service.js +113 -0
  16. package/dist/access-log/access-log.service.js.map +1 -0
  17. package/dist/access-log/dto/query-access-log.dto.d.ts +8 -0
  18. package/dist/access-log/dto/query-access-log.dto.d.ts.map +1 -0
  19. package/dist/access-log/dto/query-access-log.dto.js +42 -0
  20. package/dist/access-log/dto/query-access-log.dto.js.map +1 -0
  21. package/dist/auth/auth.controller.d.ts +9 -9
  22. package/dist/auth/auth.service.d.ts +19 -19
  23. package/dist/auth/auth.service.d.ts.map +1 -1
  24. package/dist/auth/auth.service.js +0 -4
  25. package/dist/auth/auth.service.js.map +1 -1
  26. package/dist/challenge/challenge.service.d.ts +2 -2
  27. package/dist/challenge/challenge.service.d.ts.map +1 -1
  28. package/dist/challenge/challenge.service.js +0 -1
  29. package/dist/challenge/challenge.service.js.map +1 -1
  30. package/dist/core/system.module.d.ts.map +1 -1
  31. package/dist/core/system.module.js +1 -0
  32. package/dist/core/system.module.js.map +1 -1
  33. package/dist/core.module.d.ts.map +1 -1
  34. package/dist/core.module.js +12 -0
  35. package/dist/core.module.js.map +1 -1
  36. package/dist/dashboard/dashboard-user/dashboard-user.controller.d.ts +3 -3
  37. package/dist/dashboard/dashboard-user/dashboard-user.service.d.ts +3 -3
  38. package/dist/dashboard/dashboard.module.d.ts.map +1 -1
  39. package/dist/dashboard/dashboard.module.js +4 -1
  40. package/dist/dashboard/dashboard.module.js.map +1 -1
  41. package/dist/file/file.controller.js +0 -1
  42. package/dist/file/file.controller.js.map +1 -1
  43. package/dist/file/file.service.d.ts +65 -0
  44. package/dist/file/file.service.d.ts.map +1 -1
  45. package/dist/file/file.service.js +151 -3
  46. package/dist/file/file.service.js.map +1 -1
  47. package/dist/file/provider/abstract.provider.d.ts +8 -0
  48. package/dist/file/provider/abstract.provider.d.ts.map +1 -1
  49. package/dist/file/provider/abstract.provider.js.map +1 -1
  50. package/dist/file/provider/azure.provider.d.ts +4 -0
  51. package/dist/file/provider/azure.provider.d.ts.map +1 -1
  52. package/dist/file/provider/azure.provider.js +14 -0
  53. package/dist/file/provider/azure.provider.js.map +1 -1
  54. package/dist/file/provider/gcs.provider.d.ts +4 -0
  55. package/dist/file/provider/gcs.provider.d.ts.map +1 -1
  56. package/dist/file/provider/gcs.provider.js +14 -0
  57. package/dist/file/provider/gcs.provider.js.map +1 -1
  58. package/dist/file/provider/local.provider.d.ts +4 -0
  59. package/dist/file/provider/local.provider.d.ts.map +1 -1
  60. package/dist/file/provider/local.provider.js +19 -0
  61. package/dist/file/provider/local.provider.js.map +1 -1
  62. package/dist/file/provider/provider.factory.d.ts.map +1 -1
  63. package/dist/file/provider/provider.factory.js +3 -0
  64. package/dist/file/provider/provider.factory.js.map +1 -1
  65. package/dist/file/provider/s3.provider.d.ts +4 -0
  66. package/dist/file/provider/s3.provider.d.ts.map +1 -1
  67. package/dist/file/provider/s3.provider.js +17 -0
  68. package/dist/file/provider/s3.provider.js.map +1 -1
  69. package/dist/mcp/mcp-audit.service.d.ts +3 -1
  70. package/dist/mcp/mcp-audit.service.d.ts.map +1 -1
  71. package/dist/mcp/mcp-audit.service.js +14 -2
  72. package/dist/mcp/mcp-audit.service.js.map +1 -1
  73. package/dist/mcp/mcp.controller.d.ts +3 -1
  74. package/dist/mcp/mcp.controller.d.ts.map +1 -1
  75. package/dist/mcp/mcp.controller.js +10 -2
  76. package/dist/mcp/mcp.controller.js.map +1 -1
  77. package/dist/mcp/mcp.module.d.ts.map +1 -1
  78. package/dist/mcp/mcp.module.js +72 -0
  79. package/dist/mcp/mcp.module.js.map +1 -1
  80. package/dist/mcp/tools/core-ai.mcp-tools.d.ts +45 -0
  81. package/dist/mcp/tools/core-ai.mcp-tools.d.ts.map +1 -0
  82. package/dist/mcp/tools/core-ai.mcp-tools.js +214 -0
  83. package/dist/mcp/tools/core-ai.mcp-tools.js.map +1 -0
  84. package/dist/mcp/tools/core-dashboard-items.mcp-tools.d.ts +21 -0
  85. package/dist/mcp/tools/core-dashboard-items.mcp-tools.d.ts.map +1 -0
  86. package/dist/mcp/tools/core-dashboard-items.mcp-tools.js +89 -0
  87. package/dist/mcp/tools/core-dashboard-items.mcp-tools.js.map +1 -0
  88. package/dist/mcp/tools/core-dashboard.mcp-tools.d.ts +29 -0
  89. package/dist/mcp/tools/core-dashboard.mcp-tools.d.ts.map +1 -0
  90. package/dist/mcp/tools/core-dashboard.mcp-tools.js +149 -0
  91. package/dist/mcp/tools/core-dashboard.mcp-tools.js.map +1 -0
  92. package/dist/mcp/tools/core-event-webhooks.mcp-tools.d.ts +30 -0
  93. package/dist/mcp/tools/core-event-webhooks.mcp-tools.d.ts.map +1 -0
  94. package/dist/mcp/tools/core-event-webhooks.mcp-tools.js +185 -0
  95. package/dist/mcp/tools/core-event-webhooks.mcp-tools.js.map +1 -0
  96. package/dist/mcp/tools/core-files.mcp-tools.d.ts +26 -0
  97. package/dist/mcp/tools/core-files.mcp-tools.d.ts.map +1 -0
  98. package/dist/mcp/tools/core-files.mcp-tools.js +140 -0
  99. package/dist/mcp/tools/core-files.mcp-tools.js.map +1 -0
  100. package/dist/mcp/tools/core-integration-events.mcp-tools.d.ts +26 -0
  101. package/dist/mcp/tools/core-integration-events.mcp-tools.d.ts.map +1 -0
  102. package/dist/mcp/tools/core-integration-events.mcp-tools.js +168 -0
  103. package/dist/mcp/tools/core-integration-events.mcp-tools.js.map +1 -0
  104. package/dist/mcp/tools/core-mail-profile.mcp-tools.d.ts +32 -0
  105. package/dist/mcp/tools/core-mail-profile.mcp-tools.d.ts.map +1 -0
  106. package/dist/mcp/tools/core-mail-profile.mcp-tools.js +178 -0
  107. package/dist/mcp/tools/core-mail-profile.mcp-tools.js.map +1 -0
  108. package/dist/mcp/tools/core-mail-sent.mcp-tools.d.ts +14 -0
  109. package/dist/mcp/tools/core-mail-sent.mcp-tools.d.ts.map +1 -0
  110. package/dist/mcp/tools/core-mail-sent.mcp-tools.js +106 -0
  111. package/dist/mcp/tools/core-mail-sent.mcp-tools.js.map +1 -0
  112. package/dist/mcp/tools/core-mail.mcp-tools.d.ts +36 -0
  113. package/dist/mcp/tools/core-mail.mcp-tools.d.ts.map +1 -0
  114. package/dist/mcp/tools/core-mail.mcp-tools.js +184 -0
  115. package/dist/mcp/tools/core-mail.mcp-tools.js.map +1 -0
  116. package/dist/mcp/tools/core-mcp-chat.mcp-tools.d.ts +21 -0
  117. package/dist/mcp/tools/core-mcp-chat.mcp-tools.d.ts.map +1 -0
  118. package/dist/mcp/tools/core-mcp-chat.mcp-tools.js +118 -0
  119. package/dist/mcp/tools/core-mcp-chat.mcp-tools.js.map +1 -0
  120. package/dist/mcp/tools/core-menus.mcp-tools.d.ts +40 -0
  121. package/dist/mcp/tools/core-menus.mcp-tools.d.ts.map +1 -0
  122. package/dist/mcp/tools/core-menus.mcp-tools.js +268 -0
  123. package/dist/mcp/tools/core-menus.mcp-tools.js.map +1 -0
  124. package/dist/mcp/tools/core-notifications.mcp-tools.d.ts +31 -0
  125. package/dist/mcp/tools/core-notifications.mcp-tools.d.ts.map +1 -0
  126. package/dist/mcp/tools/core-notifications.mcp-tools.js +178 -0
  127. package/dist/mcp/tools/core-notifications.mcp-tools.js.map +1 -0
  128. package/dist/mcp/tools/core-profile.mcp-tools.d.ts +20 -0
  129. package/dist/mcp/tools/core-profile.mcp-tools.d.ts.map +1 -0
  130. package/dist/mcp/tools/core-profile.mcp-tools.js +111 -0
  131. package/dist/mcp/tools/core-profile.mcp-tools.js.map +1 -0
  132. package/dist/mcp/tools/core-roles.mcp-tools.d.ts +70 -0
  133. package/dist/mcp/tools/core-roles.mcp-tools.d.ts.map +1 -0
  134. package/dist/mcp/tools/core-roles.mcp-tools.js +355 -0
  135. package/dist/mcp/tools/core-roles.mcp-tools.js.map +1 -0
  136. package/dist/mcp/tools/core-routes.mcp-tools.d.ts +52 -0
  137. package/dist/mcp/tools/core-routes.mcp-tools.d.ts.map +1 -0
  138. package/dist/mcp/tools/core-routes.mcp-tools.js +254 -0
  139. package/dist/mcp/tools/core-routes.mcp-tools.js.map +1 -0
  140. package/dist/mcp/tools/core-screens.mcp-tools.d.ts +47 -0
  141. package/dist/mcp/tools/core-screens.mcp-tools.d.ts.map +1 -0
  142. package/dist/mcp/tools/core-screens.mcp-tools.js +250 -0
  143. package/dist/mcp/tools/core-screens.mcp-tools.js.map +1 -0
  144. package/dist/mcp/tools/core-sessions.mcp-tools.d.ts +20 -0
  145. package/dist/mcp/tools/core-sessions.mcp-tools.d.ts.map +1 -0
  146. package/dist/mcp/tools/core-sessions.mcp-tools.js +128 -0
  147. package/dist/mcp/tools/core-sessions.mcp-tools.js.map +1 -0
  148. package/dist/mcp/tools/core-settings.mcp-tools.d.ts +25 -0
  149. package/dist/mcp/tools/core-settings.mcp-tools.d.ts.map +1 -1
  150. package/dist/mcp/tools/core-settings.mcp-tools.js +138 -0
  151. package/dist/mcp/tools/core-settings.mcp-tools.js.map +1 -1
  152. package/dist/mcp/tools/core-system.mcp-tools.d.ts +8 -0
  153. package/dist/mcp/tools/core-system.mcp-tools.d.ts.map +1 -0
  154. package/dist/mcp/tools/core-system.mcp-tools.js +40 -0
  155. package/dist/mcp/tools/core-system.mcp-tools.js.map +1 -0
  156. package/dist/mcp/tools/core-webhooks.mcp-tools.d.ts +46 -0
  157. package/dist/mcp/tools/core-webhooks.mcp-tools.d.ts.map +1 -0
  158. package/dist/mcp/tools/core-webhooks.mcp-tools.js +266 -0
  159. package/dist/mcp/tools/core-webhooks.mcp-tools.js.map +1 -0
  160. package/dist/mcp-chat/mcp-chat.controller.d.ts +1 -1
  161. package/dist/mcp-chat/mcp-chat.service.d.ts +25 -2
  162. package/dist/mcp-chat/mcp-chat.service.d.ts.map +1 -1
  163. package/dist/mcp-chat/mcp-chat.service.js +666 -36
  164. package/dist/mcp-chat/mcp-chat.service.js.map +1 -1
  165. package/dist/notification/notification.controller.d.ts +8 -4
  166. package/dist/notification/notification.controller.d.ts.map +1 -1
  167. package/dist/notification/notification.controller.js +12 -0
  168. package/dist/notification/notification.controller.js.map +1 -1
  169. package/dist/notification/notification.service.d.ts +19 -5
  170. package/dist/notification/notification.service.d.ts.map +1 -1
  171. package/dist/notification/notification.service.js +155 -9
  172. package/dist/notification/notification.service.js.map +1 -1
  173. package/dist/pdf/pdf.service.js +1 -1
  174. package/dist/pdf/pdf.service.js.map +1 -1
  175. package/dist/profile/profile.controller.d.ts +3 -3
  176. package/dist/profile/profile.controller.js +0 -1
  177. package/dist/profile/profile.controller.js.map +1 -1
  178. package/dist/profile/profile.module.d.ts.map +1 -1
  179. package/dist/profile/profile.module.js +1 -0
  180. package/dist/profile/profile.module.js.map +1 -1
  181. package/dist/profile/profile.service.d.ts +3 -3
  182. package/dist/session/session.controller.d.ts +2 -2
  183. package/dist/session/session.service.d.ts +6 -6
  184. package/dist/setting/setting.controller.d.ts +1 -1
  185. package/dist/setting/setting.service.d.ts +1 -1
  186. package/dist/setting/setting.service.d.ts.map +1 -1
  187. package/dist/setting/setting.service.js +1 -4
  188. package/dist/setting/setting.service.js.map +1 -1
  189. package/dist/task/task.service.d.ts +1 -0
  190. package/dist/task/task.service.d.ts.map +1 -1
  191. package/dist/task/task.service.js +25 -0
  192. package/dist/task/task.service.js.map +1 -1
  193. package/dist/token/token.service.d.ts.map +1 -1
  194. package/dist/token/token.service.js +0 -1
  195. package/dist/token/token.service.js.map +1 -1
  196. package/dist/user/user.controller.d.ts +9 -9
  197. package/dist/user/user.service.d.ts +21 -21
  198. package/dist/webhook-integration/dto/webhook-action.dto.d.ts +22 -0
  199. package/dist/webhook-integration/dto/webhook-action.dto.d.ts.map +1 -0
  200. package/dist/webhook-integration/dto/webhook-action.dto.js +120 -0
  201. package/dist/webhook-integration/dto/webhook-action.dto.js.map +1 -0
  202. package/dist/webhook-integration/webhook-integration.controller.d.ts +7 -5
  203. package/dist/webhook-integration/webhook-integration.controller.d.ts.map +1 -1
  204. package/dist/webhook-integration/webhook-integration.controller.js +18 -5
  205. package/dist/webhook-integration/webhook-integration.controller.js.map +1 -1
  206. package/dist/webhook-integration/webhook-integration.service.d.ts +14 -5
  207. package/dist/webhook-integration/webhook-integration.service.d.ts.map +1 -1
  208. package/dist/webhook-integration/webhook-integration.service.js +174 -41
  209. package/dist/webhook-integration/webhook-integration.service.js.map +1 -1
  210. package/hedhog/data/menu.yaml +15 -0
  211. package/hedhog/data/route.yaml +1304 -0
  212. package/hedhog/data/setting_group.yaml +67 -0
  213. package/hedhog/data/setting_subgroup.yaml +16 -0
  214. package/hedhog/frontend/app/access-log/page.tsx.ejs +772 -0
  215. package/hedhog/frontend/app/ai_agent/page.tsx.ejs +10 -3
  216. package/hedhog/frontend/app/dashboard/dashboard-home-tabs.tsx.ejs +33 -13
  217. package/hedhog/frontend/app/dashboard/management/tabs/components-tab.tsx.ejs +12 -5
  218. package/hedhog/frontend/app/dashboard/management/tabs/dashboards-tab.tsx.ejs +12 -5
  219. package/hedhog/frontend/app/integrations-webhooks/page.tsx.ejs +1817 -356
  220. package/hedhog/frontend/app/mcp_chat/chat-components.tsx.ejs +43 -5
  221. package/hedhog/frontend/app/mcp_chat/page.tsx.ejs +35 -7
  222. package/hedhog/frontend/app/menu/page.tsx.ejs +9 -3
  223. package/hedhog/frontend/app/roles/page.tsx.ejs +18 -6
  224. package/hedhog/frontend/app/routes/page.tsx.ejs +9 -3
  225. package/hedhog/frontend/app/setting-list/page.tsx.ejs +344 -171
  226. package/hedhog/frontend/app/users/user-access-sheet.tsx.ejs +310 -304
  227. package/hedhog/frontend/app/users/user-sheet.tsx.ejs +25 -7
  228. package/hedhog/frontend/messages/en.json +104 -3
  229. package/hedhog/frontend/messages/pt.json +104 -3
  230. package/hedhog/table/access_log.yaml +31 -0
  231. package/package.json +4 -3
  232. package/src/access-log/access-log.controller.ts +29 -0
  233. package/src/access-log/access-log.interceptor.ts +38 -0
  234. package/src/access-log/access-log.module.ts +16 -0
  235. package/src/access-log/access-log.service.ts +129 -0
  236. package/src/access-log/dto/query-access-log.dto.ts +23 -0
  237. package/src/auth/auth.service.ts +0 -7
  238. package/src/challenge/challenge.service.ts +0 -2
  239. package/src/core/system.module.ts +1 -0
  240. package/src/core.module.ts +12 -0
  241. package/src/dashboard/dashboard.module.ts +4 -1
  242. package/src/file/file.controller.ts +14 -14
  243. package/src/file/file.service.ts +198 -4
  244. package/src/file/provider/abstract.provider.ts +10 -0
  245. package/src/file/provider/azure.provider.ts +24 -0
  246. package/src/file/provider/gcs.provider.ts +20 -0
  247. package/src/file/provider/local.provider.ts +30 -2
  248. package/src/file/provider/provider.factory.ts +3 -0
  249. package/src/file/provider/s3.provider.ts +22 -0
  250. package/src/mcp/mcp-audit.service.ts +47 -36
  251. package/src/mcp/mcp.controller.ts +40 -30
  252. package/src/mcp/mcp.module.ts +72 -0
  253. package/src/mcp/tools/core-ai.mcp-tools.ts +156 -0
  254. package/src/mcp/tools/core-dashboard-items.mcp-tools.ts +63 -0
  255. package/src/mcp/tools/core-dashboard.mcp-tools.ts +103 -0
  256. package/src/mcp/tools/core-event-webhooks.mcp-tools.ts +134 -0
  257. package/src/mcp/tools/core-files.mcp-tools.ts +105 -0
  258. package/src/mcp/tools/core-integration-events.mcp-tools.ts +118 -0
  259. package/src/mcp/tools/core-mail-profile.mcp-tools.ts +128 -0
  260. package/src/mcp/tools/core-mail-sent.mcp-tools.ts +76 -0
  261. package/src/mcp/tools/core-mail.mcp-tools.ts +130 -0
  262. package/src/mcp/tools/core-mcp-chat.mcp-tools.ts +81 -0
  263. package/src/mcp/tools/core-menus.mcp-tools.ts +197 -0
  264. package/src/mcp/tools/core-notifications.mcp-tools.ts +128 -0
  265. package/src/mcp/tools/core-profile.mcp-tools.ts +74 -0
  266. package/src/mcp/tools/core-roles.mcp-tools.ts +288 -0
  267. package/src/mcp/tools/core-routes.mcp-tools.ts +196 -0
  268. package/src/mcp/tools/core-screens.mcp-tools.ts +186 -0
  269. package/src/mcp/tools/core-sessions.mcp-tools.ts +97 -0
  270. package/src/mcp/tools/core-settings.mcp-tools.ts +171 -53
  271. package/src/mcp/tools/core-system.mcp-tools.ts +19 -0
  272. package/src/mcp/tools/core-webhooks.mcp-tools.ts +199 -0
  273. package/src/mcp-chat/mcp-chat.service.ts +887 -38
  274. package/src/notification/notification.controller.ts +20 -8
  275. package/src/notification/notification.service.ts +209 -9
  276. package/src/pdf/pdf.service.ts +1 -1
  277. package/src/profile/profile.controller.ts +1 -1
  278. package/src/profile/profile.module.ts +1 -0
  279. package/src/setting/setting.service.ts +8 -11
  280. package/src/task/task.service.ts +31 -0
  281. package/src/token/token.service.ts +0 -2
  282. package/src/webhook-integration/dto/webhook-action.dto.ts +96 -0
  283. package/src/webhook-integration/webhook-integration.controller.ts +124 -103
  284. package/src/webhook-integration/webhook-integration.service.ts +267 -64
@@ -0,0 +1,105 @@
1
+ import { Injectable } from '@nestjs/common';
2
+ import { FileService } from '../../file/file.service';
3
+ import { McpTool } from '../decorators/mcp-tool.decorator';
4
+ import { McpContext } from '../types/mcp-context.type';
5
+
6
+ @Injectable()
7
+ export class CoreFilesMcpTools {
8
+ constructor(private readonly fileService: FileService) {}
9
+
10
+ @McpTool({
11
+ name: 'core.files.list',
12
+ description: 'Lists uploaded files with optional pagination. Admin only.',
13
+ inputSchema: {
14
+ type: 'object',
15
+ properties: {
16
+ page: { type: 'number', description: 'Page number (default: 1)' },
17
+ pageSize: { type: 'number', description: 'Items per page (default: 20)' },
18
+ search: { type: 'string', description: 'Search term' },
19
+ sortField: { type: 'string', description: 'Field to sort by' },
20
+ sortOrder: { type: 'string', enum: ['asc', 'desc'], description: 'Sort direction' },
21
+ },
22
+ },
23
+ readOnly: true,
24
+ })
25
+ async listFiles(
26
+ args: { page?: number; pageSize?: number; search?: string; sortField?: string; sortOrder?: string },
27
+ _context: McpContext,
28
+ ): Promise<any> {
29
+ return this.fileService.getFiles({
30
+ page: args.page ?? 1,
31
+ pageSize: args.pageSize ?? 20,
32
+ search: args.search ?? '',
33
+ sortField: args.sortField ?? 'id',
34
+ sortOrder: (args.sortOrder as any) ?? 'asc',
35
+ fields: '',
36
+ });
37
+ }
38
+
39
+ @McpTool({
40
+ name: 'core.files.get',
41
+ description: 'Returns file details by ID. Admin only.',
42
+ inputSchema: {
43
+ type: 'object',
44
+ properties: {
45
+ fileId: { type: 'number', description: 'File ID' },
46
+ },
47
+ required: ['fileId'],
48
+ },
49
+ readOnly: true,
50
+ })
51
+ async getFile(args: { fileId: number }, _context: McpContext): Promise<any> {
52
+ return this.fileService.get(args.fileId);
53
+ }
54
+
55
+ @McpTool({
56
+ name: 'core.files.open-url',
57
+ description: 'Returns a temporary URL to open/view a file inline. Admin only.',
58
+ inputSchema: {
59
+ type: 'object',
60
+ properties: {
61
+ fileId: { type: 'number', description: 'File ID' },
62
+ },
63
+ required: ['fileId'],
64
+ },
65
+ readOnly: true,
66
+ })
67
+ async getOpenUrl(args: { fileId: number }, _context: McpContext): Promise<any> {
68
+ const file = await this.fileService.get(args.fileId);
69
+ const url = await this.fileService.tempOpenURL(file.path);
70
+ return { url };
71
+ }
72
+
73
+ @McpTool({
74
+ name: 'core.files.download-url',
75
+ description: 'Returns a temporary URL to download a file. Admin only.',
76
+ inputSchema: {
77
+ type: 'object',
78
+ properties: {
79
+ fileId: { type: 'number', description: 'File ID' },
80
+ },
81
+ required: ['fileId'],
82
+ },
83
+ readOnly: true,
84
+ })
85
+ async getDownloadUrl(args: { fileId: number }, _context: McpContext): Promise<any> {
86
+ const file = await this.fileService.get(args.fileId);
87
+ const url = await this.fileService.tempURL(file.path);
88
+ return { url };
89
+ }
90
+
91
+ @McpTool({
92
+ name: 'core.files.delete',
93
+ description: 'Deletes one or more files by their IDs. Admin only.',
94
+ inputSchema: {
95
+ type: 'object',
96
+ properties: {
97
+ ids: { type: 'array', items: { type: 'number' }, description: 'File IDs to delete' },
98
+ },
99
+ required: ['ids'],
100
+ },
101
+ })
102
+ async deleteFiles(args: { ids: number[] }, context: McpContext): Promise<any> {
103
+ return this.fileService.delete(context.locale, { ids: args.ids });
104
+ }
105
+ }
@@ -0,0 +1,118 @@
1
+ import { Injectable } from '@nestjs/common';
2
+ import { IntegrationEventCatalogService } from '../../webhook-integration/integration-event-catalog.service';
3
+ import { McpTool } from '../decorators/mcp-tool.decorator';
4
+ import { McpContext } from '../types/mcp-context.type';
5
+
6
+ @Injectable()
7
+ export class CoreIntegrationEventsMcpTools {
8
+ constructor(private readonly catalogService: IntegrationEventCatalogService) {}
9
+
10
+ @McpTool({
11
+ name: 'core.integration-events.list',
12
+ description: 'Lists integration event catalog entries with optional pagination. Admin only.',
13
+ inputSchema: {
14
+ type: 'object',
15
+ properties: {
16
+ page: { type: 'number', description: 'Page number (default: 1)' },
17
+ pageSize: { type: 'number', description: 'Items per page (default: 20)' },
18
+ search: { type: 'string', description: 'Search term' },
19
+ sortField: { type: 'string', description: 'Field to sort by' },
20
+ sortOrder: { type: 'string', enum: ['asc', 'desc'], description: 'Sort direction' },
21
+ },
22
+ },
23
+ readOnly: true,
24
+ })
25
+ async listIntegrationEvents(
26
+ args: { page?: number; pageSize?: number; search?: string; sortField?: string; sortOrder?: string },
27
+ _context: McpContext,
28
+ ): Promise<any> {
29
+ return this.catalogService.list({
30
+ page: args.page ?? 1,
31
+ pageSize: args.pageSize ?? 20,
32
+ search: args.search ?? '',
33
+ sortField: args.sortField ?? 'slug',
34
+ sortOrder: (args.sortOrder as any) ?? 'asc',
35
+ fields: '',
36
+ });
37
+ }
38
+
39
+ @McpTool({
40
+ name: 'core.integration-events.options',
41
+ description: 'Returns active integration event options (for dropdown selection). Admin only.',
42
+ inputSchema: { type: 'object', properties: {} },
43
+ readOnly: true,
44
+ })
45
+ async getIntegrationEventOptions(_args: Record<string, any>, _context: McpContext): Promise<any> {
46
+ return this.catalogService.options();
47
+ }
48
+
49
+ @McpTool({
50
+ name: 'core.integration-events.get',
51
+ description: 'Returns a single integration event catalog entry by ID. Admin only.',
52
+ inputSchema: {
53
+ type: 'object',
54
+ properties: {
55
+ id: { type: 'number', description: 'Event catalog entry ID' },
56
+ },
57
+ required: ['id'],
58
+ },
59
+ readOnly: true,
60
+ })
61
+ async getIntegrationEvent(args: { id: number }, _context: McpContext): Promise<any> {
62
+ return this.catalogService.get(args.id);
63
+ }
64
+
65
+ @McpTool({
66
+ name: 'core.integration-events.create',
67
+ description: 'Creates a new integration event catalog entry. Admin only.',
68
+ inputSchema: {
69
+ type: 'object',
70
+ properties: {
71
+ slug: { type: 'string', description: 'Event slug (unique identifier)' },
72
+ name: { type: 'string', description: 'Event display name' },
73
+ module: { type: 'string', description: 'Module this event belongs to' },
74
+ description: { type: 'string', description: 'Event description' },
75
+ status: { type: 'string', description: 'Event status (active, inactive)' },
76
+ },
77
+ required: ['slug', 'name'],
78
+ },
79
+ })
80
+ async createIntegrationEvent(args: Record<string, any>, _context: McpContext): Promise<any> {
81
+ return this.catalogService.create(args);
82
+ }
83
+
84
+ @McpTool({
85
+ name: 'core.integration-events.update',
86
+ description: 'Updates an integration event catalog entry by ID. Admin only.',
87
+ inputSchema: {
88
+ type: 'object',
89
+ properties: {
90
+ id: { type: 'number', description: 'Event catalog entry ID' },
91
+ slug: { type: 'string', description: 'New slug' },
92
+ name: { type: 'string', description: 'New display name' },
93
+ description: { type: 'string', description: 'New description' },
94
+ status: { type: 'string', description: 'New status' },
95
+ },
96
+ required: ['id'],
97
+ },
98
+ })
99
+ async updateIntegrationEvent(args: { id: number; [key: string]: any }, _context: McpContext): Promise<any> {
100
+ const { id, ...data } = args;
101
+ return this.catalogService.update(id, data);
102
+ }
103
+
104
+ @McpTool({
105
+ name: 'core.integration-events.delete',
106
+ description: 'Deletes one or more integration event catalog entries by their IDs. Admin only.',
107
+ inputSchema: {
108
+ type: 'object',
109
+ properties: {
110
+ ids: { type: 'array', items: { type: 'number' }, description: 'Entry IDs to delete' },
111
+ },
112
+ required: ['ids'],
113
+ },
114
+ })
115
+ async deleteIntegrationEvents(args: { ids: number[] }, _context: McpContext): Promise<any> {
116
+ return this.catalogService.delete({ ids: args.ids });
117
+ }
118
+ }
@@ -0,0 +1,128 @@
1
+ import { Injectable } from '@nestjs/common';
2
+ import { MailProfileService } from '../../mail-profile/mail-profile.service';
3
+ import { McpTool } from '../decorators/mcp-tool.decorator';
4
+ import { McpContext } from '../types/mcp-context.type';
5
+
6
+ @Injectable()
7
+ export class CoreMailProfileMcpTools {
8
+ constructor(private readonly mailProfileService: MailProfileService) {}
9
+
10
+ @McpTool({
11
+ name: 'core.mail-profile.list',
12
+ description: 'Lists mail profiles with optional pagination. Admin only.',
13
+ inputSchema: {
14
+ type: 'object',
15
+ properties: {
16
+ page: { type: 'number', description: 'Page number (default: 1)' },
17
+ pageSize: { type: 'number', description: 'Items per page (default: 20)' },
18
+ search: { type: 'string', description: 'Search term' },
19
+ sortField: { type: 'string', description: 'Field to sort by' },
20
+ sortOrder: { type: 'string', enum: ['asc', 'desc'], description: 'Sort direction' },
21
+ },
22
+ },
23
+ readOnly: true,
24
+ })
25
+ async listMailProfiles(
26
+ args: { page?: number; pageSize?: number; search?: string; sortField?: string; sortOrder?: string },
27
+ _context: McpContext,
28
+ ): Promise<any> {
29
+ return this.mailProfileService.list({
30
+ page: args.page ?? 1,
31
+ pageSize: args.pageSize ?? 20,
32
+ search: args.search ?? '',
33
+ sortField: args.sortField ?? 'id',
34
+ sortOrder: (args.sortOrder as any) ?? 'asc',
35
+ fields: '',
36
+ });
37
+ }
38
+
39
+ @McpTool({
40
+ name: 'core.mail-profile.get',
41
+ description: 'Returns a single mail profile by ID. Admin only.',
42
+ inputSchema: {
43
+ type: 'object',
44
+ properties: {
45
+ id: { type: 'number', description: 'Mail profile ID' },
46
+ },
47
+ required: ['id'],
48
+ },
49
+ readOnly: true,
50
+ })
51
+ async getMailProfile(args: { id: number }, _context: McpContext): Promise<any> {
52
+ return this.mailProfileService.get(args.id);
53
+ }
54
+
55
+ @McpTool({
56
+ name: 'core.mail-profile.create',
57
+ description: 'Creates a new mail profile (SMTP configuration). Admin only.',
58
+ inputSchema: {
59
+ type: 'object',
60
+ properties: {
61
+ name: { type: 'string', description: 'Profile name' },
62
+ host: { type: 'string', description: 'SMTP host' },
63
+ port: { type: 'number', description: 'SMTP port' },
64
+ username: { type: 'string', description: 'SMTP username' },
65
+ password: { type: 'string', description: 'SMTP password' },
66
+ },
67
+ required: ['name', 'host', 'port', 'username'],
68
+ },
69
+ })
70
+ async createMailProfile(args: { name: string; host: string; port: number; username: string; password?: string }, _context: McpContext): Promise<any> {
71
+ return this.mailProfileService.create(args as any);
72
+ }
73
+
74
+ @McpTool({
75
+ name: 'core.mail-profile.update',
76
+ description: 'Updates an existing mail profile by ID. Admin only.',
77
+ inputSchema: {
78
+ type: 'object',
79
+ properties: {
80
+ id: { type: 'number', description: 'Mail profile ID' },
81
+ name: { type: 'string', description: 'New profile name' },
82
+ host: { type: 'string', description: 'New SMTP host' },
83
+ port: { type: 'number', description: 'New SMTP port' },
84
+ username: { type: 'string', description: 'New SMTP username' },
85
+ password: { type: 'string', description: 'New SMTP password' },
86
+ },
87
+ required: ['id'],
88
+ },
89
+ })
90
+ async updateMailProfile(args: { id: number; [key: string]: any }, _context: McpContext): Promise<any> {
91
+ const { id, ...data } = args;
92
+ return this.mailProfileService.update({ id, data: data as any });
93
+ }
94
+
95
+ @McpTool({
96
+ name: 'core.mail-profile.delete',
97
+ description: 'Deletes one or more mail profiles by their IDs. Admin only.',
98
+ inputSchema: {
99
+ type: 'object',
100
+ properties: {
101
+ ids: { type: 'array', items: { type: 'number' }, description: 'Mail profile IDs to delete' },
102
+ },
103
+ required: ['ids'],
104
+ },
105
+ })
106
+ async deleteMailProfiles(args: { ids: number[] }, _context: McpContext): Promise<any> {
107
+ return this.mailProfileService.delete({ ids: args.ids });
108
+ }
109
+
110
+ @McpTool({
111
+ name: 'core.mail-profile.test',
112
+ description: 'Tests a mail profile by sending a test message. Admin only.',
113
+ inputSchema: {
114
+ type: 'object',
115
+ properties: {
116
+ name: { type: 'string', description: 'Profile name' },
117
+ host: { type: 'string', description: 'SMTP host' },
118
+ port: { type: 'number', description: 'SMTP port' },
119
+ username: { type: 'string', description: 'SMTP username' },
120
+ password: { type: 'string', description: 'SMTP password' },
121
+ },
122
+ required: ['host', 'port', 'username'],
123
+ },
124
+ })
125
+ async testMailProfile(args: Record<string, any>, _context: McpContext): Promise<any> {
126
+ return this.mailProfileService.test(args as any);
127
+ }
128
+ }
@@ -0,0 +1,76 @@
1
+ import { Injectable } from '@nestjs/common';
2
+ import { MailSentService } from '../../mail-sent/mail-sent.service';
3
+ import { McpTool } from '../decorators/mcp-tool.decorator';
4
+ import { McpContext } from '../types/mcp-context.type';
5
+
6
+ @Injectable()
7
+ export class CoreMailSentMcpTools {
8
+ constructor(private readonly mailSentService: MailSentService) {}
9
+
10
+ @McpTool({
11
+ name: 'core.mail-sent.list',
12
+ description: 'Lists sent mail records with optional filters. Admin only.',
13
+ inputSchema: {
14
+ type: 'object',
15
+ properties: {
16
+ page: { type: 'number', description: 'Page number (default: 1)' },
17
+ pageSize: { type: 'number', description: 'Items per page (default: 20)' },
18
+ search: { type: 'string', description: 'Search term' },
19
+ sortField: { type: 'string', description: 'Field to sort by' },
20
+ sortOrder: { type: 'string', enum: ['asc', 'desc'], description: 'Sort direction' },
21
+ status: { type: 'string', description: 'Filter by status (e.g. sent, failed)' },
22
+ hasError: { type: 'boolean', description: 'Filter by error presence' },
23
+ recipientEmail: { type: 'string', description: 'Filter by recipient email' },
24
+ createdAtFrom: { type: 'string', description: 'Start date filter (ISO 8601)' },
25
+ createdAtTo: { type: 'string', description: 'End date filter (ISO 8601)' },
26
+ },
27
+ },
28
+ readOnly: true,
29
+ })
30
+ async listMailSent(args: Record<string, any>, _context: McpContext): Promise<any> {
31
+ return this.mailSentService.list({
32
+ page: args.page ?? 1,
33
+ pageSize: args.pageSize ?? 20,
34
+ search: args.search ?? '',
35
+ sortField: args.sortField ?? 'id',
36
+ sortOrder: args.sortOrder ?? 'asc',
37
+ fields: '',
38
+ status: args.status,
39
+ hasError: args.hasError,
40
+ recipientEmail: args.recipientEmail,
41
+ createdAtFrom: args.createdAtFrom,
42
+ createdAtTo: args.createdAtTo,
43
+ } as any);
44
+ }
45
+
46
+ @McpTool({
47
+ name: 'core.mail-sent.get',
48
+ description: 'Returns a single sent mail record by ID. Admin only.',
49
+ inputSchema: {
50
+ type: 'object',
51
+ properties: {
52
+ id: { type: 'number', description: 'Sent mail record ID' },
53
+ },
54
+ required: ['id'],
55
+ },
56
+ readOnly: true,
57
+ })
58
+ async getMailSent(args: { id: number }, context: McpContext): Promise<any> {
59
+ return this.mailSentService.get(context.locale, args.id);
60
+ }
61
+
62
+ @McpTool({
63
+ name: 'core.mail-sent.delete',
64
+ description: 'Deletes one or more sent mail records by their IDs. Admin only.',
65
+ inputSchema: {
66
+ type: 'object',
67
+ properties: {
68
+ ids: { type: 'array', items: { type: 'number' }, description: 'Sent mail record IDs to delete' },
69
+ },
70
+ required: ['ids'],
71
+ },
72
+ })
73
+ async deleteMailSent(args: { ids: number[] }, context: McpContext): Promise<any> {
74
+ return this.mailSentService.delete(context.locale, { ids: args.ids });
75
+ }
76
+ }
@@ -0,0 +1,130 @@
1
+ import { Injectable } from '@nestjs/common';
2
+ import { MailService } from '../../mail/mail.service';
3
+ import { McpTool } from '../decorators/mcp-tool.decorator';
4
+ import { McpContext } from '../types/mcp-context.type';
5
+
6
+ @Injectable()
7
+ export class CoreMailMcpTools {
8
+ constructor(private readonly mailService: MailService) {}
9
+
10
+ @McpTool({
11
+ name: 'core.mail.list',
12
+ description: 'Lists mail templates with optional pagination. Admin only.',
13
+ inputSchema: {
14
+ type: 'object',
15
+ properties: {
16
+ page: { type: 'number', description: 'Page number (default: 1)' },
17
+ pageSize: { type: 'number', description: 'Items per page (default: 20)' },
18
+ search: { type: 'string', description: 'Search term' },
19
+ sortField: { type: 'string', description: 'Field to sort by' },
20
+ sortOrder: { type: 'string', enum: ['asc', 'desc'], description: 'Sort direction' },
21
+ },
22
+ },
23
+ readOnly: true,
24
+ })
25
+ async listMails(
26
+ args: { page?: number; pageSize?: number; search?: string; sortField?: string; sortOrder?: string },
27
+ context: McpContext,
28
+ ): Promise<any> {
29
+ return this.mailService.list(context.locale, {
30
+ page: args.page ?? 1,
31
+ pageSize: args.pageSize ?? 20,
32
+ search: args.search ?? '',
33
+ sortField: args.sortField ?? 'id',
34
+ sortOrder: (args.sortOrder as any) ?? 'asc',
35
+ fields: '',
36
+ });
37
+ }
38
+
39
+ @McpTool({
40
+ name: 'core.mail.get',
41
+ description: 'Returns a single mail template by ID. Admin only.',
42
+ inputSchema: {
43
+ type: 'object',
44
+ properties: {
45
+ id: { type: 'number', description: 'Mail template ID' },
46
+ },
47
+ required: ['id'],
48
+ },
49
+ readOnly: true,
50
+ })
51
+ async getMail(args: { id: number }, context: McpContext): Promise<any> {
52
+ return this.mailService.get(context.locale, args.id);
53
+ }
54
+
55
+ @McpTool({
56
+ name: 'core.mail.create',
57
+ description: 'Creates a new mail template. Admin only.',
58
+ inputSchema: {
59
+ type: 'object',
60
+ properties: {
61
+ slug: { type: 'string', description: 'Template slug (unique identifier)' },
62
+ subject: { type: 'string', description: 'Email subject' },
63
+ body: { type: 'string', description: 'Email body (HTML)' },
64
+ },
65
+ required: ['slug'],
66
+ },
67
+ })
68
+ async createMail(args: { slug: string; subject?: string; body?: string }, _context: McpContext): Promise<any> {
69
+ return this.mailService.create(args as any);
70
+ }
71
+
72
+ @McpTool({
73
+ name: 'core.mail.update',
74
+ description: 'Updates an existing mail template by ID. Admin only.',
75
+ inputSchema: {
76
+ type: 'object',
77
+ properties: {
78
+ id: { type: 'number', description: 'Mail template ID' },
79
+ slug: { type: 'string', description: 'New slug' },
80
+ subject: { type: 'string', description: 'New subject' },
81
+ body: { type: 'string', description: 'New body (HTML)' },
82
+ },
83
+ required: ['id'],
84
+ },
85
+ })
86
+ async updateMail(args: { id: number; slug?: string; subject?: string; body?: string }, _context: McpContext): Promise<any> {
87
+ const { id, ...data } = args;
88
+ return this.mailService.update({ id, data: data as any });
89
+ }
90
+
91
+ @McpTool({
92
+ name: 'core.mail.delete',
93
+ description: 'Deletes one or more mail templates by their IDs. Admin only.',
94
+ inputSchema: {
95
+ type: 'object',
96
+ properties: {
97
+ ids: { type: 'array', items: { type: 'number' }, description: 'Template IDs to delete' },
98
+ },
99
+ required: ['ids'],
100
+ },
101
+ })
102
+ async deleteMails(args: { ids: number[] }, _context: McpContext): Promise<any> {
103
+ return this.mailService.delete({ ids: args.ids });
104
+ }
105
+
106
+ @McpTool({
107
+ name: 'core.mail.test',
108
+ description: 'Sends a test email using a specific template. Admin only.',
109
+ inputSchema: {
110
+ type: 'object',
111
+ properties: {
112
+ to: { type: 'string', description: 'Recipient email address' },
113
+ templateId: { type: 'number', description: 'Mail template ID' },
114
+ },
115
+ required: ['to', 'templateId'],
116
+ },
117
+ })
118
+ async testMail(args: { to: string; templateId: number }, context: McpContext): Promise<any> {
119
+ return this.mailService.sendTestMail(context.locale, args as any);
120
+ }
121
+
122
+ @McpTool({
123
+ name: 'core.mail.reload',
124
+ description: 'Reloads the mail configuration from settings. Admin only.',
125
+ inputSchema: { type: 'object', properties: {} },
126
+ })
127
+ async reloadMailConfig(_args: Record<string, any>, _context: McpContext): Promise<any> {
128
+ return this.mailService.reloadConfig();
129
+ }
130
+ }
@@ -0,0 +1,81 @@
1
+ import { Injectable } from '@nestjs/common';
2
+ import { McpChatService } from '../../mcp-chat/mcp-chat.service';
3
+ import { McpTool } from '../decorators/mcp-tool.decorator';
4
+ import { McpContext } from '../types/mcp-context.type';
5
+
6
+ @Injectable()
7
+ export class CoreMcpChatMcpTools {
8
+ constructor(private readonly mcpChatService: McpChatService) {}
9
+
10
+ @McpTool({
11
+ name: 'core.mcp-chat.conversations.list',
12
+ description: 'Lists MCP chat conversations for the authenticated user.',
13
+ inputSchema: { type: 'object', properties: {} },
14
+ readOnly: true,
15
+ })
16
+ async listConversations(_args: Record<string, any>, context: McpContext): Promise<any> {
17
+ return this.mcpChatService.listConversations(context.userId);
18
+ }
19
+
20
+ @McpTool({
21
+ name: 'core.mcp-chat.conversations.create',
22
+ description: 'Creates a new MCP chat conversation.',
23
+ inputSchema: {
24
+ type: 'object',
25
+ properties: {
26
+ title: { type: 'string', description: 'Conversation title' },
27
+ },
28
+ required: ['title'],
29
+ },
30
+ })
31
+ async createConversation(args: { title: string }, context: McpContext): Promise<any> {
32
+ return this.mcpChatService.createConversation(context.userId, { title: args.title });
33
+ }
34
+
35
+ @McpTool({
36
+ name: 'core.mcp-chat.conversations.delete',
37
+ description: 'Deletes one or more MCP chat conversations.',
38
+ inputSchema: {
39
+ type: 'object',
40
+ properties: {
41
+ ids: { type: 'array', items: { type: 'number' }, description: 'Conversation IDs to delete' },
42
+ },
43
+ required: ['ids'],
44
+ },
45
+ })
46
+ async deleteConversations(args: { ids: number[] }, context: McpContext): Promise<any> {
47
+ return this.mcpChatService.deleteConversations(context.userId, args.ids);
48
+ }
49
+
50
+ @McpTool({
51
+ name: 'core.mcp-chat.messages.list',
52
+ description: 'Returns messages in a conversation.',
53
+ inputSchema: {
54
+ type: 'object',
55
+ properties: {
56
+ conversationId: { type: 'number', description: 'Conversation ID' },
57
+ },
58
+ required: ['conversationId'],
59
+ },
60
+ readOnly: true,
61
+ })
62
+ async getMessages(args: { conversationId: number }, context: McpContext): Promise<any> {
63
+ return this.mcpChatService.getMessages(args.conversationId, context.userId);
64
+ }
65
+
66
+ @McpTool({
67
+ name: 'core.mcp-chat.messages.send',
68
+ description: 'Sends a message in a conversation and returns the AI response.',
69
+ inputSchema: {
70
+ type: 'object',
71
+ properties: {
72
+ conversationId: { type: 'number', description: 'Conversation ID' },
73
+ message: { type: 'string', description: 'Message to send' },
74
+ },
75
+ required: ['conversationId', 'message'],
76
+ },
77
+ })
78
+ async sendMessage(args: { conversationId: number; message: string }, context: McpContext): Promise<any> {
79
+ return this.mcpChatService.sendMessage(args.conversationId, context.userId, context.locale, args.message);
80
+ }
81
+ }