@marinoscar/platform-api 0.1.0-next.18 → 0.1.0-next.20

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 (598) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +1 -0
  3. package/dist/ai/runtime/ai-limits.service.d.ts.map +1 -1
  4. package/dist/ai/runtime/ai-limits.service.js +8 -1
  5. package/dist/ai/runtime/ai-limits.service.js.map +1 -1
  6. package/dist/ai/usage/ai-usage-admin.controller.d.ts +6 -3
  7. package/dist/ai/usage/ai-usage-admin.controller.d.ts.map +1 -1
  8. package/dist/ai/usage/ai-usage-admin.controller.js +31 -17
  9. package/dist/ai/usage/ai-usage-admin.controller.js.map +1 -1
  10. package/dist/ai/usage/ai-usage.controller.d.ts +5 -2
  11. package/dist/ai/usage/ai-usage.controller.d.ts.map +1 -1
  12. package/dist/ai/usage/ai-usage.controller.js +18 -11
  13. package/dist/ai/usage/ai-usage.controller.js.map +1 -1
  14. package/dist/ai/usage/ai-usage.service.d.ts +19 -4
  15. package/dist/ai/usage/ai-usage.service.d.ts.map +1 -1
  16. package/dist/ai/usage/ai-usage.service.js +84 -43
  17. package/dist/ai/usage/ai-usage.service.js.map +1 -1
  18. package/dist/ai/usage/dto/ai-usage.dto.d.ts +8 -0
  19. package/dist/ai/usage/dto/ai-usage.dto.d.ts.map +1 -1
  20. package/dist/ai/usage/dto/ai-usage.dto.js +16 -5
  21. package/dist/ai/usage/dto/ai-usage.dto.js.map +1 -1
  22. package/dist/alerts/alerts-admin.controller.d.ts +40 -0
  23. package/dist/alerts/alerts-admin.controller.d.ts.map +1 -0
  24. package/dist/alerts/alerts-admin.controller.js +297 -0
  25. package/dist/alerts/alerts-admin.controller.js.map +1 -0
  26. package/dist/alerts/alerts-context.service.d.ts +64 -0
  27. package/dist/alerts/alerts-context.service.d.ts.map +1 -0
  28. package/dist/alerts/alerts-context.service.js +190 -0
  29. package/dist/alerts/alerts-context.service.js.map +1 -0
  30. package/dist/alerts/alerts-dispatch.service.d.ts +53 -0
  31. package/dist/alerts/alerts-dispatch.service.d.ts.map +1 -0
  32. package/dist/alerts/alerts-dispatch.service.js +135 -0
  33. package/dist/alerts/alerts-dispatch.service.js.map +1 -0
  34. package/dist/alerts/alerts-evaluation.service.d.ts +88 -0
  35. package/dist/alerts/alerts-evaluation.service.d.ts.map +1 -0
  36. package/dist/alerts/alerts-evaluation.service.js +296 -0
  37. package/dist/alerts/alerts-evaluation.service.js.map +1 -0
  38. package/dist/alerts/alerts-event.listener.d.ts +22 -0
  39. package/dist/alerts/alerts-event.listener.d.ts.map +1 -0
  40. package/dist/alerts/alerts-event.listener.js +72 -0
  41. package/dist/alerts/alerts-event.listener.js.map +1 -0
  42. package/dist/alerts/alerts-incidents.service.d.ts +86 -0
  43. package/dist/alerts/alerts-incidents.service.d.ts.map +1 -0
  44. package/dist/alerts/alerts-incidents.service.js +144 -0
  45. package/dist/alerts/alerts-incidents.service.js.map +1 -0
  46. package/dist/alerts/alerts-rules.service.d.ts +73 -0
  47. package/dist/alerts/alerts-rules.service.d.ts.map +1 -0
  48. package/dist/alerts/alerts-rules.service.js +205 -0
  49. package/dist/alerts/alerts-rules.service.js.map +1 -0
  50. package/dist/alerts/alerts-seed.service.d.ts +25 -0
  51. package/dist/alerts/alerts-seed.service.d.ts.map +1 -0
  52. package/dist/alerts/alerts-seed.service.js +82 -0
  53. package/dist/alerts/alerts-seed.service.js.map +1 -0
  54. package/dist/alerts/alerts.constants.d.ts +53 -0
  55. package/dist/alerts/alerts.constants.d.ts.map +1 -0
  56. package/dist/alerts/alerts.constants.js +57 -0
  57. package/dist/alerts/alerts.constants.js.map +1 -0
  58. package/dist/alerts/alerts.errors.d.ts +44 -0
  59. package/dist/alerts/alerts.errors.d.ts.map +1 -0
  60. package/dist/alerts/alerts.errors.js +47 -0
  61. package/dist/alerts/alerts.errors.js.map +1 -0
  62. package/dist/alerts/alerts.metrics.d.ts +60 -0
  63. package/dist/alerts/alerts.metrics.d.ts.map +1 -0
  64. package/dist/alerts/alerts.metrics.js +135 -0
  65. package/dist/alerts/alerts.metrics.js.map +1 -0
  66. package/dist/alerts/alerts.module.d.ts +35 -0
  67. package/dist/alerts/alerts.module.d.ts.map +1 -0
  68. package/dist/alerts/alerts.module.js +96 -0
  69. package/dist/alerts/alerts.module.js.map +1 -0
  70. package/dist/alerts/alerts.options.d.ts +64 -0
  71. package/dist/alerts/alerts.options.d.ts.map +1 -0
  72. package/dist/alerts/alerts.options.js +34 -0
  73. package/dist/alerts/alerts.options.js.map +1 -0
  74. package/dist/alerts/alerts.permissions.d.ts +27 -0
  75. package/dist/alerts/alerts.permissions.d.ts.map +1 -0
  76. package/dist/alerts/alerts.permissions.js +29 -0
  77. package/dist/alerts/alerts.permissions.js.map +1 -0
  78. package/dist/alerts/alerts.types.d.ts +182 -0
  79. package/dist/alerts/alerts.types.d.ts.map +1 -0
  80. package/dist/alerts/alerts.types.js +3 -0
  81. package/dist/alerts/alerts.types.js.map +1 -0
  82. package/dist/alerts/data/alerts-db.d.ts +169 -0
  83. package/dist/alerts/data/alerts-db.d.ts.map +1 -0
  84. package/dist/alerts/data/alerts-db.js +18 -0
  85. package/dist/alerts/data/alerts-db.js.map +1 -0
  86. package/dist/alerts/dto/alerts.dto.d.ts +132 -0
  87. package/dist/alerts/dto/alerts.dto.d.ts.map +1 -0
  88. package/dist/alerts/dto/alerts.dto.js +42 -0
  89. package/dist/alerts/dto/alerts.dto.js.map +1 -0
  90. package/dist/alerts/handlers/alerts-evaluate-event.handler.d.ts +23 -0
  91. package/dist/alerts/handlers/alerts-evaluate-event.handler.d.ts.map +1 -0
  92. package/dist/alerts/handlers/alerts-evaluate-event.handler.js +71 -0
  93. package/dist/alerts/handlers/alerts-evaluate-event.handler.js.map +1 -0
  94. package/dist/alerts/handlers/alerts-evaluate.handler.d.ts +25 -0
  95. package/dist/alerts/handlers/alerts-evaluate.handler.d.ts.map +1 -0
  96. package/dist/alerts/handlers/alerts-evaluate.handler.js +54 -0
  97. package/dist/alerts/handlers/alerts-evaluate.handler.js.map +1 -0
  98. package/dist/alerts/handlers/alerts-incidents-purge.handler.d.ts +29 -0
  99. package/dist/alerts/handlers/alerts-incidents-purge.handler.d.ts.map +1 -0
  100. package/dist/alerts/handlers/alerts-incidents-purge.handler.js +76 -0
  101. package/dist/alerts/handlers/alerts-incidents-purge.handler.js.map +1 -0
  102. package/dist/alerts/index.d.ts +45 -0
  103. package/dist/alerts/index.d.ts.map +1 -0
  104. package/dist/alerts/index.js +108 -0
  105. package/dist/alerts/index.js.map +1 -0
  106. package/dist/alerts/kinds/alert-kind.registry.d.ts +33 -0
  107. package/dist/alerts/kinds/alert-kind.registry.d.ts.map +1 -0
  108. package/dist/alerts/kinds/alert-kind.registry.js +63 -0
  109. package/dist/alerts/kinds/alert-kind.registry.js.map +1 -0
  110. package/dist/alerts/kinds/builtin-kinds.d.ts +18 -0
  111. package/dist/alerts/kinds/builtin-kinds.d.ts.map +1 -0
  112. package/dist/alerts/kinds/builtin-kinds.js +33 -0
  113. package/dist/alerts/kinds/builtin-kinds.js.map +1 -0
  114. package/dist/alerts/kinds/metric-threshold.kind.d.ts +11 -0
  115. package/dist/alerts/kinds/metric-threshold.kind.d.ts.map +1 -0
  116. package/dist/alerts/kinds/metric-threshold.kind.js +63 -0
  117. package/dist/alerts/kinds/metric-threshold.kind.js.map +1 -0
  118. package/dist/alerts/kinds/metric-threshold.sql.d.ts +41 -0
  119. package/dist/alerts/kinds/metric-threshold.sql.d.ts.map +1 -0
  120. package/dist/alerts/kinds/metric-threshold.sql.js +124 -0
  121. package/dist/alerts/kinds/metric-threshold.sql.js.map +1 -0
  122. package/dist/alerts/kinds/node-event.kind.d.ts +44 -0
  123. package/dist/alerts/kinds/node-event.kind.d.ts.map +1 -0
  124. package/dist/alerts/kinds/node-event.kind.js +113 -0
  125. package/dist/alerts/kinds/node-event.kind.js.map +1 -0
  126. package/dist/alerts/kinds/node-offline.kind.d.ts +11 -0
  127. package/dist/alerts/kinds/node-offline.kind.d.ts.map +1 -0
  128. package/dist/alerts/kinds/node-offline.kind.js +41 -0
  129. package/dist/alerts/kinds/node-offline.kind.js.map +1 -0
  130. package/dist/alerts/kinds/telemetry-unavailable.kind.d.ts +11 -0
  131. package/dist/alerts/kinds/telemetry-unavailable.kind.d.ts.map +1 -0
  132. package/dist/alerts/kinds/telemetry-unavailable.kind.js +40 -0
  133. package/dist/alerts/kinds/telemetry-unavailable.kind.js.map +1 -0
  134. package/dist/alerts/kinds/verdict.kind.d.ts +13 -0
  135. package/dist/alerts/kinds/verdict.kind.d.ts.map +1 -0
  136. package/dist/alerts/kinds/verdict.kind.js +34 -0
  137. package/dist/alerts/kinds/verdict.kind.js.map +1 -0
  138. package/dist/alerts/notifications/alerts.notifications.d.ts +77 -0
  139. package/dist/alerts/notifications/alerts.notifications.d.ts.map +1 -0
  140. package/dist/alerts/notifications/alerts.notifications.js +145 -0
  141. package/dist/alerts/notifications/alerts.notifications.js.map +1 -0
  142. package/dist/alerts/starter-rules.d.ts +21 -0
  143. package/dist/alerts/starter-rules.d.ts.map +1 -0
  144. package/dist/alerts/starter-rules.js +141 -0
  145. package/dist/alerts/starter-rules.js.map +1 -0
  146. package/dist/alerts/state/alert-state-machine.d.ts +92 -0
  147. package/dist/alerts/state/alert-state-machine.d.ts.map +1 -0
  148. package/dist/alerts/state/alert-state-machine.js +96 -0
  149. package/dist/alerts/state/alert-state-machine.js.map +1 -0
  150. package/dist/alerts/tasks/alerts-evaluate.task.d.ts +18 -0
  151. package/dist/alerts/tasks/alerts-evaluate.task.d.ts.map +1 -0
  152. package/dist/alerts/tasks/alerts-evaluate.task.js +61 -0
  153. package/dist/alerts/tasks/alerts-evaluate.task.js.map +1 -0
  154. package/dist/alerts/tasks/alerts-purge.task.d.ts +15 -0
  155. package/dist/alerts/tasks/alerts-purge.task.d.ts.map +1 -0
  156. package/dist/alerts/tasks/alerts-purge.task.js +58 -0
  157. package/dist/alerts/tasks/alerts-purge.task.js.map +1 -0
  158. package/dist/alerts/testing/conformance.d.ts +58 -0
  159. package/dist/alerts/testing/conformance.d.ts.map +1 -0
  160. package/dist/alerts/testing/conformance.js +198 -0
  161. package/dist/alerts/testing/conformance.js.map +1 -0
  162. package/dist/alerts/testing/fakes.d.ts +80 -0
  163. package/dist/alerts/testing/fakes.d.ts.map +1 -0
  164. package/dist/alerts/testing/fakes.js +230 -0
  165. package/dist/alerts/testing/fakes.js.map +1 -0
  166. package/dist/alerts/testing/index.d.ts +5 -0
  167. package/dist/alerts/testing/index.d.ts.map +1 -0
  168. package/dist/alerts/testing/index.js +15 -0
  169. package/dist/alerts/testing/index.js.map +1 -0
  170. package/dist/core/index.d.ts +3 -0
  171. package/dist/core/index.d.ts.map +1 -1
  172. package/dist/core/index.js +13 -2
  173. package/dist/core/index.js.map +1 -1
  174. package/dist/core/net/ip-classify.d.ts +39 -0
  175. package/dist/core/net/ip-classify.d.ts.map +1 -0
  176. package/dist/core/net/ip-classify.js +196 -0
  177. package/dist/core/net/ip-classify.js.map +1 -0
  178. package/dist/core/timezone/request-time-zone.d.ts +61 -0
  179. package/dist/core/timezone/request-time-zone.d.ts.map +1 -0
  180. package/dist/core/timezone/request-time-zone.js +71 -0
  181. package/dist/core/timezone/request-time-zone.js.map +1 -0
  182. package/dist/credentials/testing/conformance.d.ts.map +1 -1
  183. package/dist/credentials/testing/conformance.js +1 -0
  184. package/dist/credentials/testing/conformance.js.map +1 -1
  185. package/dist/email/email-settings.controller.d.ts +5 -2
  186. package/dist/email/email-settings.controller.d.ts.map +1 -1
  187. package/dist/email/email-settings.controller.js +11 -5
  188. package/dist/email/email-settings.controller.js.map +1 -1
  189. package/dist/email/email-test-send.service.d.ts +11 -1
  190. package/dist/email/email-test-send.service.d.ts.map +1 -1
  191. package/dist/email/email-test-send.service.js +17 -3
  192. package/dist/email/email-test-send.service.js.map +1 -1
  193. package/dist/email/index.d.ts +2 -2
  194. package/dist/email/index.d.ts.map +1 -1
  195. package/dist/email/index.js +3 -1
  196. package/dist/email/index.js.map +1 -1
  197. package/dist/email/templates/backup-failed.email.d.ts.map +1 -1
  198. package/dist/email/templates/backup-failed.email.js +9 -5
  199. package/dist/email/templates/backup-failed.email.js.map +1 -1
  200. package/dist/email/templates/format-date.d.ts +39 -0
  201. package/dist/email/templates/format-date.d.ts.map +1 -0
  202. package/dist/email/templates/format-date.js +103 -0
  203. package/dist/email/templates/format-date.js.map +1 -0
  204. package/dist/email/templates/index.d.ts +2 -0
  205. package/dist/email/templates/index.d.ts.map +1 -1
  206. package/dist/email/templates/index.js +4 -1
  207. package/dist/email/templates/index.js.map +1 -1
  208. package/dist/email/templates/job-failed.email.d.ts +1 -1
  209. package/dist/email/templates/job-failed.email.d.ts.map +1 -1
  210. package/dist/email/templates/job-failed.email.js +6 -6
  211. package/dist/email/templates/job-failed.email.js.map +1 -1
  212. package/dist/email/templates/node-offline.email.d.ts.map +1 -1
  213. package/dist/email/templates/node-offline.email.js +11 -7
  214. package/dist/email/templates/node-offline.email.js.map +1 -1
  215. package/dist/email/templates/render-context.d.ts +5 -0
  216. package/dist/email/templates/render-context.d.ts.map +1 -1
  217. package/dist/email/templates/render-context.js.map +1 -1
  218. package/dist/email/templates/restore-completed.email.d.ts.map +1 -1
  219. package/dist/email/templates/restore-completed.email.js +9 -5
  220. package/dist/email/templates/restore-completed.email.js.map +1 -1
  221. package/dist/email/templates/role-changed.email.d.ts +1 -1
  222. package/dist/email/templates/role-changed.email.d.ts.map +1 -1
  223. package/dist/email/templates/role-changed.email.js +6 -7
  224. package/dist/email/templates/role-changed.email.js.map +1 -1
  225. package/dist/email/templates/test-email.email.d.ts +1 -1
  226. package/dist/email/templates/test-email.email.d.ts.map +1 -1
  227. package/dist/email/templates/test-email.email.js +6 -11
  228. package/dist/email/templates/test-email.email.js.map +1 -1
  229. package/dist/exports/export-job.d.ts +1 -0
  230. package/dist/exports/export-job.d.ts.map +1 -1
  231. package/dist/exports/export-job.js +2 -0
  232. package/dist/exports/export-job.js.map +1 -1
  233. package/dist/exports/export.types.d.ts +8 -0
  234. package/dist/exports/export.types.d.ts.map +1 -1
  235. package/dist/exports/exports.controller.d.ts +4 -2
  236. package/dist/exports/exports.controller.d.ts.map +1 -1
  237. package/dist/exports/exports.controller.js +15 -6
  238. package/dist/exports/exports.controller.js.map +1 -1
  239. package/dist/exports/exports.service.d.ts +5 -0
  240. package/dist/exports/exports.service.d.ts.map +1 -1
  241. package/dist/exports/exports.service.js +3 -0
  242. package/dist/exports/exports.service.js.map +1 -1
  243. package/dist/exports/handlers/export-run.handler.d.ts.map +1 -1
  244. package/dist/exports/handlers/export-run.handler.js +4 -1
  245. package/dist/exports/handlers/export-run.handler.js.map +1 -1
  246. package/dist/exports/index.d.ts +1 -0
  247. package/dist/exports/index.d.ts.map +1 -1
  248. package/dist/exports/index.js +7 -2
  249. package/dist/exports/index.js.map +1 -1
  250. package/dist/exports/testing/conformance.d.ts.map +1 -1
  251. package/dist/exports/testing/conformance.js +1 -0
  252. package/dist/exports/testing/conformance.js.map +1 -1
  253. package/dist/host/http/cors-options.d.ts +5 -1
  254. package/dist/host/http/cors-options.d.ts.map +1 -1
  255. package/dist/host/http/cors-options.js.map +1 -1
  256. package/dist/identity/pat/pat.controller.d.ts +4 -3
  257. package/dist/identity/pat/pat.controller.d.ts.map +1 -1
  258. package/dist/identity/pat/pat.controller.js +19 -5
  259. package/dist/identity/pat/pat.controller.js.map +1 -1
  260. package/dist/identity/pat/pat.service.d.ts +21 -0
  261. package/dist/identity/pat/pat.service.d.ts.map +1 -1
  262. package/dist/identity/pat/pat.service.js +27 -10
  263. package/dist/identity/pat/pat.service.js.map +1 -1
  264. package/dist/jobs/data/jobs-db.d.ts +26 -0
  265. package/dist/jobs/data/jobs-db.d.ts.map +1 -1
  266. package/dist/jobs/index.d.ts +1 -1
  267. package/dist/jobs/index.d.ts.map +1 -1
  268. package/dist/jobs/index.js.map +1 -1
  269. package/dist/manifest/platform-model-ownership.d.ts +1 -1
  270. package/dist/manifest/platform-model-ownership.d.ts.map +1 -1
  271. package/dist/manifest/platform-model-ownership.js +30 -1
  272. package/dist/manifest/platform-model-ownership.js.map +1 -1
  273. package/dist/manifest/platform-permissions.d.ts +6 -2
  274. package/dist/manifest/platform-permissions.d.ts.map +1 -1
  275. package/dist/manifest/platform-permissions.js +56 -44
  276. package/dist/manifest/platform-permissions.js.map +1 -1
  277. package/dist/manifest/platform-user-owned-models.d.ts.map +1 -1
  278. package/dist/manifest/platform-user-owned-models.js +16 -0
  279. package/dist/manifest/platform-user-owned-models.js.map +1 -1
  280. package/dist/nodes/dto/node-admin.dto.d.ts +5 -0
  281. package/dist/nodes/dto/node-admin.dto.d.ts.map +1 -1
  282. package/dist/nodes/dto/node-admin.dto.js +19 -0
  283. package/dist/nodes/dto/node-admin.dto.js.map +1 -1
  284. package/dist/nodes/dto/node-control-plane.dto.d.ts +26 -0
  285. package/dist/nodes/dto/node-control-plane.dto.d.ts.map +1 -1
  286. package/dist/nodes/dto/node-event.dto.d.ts +100 -0
  287. package/dist/nodes/dto/node-event.dto.d.ts.map +1 -0
  288. package/dist/nodes/dto/node-event.dto.js +239 -0
  289. package/dist/nodes/dto/node-event.dto.js.map +1 -0
  290. package/dist/nodes/dto/node-response.dto.d.ts +21 -0
  291. package/dist/nodes/dto/node-response.dto.d.ts.map +1 -1
  292. package/dist/nodes/dto/node-response.dto.js +42 -1
  293. package/dist/nodes/dto/node-response.dto.js.map +1 -1
  294. package/dist/nodes/events/node-event.event.d.ts +41 -0
  295. package/dist/nodes/events/node-event.event.d.ts.map +1 -0
  296. package/dist/nodes/events/node-event.event.js +69 -0
  297. package/dist/nodes/events/node-event.event.js.map +1 -0
  298. package/dist/nodes/handlers/node-events-purge.handler.d.ts +31 -0
  299. package/dist/nodes/handlers/node-events-purge.handler.d.ts.map +1 -0
  300. package/dist/nodes/handlers/node-events-purge.handler.js +91 -0
  301. package/dist/nodes/handlers/node-events-purge.handler.js.map +1 -0
  302. package/dist/nodes/index.d.ts +11 -4
  303. package/dist/nodes/index.d.ts.map +1 -1
  304. package/dist/nodes/index.js +20 -1
  305. package/dist/nodes/index.js.map +1 -1
  306. package/dist/nodes/node-events.service.d.ts +87 -0
  307. package/dist/nodes/node-events.service.d.ts.map +1 -0
  308. package/dist/nodes/node-events.service.js +271 -0
  309. package/dist/nodes/node-events.service.js.map +1 -0
  310. package/dist/nodes/node-fleet-metrics.service.d.ts +10 -1
  311. package/dist/nodes/node-fleet-metrics.service.d.ts.map +1 -1
  312. package/dist/nodes/node-fleet-metrics.service.js +31 -0
  313. package/dist/nodes/node-fleet-metrics.service.js.map +1 -1
  314. package/dist/nodes/node-lifecycle.service.d.ts +16 -1
  315. package/dist/nodes/node-lifecycle.service.d.ts.map +1 -1
  316. package/dist/nodes/node-lifecycle.service.js +7 -0
  317. package/dist/nodes/node-lifecycle.service.js.map +1 -1
  318. package/dist/nodes/nodes-admin.controller.d.ts +5 -1
  319. package/dist/nodes/nodes-admin.controller.d.ts.map +1 -1
  320. package/dist/nodes/nodes-admin.controller.js +32 -2
  321. package/dist/nodes/nodes-admin.controller.js.map +1 -1
  322. package/dist/nodes/nodes.controller.d.ts +7 -3
  323. package/dist/nodes/nodes.controller.d.ts.map +1 -1
  324. package/dist/nodes/nodes.controller.js +46 -6
  325. package/dist/nodes/nodes.controller.js.map +1 -1
  326. package/dist/nodes/nodes.metrics.d.ts +23 -1
  327. package/dist/nodes/nodes.metrics.d.ts.map +1 -1
  328. package/dist/nodes/nodes.metrics.js +80 -1
  329. package/dist/nodes/nodes.metrics.js.map +1 -1
  330. package/dist/nodes/nodes.module.d.ts.map +1 -1
  331. package/dist/nodes/nodes.module.js +6 -0
  332. package/dist/nodes/nodes.module.js.map +1 -1
  333. package/dist/nodes/nodes.options.d.ts +17 -0
  334. package/dist/nodes/nodes.options.d.ts.map +1 -1
  335. package/dist/nodes/nodes.options.js +13 -2
  336. package/dist/nodes/nodes.options.js.map +1 -1
  337. package/dist/nodes/nodes.service.d.ts +3 -1
  338. package/dist/nodes/nodes.service.d.ts.map +1 -1
  339. package/dist/nodes/nodes.service.js +14 -3
  340. package/dist/nodes/nodes.service.js.map +1 -1
  341. package/dist/nodes/tasks/node-events-purge.task.d.ts +13 -0
  342. package/dist/nodes/tasks/node-events-purge.task.d.ts.map +1 -0
  343. package/dist/nodes/tasks/node-events-purge.task.js +73 -0
  344. package/dist/nodes/tasks/node-events-purge.task.js.map +1 -0
  345. package/dist/notifications/channels/browser-notification.channel.js +1 -1
  346. package/dist/notifications/channels/browser-notification.channel.js.map +1 -1
  347. package/dist/notifications/channels/browser-templates.d.ts +12 -1
  348. package/dist/notifications/channels/browser-templates.d.ts.map +1 -1
  349. package/dist/notifications/channels/browser-templates.js +5 -4
  350. package/dist/notifications/channels/browser-templates.js.map +1 -1
  351. package/dist/notifications/channels/email-notification.channel.d.ts.map +1 -1
  352. package/dist/notifications/channels/email-notification.channel.js +3 -3
  353. package/dist/notifications/channels/email-notification.channel.js.map +1 -1
  354. package/dist/notifications/channels/push-notification.channel.js +1 -1
  355. package/dist/notifications/channels/push-notification.channel.js.map +1 -1
  356. package/dist/notifications/index.d.ts +1 -1
  357. package/dist/notifications/index.d.ts.map +1 -1
  358. package/dist/notifications/notification.types.d.ts +15 -0
  359. package/dist/notifications/notification.types.d.ts.map +1 -1
  360. package/dist/notifications/notification.types.js.map +1 -1
  361. package/dist/notifications/notifications.service.d.ts.map +1 -1
  362. package/dist/notifications/notifications.service.js +8 -0
  363. package/dist/notifications/notifications.service.js.map +1 -1
  364. package/dist/notifications/push-config.controller.d.ts +5 -2
  365. package/dist/notifications/push-config.controller.d.ts.map +1 -1
  366. package/dist/notifications/push-config.controller.js +11 -5
  367. package/dist/notifications/push-config.controller.js.map +1 -1
  368. package/dist/notifications/push-test.service.d.ts +1 -1
  369. package/dist/notifications/push-test.service.d.ts.map +1 -1
  370. package/dist/notifications/push-test.service.js +6 -4
  371. package/dist/notifications/push-test.service.js.map +1 -1
  372. package/dist/settings/settings-resolver.d.ts +28 -1
  373. package/dist/settings/settings-resolver.d.ts.map +1 -1
  374. package/dist/settings/settings-resolver.js +41 -0
  375. package/dist/settings/settings-resolver.js.map +1 -1
  376. package/dist/settings/settings.module.d.ts.map +1 -1
  377. package/dist/settings/settings.module.js +9 -4
  378. package/dist/settings/settings.module.js.map +1 -1
  379. package/dist/settings/user-settings/user-settings.service.d.ts.map +1 -1
  380. package/dist/settings/user-settings/user-settings.service.js +2 -4
  381. package/dist/settings/user-settings/user-settings.service.js.map +1 -1
  382. package/dist/sharing/grants/grants.service.js +2 -2
  383. package/dist/sharing/grants/grants.service.js.map +1 -1
  384. package/dist/sharing/groups/group-invites.service.js +1 -1
  385. package/dist/sharing/groups/group-invites.service.js.map +1 -1
  386. package/dist/sharing/groups/sharing-effects.d.ts +2 -1
  387. package/dist/sharing/groups/sharing-effects.d.ts.map +1 -1
  388. package/dist/sharing/groups/sharing-effects.js +4 -4
  389. package/dist/sharing/groups/sharing-effects.js.map +1 -1
  390. package/dist/sharing/index.d.ts +1 -1
  391. package/dist/sharing/index.d.ts.map +1 -1
  392. package/dist/sharing/index.js.map +1 -1
  393. package/dist/sharing/notifications/group-invitation.templates.d.ts +23 -0
  394. package/dist/sharing/notifications/group-invitation.templates.d.ts.map +1 -1
  395. package/dist/sharing/notifications/group-invitation.templates.js +17 -2
  396. package/dist/sharing/notifications/group-invitation.templates.js.map +1 -1
  397. package/dist/sharing/notifications/shared-with-you.templates.d.ts +1 -1
  398. package/dist/sharing/notifications/shared-with-you.templates.d.ts.map +1 -1
  399. package/dist/sharing/notifications/shared-with-you.templates.js +3 -2
  400. package/dist/sharing/notifications/shared-with-you.templates.js.map +1 -1
  401. package/dist/sharing/ports.d.ts +15 -2
  402. package/dist/sharing/ports.d.ts.map +1 -1
  403. package/dist/sharing/ports.js.map +1 -1
  404. package/dist/telemetry/dashboard/telemetry-dashboard.service.d.ts +30 -8
  405. package/dist/telemetry/dashboard/telemetry-dashboard.service.d.ts.map +1 -1
  406. package/dist/telemetry/dashboard/telemetry-dashboard.service.js +12 -0
  407. package/dist/telemetry/dashboard/telemetry-dashboard.service.js.map +1 -1
  408. package/dist/telemetry/dashboard/telemetry-dashboard.verdict.d.ts +15 -0
  409. package/dist/telemetry/dashboard/telemetry-dashboard.verdict.d.ts.map +1 -1
  410. package/dist/telemetry/dashboard/telemetry-dashboard.verdict.js +17 -2
  411. package/dist/telemetry/dashboard/telemetry-dashboard.verdict.js.map +1 -1
  412. package/dist/telemetry/dto/telemetry-dashboard.dto.d.ts +3 -3
  413. package/dist/telemetry/index.d.ts +4 -2
  414. package/dist/telemetry/index.d.ts.map +1 -1
  415. package/dist/telemetry/index.js +4 -1
  416. package/dist/telemetry/index.js.map +1 -1
  417. package/dist/telemetry/metrics/groups/nodes.metric-group.d.ts.map +1 -1
  418. package/dist/telemetry/metrics/groups/nodes.metric-group.js +77 -0
  419. package/dist/telemetry/metrics/groups/nodes.metric-group.js.map +1 -1
  420. package/dist/telemetry/metrics/metric-verdict.d.ts +1 -1
  421. package/dist/telemetry/metrics/metric-verdict.d.ts.map +1 -1
  422. package/dist/telemetry/metrics/metric-verdict.js +15 -1
  423. package/dist/telemetry/metrics/metric-verdict.js.map +1 -1
  424. package/dist/telemetry/query/telemetry-query-facade.d.ts +1 -1
  425. package/dist/telemetry/query/telemetry-query-facade.d.ts.map +1 -1
  426. package/dist/telemetry/query/telemetry-query-facade.js.map +1 -1
  427. package/dist/telemetry/query/telemetry-query.service.d.ts +2 -2
  428. package/dist/telemetry/query/telemetry-query.service.d.ts.map +1 -1
  429. package/dist/telemetry/query/telemetry-query.service.js +4 -0
  430. package/dist/telemetry/query/telemetry-query.service.js.map +1 -1
  431. package/dist/telemetry/stack/dto/telemetry-stack.dto.d.ts +1 -1
  432. package/dist/telemetry/telemetry-support-bundle.section.d.ts +4 -4
  433. package/dist/telemetry/telemetry.module.d.ts.map +1 -1
  434. package/dist/telemetry/telemetry.module.js +1 -0
  435. package/dist/telemetry/telemetry.module.js.map +1 -1
  436. package/dist/telemetry/testing/metric-schema.fixture.d.ts.map +1 -1
  437. package/dist/telemetry/testing/metric-schema.fixture.js +56 -0
  438. package/dist/telemetry/testing/metric-schema.fixture.js.map +1 -1
  439. package/dist/user-data/platform-user-data.d.ts.map +1 -1
  440. package/dist/user-data/platform-user-data.js +2 -0
  441. package/dist/user-data/platform-user-data.js.map +1 -1
  442. package/dist/webhooks/data/webhooks-db.d.ts +176 -0
  443. package/dist/webhooks/data/webhooks-db.d.ts.map +1 -0
  444. package/dist/webhooks/data/webhooks-db.js +14 -0
  445. package/dist/webhooks/data/webhooks-db.js.map +1 -0
  446. package/dist/webhooks/egress/egress-guard.d.ts +99 -0
  447. package/dist/webhooks/egress/egress-guard.d.ts.map +1 -0
  448. package/dist/webhooks/egress/egress-guard.js +172 -0
  449. package/dist/webhooks/egress/egress-guard.js.map +1 -0
  450. package/dist/webhooks/egress/transport.d.ts +58 -0
  451. package/dist/webhooks/egress/transport.d.ts.map +1 -0
  452. package/dist/webhooks/egress/transport.js +115 -0
  453. package/dist/webhooks/egress/transport.js.map +1 -0
  454. package/dist/webhooks/handlers/webhook-deliver.handler.d.ts +76 -0
  455. package/dist/webhooks/handlers/webhook-deliver.handler.d.ts.map +1 -0
  456. package/dist/webhooks/handlers/webhook-deliver.handler.js +332 -0
  457. package/dist/webhooks/handlers/webhook-deliver.handler.js.map +1 -0
  458. package/dist/webhooks/handlers/webhook-fanout.handler.d.ts +28 -0
  459. package/dist/webhooks/handlers/webhook-fanout.handler.d.ts.map +1 -0
  460. package/dist/webhooks/handlers/webhook-fanout.handler.js +73 -0
  461. package/dist/webhooks/handlers/webhook-fanout.handler.js.map +1 -0
  462. package/dist/webhooks/handlers/webhook-purge.handler.d.ts +33 -0
  463. package/dist/webhooks/handlers/webhook-purge.handler.d.ts.map +1 -0
  464. package/dist/webhooks/handlers/webhook-purge.handler.js +77 -0
  465. package/dist/webhooks/handlers/webhook-purge.handler.js.map +1 -0
  466. package/dist/webhooks/http/admin-webhooks.controller.d.ts +36 -0
  467. package/dist/webhooks/http/admin-webhooks.controller.d.ts.map +1 -0
  468. package/dist/webhooks/http/admin-webhooks.controller.js +250 -0
  469. package/dist/webhooks/http/admin-webhooks.controller.js.map +1 -0
  470. package/dist/webhooks/http/org-webhooks.controller.d.ts +36 -0
  471. package/dist/webhooks/http/org-webhooks.controller.d.ts.map +1 -0
  472. package/dist/webhooks/http/org-webhooks.controller.js +249 -0
  473. package/dist/webhooks/http/org-webhooks.controller.js.map +1 -0
  474. package/dist/webhooks/http/scope-context.d.ts +17 -0
  475. package/dist/webhooks/http/scope-context.d.ts.map +1 -0
  476. package/dist/webhooks/http/scope-context.js +28 -0
  477. package/dist/webhooks/http/scope-context.js.map +1 -0
  478. package/dist/webhooks/http/webhook.dto.d.ts +174 -0
  479. package/dist/webhooks/http/webhook.dto.d.ts.map +1 -0
  480. package/dist/webhooks/http/webhook.dto.js +58 -0
  481. package/dist/webhooks/http/webhook.dto.js.map +1 -0
  482. package/dist/webhooks/http/webhooks.controller.d.ts +36 -0
  483. package/dist/webhooks/http/webhooks.controller.d.ts.map +1 -0
  484. package/dist/webhooks/http/webhooks.controller.js +243 -0
  485. package/dist/webhooks/http/webhooks.controller.js.map +1 -0
  486. package/dist/webhooks/index.d.ts +43 -0
  487. package/dist/webhooks/index.d.ts.map +1 -0
  488. package/dist/webhooks/index.js +147 -0
  489. package/dist/webhooks/index.js.map +1 -0
  490. package/dist/webhooks/listeners/webhook-event.listeners.d.ts +23 -0
  491. package/dist/webhooks/listeners/webhook-event.listeners.d.ts.map +1 -0
  492. package/dist/webhooks/listeners/webhook-event.listeners.js +120 -0
  493. package/dist/webhooks/listeners/webhook-event.listeners.js.map +1 -0
  494. package/dist/webhooks/notifications/webhook-notification.channel.d.ts +31 -0
  495. package/dist/webhooks/notifications/webhook-notification.channel.d.ts.map +1 -0
  496. package/dist/webhooks/notifications/webhook-notification.channel.js +127 -0
  497. package/dist/webhooks/notifications/webhook-notification.channel.js.map +1 -0
  498. package/dist/webhooks/notifications/webhook-notifications.d.ts +98 -0
  499. package/dist/webhooks/notifications/webhook-notifications.d.ts.map +1 -0
  500. package/dist/webhooks/notifications/webhook-notifications.js +150 -0
  501. package/dist/webhooks/notifications/webhook-notifications.js.map +1 -0
  502. package/dist/webhooks/ports.d.ts +29 -0
  503. package/dist/webhooks/ports.d.ts.map +1 -0
  504. package/dist/webhooks/ports.js +23 -0
  505. package/dist/webhooks/ports.js.map +1 -0
  506. package/dist/webhooks/registry/builtin-events.d.ts +57 -0
  507. package/dist/webhooks/registry/builtin-events.d.ts.map +1 -0
  508. package/dist/webhooks/registry/builtin-events.js +113 -0
  509. package/dist/webhooks/registry/builtin-events.js.map +1 -0
  510. package/dist/webhooks/registry/webhook-catalog.d.ts +63 -0
  511. package/dist/webhooks/registry/webhook-catalog.d.ts.map +1 -0
  512. package/dist/webhooks/registry/webhook-catalog.js +123 -0
  513. package/dist/webhooks/registry/webhook-catalog.js.map +1 -0
  514. package/dist/webhooks/registry/webhook-event.registry.d.ts +116 -0
  515. package/dist/webhooks/registry/webhook-event.registry.d.ts.map +1 -0
  516. package/dist/webhooks/registry/webhook-event.registry.js +152 -0
  517. package/dist/webhooks/registry/webhook-event.registry.js.map +1 -0
  518. package/dist/webhooks/signing.d.ts +31 -0
  519. package/dist/webhooks/signing.d.ts.map +1 -0
  520. package/dist/webhooks/signing.js +48 -0
  521. package/dist/webhooks/signing.js.map +1 -0
  522. package/dist/webhooks/tasks/webhook-purge.task.d.ts +17 -0
  523. package/dist/webhooks/tasks/webhook-purge.task.d.ts.map +1 -0
  524. package/dist/webhooks/tasks/webhook-purge.task.js +68 -0
  525. package/dist/webhooks/tasks/webhook-purge.task.js.map +1 -0
  526. package/dist/webhooks/testing/conformance.d.ts +61 -0
  527. package/dist/webhooks/testing/conformance.d.ts.map +1 -0
  528. package/dist/webhooks/testing/conformance.js +316 -0
  529. package/dist/webhooks/testing/conformance.js.map +1 -0
  530. package/dist/webhooks/testing/in-memory.d.ts +156 -0
  531. package/dist/webhooks/testing/in-memory.d.ts.map +1 -0
  532. package/dist/webhooks/testing/in-memory.js +323 -0
  533. package/dist/webhooks/testing/in-memory.js.map +1 -0
  534. package/dist/webhooks/testing/index.d.ts +7 -0
  535. package/dist/webhooks/testing/index.d.ts.map +1 -0
  536. package/dist/webhooks/testing/index.js +25 -0
  537. package/dist/webhooks/testing/index.js.map +1 -0
  538. package/dist/webhooks/testing/kit.d.ts +86 -0
  539. package/dist/webhooks/testing/kit.d.ts.map +1 -0
  540. package/dist/webhooks/testing/kit.js +113 -0
  541. package/dist/webhooks/testing/kit.js.map +1 -0
  542. package/dist/webhooks/webhook-endpoints.service.d.ts +142 -0
  543. package/dist/webhooks/webhook-endpoints.service.d.ts.map +1 -0
  544. package/dist/webhooks/webhook-endpoints.service.js +366 -0
  545. package/dist/webhooks/webhook-endpoints.service.js.map +1 -0
  546. package/dist/webhooks/webhook-envelope.d.ts +36 -0
  547. package/dist/webhooks/webhook-envelope.d.ts.map +1 -0
  548. package/dist/webhooks/webhook-envelope.js +46 -0
  549. package/dist/webhooks/webhook-envelope.js.map +1 -0
  550. package/dist/webhooks/webhook-secrets.service.d.ts +49 -0
  551. package/dist/webhooks/webhook-secrets.service.d.ts.map +1 -0
  552. package/dist/webhooks/webhook-secrets.service.js +118 -0
  553. package/dist/webhooks/webhook-secrets.service.js.map +1 -0
  554. package/dist/webhooks/webhook-views.d.ts +34 -0
  555. package/dist/webhooks/webhook-views.d.ts.map +1 -0
  556. package/dist/webhooks/webhook-views.js +83 -0
  557. package/dist/webhooks/webhook-views.js.map +1 -0
  558. package/dist/webhooks/webhooks.access.d.ts +28 -0
  559. package/dist/webhooks/webhooks.access.d.ts.map +1 -0
  560. package/dist/webhooks/webhooks.access.js +55 -0
  561. package/dist/webhooks/webhooks.access.js.map +1 -0
  562. package/dist/webhooks/webhooks.constants.d.ts +73 -0
  563. package/dist/webhooks/webhooks.constants.d.ts.map +1 -0
  564. package/dist/webhooks/webhooks.constants.js +100 -0
  565. package/dist/webhooks/webhooks.constants.js.map +1 -0
  566. package/dist/webhooks/webhooks.credentials.d.ts +28 -0
  567. package/dist/webhooks/webhooks.credentials.d.ts.map +1 -0
  568. package/dist/webhooks/webhooks.credentials.js +51 -0
  569. package/dist/webhooks/webhooks.credentials.js.map +1 -0
  570. package/dist/webhooks/webhooks.errors.d.ts +25 -0
  571. package/dist/webhooks/webhooks.errors.d.ts.map +1 -0
  572. package/dist/webhooks/webhooks.errors.js +65 -0
  573. package/dist/webhooks/webhooks.errors.js.map +1 -0
  574. package/dist/webhooks/webhooks.metrics.d.ts +24 -0
  575. package/dist/webhooks/webhooks.metrics.d.ts.map +1 -0
  576. package/dist/webhooks/webhooks.metrics.js +70 -0
  577. package/dist/webhooks/webhooks.metrics.js.map +1 -0
  578. package/dist/webhooks/webhooks.module.d.ts +29 -0
  579. package/dist/webhooks/webhooks.module.d.ts.map +1 -0
  580. package/dist/webhooks/webhooks.module.js +108 -0
  581. package/dist/webhooks/webhooks.module.js.map +1 -0
  582. package/dist/webhooks/webhooks.options.d.ts +119 -0
  583. package/dist/webhooks/webhooks.options.d.ts.map +1 -0
  584. package/dist/webhooks/webhooks.options.js +80 -0
  585. package/dist/webhooks/webhooks.options.js.map +1 -0
  586. package/dist/webhooks/webhooks.permissions.d.ts +47 -0
  587. package/dist/webhooks/webhooks.permissions.d.ts.map +1 -0
  588. package/dist/webhooks/webhooks.permissions.js +83 -0
  589. package/dist/webhooks/webhooks.permissions.js.map +1 -0
  590. package/dist/webhooks/webhooks.repository.d.ts +162 -0
  591. package/dist/webhooks/webhooks.repository.d.ts.map +1 -0
  592. package/dist/webhooks/webhooks.repository.js +246 -0
  593. package/dist/webhooks/webhooks.repository.js.map +1 -0
  594. package/dist/webhooks/webhooks.service.d.ts +91 -0
  595. package/dist/webhooks/webhooks.service.d.ts.map +1 -0
  596. package/dist/webhooks/webhooks.service.js +216 -0
  597. package/dist/webhooks/webhooks.service.js.map +1 -0
  598. package/package.json +19 -3
@@ -0,0 +1,135 @@
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
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var AlertsDispatchService_1;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.AlertsDispatchService = exports.ALERT_WEBHOOK_EVENT_DEFS = void 0;
17
+ const common_1 = require("@nestjs/common");
18
+ const config_1 = require("@nestjs/config");
19
+ const alerts_1 = require("@marinoscar/platform-contract/alerts");
20
+ const index_1 = require("../notifications/index");
21
+ const alerts_constants_1 = require("./alerts.constants");
22
+ const alerts_metrics_1 = require("./alerts.metrics");
23
+ /**
24
+ * The webhook event keys the slice emits, with the labels a webhooks slice
25
+ * shows in its catalog.
26
+ *
27
+ * @stability experimental
28
+ */
29
+ exports.ALERT_WEBHOOK_EVENT_DEFS = [
30
+ { key: alerts_1.ALERT_WEBHOOK_EVENTS.FIRED, label: 'Alert fired', description: 'An alert rule started firing.' },
31
+ { key: alerts_1.ALERT_WEBHOOK_EVENTS.RESOLVED, label: 'Alert resolved', description: 'A firing alert cleared.' },
32
+ ];
33
+ function labelsOf(incident) {
34
+ const raw = incident.labels;
35
+ return raw && typeof raw === 'object' ? raw : {};
36
+ }
37
+ /**
38
+ * Sends the two things a fired or resolved incident causes: the notification
39
+ * to the holders of `alerts:read` and the optional webhook. Called AFTER the
40
+ * incident write committed (the evaluator never opens a transaction), and it
41
+ * never throws: a failed dispatch is logged and the incident stands.
42
+ *
43
+ * @stability experimental
44
+ */
45
+ let AlertsDispatchService = AlertsDispatchService_1 = class AlertsDispatchService {
46
+ metrics;
47
+ notifications;
48
+ webhooks;
49
+ config;
50
+ logger = new common_1.Logger(AlertsDispatchService_1.name);
51
+ constructor(metrics, notifications, webhooks, config) {
52
+ this.metrics = metrics;
53
+ this.notifications = notifications;
54
+ this.webhooks = webhooks;
55
+ this.config = config;
56
+ try {
57
+ this.webhooks?.registerEvents?.(exports.ALERT_WEBHOOK_EVENT_DEFS);
58
+ }
59
+ catch (error) {
60
+ this.logger.warn(`The webhook emitter refused the alert events: ${error instanceof Error ? error.message : String(error)}`);
61
+ }
62
+ }
63
+ /**
64
+ * Dispatches one transition.
65
+ *
66
+ * @param to - `fired` or `resolved`.
67
+ * @param rule - the rule.
68
+ * @param incident - the incident as just written.
69
+ * @param notify - whether the notification is sent (false inside a cooldown); the webhook and the metric follow the transition regardless.
70
+ */
71
+ async dispatch(to, rule, incident, notify) {
72
+ this.metrics.transition(to, incident.severity);
73
+ if (notify)
74
+ this.notify(to, rule, incident);
75
+ await this.emitWebhook(to, rule, incident);
76
+ }
77
+ notify(to, rule, incident) {
78
+ if (!this.notifications)
79
+ return;
80
+ try {
81
+ const appUrl = this.config?.get('appUrl');
82
+ const data = {
83
+ incidentId: incident.id,
84
+ ruleId: rule.id,
85
+ ruleName: rule.name,
86
+ severity: incident.severity,
87
+ state: to,
88
+ summary: incident.summary,
89
+ labels: labelsOf(incident),
90
+ value: incident.lastValue,
91
+ firedAt: incident.firedAt,
92
+ resolvedAt: incident.resolvedAt,
93
+ ...(appUrl ? { appUrl: appUrl.replace(/\/+$/, '') } : {}),
94
+ };
95
+ void this.notifications
96
+ .notifyPermissionHolders(to === 'fired' ? alerts_constants_1.ALERT_FIRED_NOTIFICATION : alerts_constants_1.ALERT_RESOLVED_NOTIFICATION, alerts_1.ALERT_PERMISSIONS.READ, data, rule.notifyChannels.length > 0 ? { channels: rule.notifyChannels } : undefined)
97
+ .catch((error) => {
98
+ this.logger.error(`Dispatching the '${to}' alert notification for incident ${incident.id} rejected: ${error instanceof Error ? error.message : String(error)}`);
99
+ });
100
+ }
101
+ catch (error) {
102
+ this.logger.error(`Could not raise the '${to}' alert notification for incident ${incident.id}: ${error instanceof Error ? error.message : String(error)}`);
103
+ }
104
+ }
105
+ async emitWebhook(to, rule, incident) {
106
+ if (!this.webhooks || !rule.webhook)
107
+ return;
108
+ try {
109
+ const data = {
110
+ incidentId: incident.id,
111
+ rule: { id: rule.id, key: rule.key, name: rule.name, kind: rule.kind, severity: rule.severity },
112
+ labels: labelsOf(incident),
113
+ value: incident.lastValue,
114
+ summary: incident.summary,
115
+ firedAt: incident.firedAt ? incident.firedAt.toISOString() : null,
116
+ resolvedAt: incident.resolvedAt ? incident.resolvedAt.toISOString() : null,
117
+ };
118
+ await this.webhooks.emit(to === 'fired' ? alerts_1.ALERT_WEBHOOK_EVENTS.FIRED : alerts_1.ALERT_WEBHOOK_EVENTS.RESOLVED, data, { orgId: null });
119
+ }
120
+ catch (error) {
121
+ this.logger.error(`Could not emit the '${to}' alert webhook for incident ${incident.id}: ${error instanceof Error ? error.message : String(error)}`);
122
+ }
123
+ }
124
+ };
125
+ exports.AlertsDispatchService = AlertsDispatchService;
126
+ exports.AlertsDispatchService = AlertsDispatchService = AlertsDispatchService_1 = __decorate([
127
+ (0, common_1.Injectable)(),
128
+ __param(1, (0, common_1.Optional)()),
129
+ __param(2, (0, common_1.Optional)()),
130
+ __param(2, (0, common_1.Inject)(alerts_constants_1.ALERTS_WEBHOOK_EMITTER)),
131
+ __param(3, (0, common_1.Optional)()),
132
+ __metadata("design:paramtypes", [alerts_metrics_1.AlertsMetrics,
133
+ index_1.NotificationsService, Object, config_1.ConfigService])
134
+ ], AlertsDispatchService);
135
+ //# sourceMappingURL=alerts-dispatch.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alerts-dispatch.service.js","sourceRoot":"","sources":["../../src/alerts/alerts-dispatch.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ import type { AlertObservation } from '@marinoscar/platform-contract/alerts';
2
+ import { AlertContextService } from './alerts-context.service';
3
+ import { AlertsDispatchService } from './alerts-dispatch.service';
4
+ import type { ResolvedAlertsModuleOptions } from './alerts.options';
5
+ import type { AlertNodeEventPayload } from './alerts.types';
6
+ import type { AlertRuleRow, AlertsPrisma } from './data/alerts-db';
7
+ /**
8
+ * What one rule's evaluation did.
9
+ *
10
+ * @stability experimental
11
+ */
12
+ export interface AlertEvaluationOutcome {
13
+ /** The rule. */
14
+ readonly ruleId: string;
15
+ /** `ok`, or `error` (the kind failed, timed out or is not registered; incidents were left alone). */
16
+ readonly status: 'ok' | 'error';
17
+ /** The error message when `status` is `error`. */
18
+ readonly error: string | null;
19
+ /** Incidents created. */
20
+ readonly opened: number;
21
+ /** Incidents that moved to firing (now or on creation). */
22
+ readonly fired: number;
23
+ /** Incidents that resolved. */
24
+ readonly resolved: number;
25
+ }
26
+ /**
27
+ * Whether `error` is a unique-constraint violation (Prisma `P2002`).
28
+ *
29
+ * @param error - what a write threw.
30
+ * @returns whether it is `P2002`.
31
+ *
32
+ * @stability experimental
33
+ */
34
+ export declare function isUniqueViolation(error: unknown): boolean;
35
+ /**
36
+ * Runs the enabled rules: evaluates each kind, isolates failures per rule,
37
+ * then applies the state machine to the observations. Evaluation is
38
+ * IDEMPOTENT: two passes over the same data leave one incident (the partial
39
+ * unique index arbitrates a race), and every state change is a conditional
40
+ * write so a concurrent pass cannot dispatch the same transition twice.
41
+ *
42
+ * It never opens a transaction, so a dispatch always follows a committed write.
43
+ *
44
+ * @stability experimental
45
+ */
46
+ export declare class AlertsEvaluationService {
47
+ private readonly prisma;
48
+ private readonly contexts;
49
+ private readonly dispatcher;
50
+ private readonly options;
51
+ private readonly logger;
52
+ constructor(prisma: AlertsPrisma, contexts: AlertContextService, dispatcher: AlertsDispatchService, options: ResolvedAlertsModuleOptions);
53
+ /**
54
+ * Evaluates every enabled rule (or only the event-driven ones that `event`
55
+ * can change).
56
+ *
57
+ * @param scope - `{ event }` restricts to rules of event-driven kinds whose kind says the event matters.
58
+ * @returns one outcome per rule evaluated.
59
+ */
60
+ evaluateEnabled(scope?: {
61
+ event?: AlertNodeEventPayload;
62
+ }): Promise<AlertEvaluationOutcome[]>;
63
+ /**
64
+ * Evaluates one rule and applies its observations. Never throws: a failure
65
+ * is recorded on the rule (`lastError`) and returned.
66
+ *
67
+ * @param rule - the rule row.
68
+ * @param now - the instant (a test seam).
69
+ * @returns what happened.
70
+ */
71
+ evaluateRule(rule: AlertRuleRow, now?: Date): Promise<AlertEvaluationOutcome>;
72
+ /**
73
+ * Evaluates a rule WITHOUT touching state or dispatching: the dry run behind
74
+ * `POST /rules/:id/test`.
75
+ *
76
+ * @param rule - the rule row.
77
+ * @param now - the instant.
78
+ * @returns the observations.
79
+ * @throws whatever the kind throws (the caller reports it).
80
+ */
81
+ observe(rule: AlertRuleRow, now?: Date): Promise<AlertObservation[]>;
82
+ private stamp;
83
+ private apply;
84
+ private create;
85
+ private fired;
86
+ private previousResolvedAt;
87
+ }
88
+ //# sourceMappingURL=alerts-evaluation.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alerts-evaluation.service.d.ts","sourceRoot":"","sources":["../../src/alerts/alerts-evaluation.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAG7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGlE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,KAAK,EAAE,qBAAqB,EAAiB,MAAM,gBAAgB,CAAC;AAC3E,OAAO,KAAK,EAAoB,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAIrF;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC,gBAAgB;IAChB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,qGAAqG;IACrG,QAAQ,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC;IAChC,kDAAkD;IAClD,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,yBAAyB;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,2DAA2D;IAC3D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,+BAA+B;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEzD;AAUD;;;;;;;;;;GAUG;AACH,qBACa,uBAAuB;IAIP,OAAO,CAAC,QAAQ,CAAC,MAAM;IAChD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,UAAU;IACH,OAAO,CAAC,QAAQ,CAAC,OAAO;IANlD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4C;gBAGvB,MAAM,EAAE,YAAY,EAC7C,QAAQ,EAAE,mBAAmB,EAC7B,UAAU,EAAE,qBAAqB,EACT,OAAO,EAAE,2BAA2B;IAG/E;;;;;;OAMG;IACG,eAAe,CAAC,KAAK,GAAE;QAAE,KAAK,CAAC,EAAE,qBAAqB,CAAA;KAAO,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAgBvG;;;;;;;OAOG;IACG,YAAY,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,GAAE,IAAiB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAyB/F;;;;;;;;OAQG;IACH,OAAO,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,GAAE,IAAiB,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;YA6BlE,KAAK;YAQL,KAAK;YAyFL,MAAM;YA4BN,KAAK;YAKL,kBAAkB;CAQjC"}
@@ -0,0 +1,296 @@
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
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var AlertsEvaluationService_1;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.AlertsEvaluationService = void 0;
17
+ exports.isUniqueViolation = isUniqueViolation;
18
+ const common_1 = require("@nestjs/common");
19
+ const index_1 = require("../core/index");
20
+ const alerts_context_service_1 = require("./alerts-context.service");
21
+ const alerts_dispatch_service_1 = require("./alerts-dispatch.service");
22
+ const alerts_constants_1 = require("./alerts.constants");
23
+ const alerts_errors_1 = require("./alerts.errors");
24
+ const alert_kind_registry_1 = require("./kinds/alert-kind.registry");
25
+ const alert_state_machine_1 = require("./state/alert-state-machine");
26
+ /**
27
+ * Whether `error` is a unique-constraint violation (Prisma `P2002`).
28
+ *
29
+ * @param error - what a write threw.
30
+ * @returns whether it is `P2002`.
31
+ *
32
+ * @stability experimental
33
+ */
34
+ function isUniqueViolation(error) {
35
+ return typeof error === 'object' && error !== null && error.code === 'P2002';
36
+ }
37
+ function message(error) {
38
+ return (error instanceof Error ? error.message : String(error)).slice(0, 500);
39
+ }
40
+ function clampSummary(text) {
41
+ return text.length > 500 ? `${text.slice(0, 499)}…` : text;
42
+ }
43
+ /**
44
+ * Runs the enabled rules: evaluates each kind, isolates failures per rule,
45
+ * then applies the state machine to the observations. Evaluation is
46
+ * IDEMPOTENT: two passes over the same data leave one incident (the partial
47
+ * unique index arbitrates a race), and every state change is a conditional
48
+ * write so a concurrent pass cannot dispatch the same transition twice.
49
+ *
50
+ * It never opens a transaction, so a dispatch always follows a committed write.
51
+ *
52
+ * @stability experimental
53
+ */
54
+ let AlertsEvaluationService = AlertsEvaluationService_1 = class AlertsEvaluationService {
55
+ prisma;
56
+ contexts;
57
+ dispatcher;
58
+ options;
59
+ logger = new common_1.Logger(AlertsEvaluationService_1.name);
60
+ constructor(prisma, contexts, dispatcher, options) {
61
+ this.prisma = prisma;
62
+ this.contexts = contexts;
63
+ this.dispatcher = dispatcher;
64
+ this.options = options;
65
+ }
66
+ /**
67
+ * Evaluates every enabled rule (or only the event-driven ones that `event`
68
+ * can change).
69
+ *
70
+ * @param scope - `{ event }` restricts to rules of event-driven kinds whose kind says the event matters.
71
+ * @returns one outcome per rule evaluated.
72
+ */
73
+ async evaluateEnabled(scope = {}) {
74
+ const rules = await this.prisma.alertRule.findMany({ where: { enabled: true }, orderBy: { createdAt: 'asc' } });
75
+ const outcomes = [];
76
+ for (const rule of rules) {
77
+ if (scope.event) {
78
+ const kind = alert_kind_registry_1.alertRuleKindRegistry.get(rule.kind);
79
+ if (!kind?.eventDriven)
80
+ continue;
81
+ const config = kind.configSchema.safeParse(rule.config);
82
+ if (!config.success || (kind.matchesEvent && !kind.matchesEvent(config.data, scope.event)))
83
+ continue;
84
+ }
85
+ outcomes.push(await this.evaluateRule(rule));
86
+ }
87
+ return outcomes;
88
+ }
89
+ /**
90
+ * Evaluates one rule and applies its observations. Never throws: a failure
91
+ * is recorded on the rule (`lastError`) and returned.
92
+ *
93
+ * @param rule - the rule row.
94
+ * @param now - the instant (a test seam).
95
+ * @returns what happened.
96
+ */
97
+ async evaluateRule(rule, now = new Date()) {
98
+ let observations;
99
+ try {
100
+ observations = await this.observe(rule, now);
101
+ }
102
+ catch (error) {
103
+ if (error instanceof alerts_errors_1.AlertStoreUnavailableError) {
104
+ this.logger.warn(`Alert rule "${rule.name}" (${rule.id}): ${error.message}`);
105
+ }
106
+ else {
107
+ this.logger.error(`Alert rule "${rule.name}" (${rule.id}) failed: ${message(error)}`);
108
+ }
109
+ await this.stamp(rule.id, now, message(error));
110
+ return { ruleId: rule.id, status: 'error', error: message(error), opened: 0, fired: 0, resolved: 0 };
111
+ }
112
+ try {
113
+ const counts = await this.apply(rule, observations, now);
114
+ await this.stamp(rule.id, now, null);
115
+ return { ruleId: rule.id, status: 'ok', error: null, ...counts };
116
+ }
117
+ catch (error) {
118
+ this.logger.error(`Alert rule "${rule.name}" (${rule.id}) could not apply its observations: ${message(error)}`);
119
+ await this.stamp(rule.id, now, message(error));
120
+ return { ruleId: rule.id, status: 'error', error: message(error), opened: 0, fired: 0, resolved: 0 };
121
+ }
122
+ }
123
+ /**
124
+ * Evaluates a rule WITHOUT touching state or dispatching: the dry run behind
125
+ * `POST /rules/:id/test`.
126
+ *
127
+ * @param rule - the rule row.
128
+ * @param now - the instant.
129
+ * @returns the observations.
130
+ * @throws whatever the kind throws (the caller reports it).
131
+ */
132
+ observe(rule, now = new Date()) {
133
+ const kind = alert_kind_registry_1.alertRuleKindRegistry.get(rule.kind);
134
+ if (!kind)
135
+ return Promise.reject(new Error(`The alert rule kind "${rule.kind}" is not registered.`));
136
+ const parsed = kind.configSchema.safeParse(rule.config);
137
+ if (!parsed.success)
138
+ return Promise.reject(new Error(`The rule's config no longer matches the "${rule.kind}" kind.`));
139
+ const controller = new AbortController();
140
+ const view = {
141
+ id: rule.id,
142
+ key: rule.key,
143
+ name: rule.name,
144
+ severity: rule.severity,
145
+ kind: rule.kind,
146
+ config: parsed.data,
147
+ };
148
+ const ctx = this.contexts.create(controller.signal, now);
149
+ let timer;
150
+ const budget = new Promise((_resolve, reject) => {
151
+ timer = setTimeout(() => {
152
+ controller.abort(new Error('time budget spent'));
153
+ reject(new Error(`Evaluation took longer than ${this.options.evaluationBudgetMs} ms and was abandoned.`));
154
+ }, this.options.evaluationBudgetMs);
155
+ timer.unref?.();
156
+ });
157
+ return Promise.race([kind.evaluate(ctx, view), budget]).finally(() => clearTimeout(timer));
158
+ }
159
+ async stamp(ruleId, now, lastError) {
160
+ try {
161
+ await this.prisma.alertRule.updateMany({ where: { id: ruleId }, data: { lastEvaluatedAt: now, lastError } });
162
+ }
163
+ catch (error) {
164
+ this.logger.warn(`Could not record the evaluation of rule ${ruleId}: ${message(error)}`);
165
+ }
166
+ }
167
+ async apply(rule, observations, now) {
168
+ const byKey = new Map();
169
+ for (const observation of observations) {
170
+ const key = (0, alert_state_machine_1.labelsKeyOf)(observation.labels);
171
+ const existing = byKey.get(key);
172
+ // One observation per label set; a breached one wins over a clear one.
173
+ if (!existing || (observation.breached && !existing.breached))
174
+ byKey.set(key, observation);
175
+ }
176
+ const open = await this.prisma.alertIncident.findMany({ where: { ruleId: rule.id, state: { in: ['pending', 'firing'] } } });
177
+ const openByKey = new Map(open.map((incident) => [incident.labelsKey, incident]));
178
+ const counts = { opened: 0, fired: 0, resolved: 0 };
179
+ for (const key of new Set([...byKey.keys(), ...openByKey.keys()])) {
180
+ const incident = openByKey.get(key) ?? null;
181
+ const observation = byKey.get(key) ?? null;
182
+ const transition = (0, alert_state_machine_1.nextTransition)({
183
+ now,
184
+ open: incident ? { id: incident.id, state: incident.state, pendingSince: incident.pendingSince } : null,
185
+ observation,
186
+ forSeconds: rule.forSeconds,
187
+ });
188
+ const touch = {
189
+ severity: rule.severity,
190
+ lastValue: observation?.value ?? null,
191
+ lastSeenAt: now,
192
+ ...(observation ? { summary: clampSummary(observation.summary) } : {}),
193
+ };
194
+ switch (transition.type) {
195
+ case 'none':
196
+ break;
197
+ case 'touch':
198
+ await this.prisma.alertIncident.updateMany({ where: { id: incident.id, state: { in: ['pending', 'firing'] } }, data: touch });
199
+ break;
200
+ case 'discard':
201
+ await this.prisma.alertIncident.deleteMany({ where: { id: incident.id, state: 'pending' } });
202
+ break;
203
+ case 'open': {
204
+ const created = await this.create(rule, key, observation, transition.state ?? 'pending', now);
205
+ if (!created)
206
+ break; // a concurrent pass created it; the next pass handles it
207
+ counts.opened += 1;
208
+ if (transition.state === 'firing') {
209
+ counts.fired += 1;
210
+ await this.fired(rule, created);
211
+ }
212
+ break;
213
+ }
214
+ case 'promote': {
215
+ const promoted = await this.prisma.alertIncident.updateMany({
216
+ where: { id: incident.id, state: 'pending' },
217
+ data: { ...touch, state: 'firing', firedAt: now },
218
+ });
219
+ if (promoted.count !== 1)
220
+ break;
221
+ counts.fired += 1;
222
+ const row = await this.prisma.alertIncident.findUnique({ where: { id: incident.id } });
223
+ if (row)
224
+ await this.fired(rule, row);
225
+ break;
226
+ }
227
+ case 'resolve': {
228
+ const previous = await this.previousResolvedAt(rule.id, key);
229
+ const resolved = await this.prisma.alertIncident.updateMany({
230
+ where: { id: incident.id, state: 'firing' },
231
+ data: {
232
+ state: 'resolved',
233
+ resolvedAt: now,
234
+ severity: rule.severity,
235
+ ...(observation ? { summary: clampSummary(observation.summary), lastValue: observation.value } : {}),
236
+ },
237
+ });
238
+ if (resolved.count !== 1)
239
+ break;
240
+ counts.resolved += 1;
241
+ const row = await this.prisma.alertIncident.findUnique({ where: { id: incident.id } });
242
+ if (row) {
243
+ const notify = (0, alert_state_machine_1.shouldNotify)(row.firedAt ?? now, previous, rule.cooldownSeconds);
244
+ await this.dispatcher.dispatch('resolved', rule, row, notify);
245
+ }
246
+ break;
247
+ }
248
+ }
249
+ }
250
+ return counts;
251
+ }
252
+ async create(rule, labelsKey, observation, state, now) {
253
+ try {
254
+ return await this.prisma.alertIncident.create({
255
+ data: {
256
+ ruleId: rule.id,
257
+ labelsKey,
258
+ labels: observation.labels,
259
+ state,
260
+ severity: rule.severity,
261
+ pendingSince: now,
262
+ firedAt: state === 'firing' ? now : null,
263
+ lastValue: observation.value,
264
+ lastSeenAt: now,
265
+ summary: clampSummary(observation.summary),
266
+ },
267
+ });
268
+ }
269
+ catch (error) {
270
+ if (isUniqueViolation(error))
271
+ return null; // alert_incidents_open_uniq_idx: one open incident per rule and labels
272
+ throw error;
273
+ }
274
+ }
275
+ async fired(rule, incident) {
276
+ const previous = await this.previousResolvedAt(rule.id, incident.labelsKey);
277
+ await this.dispatcher.dispatch('fired', rule, incident, (0, alert_state_machine_1.shouldNotify)(incident.firedAt ?? new Date(), previous, rule.cooldownSeconds));
278
+ }
279
+ async previousResolvedAt(ruleId, labelsKey) {
280
+ const row = await this.prisma.alertIncident.findFirst({
281
+ where: { ruleId, labelsKey, state: 'resolved' },
282
+ orderBy: { resolvedAt: 'desc' },
283
+ select: { resolvedAt: true },
284
+ });
285
+ return row?.resolvedAt ?? null;
286
+ }
287
+ };
288
+ exports.AlertsEvaluationService = AlertsEvaluationService;
289
+ exports.AlertsEvaluationService = AlertsEvaluationService = AlertsEvaluationService_1 = __decorate([
290
+ (0, common_1.Injectable)(),
291
+ __param(0, (0, common_1.Inject)(index_1.PLATFORM_PRISMA)),
292
+ __param(3, (0, common_1.Inject)(alerts_constants_1.ALERTS_OPTIONS)),
293
+ __metadata("design:paramtypes", [Object, alerts_context_service_1.AlertContextService,
294
+ alerts_dispatch_service_1.AlertsDispatchService, Object])
295
+ ], AlertsEvaluationService);
296
+ //# sourceMappingURL=alerts-evaluation.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alerts-evaluation.service.js","sourceRoot":"","sources":["../../src/alerts/alerts-evaluation.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { JobsService } from '../jobs/index';
2
+ import { type NodeEventReportedEvent } from '../nodes/index';
3
+ /**
4
+ * Turns a node event into an `alerts.evaluate_event` job. ENQUEUE ONLY: the
5
+ * body does no I/O of its own and never evaluates a rule inline (the queue's
6
+ * rule 1; the `on-event-no-io` suite scans it). Every event gets its own job
7
+ * (`skipDedup`), because the job's payload says which event to look at.
8
+ *
9
+ * @stability experimental
10
+ */
11
+ export declare class AlertsEventListener {
12
+ private readonly jobs;
13
+ private readonly logger;
14
+ constructor(jobs: JobsService);
15
+ /**
16
+ * Queues one `alerts.evaluate_event` job for a reported node event.
17
+ *
18
+ * @param event - the node event the nodes slice emitted after its write committed.
19
+ */
20
+ handleNodeEvent(event: NodeEventReportedEvent): void;
21
+ }
22
+ //# sourceMappingURL=alerts-event.listener.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alerts-event.listener.d.ts","sourceRoot":"","sources":["../../src/alerts/alerts-event.listener.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAuB,KAAK,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAIlF;;;;;;;GAOG;AACH,qBACa,mBAAmB;IAGlB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwC;gBAElC,IAAI,EAAE,WAAW;IAE9C;;;;OAIG;IAEH,eAAe,CAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI;CAqBrD"}
@@ -0,0 +1,72 @@
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
+ var AlertsEventListener_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.AlertsEventListener = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const event_emitter_1 = require("@nestjs/event-emitter");
16
+ const index_1 = require("../jobs/index");
17
+ const index_2 = require("../nodes/index");
18
+ const alerts_constants_1 = require("./alerts.constants");
19
+ const index_3 = require("../jobs/index");
20
+ /**
21
+ * Turns a node event into an `alerts.evaluate_event` job. ENQUEUE ONLY: the
22
+ * body does no I/O of its own and never evaluates a rule inline (the queue's
23
+ * rule 1; the `on-event-no-io` suite scans it). Every event gets its own job
24
+ * (`skipDedup`), because the job's payload says which event to look at.
25
+ *
26
+ * @stability experimental
27
+ */
28
+ let AlertsEventListener = AlertsEventListener_1 = class AlertsEventListener {
29
+ jobs;
30
+ logger = new common_1.Logger(AlertsEventListener_1.name);
31
+ constructor(jobs) {
32
+ this.jobs = jobs;
33
+ }
34
+ /**
35
+ * Queues one `alerts.evaluate_event` job for a reported node event.
36
+ *
37
+ * @param event - the node event the nodes slice emitted after its write committed.
38
+ */
39
+ handleNodeEvent(event) {
40
+ void this.jobs
41
+ .enqueue({
42
+ type: alerts_constants_1.ALERTS_EVALUATE_EVENT_TYPE,
43
+ reason: 'backfill',
44
+ orgId: null,
45
+ priority: Math.min(index_3.HOUSEKEEPING_PRIORITY, 10),
46
+ skipDedup: true,
47
+ payload: {
48
+ nodeId: event.nodeId,
49
+ nodeName: event.nodeName,
50
+ type: event.type,
51
+ severity: event.severity,
52
+ attrs: { ...event.attrs },
53
+ occurredAt: event.occurredAt.toISOString(),
54
+ },
55
+ })
56
+ .catch((error) => {
57
+ this.logger.error(`Could not queue the alert evaluation for node event ${event.type}: ${error instanceof Error ? error.message : String(error)}`);
58
+ });
59
+ }
60
+ };
61
+ exports.AlertsEventListener = AlertsEventListener;
62
+ __decorate([
63
+ (0, event_emitter_1.OnEvent)(index_2.NODE_EVENT_REPORTED),
64
+ __metadata("design:type", Function),
65
+ __metadata("design:paramtypes", [Function]),
66
+ __metadata("design:returntype", void 0)
67
+ ], AlertsEventListener.prototype, "handleNodeEvent", null);
68
+ exports.AlertsEventListener = AlertsEventListener = AlertsEventListener_1 = __decorate([
69
+ (0, common_1.Injectable)(),
70
+ __metadata("design:paramtypes", [index_1.JobsService])
71
+ ], AlertsEventListener);
72
+ //# sourceMappingURL=alerts-event.listener.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alerts-event.listener.js","sourceRoot":"","sources":["../../src/alerts/alerts-event.listener.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAAoD;AACpD,yDAAgD;AAEhD,yCAA4C;AAC5C,0CAAkF;AAClF,yDAAgE;AAChE,yCAAsD;AAEtD;;;;;;;GAOG;AAEI,IAAM,mBAAmB,2BAAzB,MAAM,mBAAmB;IAGD;IAFZ,MAAM,GAAG,IAAI,eAAM,CAAC,qBAAmB,CAAC,IAAI,CAAC,CAAC;IAE/D,YAA6B,IAAiB;QAAjB,SAAI,GAAJ,IAAI,CAAa;IAAG,CAAC;IAElD;;;;OAIG;IAEH,eAAe,CAAC,KAA6B;QAC3C,KAAK,IAAI,CAAC,IAAI;aACX,OAAO,CAAC;YACP,IAAI,EAAE,6CAA0B;YAChC,MAAM,EAAE,UAAU;YAClB,KAAK,EAAE,IAAI;YACX,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,6BAAqB,EAAE,EAAE,CAAC;YAC7C,SAAS,EAAE,IAAI;YACf,OAAO,EAAE;gBACP,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,KAAK,EAAE,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE;gBACzB,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE;aAC3C;SACF,CAAC;aACD,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YACxB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uDAAuD,KAAK,CAAC,IAAI,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACpJ,CAAC,CAAC,CAAC;IACP,CAAC;CACF,CAAA;AAhCY,kDAAmB;AAW9B;IADC,IAAA,uBAAO,EAAC,2BAAmB,CAAC;;;;0DAqB5B;8BA/BU,mBAAmB;IAD/B,IAAA,mBAAU,GAAE;qCAIwB,mBAAW;GAHnC,mBAAmB,CAgC/B"}