@marinoscar/platform-api 0.1.0-next.19 → 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 (437) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +1 -0
  3. package/dist/alerts/alerts-admin.controller.d.ts +40 -0
  4. package/dist/alerts/alerts-admin.controller.d.ts.map +1 -0
  5. package/dist/alerts/alerts-admin.controller.js +297 -0
  6. package/dist/alerts/alerts-admin.controller.js.map +1 -0
  7. package/dist/alerts/alerts-context.service.d.ts +64 -0
  8. package/dist/alerts/alerts-context.service.d.ts.map +1 -0
  9. package/dist/alerts/alerts-context.service.js +190 -0
  10. package/dist/alerts/alerts-context.service.js.map +1 -0
  11. package/dist/alerts/alerts-dispatch.service.d.ts +53 -0
  12. package/dist/alerts/alerts-dispatch.service.d.ts.map +1 -0
  13. package/dist/alerts/alerts-dispatch.service.js +135 -0
  14. package/dist/alerts/alerts-dispatch.service.js.map +1 -0
  15. package/dist/alerts/alerts-evaluation.service.d.ts +88 -0
  16. package/dist/alerts/alerts-evaluation.service.d.ts.map +1 -0
  17. package/dist/alerts/alerts-evaluation.service.js +296 -0
  18. package/dist/alerts/alerts-evaluation.service.js.map +1 -0
  19. package/dist/alerts/alerts-event.listener.d.ts +22 -0
  20. package/dist/alerts/alerts-event.listener.d.ts.map +1 -0
  21. package/dist/alerts/alerts-event.listener.js +72 -0
  22. package/dist/alerts/alerts-event.listener.js.map +1 -0
  23. package/dist/alerts/alerts-incidents.service.d.ts +86 -0
  24. package/dist/alerts/alerts-incidents.service.d.ts.map +1 -0
  25. package/dist/alerts/alerts-incidents.service.js +144 -0
  26. package/dist/alerts/alerts-incidents.service.js.map +1 -0
  27. package/dist/alerts/alerts-rules.service.d.ts +73 -0
  28. package/dist/alerts/alerts-rules.service.d.ts.map +1 -0
  29. package/dist/alerts/alerts-rules.service.js +205 -0
  30. package/dist/alerts/alerts-rules.service.js.map +1 -0
  31. package/dist/alerts/alerts-seed.service.d.ts +25 -0
  32. package/dist/alerts/alerts-seed.service.d.ts.map +1 -0
  33. package/dist/alerts/alerts-seed.service.js +82 -0
  34. package/dist/alerts/alerts-seed.service.js.map +1 -0
  35. package/dist/alerts/alerts.constants.d.ts +53 -0
  36. package/dist/alerts/alerts.constants.d.ts.map +1 -0
  37. package/dist/alerts/alerts.constants.js +57 -0
  38. package/dist/alerts/alerts.constants.js.map +1 -0
  39. package/dist/alerts/alerts.errors.d.ts +44 -0
  40. package/dist/alerts/alerts.errors.d.ts.map +1 -0
  41. package/dist/alerts/alerts.errors.js +47 -0
  42. package/dist/alerts/alerts.errors.js.map +1 -0
  43. package/dist/alerts/alerts.metrics.d.ts +60 -0
  44. package/dist/alerts/alerts.metrics.d.ts.map +1 -0
  45. package/dist/alerts/alerts.metrics.js +135 -0
  46. package/dist/alerts/alerts.metrics.js.map +1 -0
  47. package/dist/alerts/alerts.module.d.ts +35 -0
  48. package/dist/alerts/alerts.module.d.ts.map +1 -0
  49. package/dist/alerts/alerts.module.js +96 -0
  50. package/dist/alerts/alerts.module.js.map +1 -0
  51. package/dist/alerts/alerts.options.d.ts +64 -0
  52. package/dist/alerts/alerts.options.d.ts.map +1 -0
  53. package/dist/alerts/alerts.options.js +34 -0
  54. package/dist/alerts/alerts.options.js.map +1 -0
  55. package/dist/alerts/alerts.permissions.d.ts +27 -0
  56. package/dist/alerts/alerts.permissions.d.ts.map +1 -0
  57. package/dist/alerts/alerts.permissions.js +29 -0
  58. package/dist/alerts/alerts.permissions.js.map +1 -0
  59. package/dist/alerts/alerts.types.d.ts +182 -0
  60. package/dist/alerts/alerts.types.d.ts.map +1 -0
  61. package/dist/alerts/alerts.types.js +3 -0
  62. package/dist/alerts/alerts.types.js.map +1 -0
  63. package/dist/alerts/data/alerts-db.d.ts +169 -0
  64. package/dist/alerts/data/alerts-db.d.ts.map +1 -0
  65. package/dist/alerts/data/alerts-db.js +18 -0
  66. package/dist/alerts/data/alerts-db.js.map +1 -0
  67. package/dist/alerts/dto/alerts.dto.d.ts +132 -0
  68. package/dist/alerts/dto/alerts.dto.d.ts.map +1 -0
  69. package/dist/alerts/dto/alerts.dto.js +42 -0
  70. package/dist/alerts/dto/alerts.dto.js.map +1 -0
  71. package/dist/alerts/handlers/alerts-evaluate-event.handler.d.ts +23 -0
  72. package/dist/alerts/handlers/alerts-evaluate-event.handler.d.ts.map +1 -0
  73. package/dist/alerts/handlers/alerts-evaluate-event.handler.js +71 -0
  74. package/dist/alerts/handlers/alerts-evaluate-event.handler.js.map +1 -0
  75. package/dist/alerts/handlers/alerts-evaluate.handler.d.ts +25 -0
  76. package/dist/alerts/handlers/alerts-evaluate.handler.d.ts.map +1 -0
  77. package/dist/alerts/handlers/alerts-evaluate.handler.js +54 -0
  78. package/dist/alerts/handlers/alerts-evaluate.handler.js.map +1 -0
  79. package/dist/alerts/handlers/alerts-incidents-purge.handler.d.ts +29 -0
  80. package/dist/alerts/handlers/alerts-incidents-purge.handler.d.ts.map +1 -0
  81. package/dist/alerts/handlers/alerts-incidents-purge.handler.js +76 -0
  82. package/dist/alerts/handlers/alerts-incidents-purge.handler.js.map +1 -0
  83. package/dist/alerts/index.d.ts +45 -0
  84. package/dist/alerts/index.d.ts.map +1 -0
  85. package/dist/alerts/index.js +108 -0
  86. package/dist/alerts/index.js.map +1 -0
  87. package/dist/alerts/kinds/alert-kind.registry.d.ts +33 -0
  88. package/dist/alerts/kinds/alert-kind.registry.d.ts.map +1 -0
  89. package/dist/alerts/kinds/alert-kind.registry.js +63 -0
  90. package/dist/alerts/kinds/alert-kind.registry.js.map +1 -0
  91. package/dist/alerts/kinds/builtin-kinds.d.ts +18 -0
  92. package/dist/alerts/kinds/builtin-kinds.d.ts.map +1 -0
  93. package/dist/alerts/kinds/builtin-kinds.js +33 -0
  94. package/dist/alerts/kinds/builtin-kinds.js.map +1 -0
  95. package/dist/alerts/kinds/metric-threshold.kind.d.ts +11 -0
  96. package/dist/alerts/kinds/metric-threshold.kind.d.ts.map +1 -0
  97. package/dist/alerts/kinds/metric-threshold.kind.js +63 -0
  98. package/dist/alerts/kinds/metric-threshold.kind.js.map +1 -0
  99. package/dist/alerts/kinds/metric-threshold.sql.d.ts +41 -0
  100. package/dist/alerts/kinds/metric-threshold.sql.d.ts.map +1 -0
  101. package/dist/alerts/kinds/metric-threshold.sql.js +124 -0
  102. package/dist/alerts/kinds/metric-threshold.sql.js.map +1 -0
  103. package/dist/alerts/kinds/node-event.kind.d.ts +44 -0
  104. package/dist/alerts/kinds/node-event.kind.d.ts.map +1 -0
  105. package/dist/alerts/kinds/node-event.kind.js +113 -0
  106. package/dist/alerts/kinds/node-event.kind.js.map +1 -0
  107. package/dist/alerts/kinds/node-offline.kind.d.ts +11 -0
  108. package/dist/alerts/kinds/node-offline.kind.d.ts.map +1 -0
  109. package/dist/alerts/kinds/node-offline.kind.js +41 -0
  110. package/dist/alerts/kinds/node-offline.kind.js.map +1 -0
  111. package/dist/alerts/kinds/telemetry-unavailable.kind.d.ts +11 -0
  112. package/dist/alerts/kinds/telemetry-unavailable.kind.d.ts.map +1 -0
  113. package/dist/alerts/kinds/telemetry-unavailable.kind.js +40 -0
  114. package/dist/alerts/kinds/telemetry-unavailable.kind.js.map +1 -0
  115. package/dist/alerts/kinds/verdict.kind.d.ts +13 -0
  116. package/dist/alerts/kinds/verdict.kind.d.ts.map +1 -0
  117. package/dist/alerts/kinds/verdict.kind.js +34 -0
  118. package/dist/alerts/kinds/verdict.kind.js.map +1 -0
  119. package/dist/alerts/notifications/alerts.notifications.d.ts +77 -0
  120. package/dist/alerts/notifications/alerts.notifications.d.ts.map +1 -0
  121. package/dist/alerts/notifications/alerts.notifications.js +145 -0
  122. package/dist/alerts/notifications/alerts.notifications.js.map +1 -0
  123. package/dist/alerts/starter-rules.d.ts +21 -0
  124. package/dist/alerts/starter-rules.d.ts.map +1 -0
  125. package/dist/alerts/starter-rules.js +141 -0
  126. package/dist/alerts/starter-rules.js.map +1 -0
  127. package/dist/alerts/state/alert-state-machine.d.ts +92 -0
  128. package/dist/alerts/state/alert-state-machine.d.ts.map +1 -0
  129. package/dist/alerts/state/alert-state-machine.js +96 -0
  130. package/dist/alerts/state/alert-state-machine.js.map +1 -0
  131. package/dist/alerts/tasks/alerts-evaluate.task.d.ts +18 -0
  132. package/dist/alerts/tasks/alerts-evaluate.task.d.ts.map +1 -0
  133. package/dist/alerts/tasks/alerts-evaluate.task.js +61 -0
  134. package/dist/alerts/tasks/alerts-evaluate.task.js.map +1 -0
  135. package/dist/alerts/tasks/alerts-purge.task.d.ts +15 -0
  136. package/dist/alerts/tasks/alerts-purge.task.d.ts.map +1 -0
  137. package/dist/alerts/tasks/alerts-purge.task.js +58 -0
  138. package/dist/alerts/tasks/alerts-purge.task.js.map +1 -0
  139. package/dist/alerts/testing/conformance.d.ts +58 -0
  140. package/dist/alerts/testing/conformance.d.ts.map +1 -0
  141. package/dist/alerts/testing/conformance.js +198 -0
  142. package/dist/alerts/testing/conformance.js.map +1 -0
  143. package/dist/alerts/testing/fakes.d.ts +80 -0
  144. package/dist/alerts/testing/fakes.d.ts.map +1 -0
  145. package/dist/alerts/testing/fakes.js +230 -0
  146. package/dist/alerts/testing/fakes.js.map +1 -0
  147. package/dist/alerts/testing/index.d.ts +5 -0
  148. package/dist/alerts/testing/index.d.ts.map +1 -0
  149. package/dist/alerts/testing/index.js +15 -0
  150. package/dist/alerts/testing/index.js.map +1 -0
  151. package/dist/core/index.d.ts +1 -0
  152. package/dist/core/index.d.ts.map +1 -1
  153. package/dist/core/index.js +8 -2
  154. package/dist/core/index.js.map +1 -1
  155. package/dist/core/net/ip-classify.d.ts +39 -0
  156. package/dist/core/net/ip-classify.d.ts.map +1 -0
  157. package/dist/core/net/ip-classify.js +196 -0
  158. package/dist/core/net/ip-classify.js.map +1 -0
  159. package/dist/credentials/testing/conformance.d.ts.map +1 -1
  160. package/dist/credentials/testing/conformance.js +1 -0
  161. package/dist/credentials/testing/conformance.js.map +1 -1
  162. package/dist/jobs/data/jobs-db.d.ts +26 -0
  163. package/dist/jobs/data/jobs-db.d.ts.map +1 -1
  164. package/dist/jobs/index.d.ts +1 -1
  165. package/dist/jobs/index.d.ts.map +1 -1
  166. package/dist/jobs/index.js.map +1 -1
  167. package/dist/manifest/platform-model-ownership.d.ts +1 -1
  168. package/dist/manifest/platform-model-ownership.d.ts.map +1 -1
  169. package/dist/manifest/platform-model-ownership.js +30 -1
  170. package/dist/manifest/platform-model-ownership.js.map +1 -1
  171. package/dist/manifest/platform-permissions.d.ts +6 -2
  172. package/dist/manifest/platform-permissions.d.ts.map +1 -1
  173. package/dist/manifest/platform-permissions.js +56 -44
  174. package/dist/manifest/platform-permissions.js.map +1 -1
  175. package/dist/manifest/platform-user-owned-models.d.ts.map +1 -1
  176. package/dist/manifest/platform-user-owned-models.js +16 -0
  177. package/dist/manifest/platform-user-owned-models.js.map +1 -1
  178. package/dist/nodes/dto/node-admin.dto.d.ts +5 -0
  179. package/dist/nodes/dto/node-admin.dto.d.ts.map +1 -1
  180. package/dist/nodes/dto/node-admin.dto.js +19 -0
  181. package/dist/nodes/dto/node-admin.dto.js.map +1 -1
  182. package/dist/nodes/dto/node-control-plane.dto.d.ts +26 -0
  183. package/dist/nodes/dto/node-control-plane.dto.d.ts.map +1 -1
  184. package/dist/nodes/dto/node-event.dto.d.ts +100 -0
  185. package/dist/nodes/dto/node-event.dto.d.ts.map +1 -0
  186. package/dist/nodes/dto/node-event.dto.js +239 -0
  187. package/dist/nodes/dto/node-event.dto.js.map +1 -0
  188. package/dist/nodes/dto/node-response.dto.d.ts +21 -0
  189. package/dist/nodes/dto/node-response.dto.d.ts.map +1 -1
  190. package/dist/nodes/dto/node-response.dto.js +42 -1
  191. package/dist/nodes/dto/node-response.dto.js.map +1 -1
  192. package/dist/nodes/events/node-event.event.d.ts +41 -0
  193. package/dist/nodes/events/node-event.event.d.ts.map +1 -0
  194. package/dist/nodes/events/node-event.event.js +69 -0
  195. package/dist/nodes/events/node-event.event.js.map +1 -0
  196. package/dist/nodes/handlers/node-events-purge.handler.d.ts +31 -0
  197. package/dist/nodes/handlers/node-events-purge.handler.d.ts.map +1 -0
  198. package/dist/nodes/handlers/node-events-purge.handler.js +91 -0
  199. package/dist/nodes/handlers/node-events-purge.handler.js.map +1 -0
  200. package/dist/nodes/index.d.ts +11 -4
  201. package/dist/nodes/index.d.ts.map +1 -1
  202. package/dist/nodes/index.js +20 -1
  203. package/dist/nodes/index.js.map +1 -1
  204. package/dist/nodes/node-events.service.d.ts +87 -0
  205. package/dist/nodes/node-events.service.d.ts.map +1 -0
  206. package/dist/nodes/node-events.service.js +271 -0
  207. package/dist/nodes/node-events.service.js.map +1 -0
  208. package/dist/nodes/node-fleet-metrics.service.d.ts +10 -1
  209. package/dist/nodes/node-fleet-metrics.service.d.ts.map +1 -1
  210. package/dist/nodes/node-fleet-metrics.service.js +31 -0
  211. package/dist/nodes/node-fleet-metrics.service.js.map +1 -1
  212. package/dist/nodes/node-lifecycle.service.d.ts +16 -1
  213. package/dist/nodes/node-lifecycle.service.d.ts.map +1 -1
  214. package/dist/nodes/node-lifecycle.service.js +7 -0
  215. package/dist/nodes/node-lifecycle.service.js.map +1 -1
  216. package/dist/nodes/nodes-admin.controller.d.ts +5 -1
  217. package/dist/nodes/nodes-admin.controller.d.ts.map +1 -1
  218. package/dist/nodes/nodes-admin.controller.js +32 -2
  219. package/dist/nodes/nodes-admin.controller.js.map +1 -1
  220. package/dist/nodes/nodes.controller.d.ts +7 -3
  221. package/dist/nodes/nodes.controller.d.ts.map +1 -1
  222. package/dist/nodes/nodes.controller.js +46 -6
  223. package/dist/nodes/nodes.controller.js.map +1 -1
  224. package/dist/nodes/nodes.metrics.d.ts +23 -1
  225. package/dist/nodes/nodes.metrics.d.ts.map +1 -1
  226. package/dist/nodes/nodes.metrics.js +80 -1
  227. package/dist/nodes/nodes.metrics.js.map +1 -1
  228. package/dist/nodes/nodes.module.d.ts.map +1 -1
  229. package/dist/nodes/nodes.module.js +6 -0
  230. package/dist/nodes/nodes.module.js.map +1 -1
  231. package/dist/nodes/nodes.options.d.ts +17 -0
  232. package/dist/nodes/nodes.options.d.ts.map +1 -1
  233. package/dist/nodes/nodes.options.js +13 -2
  234. package/dist/nodes/nodes.options.js.map +1 -1
  235. package/dist/nodes/nodes.service.d.ts +3 -1
  236. package/dist/nodes/nodes.service.d.ts.map +1 -1
  237. package/dist/nodes/nodes.service.js +14 -3
  238. package/dist/nodes/nodes.service.js.map +1 -1
  239. package/dist/nodes/tasks/node-events-purge.task.d.ts +13 -0
  240. package/dist/nodes/tasks/node-events-purge.task.d.ts.map +1 -0
  241. package/dist/nodes/tasks/node-events-purge.task.js +73 -0
  242. package/dist/nodes/tasks/node-events-purge.task.js.map +1 -0
  243. package/dist/telemetry/dashboard/telemetry-dashboard.service.d.ts +30 -8
  244. package/dist/telemetry/dashboard/telemetry-dashboard.service.d.ts.map +1 -1
  245. package/dist/telemetry/dashboard/telemetry-dashboard.service.js +12 -0
  246. package/dist/telemetry/dashboard/telemetry-dashboard.service.js.map +1 -1
  247. package/dist/telemetry/dashboard/telemetry-dashboard.verdict.d.ts +15 -0
  248. package/dist/telemetry/dashboard/telemetry-dashboard.verdict.d.ts.map +1 -1
  249. package/dist/telemetry/dashboard/telemetry-dashboard.verdict.js +17 -2
  250. package/dist/telemetry/dashboard/telemetry-dashboard.verdict.js.map +1 -1
  251. package/dist/telemetry/dto/telemetry-dashboard.dto.d.ts +3 -3
  252. package/dist/telemetry/index.d.ts +4 -2
  253. package/dist/telemetry/index.d.ts.map +1 -1
  254. package/dist/telemetry/index.js +4 -1
  255. package/dist/telemetry/index.js.map +1 -1
  256. package/dist/telemetry/metrics/groups/nodes.metric-group.d.ts.map +1 -1
  257. package/dist/telemetry/metrics/groups/nodes.metric-group.js +77 -0
  258. package/dist/telemetry/metrics/groups/nodes.metric-group.js.map +1 -1
  259. package/dist/telemetry/metrics/metric-verdict.d.ts +1 -1
  260. package/dist/telemetry/metrics/metric-verdict.d.ts.map +1 -1
  261. package/dist/telemetry/metrics/metric-verdict.js +15 -1
  262. package/dist/telemetry/metrics/metric-verdict.js.map +1 -1
  263. package/dist/telemetry/query/telemetry-query-facade.d.ts +1 -1
  264. package/dist/telemetry/query/telemetry-query-facade.d.ts.map +1 -1
  265. package/dist/telemetry/query/telemetry-query-facade.js.map +1 -1
  266. package/dist/telemetry/query/telemetry-query.service.d.ts +2 -2
  267. package/dist/telemetry/query/telemetry-query.service.d.ts.map +1 -1
  268. package/dist/telemetry/query/telemetry-query.service.js +4 -0
  269. package/dist/telemetry/query/telemetry-query.service.js.map +1 -1
  270. package/dist/telemetry/stack/dto/telemetry-stack.dto.d.ts +1 -1
  271. package/dist/telemetry/telemetry-support-bundle.section.d.ts +4 -4
  272. package/dist/telemetry/telemetry.module.d.ts.map +1 -1
  273. package/dist/telemetry/telemetry.module.js +1 -0
  274. package/dist/telemetry/telemetry.module.js.map +1 -1
  275. package/dist/telemetry/testing/metric-schema.fixture.d.ts.map +1 -1
  276. package/dist/telemetry/testing/metric-schema.fixture.js +56 -0
  277. package/dist/telemetry/testing/metric-schema.fixture.js.map +1 -1
  278. package/dist/user-data/platform-user-data.d.ts.map +1 -1
  279. package/dist/user-data/platform-user-data.js +2 -0
  280. package/dist/user-data/platform-user-data.js.map +1 -1
  281. package/dist/webhooks/data/webhooks-db.d.ts +176 -0
  282. package/dist/webhooks/data/webhooks-db.d.ts.map +1 -0
  283. package/dist/webhooks/data/webhooks-db.js +14 -0
  284. package/dist/webhooks/data/webhooks-db.js.map +1 -0
  285. package/dist/webhooks/egress/egress-guard.d.ts +99 -0
  286. package/dist/webhooks/egress/egress-guard.d.ts.map +1 -0
  287. package/dist/webhooks/egress/egress-guard.js +172 -0
  288. package/dist/webhooks/egress/egress-guard.js.map +1 -0
  289. package/dist/webhooks/egress/transport.d.ts +58 -0
  290. package/dist/webhooks/egress/transport.d.ts.map +1 -0
  291. package/dist/webhooks/egress/transport.js +115 -0
  292. package/dist/webhooks/egress/transport.js.map +1 -0
  293. package/dist/webhooks/handlers/webhook-deliver.handler.d.ts +76 -0
  294. package/dist/webhooks/handlers/webhook-deliver.handler.d.ts.map +1 -0
  295. package/dist/webhooks/handlers/webhook-deliver.handler.js +332 -0
  296. package/dist/webhooks/handlers/webhook-deliver.handler.js.map +1 -0
  297. package/dist/webhooks/handlers/webhook-fanout.handler.d.ts +28 -0
  298. package/dist/webhooks/handlers/webhook-fanout.handler.d.ts.map +1 -0
  299. package/dist/webhooks/handlers/webhook-fanout.handler.js +73 -0
  300. package/dist/webhooks/handlers/webhook-fanout.handler.js.map +1 -0
  301. package/dist/webhooks/handlers/webhook-purge.handler.d.ts +33 -0
  302. package/dist/webhooks/handlers/webhook-purge.handler.d.ts.map +1 -0
  303. package/dist/webhooks/handlers/webhook-purge.handler.js +77 -0
  304. package/dist/webhooks/handlers/webhook-purge.handler.js.map +1 -0
  305. package/dist/webhooks/http/admin-webhooks.controller.d.ts +36 -0
  306. package/dist/webhooks/http/admin-webhooks.controller.d.ts.map +1 -0
  307. package/dist/webhooks/http/admin-webhooks.controller.js +250 -0
  308. package/dist/webhooks/http/admin-webhooks.controller.js.map +1 -0
  309. package/dist/webhooks/http/org-webhooks.controller.d.ts +36 -0
  310. package/dist/webhooks/http/org-webhooks.controller.d.ts.map +1 -0
  311. package/dist/webhooks/http/org-webhooks.controller.js +249 -0
  312. package/dist/webhooks/http/org-webhooks.controller.js.map +1 -0
  313. package/dist/webhooks/http/scope-context.d.ts +17 -0
  314. package/dist/webhooks/http/scope-context.d.ts.map +1 -0
  315. package/dist/webhooks/http/scope-context.js +28 -0
  316. package/dist/webhooks/http/scope-context.js.map +1 -0
  317. package/dist/webhooks/http/webhook.dto.d.ts +174 -0
  318. package/dist/webhooks/http/webhook.dto.d.ts.map +1 -0
  319. package/dist/webhooks/http/webhook.dto.js +58 -0
  320. package/dist/webhooks/http/webhook.dto.js.map +1 -0
  321. package/dist/webhooks/http/webhooks.controller.d.ts +36 -0
  322. package/dist/webhooks/http/webhooks.controller.d.ts.map +1 -0
  323. package/dist/webhooks/http/webhooks.controller.js +243 -0
  324. package/dist/webhooks/http/webhooks.controller.js.map +1 -0
  325. package/dist/webhooks/index.d.ts +43 -0
  326. package/dist/webhooks/index.d.ts.map +1 -0
  327. package/dist/webhooks/index.js +147 -0
  328. package/dist/webhooks/index.js.map +1 -0
  329. package/dist/webhooks/listeners/webhook-event.listeners.d.ts +23 -0
  330. package/dist/webhooks/listeners/webhook-event.listeners.d.ts.map +1 -0
  331. package/dist/webhooks/listeners/webhook-event.listeners.js +120 -0
  332. package/dist/webhooks/listeners/webhook-event.listeners.js.map +1 -0
  333. package/dist/webhooks/notifications/webhook-notification.channel.d.ts +31 -0
  334. package/dist/webhooks/notifications/webhook-notification.channel.d.ts.map +1 -0
  335. package/dist/webhooks/notifications/webhook-notification.channel.js +127 -0
  336. package/dist/webhooks/notifications/webhook-notification.channel.js.map +1 -0
  337. package/dist/webhooks/notifications/webhook-notifications.d.ts +98 -0
  338. package/dist/webhooks/notifications/webhook-notifications.d.ts.map +1 -0
  339. package/dist/webhooks/notifications/webhook-notifications.js +150 -0
  340. package/dist/webhooks/notifications/webhook-notifications.js.map +1 -0
  341. package/dist/webhooks/ports.d.ts +29 -0
  342. package/dist/webhooks/ports.d.ts.map +1 -0
  343. package/dist/webhooks/ports.js +23 -0
  344. package/dist/webhooks/ports.js.map +1 -0
  345. package/dist/webhooks/registry/builtin-events.d.ts +57 -0
  346. package/dist/webhooks/registry/builtin-events.d.ts.map +1 -0
  347. package/dist/webhooks/registry/builtin-events.js +113 -0
  348. package/dist/webhooks/registry/builtin-events.js.map +1 -0
  349. package/dist/webhooks/registry/webhook-catalog.d.ts +63 -0
  350. package/dist/webhooks/registry/webhook-catalog.d.ts.map +1 -0
  351. package/dist/webhooks/registry/webhook-catalog.js +123 -0
  352. package/dist/webhooks/registry/webhook-catalog.js.map +1 -0
  353. package/dist/webhooks/registry/webhook-event.registry.d.ts +116 -0
  354. package/dist/webhooks/registry/webhook-event.registry.d.ts.map +1 -0
  355. package/dist/webhooks/registry/webhook-event.registry.js +152 -0
  356. package/dist/webhooks/registry/webhook-event.registry.js.map +1 -0
  357. package/dist/webhooks/signing.d.ts +31 -0
  358. package/dist/webhooks/signing.d.ts.map +1 -0
  359. package/dist/webhooks/signing.js +48 -0
  360. package/dist/webhooks/signing.js.map +1 -0
  361. package/dist/webhooks/tasks/webhook-purge.task.d.ts +17 -0
  362. package/dist/webhooks/tasks/webhook-purge.task.d.ts.map +1 -0
  363. package/dist/webhooks/tasks/webhook-purge.task.js +68 -0
  364. package/dist/webhooks/tasks/webhook-purge.task.js.map +1 -0
  365. package/dist/webhooks/testing/conformance.d.ts +61 -0
  366. package/dist/webhooks/testing/conformance.d.ts.map +1 -0
  367. package/dist/webhooks/testing/conformance.js +316 -0
  368. package/dist/webhooks/testing/conformance.js.map +1 -0
  369. package/dist/webhooks/testing/in-memory.d.ts +156 -0
  370. package/dist/webhooks/testing/in-memory.d.ts.map +1 -0
  371. package/dist/webhooks/testing/in-memory.js +323 -0
  372. package/dist/webhooks/testing/in-memory.js.map +1 -0
  373. package/dist/webhooks/testing/index.d.ts +7 -0
  374. package/dist/webhooks/testing/index.d.ts.map +1 -0
  375. package/dist/webhooks/testing/index.js +25 -0
  376. package/dist/webhooks/testing/index.js.map +1 -0
  377. package/dist/webhooks/testing/kit.d.ts +86 -0
  378. package/dist/webhooks/testing/kit.d.ts.map +1 -0
  379. package/dist/webhooks/testing/kit.js +113 -0
  380. package/dist/webhooks/testing/kit.js.map +1 -0
  381. package/dist/webhooks/webhook-endpoints.service.d.ts +142 -0
  382. package/dist/webhooks/webhook-endpoints.service.d.ts.map +1 -0
  383. package/dist/webhooks/webhook-endpoints.service.js +366 -0
  384. package/dist/webhooks/webhook-endpoints.service.js.map +1 -0
  385. package/dist/webhooks/webhook-envelope.d.ts +36 -0
  386. package/dist/webhooks/webhook-envelope.d.ts.map +1 -0
  387. package/dist/webhooks/webhook-envelope.js +46 -0
  388. package/dist/webhooks/webhook-envelope.js.map +1 -0
  389. package/dist/webhooks/webhook-secrets.service.d.ts +49 -0
  390. package/dist/webhooks/webhook-secrets.service.d.ts.map +1 -0
  391. package/dist/webhooks/webhook-secrets.service.js +118 -0
  392. package/dist/webhooks/webhook-secrets.service.js.map +1 -0
  393. package/dist/webhooks/webhook-views.d.ts +34 -0
  394. package/dist/webhooks/webhook-views.d.ts.map +1 -0
  395. package/dist/webhooks/webhook-views.js +83 -0
  396. package/dist/webhooks/webhook-views.js.map +1 -0
  397. package/dist/webhooks/webhooks.access.d.ts +28 -0
  398. package/dist/webhooks/webhooks.access.d.ts.map +1 -0
  399. package/dist/webhooks/webhooks.access.js +55 -0
  400. package/dist/webhooks/webhooks.access.js.map +1 -0
  401. package/dist/webhooks/webhooks.constants.d.ts +73 -0
  402. package/dist/webhooks/webhooks.constants.d.ts.map +1 -0
  403. package/dist/webhooks/webhooks.constants.js +100 -0
  404. package/dist/webhooks/webhooks.constants.js.map +1 -0
  405. package/dist/webhooks/webhooks.credentials.d.ts +28 -0
  406. package/dist/webhooks/webhooks.credentials.d.ts.map +1 -0
  407. package/dist/webhooks/webhooks.credentials.js +51 -0
  408. package/dist/webhooks/webhooks.credentials.js.map +1 -0
  409. package/dist/webhooks/webhooks.errors.d.ts +25 -0
  410. package/dist/webhooks/webhooks.errors.d.ts.map +1 -0
  411. package/dist/webhooks/webhooks.errors.js +65 -0
  412. package/dist/webhooks/webhooks.errors.js.map +1 -0
  413. package/dist/webhooks/webhooks.metrics.d.ts +24 -0
  414. package/dist/webhooks/webhooks.metrics.d.ts.map +1 -0
  415. package/dist/webhooks/webhooks.metrics.js +70 -0
  416. package/dist/webhooks/webhooks.metrics.js.map +1 -0
  417. package/dist/webhooks/webhooks.module.d.ts +29 -0
  418. package/dist/webhooks/webhooks.module.d.ts.map +1 -0
  419. package/dist/webhooks/webhooks.module.js +108 -0
  420. package/dist/webhooks/webhooks.module.js.map +1 -0
  421. package/dist/webhooks/webhooks.options.d.ts +119 -0
  422. package/dist/webhooks/webhooks.options.d.ts.map +1 -0
  423. package/dist/webhooks/webhooks.options.js +80 -0
  424. package/dist/webhooks/webhooks.options.js.map +1 -0
  425. package/dist/webhooks/webhooks.permissions.d.ts +47 -0
  426. package/dist/webhooks/webhooks.permissions.d.ts.map +1 -0
  427. package/dist/webhooks/webhooks.permissions.js +83 -0
  428. package/dist/webhooks/webhooks.permissions.js.map +1 -0
  429. package/dist/webhooks/webhooks.repository.d.ts +162 -0
  430. package/dist/webhooks/webhooks.repository.d.ts.map +1 -0
  431. package/dist/webhooks/webhooks.repository.js +246 -0
  432. package/dist/webhooks/webhooks.repository.js.map +1 -0
  433. package/dist/webhooks/webhooks.service.d.ts +91 -0
  434. package/dist/webhooks/webhooks.service.d.ts.map +1 -0
  435. package/dist/webhooks/webhooks.service.js +216 -0
  436. package/dist/webhooks/webhooks.service.js.map +1 -0
  437. package/package.json +19 -3
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.emptyAlertConfigSchema = exports.verdictKind = void 0;
4
+ const alerts_1 = require("@marinoscar/platform-contract/alerts");
5
+ Object.defineProperty(exports, "emptyAlertConfigSchema", { enumerable: true, get: function () { return alerts_1.emptyAlertConfigSchema; } });
6
+ const RANK = { degraded: 1, critical: 2 };
7
+ /**
8
+ * `verdict`: the telemetry dashboard verdict is at or past a level. Computed
9
+ * in-process by the dashboard's own service, so it can never disagree with the
10
+ * banner an administrator sees. `no_data` and `healthy` never breach.
11
+ *
12
+ * @stability experimental
13
+ */
14
+ exports.verdictKind = {
15
+ id: alerts_1.ALERT_KIND_IDS.VERDICT,
16
+ label: 'Dashboard verdict',
17
+ description: 'The telemetry dashboard verdict is degraded or critical.',
18
+ configSchema: alerts_1.verdictConfigSchema,
19
+ async evaluate(ctx, rule) {
20
+ const verdict = await ctx.verdict();
21
+ const breached = (RANK[verdict.level] ?? 0) >= RANK[rule.config.minLevel];
22
+ const reasons = verdict.reasons.length > 0 ? `: ${verdict.reasons.join('; ')}` : '';
23
+ return [
24
+ {
25
+ labels: {},
26
+ value: RANK[verdict.level] ?? 0,
27
+ breached,
28
+ summary: `${rule.name}: the telemetry verdict is ${verdict.level}${reasons}`.slice(0, 500),
29
+ },
30
+ ];
31
+ },
32
+ describe: (rule) => `The telemetry dashboard verdict is ${rule.config.minLevel} or worse`,
33
+ };
34
+ //# sourceMappingURL=verdict.kind.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verdict.kind.js","sourceRoot":"","sources":["../../../src/alerts/kinds/verdict.kind.ts"],"names":[],"mappings":";;;AAAA,iEAM8C;AAmCrC,uGAvCP,+BAAsB,OAuCO;AA/B/B,MAAM,IAAI,GAA2B,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;AAElE;;;;;;GAMG;AACU,QAAA,WAAW,GAAiC;IACvD,EAAE,EAAE,uBAAc,CAAC,OAAO;IAC1B,KAAK,EAAE,mBAAmB;IAC1B,WAAW,EAAE,0DAA0D;IACvE,YAAY,EAAE,4BAAmB;IACjC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI;QACtB,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1E,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpF,OAAO;YACL;gBACE,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC/B,QAAQ;gBACR,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,8BAA8B,OAAO,CAAC,KAAK,GAAG,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;aAC3F;SACF,CAAC;IACJ,CAAC;IACD,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,sCAAsC,IAAI,CAAC,MAAM,CAAC,QAAQ,WAAW;CAC1F,CAAC"}
@@ -0,0 +1,77 @@
1
+ import type { EmailRenderContext, RenderedEmail } from '../../email/index';
2
+ import type { BrowserNotificationTemplate, NotificationRegistration } from '../../notifications/index';
3
+ /**
4
+ * Everything the alert emails and browser notifications render.
5
+ *
6
+ * @stability experimental
7
+ */
8
+ export interface AlertNotificationData {
9
+ /** The incident id. */
10
+ incidentId: string;
11
+ /** The rule id. */
12
+ ruleId: string;
13
+ /** The rule's display name. Escaped on the way into the html. */
14
+ ruleName: string;
15
+ /** `info`, `warning` or `critical`. */
16
+ severity: string;
17
+ /** `fired` or `resolved`. */
18
+ state: 'fired' | 'resolved';
19
+ /** One sentence on what is wrong. */
20
+ summary: string;
21
+ /** The label set (`node.name`, ...). */
22
+ labels: Record<string, string>;
23
+ /** The last observed value, or `null`. */
24
+ value: number | null;
25
+ /** When it fired. */
26
+ firedAt: Date | null;
27
+ /** When it resolved. */
28
+ resolvedAt: Date | null;
29
+ /** Absolute URL of the application root, for the CTA. Optional. */
30
+ appUrl?: string;
31
+ }
32
+ /**
33
+ * Renders the alert email, fired or resolved (`data.state`).
34
+ *
35
+ * @param data - the alert.
36
+ * @param ctx - the render context.
37
+ * @returns the rendered message.
38
+ *
39
+ * @stability experimental
40
+ */
41
+ export declare function alertEmail(data: AlertNotificationData, ctx?: EmailRenderContext): RenderedEmail;
42
+ /**
43
+ * The bell, toast and push rendering of both alert events.
44
+ *
45
+ * @stability experimental
46
+ */
47
+ export declare const alertBrowserTemplate: BrowserNotificationTemplate;
48
+ /**
49
+ * The email template names the alert events bind. PERMANENT once deliveries name them.
50
+ *
51
+ * @stability experimental
52
+ */
53
+ export declare const ALERT_EMAIL_TEMPLATES: {
54
+ /** The template of `alerts.alert_fired`. */
55
+ readonly FIRED: "alert-fired";
56
+ /** The template of `alerts.alert_resolved`. */
57
+ readonly RESOLVED: "alert-resolved";
58
+ };
59
+ /**
60
+ * The two alert notification events. Register with
61
+ * `registerNotifications(ALERTS_NOTIFICATIONS)` after
62
+ * {@link registerAlertsEmailTemplates}.
63
+ *
64
+ * @extensionPoint registry
65
+ * @stability experimental
66
+ */
67
+ export declare const ALERTS_NOTIFICATIONS: readonly NotificationRegistration[];
68
+ /**
69
+ * Registers the two alert email templates. IDEMPOTENT: a name already
70
+ * registered with this renderer is skipped.
71
+ *
72
+ * @throws RegistryError `DUPLICATE_ID` when an app registered the name with another renderer; `FROZEN` after bootstrap.
73
+ *
74
+ * @stability experimental
75
+ */
76
+ export declare function registerAlertsEmailTemplates(): void;
77
+ //# sourceMappingURL=alerts.notifications.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alerts.notifications.d.ts","sourceRoot":"","sources":["../../../src/alerts/notifications/alerts.notifications.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAsB,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAE/F,OAAO,KAAK,EAA8B,2BAA2B,EAAwB,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAMzJ;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,uBAAuB;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,QAAQ,EAAE,MAAM,CAAC;IACjB,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,6BAA6B;IAC7B,KAAK,EAAE,OAAO,GAAG,UAAU,CAAC;IAC5B,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,0CAA0C;IAC1C,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,qBAAqB;IACrB,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC;IACrB,wBAAwB;IACxB,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAeD;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,qBAAqB,EAAE,GAAG,CAAC,EAAE,kBAAkB,GAAG,aAAa,CAmD/F;AAED;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,EAAE,2BAOlC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,qBAAqB;IAChC,4CAA4C;;IAE5C,+CAA+C;;CAEvC,CAAC;AAEX;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,wBAAwB,EAuBnE,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,IAAI,IAAI,CAKnD"}
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ALERTS_NOTIFICATIONS = exports.ALERT_EMAIL_TEMPLATES = exports.alertBrowserTemplate = void 0;
4
+ exports.alertEmail = alertEmail;
5
+ exports.registerAlertsEmailTemplates = registerAlertsEmailTemplates;
6
+ const index_1 = require("../../email/index");
7
+ const index_2 = require("../../email/index");
8
+ const alerts_constants_1 = require("../alerts.constants");
9
+ /** Where the CTA points, appended to the application root. Matches the admin card. */
10
+ const ALERTS_ADMIN_PATH = '/admin/settings/alerts';
11
+ function detailRow(label, value) {
12
+ return (0, index_1.html) `<tr>
13
+ <td style="padding:6px 16px 6px 0;font-size:14px;line-height:20px;color:#4b5563;white-space:nowrap;vertical-align:top;">${label}</td>
14
+ <td style="padding:6px 0;font-size:14px;line-height:20px;color:#1f2937;vertical-align:top;"><strong>${value}</strong></td>
15
+ </tr>`;
16
+ }
17
+ function headline(data) {
18
+ return data.state === 'fired'
19
+ ? `Alert (${data.severity}): ${data.ruleName}`
20
+ : `Resolved: ${data.ruleName}`;
21
+ }
22
+ /**
23
+ * Renders the alert email, fired or resolved (`data.state`).
24
+ *
25
+ * @param data - the alert.
26
+ * @param ctx - the render context.
27
+ * @returns the rendered message.
28
+ *
29
+ * @stability experimental
30
+ */
31
+ function alertEmail(data, ctx) {
32
+ const context = (0, index_1.resolveEmailRenderContext)(ctx);
33
+ const appName = context.appName;
34
+ const title = headline(data);
35
+ const labels = Object.entries(data.labels);
36
+ const ctaUrl = data.appUrl ? `${data.appUrl}${ALERTS_ADMIN_PATH}` : undefined;
37
+ const when = data.state === 'fired' ? data.firedAt : data.resolvedAt;
38
+ const whenText = when ? (0, index_1.formatEmailDateTime)(when, context) : 'Unknown time';
39
+ const rows = [
40
+ detailRow('Rule', data.ruleName),
41
+ detailRow('Severity', data.severity),
42
+ detailRow(data.state === 'fired' ? 'Fired at' : 'Resolved at', whenText),
43
+ ...labels.map(([k, v]) => detailRow(k, v)),
44
+ ];
45
+ const bodyHtml = (0, index_1.html) `
46
+ <p style="margin:0 0 16px 0;">${data.summary}</p>
47
+ <table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0" style="margin:0 0 20px 0;">${rows}</table>
48
+ <p style="margin:0;font-size:13px;line-height:20px;color:#4b5563;">You are receiving this because you can view alerts in ${appName}.</p>
49
+ `;
50
+ const htmlDocument = (0, index_1.renderLayout)({ title, previewText: data.summary, bodyHtml, ctaLabel: ctaUrl ? 'Open alerts' : undefined, ctaUrl }, context);
51
+ const text = (0, index_1.plainText)({
52
+ title,
53
+ lines: [
54
+ data.summary,
55
+ '',
56
+ ` Rule: ${data.ruleName}`,
57
+ ` Severity: ${data.severity}`,
58
+ ` ${data.state === 'fired' ? 'Fired at:' : 'Resolved at:'} ${whenText}`,
59
+ ...labels.map(([k, v]) => ` ${k}: ${v}`),
60
+ '',
61
+ `You are receiving this because you can view alerts in ${appName}.`,
62
+ ],
63
+ ctaLabel: ctaUrl ? 'Open alerts' : undefined,
64
+ ctaUrl,
65
+ }, context);
66
+ return {
67
+ subject: `${appName}: ${title}`,
68
+ html: htmlDocument,
69
+ text,
70
+ headers: { ...index_1.TRANSACTIONAL_EMAIL_HEADERS },
71
+ };
72
+ }
73
+ /**
74
+ * The bell, toast and push rendering of both alert events.
75
+ *
76
+ * @stability experimental
77
+ */
78
+ const alertBrowserTemplate = (data, _ctx) => {
79
+ const alert = data;
80
+ return {
81
+ title: headline(alert),
82
+ body: alert.summary,
83
+ link: ALERTS_ADMIN_PATH,
84
+ };
85
+ };
86
+ exports.alertBrowserTemplate = alertBrowserTemplate;
87
+ /**
88
+ * The email template names the alert events bind. PERMANENT once deliveries name them.
89
+ *
90
+ * @stability experimental
91
+ */
92
+ exports.ALERT_EMAIL_TEMPLATES = {
93
+ /** The template of `alerts.alert_fired`. */
94
+ FIRED: 'alert-fired',
95
+ /** The template of `alerts.alert_resolved`. */
96
+ RESOLVED: 'alert-resolved',
97
+ };
98
+ /**
99
+ * The two alert notification events. Register with
100
+ * `registerNotifications(ALERTS_NOTIFICATIONS)` after
101
+ * {@link registerAlertsEmailTemplates}.
102
+ *
103
+ * @extensionPoint registry
104
+ * @stability experimental
105
+ */
106
+ exports.ALERTS_NOTIFICATIONS = [
107
+ {
108
+ event: {
109
+ key: alerts_constants_1.ALERT_FIRED_NOTIFICATION,
110
+ label: 'Alert fired',
111
+ description: 'Sent to administrators who can view alerts when an alert rule starts firing.',
112
+ channels: ['email', 'browser', 'push'],
113
+ defaultEnabled: true,
114
+ },
115
+ emailTemplate: exports.ALERT_EMAIL_TEMPLATES.FIRED,
116
+ browserTemplate: exports.alertBrowserTemplate,
117
+ },
118
+ {
119
+ event: {
120
+ key: alerts_constants_1.ALERT_RESOLVED_NOTIFICATION,
121
+ label: 'Alert resolved',
122
+ description: 'Sent to administrators who can view alerts when a firing alert clears.',
123
+ channels: ['email', 'browser'],
124
+ defaultEnabled: true,
125
+ },
126
+ emailTemplate: exports.ALERT_EMAIL_TEMPLATES.RESOLVED,
127
+ browserTemplate: exports.alertBrowserTemplate,
128
+ },
129
+ ];
130
+ /**
131
+ * Registers the two alert email templates. IDEMPOTENT: a name already
132
+ * registered with this renderer is skipped.
133
+ *
134
+ * @throws RegistryError `DUPLICATE_ID` when an app registered the name with another renderer; `FROZEN` after bootstrap.
135
+ *
136
+ * @stability experimental
137
+ */
138
+ function registerAlertsEmailTemplates() {
139
+ const entries = [exports.ALERT_EMAIL_TEMPLATES.FIRED, exports.ALERT_EMAIL_TEMPLATES.RESOLVED]
140
+ .filter((name) => index_2.emailTemplateRegistry.get(name)?.render !== alertEmail)
141
+ .map((name) => ({ name, render: alertEmail, registrant: 'alerts' }));
142
+ if (entries.length > 0)
143
+ index_2.emailTemplateRegistry.registerAll(entries);
144
+ }
145
+ //# sourceMappingURL=alerts.notifications.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alerts.notifications.js","sourceRoot":"","sources":["../../../src/alerts/notifications/alerts.notifications.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { type CreateAlertRule } from '@marinoscar/platform-contract/alerts';
2
+ /**
3
+ * One starter rule: a stable key and the rule it seeds.
4
+ *
5
+ * @stability experimental
6
+ */
7
+ export interface StarterAlertRule {
8
+ /** The stable key (`alert_rules.key`). PERMANENT. */
9
+ readonly key: string;
10
+ /** The rule's definition. Always seeded disabled. */
11
+ readonly rule: Omit<CreateAlertRule, 'enabled'>;
12
+ }
13
+ /**
14
+ * The starter rules, seeded disabled and never overwritten: an administrator's
15
+ * edit to one survives every restart.
16
+ * Starter rules cannot be deleted, only edited and disabled.
17
+ *
18
+ * @stability experimental
19
+ */
20
+ export declare const STARTER_ALERT_RULES: readonly StarterAlertRule[];
21
+ //# sourceMappingURL=starter-rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"starter-rules.d.ts","sourceRoot":"","sources":["../../src/alerts/starter-rules.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2C,KAAK,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAErH;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,qDAAqD;IACrD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,qDAAqD;IACrD,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;CACjD;AAID;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAAS,gBAAgB,EA+H1D,CAAC"}
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.STARTER_ALERT_RULES = void 0;
4
+ const alerts_1 = require("@marinoscar/platform-contract/alerts");
5
+ const base = { notifyChannels: [], webhook: true, cooldownSeconds: 900 };
6
+ /**
7
+ * The starter rules, seeded disabled and never overwritten: an administrator's
8
+ * edit to one survives every restart.
9
+ * Starter rules cannot be deleted, only edited and disabled.
10
+ *
11
+ * @stability experimental
12
+ */
13
+ exports.STARTER_ALERT_RULES = [
14
+ {
15
+ key: alerts_1.ALERT_STARTER_RULE_KEYS.NODES_ON_BATTERY,
16
+ rule: {
17
+ ...base,
18
+ name: 'Worker node on battery',
19
+ description: 'A worker node switched from AC power to battery. Clears when AC returns.',
20
+ kind: alerts_1.ALERT_KIND_IDS.NODE_EVENT,
21
+ severity: 'warning',
22
+ forSeconds: 0,
23
+ config: {
24
+ eventTypes: ['power.source_changed'],
25
+ attrs: { to: 'battery' },
26
+ recovery: { eventTypes: ['power.source_changed'], attrs: { to: 'ac' } },
27
+ resolveAfterSeconds: 86_400,
28
+ },
29
+ },
30
+ },
31
+ {
32
+ key: alerts_1.ALERT_STARTER_RULE_KEYS.NODES_BATTERY_LOW,
33
+ rule: {
34
+ ...base,
35
+ name: 'Worker node battery low',
36
+ description: 'A worker node reported a low or critical battery. Clears when the battery recovers.',
37
+ kind: alerts_1.ALERT_KIND_IDS.NODE_EVENT,
38
+ severity: 'warning',
39
+ forSeconds: 0,
40
+ config: {
41
+ eventTypes: ['power.battery_low', 'power.battery_critical'],
42
+ recovery: { eventTypes: ['power.battery_recovered'] },
43
+ resolveAfterSeconds: 21_600,
44
+ },
45
+ },
46
+ },
47
+ {
48
+ key: alerts_1.ALERT_STARTER_RULE_KEYS.NODES_HOST_CPU_HIGH,
49
+ rule: {
50
+ ...base,
51
+ name: 'Worker host CPU high',
52
+ description: 'A worker host averaged more than 90% CPU over five minutes.',
53
+ kind: alerts_1.ALERT_KIND_IDS.METRIC_THRESHOLD,
54
+ severity: 'warning',
55
+ forSeconds: 300,
56
+ config: {
57
+ metric: 'app.nodes.host.cpu.utilization',
58
+ aggregation: 'avg',
59
+ windowSeconds: 300,
60
+ comparator: 'gt',
61
+ threshold: 90,
62
+ groupBy: ['node_id'],
63
+ },
64
+ },
65
+ },
66
+ {
67
+ key: alerts_1.ALERT_STARTER_RULE_KEYS.NODES_HOST_MEMORY_LOW,
68
+ rule: {
69
+ ...base,
70
+ name: 'Worker host memory low',
71
+ description: 'A worker host has less than 512 MiB of memory available.',
72
+ kind: alerts_1.ALERT_KIND_IDS.METRIC_THRESHOLD,
73
+ severity: 'warning',
74
+ forSeconds: 300,
75
+ config: {
76
+ metric: 'app.nodes.host.memory.available',
77
+ aggregation: 'last',
78
+ windowSeconds: 300,
79
+ comparator: 'lt',
80
+ threshold: 536_870_912,
81
+ groupBy: ['node_id'],
82
+ },
83
+ },
84
+ },
85
+ {
86
+ key: alerts_1.ALERT_STARTER_RULE_KEYS.NODES_OFFLINE,
87
+ rule: {
88
+ ...base,
89
+ name: 'Worker node offline',
90
+ description: 'A worker node stopped heartbeating or was marked offline.',
91
+ kind: alerts_1.ALERT_KIND_IDS.NODE_OFFLINE,
92
+ severity: 'critical',
93
+ forSeconds: 60,
94
+ config: {},
95
+ },
96
+ },
97
+ {
98
+ key: alerts_1.ALERT_STARTER_RULE_KEYS.JOBS_FAILURE_SPIKE,
99
+ rule: {
100
+ ...base,
101
+ name: 'Job failure spike',
102
+ description: 'More than one job per minute failed, on average, over five minutes.',
103
+ kind: alerts_1.ALERT_KIND_IDS.METRIC_THRESHOLD,
104
+ severity: 'warning',
105
+ forSeconds: 0,
106
+ config: {
107
+ metric: 'app.jobs.settled',
108
+ aggregation: 'rate',
109
+ windowSeconds: 300,
110
+ comparator: 'gt',
111
+ threshold: 1,
112
+ filters: [{ attr: 'outcome', op: 'eq', value: 'failed' }],
113
+ },
114
+ },
115
+ },
116
+ {
117
+ key: alerts_1.ALERT_STARTER_RULE_KEYS.TELEMETRY_VERDICT_CRITICAL,
118
+ rule: {
119
+ ...base,
120
+ name: 'Telemetry verdict critical',
121
+ description: 'The telemetry dashboard verdict is critical.',
122
+ kind: alerts_1.ALERT_KIND_IDS.VERDICT,
123
+ severity: 'critical',
124
+ forSeconds: 120,
125
+ config: { minLevel: 'critical' },
126
+ },
127
+ },
128
+ {
129
+ key: alerts_1.ALERT_STARTER_RULE_KEYS.TELEMETRY_UNAVAILABLE,
130
+ rule: {
131
+ ...base,
132
+ name: 'Telemetry store unavailable',
133
+ description: 'The telemetry store could not be queried for three minutes. Metric rules cannot be evaluated meanwhile.',
134
+ kind: alerts_1.ALERT_KIND_IDS.TELEMETRY_UNAVAILABLE,
135
+ severity: 'warning',
136
+ forSeconds: 180,
137
+ config: {},
138
+ },
139
+ },
140
+ ];
141
+ //# sourceMappingURL=starter-rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"starter-rules.js","sourceRoot":"","sources":["../../src/alerts/starter-rules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ /** Longest `labelsKey` the column holds. */
2
+ export declare const LABELS_KEY_MAX = 512;
3
+ /**
4
+ * The open incident of one rule and label set, as the machine needs it.
5
+ *
6
+ * @stability experimental
7
+ */
8
+ export interface OpenIncidentState {
9
+ /** The incident id. */
10
+ readonly id: string;
11
+ /** `pending` or `firing`. */
12
+ readonly state: 'pending' | 'firing';
13
+ /** When the condition first held. */
14
+ readonly pendingSince: Date | null;
15
+ }
16
+ /**
17
+ * What the evaluator observed for a label set.
18
+ *
19
+ * @stability experimental
20
+ */
21
+ export interface TransitionObservation {
22
+ /** Whether the rule's condition holds for the label set. */
23
+ readonly breached: boolean;
24
+ }
25
+ /**
26
+ * The inputs of one transition.
27
+ *
28
+ * @stability experimental
29
+ */
30
+ export interface TransitionInput {
31
+ /** The instant of the evaluation. */
32
+ readonly now: Date;
33
+ /** The open incident for this rule and labels, or `null`. */
34
+ readonly open: OpenIncidentState | null;
35
+ /** This evaluation's observation for the labels; `null` when the kind did not report them. */
36
+ readonly observation: TransitionObservation | null;
37
+ /** The rule's `forSeconds`. */
38
+ readonly forSeconds: number;
39
+ }
40
+ /**
41
+ * What the evaluator must do: `none`; `open` a new incident in `state`;
42
+ * `touch` an open one; `promote` a pending one to firing; `discard` a pending
43
+ * one that cleared; `resolve` a firing one. A `notify` of `true` marks the
44
+ * answers that raise a notification (subject to the cooldown, decided by
45
+ * {@link shouldNotify}).
46
+ *
47
+ * @stability experimental
48
+ */
49
+ export interface Transition {
50
+ /** The action. */
51
+ readonly type: 'none' | 'open' | 'touch' | 'promote' | 'discard' | 'resolve';
52
+ /** For `open`: the state the new incident starts in. */
53
+ readonly state?: 'pending' | 'firing';
54
+ /** Whether the answer raises a notification (absent when it does not). */
55
+ readonly notify?: boolean;
56
+ }
57
+ /**
58
+ * The next transition for one rule and label set.
59
+ *
60
+ * @param input - the open incident, the observation, the rule's wait and the instant.
61
+ * @returns the answer.
62
+ *
63
+ * @stability experimental
64
+ */
65
+ export declare function nextTransition(input: TransitionInput): Transition;
66
+ /**
67
+ * Whether a FIRED (and its matching RESOLVED) notification is sent: not when
68
+ * the same rule and labels resolved less than `cooldownSeconds` before this
69
+ * incident fired. The incident is recorded either way. Derived from stored
70
+ * times, so the resolve decision repeats the fire decision exactly.
71
+ *
72
+ * @param firedAt - when this incident fired.
73
+ * @param previousResolvedAt - when the previous incident of the same rule and labels resolved, or `null`.
74
+ * @param cooldownSeconds - the rule's cooldown.
75
+ * @returns whether to notify.
76
+ *
77
+ * @stability experimental
78
+ */
79
+ export declare function shouldNotify(firedAt: Date, previousResolvedAt: Date | null, cooldownSeconds: number): boolean;
80
+ /**
81
+ * The canonical identity of a label set within a rule: keys sorted, `k=v`
82
+ * joined by `,`, each side percent-encoded so a `,` or `=` in a value cannot
83
+ * collide two sets. `''` when unlabelled. A key past the column width keeps its
84
+ * head and ends in a hash of the whole.
85
+ *
86
+ * @param labels - the labels.
87
+ * @returns the key.
88
+ *
89
+ * @stability experimental
90
+ */
91
+ export declare function labelsKeyOf(labels: Readonly<Record<string, string>>): string;
92
+ //# sourceMappingURL=alert-state-machine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert-state-machine.d.ts","sourceRoot":"","sources":["../../../src/alerts/state/alert-state-machine.ts"],"names":[],"mappings":"AAyBA,4CAA4C;AAC5C,eAAO,MAAM,cAAc,MAAM,CAAC;AAElC;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,uBAAuB;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,6BAA6B;IAC7B,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,CAAC;IACrC,qCAAqC;IACrC,QAAQ,CAAC,YAAY,EAAE,IAAI,GAAG,IAAI,CAAC;CACpC;AAED;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,4DAA4D;IAC5D,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,qCAAqC;IACrC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;IACnB,6DAA6D;IAC7D,QAAQ,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACxC,8FAA8F;IAC9F,QAAQ,CAAC,WAAW,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACnD,+BAA+B;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,UAAU;IACzB,kBAAkB;IAClB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IAC7E,wDAAwD;IACxD,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IACtC,0EAA0E;IAC1E,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,eAAe,GAAG,UAAU,CAiBjE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,GAAG,IAAI,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAG7G;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAO5E"}
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LABELS_KEY_MAX = void 0;
4
+ exports.nextTransition = nextTransition;
5
+ exports.shouldNotify = shouldNotify;
6
+ exports.labelsKeyOf = labelsKeyOf;
7
+ const node_crypto_1 = require("node:crypto");
8
+ // =============================================================================
9
+ // The incident state machine (issue #1047)
10
+ // =============================================================================
11
+ //
12
+ // PURE: no I/O, no clock (the instant is an argument), no Nest. The evaluator
13
+ // feeds it one open incident (or none) and one observation (or none) per rule
14
+ // and label set, and does what it answers. Unit-tested in isolation.
15
+ //
16
+ // observation open incident answer
17
+ // ------------ ------------------- ------------------------------------------
18
+ // breached none open `firing` (forSeconds = 0) or `pending`
19
+ // breached pending, held long promote to firing (notify)
20
+ // breached pending, not yet touch
21
+ // breached firing touch
22
+ // clear/absent none none
23
+ // clear/absent pending discard (it never fired: no history)
24
+ // clear/absent firing resolve (notify)
25
+ //
26
+ // Resolution is on the FIRST clean evaluation (no hysteresis): a rule that
27
+ // flaps is tamed with `forSeconds` and `cooldownSeconds`, not by delaying the
28
+ // resolve.
29
+ // =============================================================================
30
+ /** Longest `labelsKey` the column holds. */
31
+ exports.LABELS_KEY_MAX = 512;
32
+ /**
33
+ * The next transition for one rule and label set.
34
+ *
35
+ * @param input - the open incident, the observation, the rule's wait and the instant.
36
+ * @returns the answer.
37
+ *
38
+ * @stability experimental
39
+ */
40
+ function nextTransition(input) {
41
+ const { open, observation, now, forSeconds } = input;
42
+ const breached = observation?.breached === true;
43
+ if (breached) {
44
+ if (!open) {
45
+ return forSeconds <= 0
46
+ ? { type: 'open', state: 'firing', notify: true }
47
+ : { type: 'open', state: 'pending', notify: false };
48
+ }
49
+ if (open.state === 'firing')
50
+ return { type: 'touch' };
51
+ const since = open.pendingSince?.getTime() ?? now.getTime();
52
+ return now.getTime() - since >= forSeconds * 1000 ? { type: 'promote', notify: true } : { type: 'touch' };
53
+ }
54
+ if (!open)
55
+ return { type: 'none' };
56
+ return open.state === 'pending' ? { type: 'discard' } : { type: 'resolve', notify: true };
57
+ }
58
+ /**
59
+ * Whether a FIRED (and its matching RESOLVED) notification is sent: not when
60
+ * the same rule and labels resolved less than `cooldownSeconds` before this
61
+ * incident fired. The incident is recorded either way. Derived from stored
62
+ * times, so the resolve decision repeats the fire decision exactly.
63
+ *
64
+ * @param firedAt - when this incident fired.
65
+ * @param previousResolvedAt - when the previous incident of the same rule and labels resolved, or `null`.
66
+ * @param cooldownSeconds - the rule's cooldown.
67
+ * @returns whether to notify.
68
+ *
69
+ * @stability experimental
70
+ */
71
+ function shouldNotify(firedAt, previousResolvedAt, cooldownSeconds) {
72
+ if (!previousResolvedAt || cooldownSeconds <= 0)
73
+ return true;
74
+ return firedAt.getTime() - previousResolvedAt.getTime() >= cooldownSeconds * 1000;
75
+ }
76
+ /**
77
+ * The canonical identity of a label set within a rule: keys sorted, `k=v`
78
+ * joined by `,`, each side percent-encoded so a `,` or `=` in a value cannot
79
+ * collide two sets. `''` when unlabelled. A key past the column width keeps its
80
+ * head and ends in a hash of the whole.
81
+ *
82
+ * @param labels - the labels.
83
+ * @returns the key.
84
+ *
85
+ * @stability experimental
86
+ */
87
+ function labelsKeyOf(labels) {
88
+ const key = Object.keys(labels)
89
+ .sort()
90
+ .map((name) => `${encodeURIComponent(name)}=${encodeURIComponent(labels[name] ?? '')}`)
91
+ .join(',');
92
+ if (key.length <= exports.LABELS_KEY_MAX)
93
+ return key;
94
+ return `${key.slice(0, exports.LABELS_KEY_MAX - 33)}~${(0, node_crypto_1.createHash)('sha256').update(key).digest('hex').slice(0, 32)}`;
95
+ }
96
+ //# sourceMappingURL=alert-state-machine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert-state-machine.js","sourceRoot":"","sources":["../../../src/alerts/state/alert-state-machine.ts"],"names":[],"mappings":"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"}