@meyicloud/meyi-insight-server 1.0.0

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 (389) hide show
  1. package/dist/constants/incidentCategories.d.ts +18 -0
  2. package/dist/constants/incidentCategories.d.ts.map +1 -0
  3. package/dist/constants/incidentCategories.js +36 -0
  4. package/dist/constants/incidentCategories.js.map +1 -0
  5. package/dist/controllers/alert.controller.d.ts +12 -0
  6. package/dist/controllers/alert.controller.d.ts.map +1 -0
  7. package/dist/controllers/alert.controller.js +89 -0
  8. package/dist/controllers/alert.controller.js.map +1 -0
  9. package/dist/controllers/incident.controller.d.ts +16 -0
  10. package/dist/controllers/incident.controller.d.ts.map +1 -0
  11. package/dist/controllers/incident.controller.js +215 -0
  12. package/dist/controllers/incident.controller.js.map +1 -0
  13. package/dist/controllers/notification-provider.controller.d.ts +10 -0
  14. package/dist/controllers/notification-provider.controller.d.ts.map +1 -0
  15. package/dist/controllers/notification-provider.controller.js +59 -0
  16. package/dist/controllers/notification-provider.controller.js.map +1 -0
  17. package/dist/controllers/settings.controller.d.ts +7 -0
  18. package/dist/controllers/settings.controller.d.ts.map +1 -0
  19. package/dist/controllers/settings.controller.js +27 -0
  20. package/dist/controllers/settings.controller.js.map +1 -0
  21. package/dist/controllers/sop.controller.d.ts +11 -0
  22. package/dist/controllers/sop.controller.d.ts.map +1 -0
  23. package/dist/controllers/sop.controller.js +89 -0
  24. package/dist/controllers/sop.controller.js.map +1 -0
  25. package/dist/controllers/source.controller.d.ts +26 -0
  26. package/dist/controllers/source.controller.d.ts.map +1 -0
  27. package/dist/controllers/source.controller.js +333 -0
  28. package/dist/controllers/source.controller.js.map +1 -0
  29. package/dist/controllers/sourceDatadog.controller.d.ts +17 -0
  30. package/dist/controllers/sourceDatadog.controller.d.ts.map +1 -0
  31. package/dist/controllers/sourceDatadog.controller.js +169 -0
  32. package/dist/controllers/sourceDatadog.controller.js.map +1 -0
  33. package/dist/controllers/tenant.controller.d.ts +7 -0
  34. package/dist/controllers/tenant.controller.d.ts.map +1 -0
  35. package/dist/controllers/tenant.controller.js +33 -0
  36. package/dist/controllers/tenant.controller.js.map +1 -0
  37. package/dist/controllers/webhook.controller.d.ts +6 -0
  38. package/dist/controllers/webhook.controller.d.ts.map +1 -0
  39. package/dist/controllers/webhook.controller.js +83 -0
  40. package/dist/controllers/webhook.controller.js.map +1 -0
  41. package/dist/controllers/workflow.controller.d.ts +18 -0
  42. package/dist/controllers/workflow.controller.d.ts.map +1 -0
  43. package/dist/controllers/workflow.controller.js +118 -0
  44. package/dist/controllers/workflow.controller.js.map +1 -0
  45. package/dist/database/index.d.ts +7 -0
  46. package/dist/database/index.d.ts.map +1 -0
  47. package/dist/database/index.js +12 -0
  48. package/dist/database/index.js.map +1 -0
  49. package/dist/database/schema.d.ts +5358 -0
  50. package/dist/database/schema.d.ts.map +1 -0
  51. package/dist/database/schema.js +516 -0
  52. package/dist/database/schema.js.map +1 -0
  53. package/dist/features/sources/cloudtrail/controller.d.ts +38 -0
  54. package/dist/features/sources/cloudtrail/controller.d.ts.map +1 -0
  55. package/dist/features/sources/cloudtrail/controller.js +421 -0
  56. package/dist/features/sources/cloudtrail/controller.js.map +1 -0
  57. package/dist/features/sources/cloudtrail/routes.d.ts +6 -0
  58. package/dist/features/sources/cloudtrail/routes.d.ts.map +1 -0
  59. package/dist/features/sources/cloudtrail/routes.js +8 -0
  60. package/dist/features/sources/cloudtrail/routes.js.map +1 -0
  61. package/dist/features/sources/cloudtrail/schema.d.ts +2 -0
  62. package/dist/features/sources/cloudtrail/schema.d.ts.map +1 -0
  63. package/dist/features/sources/cloudtrail/schema.js +26 -0
  64. package/dist/features/sources/cloudtrail/schema.js.map +1 -0
  65. package/dist/features/sources/cloudtrail/stackTemplates.d.ts +3 -0
  66. package/dist/features/sources/cloudtrail/stackTemplates.d.ts.map +1 -0
  67. package/dist/features/sources/cloudtrail/stackTemplates.js +548 -0
  68. package/dist/features/sources/cloudtrail/stackTemplates.js.map +1 -0
  69. package/dist/features/sources/cloudtrail/template.d.ts +21 -0
  70. package/dist/features/sources/cloudtrail/template.d.ts.map +1 -0
  71. package/dist/features/sources/cloudtrail/template.js +1230 -0
  72. package/dist/features/sources/cloudtrail/template.js.map +1 -0
  73. package/dist/features/sources/cloudwatch/controller.d.ts +13 -0
  74. package/dist/features/sources/cloudwatch/controller.d.ts.map +1 -0
  75. package/dist/features/sources/cloudwatch/controller.js +514 -0
  76. package/dist/features/sources/cloudwatch/controller.js.map +1 -0
  77. package/dist/features/sources/cloudwatch/eventbridgeTemplate.d.ts +7 -0
  78. package/dist/features/sources/cloudwatch/eventbridgeTemplate.d.ts.map +1 -0
  79. package/dist/features/sources/cloudwatch/eventbridgeTemplate.js +230 -0
  80. package/dist/features/sources/cloudwatch/eventbridgeTemplate.js.map +1 -0
  81. package/dist/features/sources/cloudwatch/service.d.ts +50 -0
  82. package/dist/features/sources/cloudwatch/service.d.ts.map +1 -0
  83. package/dist/features/sources/cloudwatch/service.js +269 -0
  84. package/dist/features/sources/cloudwatch/service.js.map +1 -0
  85. package/dist/features/sources/cloudwatch/template.d.ts +26 -0
  86. package/dist/features/sources/cloudwatch/template.d.ts.map +1 -0
  87. package/dist/features/sources/cloudwatch/template.js +335 -0
  88. package/dist/features/sources/cloudwatch/template.js.map +1 -0
  89. package/dist/features/sources/cloudwatch/types.d.ts +26 -0
  90. package/dist/features/sources/cloudwatch/types.d.ts.map +1 -0
  91. package/dist/features/sources/cloudwatch/types.js +2 -0
  92. package/dist/features/sources/cloudwatch/types.js.map +1 -0
  93. package/dist/features/sources/grafana/controller.d.ts +18 -0
  94. package/dist/features/sources/grafana/controller.d.ts.map +1 -0
  95. package/dist/features/sources/grafana/controller.js +183 -0
  96. package/dist/features/sources/grafana/controller.js.map +1 -0
  97. package/dist/features/sources/grafana/routes.d.ts +6 -0
  98. package/dist/features/sources/grafana/routes.d.ts.map +1 -0
  99. package/dist/features/sources/grafana/routes.js +6 -0
  100. package/dist/features/sources/grafana/routes.js.map +1 -0
  101. package/dist/features/sources/grafana/schema.d.ts +2 -0
  102. package/dist/features/sources/grafana/schema.d.ts.map +1 -0
  103. package/dist/features/sources/grafana/schema.js +24 -0
  104. package/dist/features/sources/grafana/schema.js.map +1 -0
  105. package/dist/features/sources/grafana/service.d.ts +33 -0
  106. package/dist/features/sources/grafana/service.d.ts.map +1 -0
  107. package/dist/features/sources/grafana/service.js +215 -0
  108. package/dist/features/sources/grafana/service.js.map +1 -0
  109. package/dist/features/sources/index.d.ts +29 -0
  110. package/dist/features/sources/index.d.ts.map +1 -0
  111. package/dist/features/sources/index.js +47 -0
  112. package/dist/features/sources/index.js.map +1 -0
  113. package/dist/features/sources/observability/controller.d.ts +6 -0
  114. package/dist/features/sources/observability/controller.d.ts.map +1 -0
  115. package/dist/features/sources/observability/controller.js +16 -0
  116. package/dist/features/sources/observability/controller.js.map +1 -0
  117. package/dist/features/sources/observability/routes.d.ts +4 -0
  118. package/dist/features/sources/observability/routes.d.ts.map +1 -0
  119. package/dist/features/sources/observability/routes.js +8 -0
  120. package/dist/features/sources/observability/routes.js.map +1 -0
  121. package/dist/features/sources/observability/schema.d.ts +3 -0
  122. package/dist/features/sources/observability/schema.d.ts.map +1 -0
  123. package/dist/features/sources/observability/schema.js +44 -0
  124. package/dist/features/sources/observability/schema.js.map +1 -0
  125. package/dist/features/sources/observability/service.d.ts +36 -0
  126. package/dist/features/sources/observability/service.d.ts.map +1 -0
  127. package/dist/features/sources/observability/service.js +127 -0
  128. package/dist/features/sources/observability/service.js.map +1 -0
  129. package/dist/features/sources/prometheus/controller.d.ts +9 -0
  130. package/dist/features/sources/prometheus/controller.d.ts.map +1 -0
  131. package/dist/features/sources/prometheus/controller.js +359 -0
  132. package/dist/features/sources/prometheus/controller.js.map +1 -0
  133. package/dist/features/sources/prometheus/templates.d.ts +18 -0
  134. package/dist/features/sources/prometheus/templates.d.ts.map +1 -0
  135. package/dist/features/sources/prometheus/templates.js +244 -0
  136. package/dist/features/sources/prometheus/templates.js.map +1 -0
  137. package/dist/index.d.ts +7 -0
  138. package/dist/index.d.ts.map +1 -0
  139. package/dist/index.js +7 -0
  140. package/dist/index.js.map +1 -0
  141. package/dist/migrations/0007_pipeline_yaml_definitions.d.ts +3 -0
  142. package/dist/migrations/0007_pipeline_yaml_definitions.d.ts.map +1 -0
  143. package/dist/migrations/0007_pipeline_yaml_definitions.js +19 -0
  144. package/dist/migrations/0007_pipeline_yaml_definitions.js.map +1 -0
  145. package/dist/migrations/0008_tenant_isolation.d.ts +3 -0
  146. package/dist/migrations/0008_tenant_isolation.d.ts.map +1 -0
  147. package/dist/migrations/0008_tenant_isolation.js +42 -0
  148. package/dist/migrations/0008_tenant_isolation.js.map +1 -0
  149. package/dist/migrations/run.d.ts +6 -0
  150. package/dist/migrations/run.d.ts.map +1 -0
  151. package/dist/migrations/run.js +1262 -0
  152. package/dist/migrations/run.js.map +1 -0
  153. package/dist/models/alarm-group.model.d.ts +42 -0
  154. package/dist/models/alarm-group.model.d.ts.map +1 -0
  155. package/dist/models/alarm-group.model.js +98 -0
  156. package/dist/models/alarm-group.model.js.map +1 -0
  157. package/dist/models/alert.model.d.ts +54 -0
  158. package/dist/models/alert.model.d.ts.map +1 -0
  159. package/dist/models/alert.model.js +119 -0
  160. package/dist/models/alert.model.js.map +1 -0
  161. package/dist/models/dedup-config.model.d.ts +53 -0
  162. package/dist/models/dedup-config.model.d.ts.map +1 -0
  163. package/dist/models/dedup-config.model.js +157 -0
  164. package/dist/models/dedup-config.model.js.map +1 -0
  165. package/dist/models/grouping-config.model.d.ts +70 -0
  166. package/dist/models/grouping-config.model.d.ts.map +1 -0
  167. package/dist/models/grouping-config.model.js +174 -0
  168. package/dist/models/grouping-config.model.js.map +1 -0
  169. package/dist/models/incident-comment.model.d.ts +14 -0
  170. package/dist/models/incident-comment.model.d.ts.map +1 -0
  171. package/dist/models/incident-comment.model.js +38 -0
  172. package/dist/models/incident-comment.model.js.map +1 -0
  173. package/dist/models/incident-event.model.d.ts +16 -0
  174. package/dist/models/incident-event.model.d.ts.map +1 -0
  175. package/dist/models/incident-event.model.js +31 -0
  176. package/dist/models/incident-event.model.js.map +1 -0
  177. package/dist/models/incident.model.d.ts +47 -0
  178. package/dist/models/incident.model.d.ts.map +1 -0
  179. package/dist/models/incident.model.js +201 -0
  180. package/dist/models/incident.model.js.map +1 -0
  181. package/dist/models/normalization-config.model.d.ts +44 -0
  182. package/dist/models/normalization-config.model.d.ts.map +1 -0
  183. package/dist/models/normalization-config.model.js +153 -0
  184. package/dist/models/normalization-config.model.js.map +1 -0
  185. package/dist/models/notification-provider.model.d.ts +12 -0
  186. package/dist/models/notification-provider.model.d.ts.map +1 -0
  187. package/dist/models/notification-provider.model.js +48 -0
  188. package/dist/models/notification-provider.model.js.map +1 -0
  189. package/dist/models/pipeline-event.model.d.ts +15 -0
  190. package/dist/models/pipeline-event.model.d.ts.map +1 -0
  191. package/dist/models/pipeline-event.model.js +32 -0
  192. package/dist/models/pipeline-event.model.js.map +1 -0
  193. package/dist/models/settings.model.d.ts +8 -0
  194. package/dist/models/settings.model.d.ts.map +1 -0
  195. package/dist/models/settings.model.js +30 -0
  196. package/dist/models/settings.model.js.map +1 -0
  197. package/dist/models/sop.model.d.ts +58 -0
  198. package/dist/models/sop.model.d.ts.map +1 -0
  199. package/dist/models/sop.model.js +138 -0
  200. package/dist/models/sop.model.js.map +1 -0
  201. package/dist/models/source.model.d.ts +177 -0
  202. package/dist/models/source.model.d.ts.map +1 -0
  203. package/dist/models/source.model.js +794 -0
  204. package/dist/models/source.model.js.map +1 -0
  205. package/dist/models/tenant.model.d.ts +13 -0
  206. package/dist/models/tenant.model.d.ts.map +1 -0
  207. package/dist/models/tenant.model.js +28 -0
  208. package/dist/models/tenant.model.js.map +1 -0
  209. package/dist/models/workflow.model.d.ts +36 -0
  210. package/dist/models/workflow.model.d.ts.map +1 -0
  211. package/dist/models/workflow.model.js +136 -0
  212. package/dist/models/workflow.model.js.map +1 -0
  213. package/dist/pipeline/AlarmPipelineWorker.d.ts +18 -0
  214. package/dist/pipeline/AlarmPipelineWorker.d.ts.map +1 -0
  215. package/dist/pipeline/AlarmPipelineWorker.js +342 -0
  216. package/dist/pipeline/AlarmPipelineWorker.js.map +1 -0
  217. package/dist/pipeline/CanonicalAlarm.d.ts +59 -0
  218. package/dist/pipeline/CanonicalAlarm.d.ts.map +1 -0
  219. package/dist/pipeline/CanonicalAlarm.js +81 -0
  220. package/dist/pipeline/CanonicalAlarm.js.map +1 -0
  221. package/dist/pipeline/DedupService.d.ts +29 -0
  222. package/dist/pipeline/DedupService.d.ts.map +1 -0
  223. package/dist/pipeline/DedupService.js +172 -0
  224. package/dist/pipeline/DedupService.js.map +1 -0
  225. package/dist/pipeline/GroupFlushWorker.d.ts +16 -0
  226. package/dist/pipeline/GroupFlushWorker.d.ts.map +1 -0
  227. package/dist/pipeline/GroupFlushWorker.js +196 -0
  228. package/dist/pipeline/GroupFlushWorker.js.map +1 -0
  229. package/dist/pipeline/GroupingService.d.ts +27 -0
  230. package/dist/pipeline/GroupingService.d.ts.map +1 -0
  231. package/dist/pipeline/GroupingService.js +338 -0
  232. package/dist/pipeline/GroupingService.js.map +1 -0
  233. package/dist/pipeline/NormalizationRuleEngine.d.ts +5 -0
  234. package/dist/pipeline/NormalizationRuleEngine.d.ts.map +1 -0
  235. package/dist/pipeline/NormalizationRuleEngine.js +86 -0
  236. package/dist/pipeline/NormalizationRuleEngine.js.map +1 -0
  237. package/dist/pipeline/NormalizationService.d.ts +29 -0
  238. package/dist/pipeline/NormalizationService.d.ts.map +1 -0
  239. package/dist/pipeline/NormalizationService.js +275 -0
  240. package/dist/pipeline/NormalizationService.js.map +1 -0
  241. package/dist/pipeline/alarmQueue.d.ts +66 -0
  242. package/dist/pipeline/alarmQueue.d.ts.map +1 -0
  243. package/dist/pipeline/alarmQueue.js +254 -0
  244. package/dist/pipeline/alarmQueue.js.map +1 -0
  245. package/dist/pipeline/defaults/ensureDefaults.d.ts +3 -0
  246. package/dist/pipeline/defaults/ensureDefaults.d.ts.map +1 -0
  247. package/dist/pipeline/defaults/ensureDefaults.js +124 -0
  248. package/dist/pipeline/defaults/ensureDefaults.js.map +1 -0
  249. package/dist/pipeline/defaults/pipelineDefaults.d.ts +13 -0
  250. package/dist/pipeline/defaults/pipelineDefaults.d.ts.map +1 -0
  251. package/dist/pipeline/defaults/pipelineDefaults.js +266 -0
  252. package/dist/pipeline/defaults/pipelineDefaults.js.map +1 -0
  253. package/dist/pipeline/yaml/DedupYaml.d.ts +33 -0
  254. package/dist/pipeline/yaml/DedupYaml.d.ts.map +1 -0
  255. package/dist/pipeline/yaml/DedupYaml.js +25 -0
  256. package/dist/pipeline/yaml/DedupYaml.js.map +1 -0
  257. package/dist/pipeline/yaml/GroupingYaml.d.ts +49 -0
  258. package/dist/pipeline/yaml/GroupingYaml.d.ts.map +1 -0
  259. package/dist/pipeline/yaml/GroupingYaml.js +39 -0
  260. package/dist/pipeline/yaml/GroupingYaml.js.map +1 -0
  261. package/dist/pipeline/yaml/NormalizationYaml.d.ts +54 -0
  262. package/dist/pipeline/yaml/NormalizationYaml.d.ts.map +1 -0
  263. package/dist/pipeline/yaml/NormalizationYaml.js +23 -0
  264. package/dist/pipeline/yaml/NormalizationYaml.js.map +1 -0
  265. package/dist/pipeline/yaml/pipelineYaml.d.ts +11 -0
  266. package/dist/pipeline/yaml/pipelineYaml.d.ts.map +1 -0
  267. package/dist/pipeline/yaml/pipelineYaml.js +49 -0
  268. package/dist/pipeline/yaml/pipelineYaml.js.map +1 -0
  269. package/dist/realtime/events.d.ts +11 -0
  270. package/dist/realtime/events.d.ts.map +1 -0
  271. package/dist/realtime/events.js +21 -0
  272. package/dist/realtime/events.js.map +1 -0
  273. package/dist/routes/alert.routes.d.ts +4 -0
  274. package/dist/routes/alert.routes.d.ts.map +1 -0
  275. package/dist/routes/alert.routes.js +15 -0
  276. package/dist/routes/alert.routes.js.map +1 -0
  277. package/dist/routes/dedup-config.routes.d.ts +4 -0
  278. package/dist/routes/dedup-config.routes.d.ts.map +1 -0
  279. package/dist/routes/dedup-config.routes.js +82 -0
  280. package/dist/routes/dedup-config.routes.js.map +1 -0
  281. package/dist/routes/grouping-config.routes.d.ts +4 -0
  282. package/dist/routes/grouping-config.routes.d.ts.map +1 -0
  283. package/dist/routes/grouping-config.routes.js +82 -0
  284. package/dist/routes/grouping-config.routes.js.map +1 -0
  285. package/dist/routes/incident.routes.d.ts +4 -0
  286. package/dist/routes/incident.routes.d.ts.map +1 -0
  287. package/dist/routes/incident.routes.js +21 -0
  288. package/dist/routes/incident.routes.js.map +1 -0
  289. package/dist/routes/index.d.ts +47 -0
  290. package/dist/routes/index.d.ts.map +1 -0
  291. package/dist/routes/index.js +83 -0
  292. package/dist/routes/index.js.map +1 -0
  293. package/dist/routes/normalization-config.routes.d.ts +4 -0
  294. package/dist/routes/normalization-config.routes.d.ts.map +1 -0
  295. package/dist/routes/normalization-config.routes.js +199 -0
  296. package/dist/routes/normalization-config.routes.js.map +1 -0
  297. package/dist/routes/notification-provider.routes.d.ts +4 -0
  298. package/dist/routes/notification-provider.routes.d.ts.map +1 -0
  299. package/dist/routes/notification-provider.routes.js +13 -0
  300. package/dist/routes/notification-provider.routes.js.map +1 -0
  301. package/dist/routes/pipeline.routes.d.ts +8 -0
  302. package/dist/routes/pipeline.routes.d.ts.map +1 -0
  303. package/dist/routes/pipeline.routes.js +243 -0
  304. package/dist/routes/pipeline.routes.js.map +1 -0
  305. package/dist/routes/settings.routes.d.ts +4 -0
  306. package/dist/routes/settings.routes.d.ts.map +1 -0
  307. package/dist/routes/settings.routes.js +10 -0
  308. package/dist/routes/settings.routes.js.map +1 -0
  309. package/dist/routes/sop.routes.d.ts +4 -0
  310. package/dist/routes/sop.routes.d.ts.map +1 -0
  311. package/dist/routes/sop.routes.js +14 -0
  312. package/dist/routes/sop.routes.js.map +1 -0
  313. package/dist/routes/source.routes.d.ts +9 -0
  314. package/dist/routes/source.routes.d.ts.map +1 -0
  315. package/dist/routes/source.routes.js +31 -0
  316. package/dist/routes/source.routes.js.map +1 -0
  317. package/dist/routes/tenant.routes.d.ts +4 -0
  318. package/dist/routes/tenant.routes.d.ts.map +1 -0
  319. package/dist/routes/tenant.routes.js +10 -0
  320. package/dist/routes/tenant.routes.js.map +1 -0
  321. package/dist/routes/workflow.routes.d.ts +4 -0
  322. package/dist/routes/workflow.routes.d.ts.map +1 -0
  323. package/dist/routes/workflow.routes.js +18 -0
  324. package/dist/routes/workflow.routes.js.map +1 -0
  325. package/dist/server.d.ts +22 -0
  326. package/dist/server.d.ts.map +1 -0
  327. package/dist/server.js +76 -0
  328. package/dist/server.js.map +1 -0
  329. package/dist/service.d.ts +159 -0
  330. package/dist/service.d.ts.map +1 -0
  331. package/dist/service.js +156 -0
  332. package/dist/service.js.map +1 -0
  333. package/dist/services/alert.service.d.ts +76 -0
  334. package/dist/services/alert.service.d.ts.map +1 -0
  335. package/dist/services/alert.service.js +688 -0
  336. package/dist/services/alert.service.js.map +1 -0
  337. package/dist/services/connector.service.d.ts +65 -0
  338. package/dist/services/connector.service.d.ts.map +1 -0
  339. package/dist/services/connector.service.js +28 -0
  340. package/dist/services/connector.service.js.map +1 -0
  341. package/dist/services/incident.service.d.ts +108 -0
  342. package/dist/services/incident.service.d.ts.map +1 -0
  343. package/dist/services/incident.service.js +325 -0
  344. package/dist/services/incident.service.js.map +1 -0
  345. package/dist/services/notification-provider.service.d.ts +12 -0
  346. package/dist/services/notification-provider.service.d.ts.map +1 -0
  347. package/dist/services/notification-provider.service.js +25 -0
  348. package/dist/services/notification-provider.service.js.map +1 -0
  349. package/dist/services/settings.service.d.ts +8 -0
  350. package/dist/services/settings.service.d.ts.map +1 -0
  351. package/dist/services/settings.service.js +14 -0
  352. package/dist/services/settings.service.js.map +1 -0
  353. package/dist/services/sop.service.d.ts +60 -0
  354. package/dist/services/sop.service.d.ts.map +1 -0
  355. package/dist/services/sop.service.js +66 -0
  356. package/dist/services/sop.service.js.map +1 -0
  357. package/dist/services/source.service.d.ts +162 -0
  358. package/dist/services/source.service.d.ts.map +1 -0
  359. package/dist/services/source.service.js +124 -0
  360. package/dist/services/source.service.js.map +1 -0
  361. package/dist/services/tenant.service.d.ts +11 -0
  362. package/dist/services/tenant.service.d.ts.map +1 -0
  363. package/dist/services/tenant.service.js +22 -0
  364. package/dist/services/tenant.service.js.map +1 -0
  365. package/dist/services/workflow.service.d.ts +32 -0
  366. package/dist/services/workflow.service.d.ts.map +1 -0
  367. package/dist/services/workflow.service.js +291 -0
  368. package/dist/services/workflow.service.js.map +1 -0
  369. package/dist/standalone.d.ts +2 -0
  370. package/dist/standalone.d.ts.map +1 -0
  371. package/dist/standalone.js +55 -0
  372. package/dist/standalone.js.map +1 -0
  373. package/dist/tenancy.d.ts +5 -0
  374. package/dist/tenancy.d.ts.map +1 -0
  375. package/dist/tenancy.js +35 -0
  376. package/dist/tenancy.js.map +1 -0
  377. package/dist/utils/notificationTemplates.d.ts +98 -0
  378. package/dist/utils/notificationTemplates.d.ts.map +1 -0
  379. package/dist/utils/notificationTemplates.js +227 -0
  380. package/dist/utils/notificationTemplates.js.map +1 -0
  381. package/dist/utils/secretCrypto.d.ts +3 -0
  382. package/dist/utils/secretCrypto.d.ts.map +1 -0
  383. package/dist/utils/secretCrypto.js +40 -0
  384. package/dist/utils/secretCrypto.js.map +1 -0
  385. package/dist/utils/workflowYaml.d.ts +53 -0
  386. package/dist/utils/workflowYaml.d.ts.map +1 -0
  387. package/dist/utils/workflowYaml.js +269 -0
  388. package/dist/utils/workflowYaml.js.map +1 -0
  389. package/package.json +73 -0
@@ -0,0 +1,342 @@
1
+ import { Worker } from "bullmq";
2
+ import { sql } from "drizzle-orm";
3
+ import { getRedisClient } from "./alarmQueue.js";
4
+ const PIPELINE_CONCURRENCY = parseInt(process.env.PIPELINE_CONCURRENCY ?? "5", 10);
5
+ // Default job lock duration (ms). Jobs that take longer than this need lock renewal.
6
+ // Must be > the longest expected stage duration. 30s is BullMQ default.
7
+ const LOCK_DURATION_MS = 60_000; // 60s — generous for DB + normalization
8
+ export function createAlarmPipelineWorker(deps) {
9
+ const { normalizationService, dedupService, groupingService, pipelineEventModel, alertModel, workflowService, realtimePublisher } = deps;
10
+ // BullMQ Worker uses its own internal ioredis connection via plain options
11
+ const redisUrl = process.env.REDIS_URL ?? "redis://localhost:6379";
12
+ let connOpts;
13
+ try {
14
+ const url = new URL(redisUrl);
15
+ connOpts = {
16
+ host: url.hostname || "localhost",
17
+ port: parseInt(url.port || "6379", 10),
18
+ password: url.password || undefined,
19
+ db: url.pathname ? parseInt(url.pathname.slice(1) || "0", 10) : 0,
20
+ };
21
+ }
22
+ catch {
23
+ connOpts = { host: "localhost", port: 6379, db: 0 };
24
+ }
25
+ const worker = new Worker("alarm-pipeline", async (job) => {
26
+ const { sourceId, sourceType, sourceName, tenantId, rawPayload, receivedAt } = job.data;
27
+ let alarmId;
28
+ // ── Stage 0: Create placeholder alarm immediately (fail-fast guarantee) ─
29
+ // IMPORTANT: If this throws, BullMQ will retry the job (attempts: 3).
30
+ // Do NOT catch-and-return here — that would silently complete the job
31
+ // without creating an alert and prevent retries.
32
+ const placeholderRow = await alertModel.create({
33
+ sourceId,
34
+ sourceName: sourceName ?? "",
35
+ sourceType,
36
+ tenantId: tenantId ?? null, // ← propagated from source via job data
37
+ resourceId: "pending",
38
+ resourceName: "pending",
39
+ resourceType: sourceType,
40
+ tags: {},
41
+ severity: "high",
42
+ alertName: "Processing...",
43
+ description: null,
44
+ additionalConfiguration: null,
45
+ downTime: receivedAt,
46
+ aliasId: null,
47
+ pipelineStatus: "queued",
48
+ rawPayload,
49
+ });
50
+ alarmId = placeholderRow.id;
51
+ // Non-fatal pipeline event recording
52
+ await pipelineEventModel.append({
53
+ alarmId,
54
+ stage: "queue",
55
+ status: "ok",
56
+ meta: { sourceId, sourceType, receivedAt, jobId: job.id },
57
+ }).catch((e) => console.warn("[AlarmPipelineWorker] Stage 0 event append failed (non-fatal):", e?.message));
58
+ // Emit real-time event so UI updates immediately without polling
59
+ if (realtimePublisher) {
60
+ try {
61
+ realtimePublisher.emit({
62
+ topic: "alert:created",
63
+ ts: new Date().toISOString(),
64
+ payload: { alert: placeholderRow },
65
+ });
66
+ }
67
+ catch { /* best-effort */ }
68
+ }
69
+ // ── Stage 1+2: Normalization ─────────────────────────────────────────────
70
+ const canonical = await normalizationService.normalize({
71
+ alarmId,
72
+ sourceId,
73
+ sourceType,
74
+ sourceName,
75
+ rawPayload,
76
+ receivedAt,
77
+ tenantId,
78
+ });
79
+ if (!canonical) {
80
+ // Normalization failed — mark alarm as dlq, stop processing
81
+ await alertModel.update(alarmId, { pipelineStatus: "dlq" }).catch(() => { });
82
+ await pipelineEventModel.append({ alarmId, stage: "dlq", status: "error", meta: { reason: "normalization_failed" } }).catch(() => { });
83
+ return;
84
+ }
85
+ // Update placeholder alarm with normalized fields
86
+ await alertModel.update(alarmId, {
87
+ resourceId: canonical.resourceId,
88
+ resourceName: canonical.resourceName,
89
+ resourceType: canonical.resourceType,
90
+ accountId: canonical.accountId ?? null,
91
+ accountName: canonical.accountName ?? null,
92
+ alertName: canonical.alertName,
93
+ severity: canonical.severity,
94
+ description: canonical.description ?? null,
95
+ tags: canonical.tags ?? {},
96
+ downTime: new Date(canonical.downTime),
97
+ fingerprint: canonical.fingerprint,
98
+ rawPayload: canonical.rawPayload,
99
+ pipelineStatus: "normalised",
100
+ additionalConfiguration: canonical.additionalConfiguration ?? null,
101
+ // Ensure tenantId is set after normalization (in case it was null from placeholder)
102
+ ...(tenantId ? { tenantId } : {}),
103
+ }).catch((err) => {
104
+ console.warn("[AlarmPipelineWorker] Could not update alarm after normalization:", err?.message);
105
+ });
106
+ // ── Stage 3: Dedup ───────────────────────────────────────────────────────
107
+ let dedupResult;
108
+ try {
109
+ dedupResult = await dedupService.check(canonical, alarmId);
110
+ }
111
+ catch (err) {
112
+ // Dedup failure is non-fatal — continue to grouping
113
+ console.warn("[AlarmPipelineWorker] Dedup check failed (non-fatal):", err?.message);
114
+ dedupResult = { suppressed: false, dedupKey: "", reason: "dedup_error" };
115
+ }
116
+ if (dedupResult.suppressed) {
117
+ // P7: Suppressed alarms do NOT enter grouping
118
+ // Instead of keeping a duplicate alert, we add info to the main alert and delete this placeholder
119
+ if (dedupResult.mainAlarmId) {
120
+ try {
121
+ const mainAlarm = await alertModel.findById(dedupResult.mainAlarmId);
122
+ if (mainAlarm) {
123
+ await alertModel.update(dedupResult.mainAlarmId, {
124
+ dupCount: (mainAlarm.dupCount ?? 0) + 1,
125
+ lastDupAt: new Date(),
126
+ });
127
+ }
128
+ }
129
+ catch (err) {
130
+ console.warn("[AlarmPipelineWorker] Failed to update main alert with dup info:", err?.message);
131
+ }
132
+ }
133
+ // Delete the placeholder so duplicates don't clutter the UI
134
+ if (alarmId) {
135
+ await alertModel.delete(alarmId).catch(() => { });
136
+ }
137
+ return;
138
+ }
139
+ let finalSeverity = canonical.severity;
140
+ if (dedupResult.flapState === "elevate_severity") {
141
+ const SEVERITIES = ["info", "low", "medium", "high", "critical"];
142
+ const idx = SEVERITIES.indexOf((canonical.severity || "info").toLowerCase());
143
+ if (idx >= 0 && idx < SEVERITIES.length - 1) {
144
+ finalSeverity = SEVERITIES[idx + 1];
145
+ }
146
+ else if (idx === -1) {
147
+ finalSeverity = "high"; // Fallback if unknown
148
+ }
149
+ canonical.severity = finalSeverity;
150
+ }
151
+ // Update alarm with dedup key and status (and potentially elevated severity)
152
+ await alertModel.update(alarmId, {
153
+ pipelineStatus: "dedup_passed",
154
+ dedupKey: dedupResult.dedupKey,
155
+ severity: finalSeverity,
156
+ }).catch(() => { });
157
+ // ── Stage 4: Grouping ────────────────────────────────────────────────────
158
+ let groupId;
159
+ try {
160
+ const groupingResult = await groupingService.assign(canonical, alarmId);
161
+ groupId = groupingResult.groupId;
162
+ // Fetch group config to calculate group name if needed
163
+ let groupName = "";
164
+ if (groupingResult.groupNameTemplate) {
165
+ groupName = groupingResult.groupNameTemplate
166
+ .replace(/{{resourceName}}/g, canonical.resourceName ?? "Unknown")
167
+ .replace(/{{alertName}}/g, canonical.alertName ?? "Alert")
168
+ .replace(/{{severity}}/g, finalSeverity)
169
+ .replace(/{{count}}/g, "1+");
170
+ }
171
+ else {
172
+ groupName = groupingResult.matchedStrategyLabel || "Group: " + (canonical.resourceName ?? "Unknown");
173
+ }
174
+ const currentConfig = canonical.additionalConfiguration || {};
175
+ // Update alarm with its group ID and computed groupName
176
+ await alertModel.update(alarmId, {
177
+ pipelineStatus: "routed",
178
+ groupId,
179
+ additionalConfiguration: {
180
+ ...currentConfig,
181
+ groupName
182
+ }
183
+ }).catch(() => { });
184
+ }
185
+ catch (err) {
186
+ // Grouping failure is non-fatal — continue to workflow routing
187
+ console.warn("[AlarmPipelineWorker] Stage 4 grouping failed (non-fatal):", err?.message);
188
+ // Update pipeline status to routed since it bypassed grouping
189
+ await alertModel.update(alarmId, { pipelineStatus: "routed" }).catch(() => { });
190
+ }
191
+ // ── Stage 5: Workflow routing ──────────────────────────────────────────
192
+ if (workflowService) {
193
+ try {
194
+ const savedAlert = await alertModel.findById(alarmId);
195
+ if (savedAlert) {
196
+ let lockKey = null;
197
+ const redis = getRedisClient();
198
+ if (groupId && redis) {
199
+ lockKey = `lock:group_workflow:${groupId}`;
200
+ const acquired = await redis.set(lockKey, "1", "PX", 30000, "NX");
201
+ if (!acquired) {
202
+ // Wait a bit to see if another worker processes it, but ideally we wait via a retry.
203
+ // For now, if we can't get the lock, we just wait a bit and proceed, or we could delay the job.
204
+ // Actually, if we just wait for the lock:
205
+ for (let i = 0; i < 30; i++) {
206
+ const gotLock = await redis.set(lockKey, "1", "PX", 30000, "NX");
207
+ if (gotLock) {
208
+ break;
209
+ }
210
+ await new Promise(r => setTimeout(r, 1000));
211
+ }
212
+ }
213
+ }
214
+ try {
215
+ // Now we safely execute the workflow for this alert.
216
+ let existingIncidentId = null;
217
+ if (groupId) {
218
+ try {
219
+ const { db } = alertModel;
220
+ const groupRes = await db.execute(sql `SELECT incident_id FROM meyiconnect.insight_alarm_groups WHERE id = ${groupId}`);
221
+ if (groupRes.rows.length > 0 && groupRes.rows[0].incident_id) {
222
+ existingIncidentId = groupRes.rows[0].incident_id;
223
+ }
224
+ }
225
+ catch (e) {
226
+ console.error("[AlarmPipelineWorker] Failed to fetch existing group incident:", e);
227
+ }
228
+ }
229
+ // Always link to existing incident if one exists for the group
230
+ if (existingIncidentId) {
231
+ try {
232
+ const { db } = alertModel;
233
+ await db.execute(sql `UPDATE meyiconnect.insight_alerts SET status = 'converted', incident_id = ${existingIncidentId}, converted_incident_id = ${existingIncidentId} WHERE id = ${savedAlert.id}`);
234
+ // Refresh the incident title to reflect the updated member count
235
+ if (groupId) {
236
+ await groupingService.refreshIncidentTitle(groupId, existingIncidentId);
237
+ }
238
+ }
239
+ catch (e) {
240
+ console.error("[AlarmPipelineWorker] Failed to link alert to existing incident:", e);
241
+ }
242
+ }
243
+ const isGroupedAlert = !!groupId;
244
+ // Note: The workflow service will check if the group already has an incident!
245
+ const execution = await workflowService.evaluateAndExecute(savedAlert, existingIncidentId, isGroupedAlert);
246
+ if (execution && Array.isArray(execution.actionsExecuted)) {
247
+ if (!existingIncidentId) {
248
+ const createIncidentAction = execution.actionsExecuted.find((a) => a.action === 'create_incident' && a.result?.status === 'success');
249
+ if (createIncidentAction?.result?.incidentId && groupId) {
250
+ // Update all members of the group to be linked to this incident.
251
+ const updatePayload = {
252
+ status: "converted",
253
+ incidentId: createIncidentAction.result.incidentId,
254
+ convertedIncidentId: createIncidentAction.result.incidentId,
255
+ };
256
+ try {
257
+ const { db } = alertModel;
258
+ await db.execute(sql `UPDATE meyiconnect.insight_alerts SET status = ${updatePayload.status}, incident_id = ${updatePayload.incidentId}, converted_incident_id = ${updatePayload.incidentId} WHERE group_id = ${groupId}`);
259
+ // Don't set group to flushed, it will be handled by the group-close sliding window job
260
+ await db.execute(sql `UPDATE meyiconnect.insight_alarm_groups SET incident_id = ${updatePayload.incidentId} WHERE id = ${groupId}`);
261
+ }
262
+ catch (e) {
263
+ console.error("[AlarmPipelineWorker] Failed to batch link incident:", e);
264
+ }
265
+ }
266
+ }
267
+ }
268
+ }
269
+ finally {
270
+ if (lockKey && redis) {
271
+ await redis.del(lockKey).catch(() => { });
272
+ }
273
+ }
274
+ }
275
+ }
276
+ catch (err) {
277
+ console.warn("[AlarmPipelineWorker] Stage 5 workflow routing failed (non-fatal):", err?.message);
278
+ }
279
+ }
280
+ await pipelineEventModel.append({
281
+ alarmId,
282
+ stage: "workflow",
283
+ status: "ok",
284
+ meta: { alarmId },
285
+ }).catch(() => { });
286
+ }, {
287
+ connection: {
288
+ ...connOpts,
289
+ maxRetriesPerRequest: null,
290
+ enableReadyCheck: false,
291
+ // Give ioredis plenty of time to reconnect before giving up
292
+ retryStrategy: (times) => Math.min(times * 500, 10_000),
293
+ },
294
+ concurrency: PIPELINE_CONCURRENCY,
295
+ // Extend lock duration so jobs don't get marked stalled mid-processing
296
+ lockDuration: LOCK_DURATION_MS,
297
+ // Renew lock every 1/3 of lock duration
298
+ lockRenewTime: Math.floor(LOCK_DURATION_MS / 3),
299
+ // Check for stalled jobs every 15s so they're requeued quickly
300
+ stalledInterval: 15_000,
301
+ });
302
+ worker.on("completed", (job) => {
303
+ console.info(`[AlarmPipelineWorker] Job ${job.id} completed (source: ${job.data.sourceId})`);
304
+ });
305
+ worker.on("failed", async (job, err) => {
306
+ const errorMsg = err?.message ?? String(err);
307
+ const errorStack = err?.stack ?? "";
308
+ console.error(`[AlarmPipelineWorker] Job ${job?.id} failed (attempt ${job?.attemptsMade ?? "?"}/${job?.opts?.attempts ?? "?"}): ${errorMsg}`, errorStack ? `\n${errorStack}` : "");
309
+ // Record DLQ event for observability
310
+ await pipelineEventModel.append({
311
+ alarmId: null,
312
+ stage: "dlq",
313
+ status: "error",
314
+ meta: {
315
+ jobId: job?.id,
316
+ error: errorMsg,
317
+ attemptsMade: job?.attemptsMade,
318
+ sourceId: job?.data?.sourceId,
319
+ sourceType: job?.data?.sourceType,
320
+ receivedAt: job?.data?.receivedAt,
321
+ },
322
+ }).catch(() => { });
323
+ });
324
+ worker.on("error", (err) => {
325
+ // These fire on Redis connection issues — the worker auto-reconnects.
326
+ // Log the full error so we can distinguish connection errors from logic errors.
327
+ const errorMsg = err?.message ?? String(err);
328
+ if (errorMsg) {
329
+ console.error("[AlarmPipelineWorker] Worker connection error:", errorMsg);
330
+ }
331
+ else {
332
+ // BullMQ emits empty-message errors during internal reconnect cycles — suppress noise
333
+ console.debug("[AlarmPipelineWorker] Worker connection event (reconnecting)");
334
+ }
335
+ });
336
+ worker.on("stalled", (jobId) => {
337
+ console.warn(`[AlarmPipelineWorker] Job ${jobId} stalled — will be requeued automatically`);
338
+ });
339
+ console.info(`[AlarmPipelineWorker] Started with concurrency=${PIPELINE_CONCURRENCY}, lockDuration=${LOCK_DURATION_MS}ms`);
340
+ return worker;
341
+ }
342
+ //# sourceMappingURL=AlarmPipelineWorker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AlarmPipelineWorker.js","sourceRoot":"","sources":["../../src/pipeline/AlarmPipelineWorker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import { z } from "zod";
2
+ export declare const AlarmStateSchema: z.ZodEnum<{
3
+ unknown: "unknown";
4
+ resolved: "resolved";
5
+ firing: "firing";
6
+ }>;
7
+ export type AlarmState = z.infer<typeof AlarmStateSchema>;
8
+ export declare const CanonicalAlarmSchema: z.ZodObject<{
9
+ source: z.ZodString;
10
+ tenantId: z.ZodDefault<z.ZodString>;
11
+ resourceId: z.ZodString;
12
+ resourceName: z.ZodString;
13
+ resourceType: z.ZodString;
14
+ alertName: z.ZodString;
15
+ severity: z.ZodString;
16
+ description: z.ZodOptional<z.ZodString>;
17
+ state: z.ZodEnum<{
18
+ unknown: "unknown";
19
+ resolved: "resolved";
20
+ firing: "firing";
21
+ }>;
22
+ metricName: z.ZodOptional<z.ZodString>;
23
+ metricValue: z.ZodOptional<z.ZodString>;
24
+ metricUnit: z.ZodOptional<z.ZodString>;
25
+ tags: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
26
+ labels: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
27
+ accountId: z.ZodOptional<z.ZodString>;
28
+ accountName: z.ZodOptional<z.ZodString>;
29
+ fingerprint: z.ZodString;
30
+ downTime: z.ZodString;
31
+ rawPayload: z.ZodOptional<z.ZodUnknown>;
32
+ sourceId: z.ZodOptional<z.ZodString>;
33
+ sourceName: z.ZodOptional<z.ZodString>;
34
+ additionalConfiguration: z.ZodOptional<z.ZodUnknown>;
35
+ }, z.core.$strip>;
36
+ export type CanonicalAlarm = z.infer<typeof CanonicalAlarmSchema>;
37
+ /**
38
+ * Build the human-readable fingerprint shown in the Alarm list UI.
39
+ * Format: <source_prefix>|<resource_id>|<metric_name>|<state>
40
+ * Example: cw|i-0abc12|cpu_utilization|firing
41
+ */
42
+ export declare function buildFingerprint(alarm: {
43
+ source?: string;
44
+ resourceId?: string;
45
+ metricName?: string;
46
+ alertName?: string;
47
+ state?: string;
48
+ }): string;
49
+ export declare const PipelineJobDataSchema: z.ZodObject<{
50
+ sourceId: z.ZodString;
51
+ sourceType: z.ZodString;
52
+ sourceName: z.ZodOptional<z.ZodString>;
53
+ tenantId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
54
+ rawPayload: z.ZodUnknown;
55
+ receivedAt: z.ZodString;
56
+ token: z.ZodOptional<z.ZodString>;
57
+ }, z.core.$strip>;
58
+ export type PipelineJobData = z.infer<typeof PipelineJobDataSchema>;
59
+ //# sourceMappingURL=CanonicalAlarm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CanonicalAlarm.d.ts","sourceRoot":"","sources":["../../src/pipeline/CanonicalAlarm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,gBAAgB;;;;EAA4C,CAAC;AAC1E,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAU1D,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA2C/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAIlE;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,MAAM,CAeT;AAOD,eAAO,MAAM,qBAAqB;;;;;;;;iBAQhC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC"}
@@ -0,0 +1,81 @@
1
+ import { z } from "zod";
2
+ // ─── Canonical Alarm State ────────────────────────────────────────────────────
3
+ export const AlarmStateSchema = z.enum(["firing", "resolved", "unknown"]);
4
+ // ─── Canonical Alarm Envelope ─────────────────────────────────────────────────
5
+ //
6
+ // The contract between Stage 2 (Normalization) and every downstream stage
7
+ // (Dedup, Grouping, Workflow Routing). Every alarm, regardless of source,
8
+ // must produce this structure after normalization.
9
+ //
10
+ // Fingerprint format shown in UI: cw|i-0abc12|cpu_utilization|firing
11
+ export const CanonicalAlarmSchema = z.object({
12
+ // Source identification
13
+ source: z.string(), // source type: 'cloudwatch' | 'grafana' | 'datadog' | 'prometheus' | etc.
14
+ tenantId: z.string().default("default"), // Single-tenant now — placeholder for future multi-tenancy (Q2)
15
+ // Resource
16
+ resourceId: z.string(),
17
+ resourceName: z.string(),
18
+ resourceType: z.string(),
19
+ // Alert metadata
20
+ alertName: z.string(),
21
+ severity: z.string(), // 'critical' | 'high' | 'medium' | 'low'
22
+ description: z.string().optional(),
23
+ state: AlarmStateSchema, // 'firing' | 'resolved' | 'unknown'
24
+ // Metric details (optional — not all sources provide these)
25
+ metricName: z.string().optional(),
26
+ metricValue: z.string().optional(),
27
+ metricUnit: z.string().optional(),
28
+ // Generic key-value tags
29
+ tags: z.record(z.string(), z.string()).default({}),
30
+ labels: z.record(z.string(), z.string()).optional(),
31
+ // AWS Account ID & Name
32
+ accountId: z.string().optional(),
33
+ accountName: z.string().optional(),
34
+ // Fingerprint — display format e.g. "cw|i-0abc12|cpu_utilization|firing"
35
+ // Built by buildFingerprint() below. Used in the Alarm list UI.
36
+ fingerprint: z.string(),
37
+ // Timing
38
+ downTime: z.string(), // ISO 8601
39
+ // Raw payload preserved for audit / fallback normalization
40
+ rawPayload: z.unknown().optional(),
41
+ // Pipeline metadata (set by the worker, not normalization)
42
+ sourceId: z.string().optional(),
43
+ sourceName: z.string().optional(),
44
+ additionalConfiguration: z.unknown().optional(),
45
+ });
46
+ // ─── Fingerprint Builder ──────────────────────────────────────────────────────
47
+ /**
48
+ * Build the human-readable fingerprint shown in the Alarm list UI.
49
+ * Format: <source_prefix>|<resource_id>|<metric_name>|<state>
50
+ * Example: cw|i-0abc12|cpu_utilization|firing
51
+ */
52
+ export function buildFingerprint(alarm) {
53
+ const src = String(alarm.source || "unknown").trim();
54
+ const prefix = src.slice(0, 2).toLowerCase() || "un";
55
+ const resource = String(alarm.resourceId || "unknown")
56
+ .trim()
57
+ .replace(/[\s/\\:]+/g, "_")
58
+ .toLowerCase()
59
+ .slice(0, 40);
60
+ const metric = String(alarm.metricName ?? alarm.alertName ?? "unknown")
61
+ .trim()
62
+ .replace(/[\s/\\:]+/g, "_")
63
+ .toLowerCase()
64
+ .slice(0, 40);
65
+ const state = String(alarm.state || "firing").trim().toLowerCase();
66
+ return `${prefix}|${resource}|${metric}|${state}`;
67
+ }
68
+ // ─── Pipeline Job Payload ─────────────────────────────────────────────────────
69
+ //
70
+ // Shape of the BullMQ job data enqueued by the webhook handler (Stage 0).
71
+ // The worker deserialises this and passes it through the pipeline stages.
72
+ export const PipelineJobDataSchema = z.object({
73
+ sourceId: z.string(),
74
+ sourceType: z.string(),
75
+ sourceName: z.string().optional(),
76
+ tenantId: z.string().nullish(), // Propagated from source so pipeline alerts have the right tenant
77
+ rawPayload: z.unknown(),
78
+ receivedAt: z.string(), // ISO 8601
79
+ token: z.string().optional(), // For fallback error logging
80
+ });
81
+ //# sourceMappingURL=CanonicalAlarm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CanonicalAlarm.js","sourceRoot":"","sources":["../../src/pipeline/CanonicalAlarm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { DedupConfigModel } from "../models/dedup-config.model.js";
2
+ import type { PipelineEventModel } from "../models/pipeline-event.model.js";
3
+ import type { CanonicalAlarm } from "./CanonicalAlarm.js";
4
+ export interface DedupResult {
5
+ suppressed: boolean;
6
+ dedupKey: string;
7
+ configId?: string;
8
+ reason: string;
9
+ mainAlarmId?: string;
10
+ flapState?: string;
11
+ }
12
+ export declare class DedupService {
13
+ private dedupConfigModel;
14
+ private pipelineEventModel;
15
+ constructor(dedupConfigModel: DedupConfigModel, pipelineEventModel: PipelineEventModel);
16
+ /**
17
+ * Stage 3: Check whether this alarm is a duplicate.
18
+ *
19
+ * Returns { suppressed: true } if it is — the caller stops processing.
20
+ * Returns { suppressed: false } if it's fresh — the caller continues to grouping.
21
+ *
22
+ * P7 fix: suppressed alarms are NOT passed to GroupingService.
23
+ */
24
+ check(alarm: CanonicalAlarm, alarmId: string): Promise<DedupResult>;
25
+ private checkViaRedis;
26
+ private recordFlapIfNeeded;
27
+ private checkViaDb;
28
+ }
29
+ //# sourceMappingURL=DedupService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DedupService.d.ts","sourceRoot":"","sources":["../../src/pipeline/DedupService.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAQ1D,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,YAAY;IAErB,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,kBAAkB;gBADlB,gBAAgB,EAAE,gBAAgB,EAClC,kBAAkB,EAAE,kBAAkB;IAGhD;;;;;;;OAOG;IACG,KAAK,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;YAwD3D,aAAa;YAsEb,kBAAkB;YA0BlB,UAAU;CA8CzB"}