@oneuptime/common 10.0.53 → 10.0.55

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 (380) hide show
  1. package/Models/AnalyticsModels/Metric.ts +78 -0
  2. package/Server/API/AIAgentDataAPI.ts +6 -1
  3. package/Server/API/BillingAPI.ts +28 -6
  4. package/Server/API/CommonAPI.ts +11 -0
  5. package/Server/API/DashboardAPI.ts +6 -2
  6. package/Server/API/DashboardDomainAPI.ts +10 -3
  7. package/Server/API/GitHubAPI.ts +58 -14
  8. package/Server/API/MicrosoftTeamsAPI.ts +97 -33
  9. package/Server/API/OpenSourceDeploymentAPI.ts +2 -2
  10. package/Server/API/SlackAPI.ts +107 -36
  11. package/Server/API/StatusAPI.ts +37 -16
  12. package/Server/API/StatusPageAPI.ts +97 -23
  13. package/Server/API/StatusPageDomainAPI.ts +6 -3
  14. package/Server/API/UserAPI.ts +3 -3
  15. package/Server/API/UserCallAPI.ts +5 -2
  16. package/Server/API/UserEmailAPI.ts +5 -2
  17. package/Server/API/UserPushAPI.ts +9 -3
  18. package/Server/API/UserSmsAPI.ts +5 -2
  19. package/Server/API/UserWhatsAppAPI.ts +5 -2
  20. package/Server/Infrastructure/Postgres/SchemaMigrations/1774559064921-MigrationName.ts +47 -0
  21. package/Server/Infrastructure/Postgres/SchemaMigrations/1775735059360-MigrationName.ts +35 -0
  22. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +4 -0
  23. package/Server/Middleware/NotificationMiddleware.ts +2 -2
  24. package/Server/Middleware/ProjectAuthorization.ts +6 -0
  25. package/Server/Middleware/SCIMAuthorization.ts +2 -1
  26. package/Server/Middleware/SlackAuthorization.ts +28 -10
  27. package/Server/Middleware/TelemetryIngest.ts +16 -3
  28. package/Server/Middleware/UserAuthorization.ts +22 -5
  29. package/Server/Middleware/WhatsAppAuthorization.ts +15 -4
  30. package/Server/Services/AIAgentService.ts +13 -6
  31. package/Server/Services/AIService.ts +9 -3
  32. package/Server/Services/AlertEpisodeFeedService.ts +17 -5
  33. package/Server/Services/AlertEpisodeService.ts +34 -3
  34. package/Server/Services/AlertEpisodeStateTimelineService.ts +80 -22
  35. package/Server/Services/AlertFeedService.ts +17 -5
  36. package/Server/Services/AlertGroupingEngineService.ts +36 -7
  37. package/Server/Services/AlertService.ts +60 -8
  38. package/Server/Services/AlertStateTimelineService.ts +29 -7
  39. package/Server/Services/AnalyticsDatabaseService.ts +59 -25
  40. package/Server/Services/BillingInvoiceService.ts +7 -3
  41. package/Server/Services/BillingService.ts +9 -2
  42. package/Server/Services/DashboardDomainService.ts +56 -22
  43. package/Server/Services/DashboardService.ts +11 -4
  44. package/Server/Services/DatabaseService.ts +31 -11
  45. package/Server/Services/IncidentEpisodeFeedService.ts +17 -5
  46. package/Server/Services/IncidentEpisodeService.ts +34 -3
  47. package/Server/Services/IncidentEpisodeStateTimelineService.ts +80 -22
  48. package/Server/Services/IncidentFeedService.ts +33 -9
  49. package/Server/Services/IncidentGroupingEngineService.ts +35 -6
  50. package/Server/Services/IncidentService.ts +103 -9
  51. package/Server/Services/IncidentSlaRuleService.ts +16 -4
  52. package/Server/Services/IncidentSlaService.ts +20 -4
  53. package/Server/Services/IncidentStateTimelineService.ts +120 -31
  54. package/Server/Services/KubernetesClusterService.ts +62 -14
  55. package/Server/Services/MonitorFeedService.ts +33 -9
  56. package/Server/Services/MonitorProbeService.ts +46 -23
  57. package/Server/Services/MonitorService.ts +35 -4
  58. package/Server/Services/MonitorStatusTimelineService.ts +68 -20
  59. package/Server/Services/NotificationService.ts +4 -2
  60. package/Server/Services/OnCallDutyPolicyEscalationRuleService.ts +53 -9
  61. package/Server/Services/OnCallDutyPolicyEscalationRuleUserService.ts +9 -2
  62. package/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.ts +29 -8
  63. package/Server/Services/OnCallDutyPolicyFeedService.ts +33 -8
  64. package/Server/Services/OnCallDutyPolicyScheduleService.ts +97 -24
  65. package/Server/Services/OnCallDutyPolicyService.ts +2 -1
  66. package/Server/Services/OpenTelemetryIngestService.ts +51 -20
  67. package/Server/Services/ProbeService.ts +16 -7
  68. package/Server/Services/ProjectService.ts +21 -7
  69. package/Server/Services/ScheduledMaintenanceFeedService.ts +17 -4
  70. package/Server/Services/ScheduledMaintenanceService.ts +52 -6
  71. package/Server/Services/ScheduledMaintenanceStateTimelineService.ts +72 -20
  72. package/Server/Services/StatusPageDomainService.ts +59 -23
  73. package/Server/Services/StatusPageService.ts +26 -8
  74. package/Server/Services/StatusPageSubscriberService.ts +382 -111
  75. package/Server/Services/TeamMemberService.ts +9 -3
  76. package/Server/Services/UserNotificationRuleService.ts +9 -3
  77. package/Server/Services/UserService.ts +6 -4
  78. package/Server/Services/UserWhatsAppService.ts +9 -3
  79. package/Server/Services/WorkflowService.ts +7 -3
  80. package/Server/Services/WorkspaceNotificationRuleService.ts +398 -156
  81. package/Server/Types/Domain.ts +15 -5
  82. package/Server/Types/Workflow/Components/API/Post.ts +22 -8
  83. package/Server/Types/Workflow/Components/BaseModel/OnTriggerBaseModel.ts +12 -4
  84. package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +10 -0
  85. package/Server/Utils/CodeRepository/CodeRepository.ts +62 -13
  86. package/Server/Utils/Express.ts +1 -0
  87. package/Server/Utils/Greenlock/Greenlock.ts +75 -20
  88. package/Server/Utils/LLM/LLMService.ts +22 -7
  89. package/Server/Utils/Logger.ts +93 -13
  90. package/Server/Utils/Monitor/MonitorAlert.ts +15 -3
  91. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +15 -5
  92. package/Server/Utils/Monitor/MonitorIncident.ts +17 -3
  93. package/Server/Utils/Monitor/MonitorStatusTimeline.ts +6 -1
  94. package/Server/Utils/Profiling.ts +11 -5
  95. package/Server/Utils/Realtime.ts +90 -31
  96. package/Server/Utils/Response.ts +2 -2
  97. package/Server/Utils/StartServer.ts +43 -9
  98. package/Server/Utils/Telemetry/SpanUtil.ts +90 -0
  99. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.ts +58 -15
  100. package/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.ts +58 -15
  101. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.ts +19 -3
  102. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.ts +87 -22
  103. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Monitor.ts +12 -3
  104. package/Server/Utils/Workspace/MicrosoftTeams/Actions/OnCallDutyPolicy.ts +25 -7
  105. package/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.ts +55 -8
  106. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +100 -22
  107. package/Server/Utils/Workspace/Slack/Actions/Alert.ts +35 -9
  108. package/Server/Utils/Workspace/Slack/Actions/AlertEpisode.ts +32 -8
  109. package/Server/Utils/Workspace/Slack/Actions/Auth.ts +3 -1
  110. package/Server/Utils/Workspace/Slack/Actions/Incident.ts +52 -11
  111. package/Server/Utils/Workspace/Slack/Actions/IncidentEpisode.ts +4 -1
  112. package/Server/Utils/Workspace/Slack/Actions/ScheduledMaintenance.ts +89 -20
  113. package/Server/Utils/Workspace/Slack/Slack.ts +498 -247
  114. package/Server/Utils/Workspace/Workspace.ts +33 -11
  115. package/Server/Utils/Workspace/WorkspaceBase.ts +3 -1
  116. package/Server/Utils/Workspace/WorkspaceMessages/Alert.ts +8 -2
  117. package/Tests/Server/Middleware/UserAuthorization.test.ts +1 -1
  118. package/Tests/Server/Services/AnalyticsDatabaseService.test.ts +12 -3
  119. package/UI/Components/Charts/Area/AreaChart.tsx +35 -1
  120. package/UI/Components/Charts/ChartGroup/ChartGroup.tsx +7 -0
  121. package/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.tsx +33 -0
  122. package/UI/Components/Charts/ChartLibrary/LineChart/LineChart.tsx +33 -0
  123. package/UI/Components/Charts/ChartLibrary/Types/FormattedExemplarPoint.ts +14 -0
  124. package/UI/Components/Charts/Line/LineChart.tsx +35 -1
  125. package/UI/Components/Charts/Types/ExemplarPoint.ts +6 -0
  126. package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +3 -3
  127. package/UI/Components/Navbar/NavBar.tsx +10 -0
  128. package/build/dist/Models/AnalyticsModels/Metric.js +70 -0
  129. package/build/dist/Models/AnalyticsModels/Metric.js.map +1 -1
  130. package/build/dist/Server/API/AIAgentDataAPI.js +6 -6
  131. package/build/dist/Server/API/AIAgentDataAPI.js.map +1 -1
  132. package/build/dist/Server/API/BillingAPI.js +13 -13
  133. package/build/dist/Server/API/BillingAPI.js.map +1 -1
  134. package/build/dist/Server/API/CommonAPI.js +5 -0
  135. package/build/dist/Server/API/CommonAPI.js.map +1 -1
  136. package/build/dist/Server/API/DashboardAPI.js +2 -2
  137. package/build/dist/Server/API/DashboardAPI.js.map +1 -1
  138. package/build/dist/Server/API/DashboardDomainAPI.js +3 -3
  139. package/build/dist/Server/API/DashboardDomainAPI.js.map +1 -1
  140. package/build/dist/Server/API/GitHubAPI.js +19 -19
  141. package/build/dist/Server/API/GitHubAPI.js.map +1 -1
  142. package/build/dist/Server/API/MicrosoftTeamsAPI.js +34 -34
  143. package/build/dist/Server/API/MicrosoftTeamsAPI.js.map +1 -1
  144. package/build/dist/Server/API/OpenSourceDeploymentAPI.js +2 -2
  145. package/build/dist/Server/API/OpenSourceDeploymentAPI.js.map +1 -1
  146. package/build/dist/Server/API/SlackAPI.js +38 -38
  147. package/build/dist/Server/API/SlackAPI.js.map +1 -1
  148. package/build/dist/Server/API/StatusAPI.js +16 -16
  149. package/build/dist/Server/API/StatusAPI.js.map +1 -1
  150. package/build/dist/Server/API/StatusPageAPI.js +52 -52
  151. package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
  152. package/build/dist/Server/API/StatusPageDomainAPI.js +3 -3
  153. package/build/dist/Server/API/StatusPageDomainAPI.js.map +1 -1
  154. package/build/dist/Server/API/UserAPI.js +3 -3
  155. package/build/dist/Server/API/UserAPI.js.map +1 -1
  156. package/build/dist/Server/API/UserCallAPI.js +2 -2
  157. package/build/dist/Server/API/UserCallAPI.js.map +1 -1
  158. package/build/dist/Server/API/UserEmailAPI.js +2 -2
  159. package/build/dist/Server/API/UserEmailAPI.js.map +1 -1
  160. package/build/dist/Server/API/UserPushAPI.js +3 -3
  161. package/build/dist/Server/API/UserPushAPI.js.map +1 -1
  162. package/build/dist/Server/API/UserSmsAPI.js +2 -2
  163. package/build/dist/Server/API/UserSmsAPI.js.map +1 -1
  164. package/build/dist/Server/API/UserWhatsAppAPI.js +2 -2
  165. package/build/dist/Server/API/UserWhatsAppAPI.js.map +1 -1
  166. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1774559064921-MigrationName.js +40 -0
  167. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1774559064921-MigrationName.js.map +1 -0
  168. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1775735059360-MigrationName.js +18 -0
  169. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1775735059360-MigrationName.js.map +1 -0
  170. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +4 -0
  171. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  172. package/build/dist/Server/Middleware/NotificationMiddleware.js +2 -2
  173. package/build/dist/Server/Middleware/NotificationMiddleware.js.map +1 -1
  174. package/build/dist/Server/Middleware/ProjectAuthorization.js +5 -0
  175. package/build/dist/Server/Middleware/ProjectAuthorization.js.map +1 -1
  176. package/build/dist/Server/Middleware/SCIMAuthorization.js +2 -2
  177. package/build/dist/Server/Middleware/SCIMAuthorization.js.map +1 -1
  178. package/build/dist/Server/Middleware/SlackAuthorization.js +10 -10
  179. package/build/dist/Server/Middleware/SlackAuthorization.js.map +1 -1
  180. package/build/dist/Server/Middleware/TelemetryIngest.js +9 -4
  181. package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
  182. package/build/dist/Server/Middleware/UserAuthorization.js +10 -5
  183. package/build/dist/Server/Middleware/UserAuthorization.js.map +1 -1
  184. package/build/dist/Server/Middleware/WhatsAppAuthorization.js +6 -6
  185. package/build/dist/Server/Middleware/WhatsAppAuthorization.js.map +1 -1
  186. package/build/dist/Server/Services/AIAgentService.js +13 -7
  187. package/build/dist/Server/Services/AIAgentService.js.map +1 -1
  188. package/build/dist/Server/Services/AIService.js +9 -2
  189. package/build/dist/Server/Services/AIService.js.map +1 -1
  190. package/build/dist/Server/Services/AlertEpisodeFeedService.js +17 -5
  191. package/build/dist/Server/Services/AlertEpisodeFeedService.js.map +1 -1
  192. package/build/dist/Server/Services/AlertEpisodeService.js +40 -10
  193. package/build/dist/Server/Services/AlertEpisodeService.js.map +1 -1
  194. package/build/dist/Server/Services/AlertEpisodeStateTimelineService.js +81 -24
  195. package/build/dist/Server/Services/AlertEpisodeStateTimelineService.js.map +1 -1
  196. package/build/dist/Server/Services/AlertFeedService.js +17 -5
  197. package/build/dist/Server/Services/AlertFeedService.js.map +1 -1
  198. package/build/dist/Server/Services/AlertGroupingEngineService.js +44 -28
  199. package/build/dist/Server/Services/AlertGroupingEngineService.js.map +1 -1
  200. package/build/dist/Server/Services/AlertService.js +72 -20
  201. package/build/dist/Server/Services/AlertService.js.map +1 -1
  202. package/build/dist/Server/Services/AlertStateTimelineService.js +36 -13
  203. package/build/dist/Server/Services/AlertStateTimelineService.js.map +1 -1
  204. package/build/dist/Server/Services/AnalyticsDatabaseService.js +52 -28
  205. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  206. package/build/dist/Server/Services/BillingInvoiceService.js +7 -2
  207. package/build/dist/Server/Services/BillingInvoiceService.js.map +1 -1
  208. package/build/dist/Server/Services/BillingService.js +8 -8
  209. package/build/dist/Server/Services/BillingService.js.map +1 -1
  210. package/build/dist/Server/Services/DashboardDomainService.js +49 -27
  211. package/build/dist/Server/Services/DashboardDomainService.js.map +1 -1
  212. package/build/dist/Server/Services/DashboardService.js +11 -4
  213. package/build/dist/Server/Services/DashboardService.js.map +1 -1
  214. package/build/dist/Server/Services/DatabaseService.js +32 -12
  215. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  216. package/build/dist/Server/Services/IncidentEpisodeFeedService.js +17 -5
  217. package/build/dist/Server/Services/IncidentEpisodeFeedService.js.map +1 -1
  218. package/build/dist/Server/Services/IncidentEpisodeService.js +40 -10
  219. package/build/dist/Server/Services/IncidentEpisodeService.js.map +1 -1
  220. package/build/dist/Server/Services/IncidentEpisodeStateTimelineService.js +81 -24
  221. package/build/dist/Server/Services/IncidentEpisodeStateTimelineService.js.map +1 -1
  222. package/build/dist/Server/Services/IncidentFeedService.js +34 -10
  223. package/build/dist/Server/Services/IncidentFeedService.js.map +1 -1
  224. package/build/dist/Server/Services/IncidentGroupingEngineService.js +43 -29
  225. package/build/dist/Server/Services/IncidentGroupingEngineService.js.map +1 -1
  226. package/build/dist/Server/Services/IncidentService.js +116 -28
  227. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  228. package/build/dist/Server/Services/IncidentSlaRuleService.js +19 -11
  229. package/build/dist/Server/Services/IncidentSlaRuleService.js.map +1 -1
  230. package/build/dist/Server/Services/IncidentSlaService.js +21 -14
  231. package/build/dist/Server/Services/IncidentSlaService.js.map +1 -1
  232. package/build/dist/Server/Services/IncidentStateTimelineService.js +130 -37
  233. package/build/dist/Server/Services/IncidentStateTimelineService.js.map +1 -1
  234. package/build/dist/Server/Services/KubernetesClusterService.js +51 -14
  235. package/build/dist/Server/Services/KubernetesClusterService.js.map +1 -1
  236. package/build/dist/Server/Services/MonitorFeedService.js +34 -10
  237. package/build/dist/Server/Services/MonitorFeedService.js.map +1 -1
  238. package/build/dist/Server/Services/MonitorProbeService.js +32 -16
  239. package/build/dist/Server/Services/MonitorProbeService.js.map +1 -1
  240. package/build/dist/Server/Services/MonitorService.js +42 -11
  241. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  242. package/build/dist/Server/Services/MonitorStatusTimelineService.js +69 -21
  243. package/build/dist/Server/Services/MonitorStatusTimelineService.js.map +1 -1
  244. package/build/dist/Server/Services/NotificationService.js +4 -3
  245. package/build/dist/Server/Services/NotificationService.js.map +1 -1
  246. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleService.js +49 -12
  247. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleService.js.map +1 -1
  248. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleUserService.js +9 -3
  249. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleUserService.js.map +1 -1
  250. package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.js +26 -11
  251. package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.js.map +1 -1
  252. package/build/dist/Server/Services/OnCallDutyPolicyFeedService.js +34 -10
  253. package/build/dist/Server/Services/OnCallDutyPolicyFeedService.js.map +1 -1
  254. package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js +94 -37
  255. package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js.map +1 -1
  256. package/build/dist/Server/Services/OnCallDutyPolicyService.js +1 -1
  257. package/build/dist/Server/Services/OnCallDutyPolicyService.js.map +1 -1
  258. package/build/dist/Server/Services/OpenTelemetryIngestService.js +45 -17
  259. package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
  260. package/build/dist/Server/Services/ProbeService.js +13 -7
  261. package/build/dist/Server/Services/ProbeService.js.map +1 -1
  262. package/build/dist/Server/Services/ProjectService.js +33 -17
  263. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  264. package/build/dist/Server/Services/ScheduledMaintenanceFeedService.js +17 -5
  265. package/build/dist/Server/Services/ScheduledMaintenanceFeedService.js.map +1 -1
  266. package/build/dist/Server/Services/ScheduledMaintenanceService.js +71 -24
  267. package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
  268. package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js +72 -24
  269. package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js.map +1 -1
  270. package/build/dist/Server/Services/StatusPageDomainService.js +55 -29
  271. package/build/dist/Server/Services/StatusPageDomainService.js.map +1 -1
  272. package/build/dist/Server/Services/StatusPageService.js +29 -9
  273. package/build/dist/Server/Services/StatusPageService.js.map +1 -1
  274. package/build/dist/Server/Services/StatusPageSubscriberService.js +393 -130
  275. package/build/dist/Server/Services/StatusPageSubscriberService.js.map +1 -1
  276. package/build/dist/Server/Services/TeamMemberService.js +10 -2
  277. package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
  278. package/build/dist/Server/Services/UserNotificationRuleService.js +10 -2
  279. package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
  280. package/build/dist/Server/Services/UserService.js +8 -3
  281. package/build/dist/Server/Services/UserService.js.map +1 -1
  282. package/build/dist/Server/Services/UserWhatsAppService.js +10 -2
  283. package/build/dist/Server/Services/UserWhatsAppService.js.map +1 -1
  284. package/build/dist/Server/Services/WorkflowService.js +7 -2
  285. package/build/dist/Server/Services/WorkflowService.js.map +1 -1
  286. package/build/dist/Server/Services/WorkspaceNotificationRuleService.js +367 -180
  287. package/build/dist/Server/Services/WorkspaceNotificationRuleService.js.map +1 -1
  288. package/build/dist/Server/Types/Domain.js +12 -6
  289. package/build/dist/Server/Types/Domain.js.map +1 -1
  290. package/build/dist/Server/Types/Workflow/Components/API/Post.js +11 -7
  291. package/build/dist/Server/Types/Workflow/Components/API/Post.js.map +1 -1
  292. package/build/dist/Server/Types/Workflow/Components/BaseModel/OnTriggerBaseModel.js +11 -4
  293. package/build/dist/Server/Types/Workflow/Components/BaseModel/OnTriggerBaseModel.js.map +1 -1
  294. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +7 -0
  295. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
  296. package/build/dist/Server/Utils/CodeRepository/CodeRepository.js +45 -17
  297. package/build/dist/Server/Utils/CodeRepository/CodeRepository.js.map +1 -1
  298. package/build/dist/Server/Utils/Express.js.map +1 -1
  299. package/build/dist/Server/Utils/Greenlock/Greenlock.js +36 -29
  300. package/build/dist/Server/Utils/Greenlock/Greenlock.js.map +1 -1
  301. package/build/dist/Server/Utils/LLM/LLMService.js +18 -6
  302. package/build/dist/Server/Utils/LLM/LLMService.js.map +1 -1
  303. package/build/dist/Server/Utils/Logger.js +61 -13
  304. package/build/dist/Server/Utils/Logger.js.map +1 -1
  305. package/build/dist/Server/Utils/Monitor/MonitorAlert.js +23 -20
  306. package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
  307. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +13 -4
  308. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  309. package/build/dist/Server/Utils/Monitor/MonitorIncident.js +25 -22
  310. package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
  311. package/build/dist/Server/Utils/Monitor/MonitorStatusTimeline.js +6 -3
  312. package/build/dist/Server/Utils/Monitor/MonitorStatusTimeline.js.map +1 -1
  313. package/build/dist/Server/Utils/Profiling.js +9 -6
  314. package/build/dist/Server/Utils/Profiling.js.map +1 -1
  315. package/build/dist/Server/Utils/Realtime.js +50 -34
  316. package/build/dist/Server/Utils/Realtime.js.map +1 -1
  317. package/build/dist/Server/Utils/Response.js +2 -2
  318. package/build/dist/Server/Utils/Response.js.map +1 -1
  319. package/build/dist/Server/Utils/StartServer.js +23 -11
  320. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  321. package/build/dist/Server/Utils/Telemetry/SpanUtil.js +52 -0
  322. package/build/dist/Server/Utils/Telemetry/SpanUtil.js.map +1 -0
  323. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.js +58 -15
  324. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.js.map +1 -1
  325. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.js +58 -15
  326. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.js.map +1 -1
  327. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.js +19 -5
  328. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.js.map +1 -1
  329. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js +90 -26
  330. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js.map +1 -1
  331. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Monitor.js +12 -3
  332. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Monitor.js.map +1 -1
  333. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/OnCallDutyPolicy.js +25 -7
  334. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/OnCallDutyPolicy.js.map +1 -1
  335. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.js +58 -19
  336. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.js.map +1 -1
  337. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +102 -29
  338. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
  339. package/build/dist/Server/Utils/Workspace/Slack/Actions/Alert.js +38 -9
  340. package/build/dist/Server/Utils/Workspace/Slack/Actions/Alert.js.map +1 -1
  341. package/build/dist/Server/Utils/Workspace/Slack/Actions/AlertEpisode.js +34 -8
  342. package/build/dist/Server/Utils/Workspace/Slack/Actions/AlertEpisode.js.map +1 -1
  343. package/build/dist/Server/Utils/Workspace/Slack/Actions/Auth.js +3 -1
  344. package/build/dist/Server/Utils/Workspace/Slack/Actions/Auth.js.map +1 -1
  345. package/build/dist/Server/Utils/Workspace/Slack/Actions/Incident.js +55 -13
  346. package/build/dist/Server/Utils/Workspace/Slack/Actions/Incident.js.map +1 -1
  347. package/build/dist/Server/Utils/Workspace/Slack/Actions/IncidentEpisode.js +5 -1
  348. package/build/dist/Server/Utils/Workspace/Slack/Actions/IncidentEpisode.js.map +1 -1
  349. package/build/dist/Server/Utils/Workspace/Slack/Actions/ScheduledMaintenance.js +91 -26
  350. package/build/dist/Server/Utils/Workspace/Slack/Actions/ScheduledMaintenance.js.map +1 -1
  351. package/build/dist/Server/Utils/Workspace/Slack/Slack.js +355 -270
  352. package/build/dist/Server/Utils/Workspace/Slack/Slack.js.map +1 -1
  353. package/build/dist/Server/Utils/Workspace/Workspace.js +21 -12
  354. package/build/dist/Server/Utils/Workspace/Workspace.js.map +1 -1
  355. package/build/dist/Server/Utils/Workspace/WorkspaceBase.js +3 -1
  356. package/build/dist/Server/Utils/Workspace/WorkspaceBase.js.map +1 -1
  357. package/build/dist/Server/Utils/Workspace/WorkspaceMessages/Alert.js +9 -2
  358. package/build/dist/Server/Utils/Workspace/WorkspaceMessages/Alert.js.map +1 -1
  359. package/build/dist/Tests/Server/Middleware/UserAuthorization.test.js +1 -1
  360. package/build/dist/Tests/Server/Middleware/UserAuthorization.test.js.map +1 -1
  361. package/build/dist/Tests/Server/Services/AnalyticsDatabaseService.test.js +12 -6
  362. package/build/dist/Tests/Server/Services/AnalyticsDatabaseService.test.js.map +1 -1
  363. package/build/dist/UI/Components/Charts/Area/AreaChart.js +20 -2
  364. package/build/dist/UI/Components/Charts/Area/AreaChart.js.map +1 -1
  365. package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js +2 -2
  366. package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js.map +1 -1
  367. package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js +9 -2
  368. package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js.map +1 -1
  369. package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js +9 -2
  370. package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js.map +1 -1
  371. package/build/dist/UI/Components/Charts/ChartLibrary/Types/FormattedExemplarPoint.js +2 -0
  372. package/build/dist/UI/Components/Charts/ChartLibrary/Types/FormattedExemplarPoint.js.map +1 -0
  373. package/build/dist/UI/Components/Charts/Line/LineChart.js +20 -2
  374. package/build/dist/UI/Components/Charts/Line/LineChart.js.map +1 -1
  375. package/build/dist/UI/Components/Charts/Types/ExemplarPoint.js +2 -0
  376. package/build/dist/UI/Components/Charts/Types/ExemplarPoint.js.map +1 -0
  377. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +3 -3
  378. package/build/dist/UI/Components/Navbar/NavBar.js +9 -1
  379. package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
  380. package/package.json +1 -1
@@ -35,7 +35,7 @@ import {
35
35
  ExpressResponse,
36
36
  NextFunction,
37
37
  } from "../Utils/Express";
38
- import logger from "../Utils/Logger";
38
+ import logger, { getLogAttributesFromRequest } from "../Utils/Logger";
39
39
  import Response from "../Utils/Response";
40
40
  import BaseAPI from "./BaseAPI";
41
41
  import BaseModel from "../../Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel";
@@ -205,8 +205,9 @@ export default class StatusPageAPI extends BaseAPI<
205
205
  } catch (err) {
206
206
  logger.error(
207
207
  `Error converting statusPageIdOrDomain to ObjectID: ${statusPageIdOrDomain}`,
208
+ getLogAttributesFromRequest(req as any),
208
209
  );
209
- logger.error(err);
210
+ logger.error(err, getLogAttributesFromRequest(req as any));
210
211
  return Response.sendErrorResponse(
211
212
  req,
212
213
  res,
@@ -275,7 +276,10 @@ export default class StatusPageAPI extends BaseAPI<
275
276
  });
276
277
 
277
278
  if (!statusPage || !statusPage.faviconFile) {
278
- logger.debug("Favicon file not found. Returning default favicon.");
279
+ logger.debug(
280
+ "Favicon file not found. Returning default favicon.",
281
+ getLogAttributesFromRequest(req as any),
282
+ );
279
283
 
280
284
  return Response.sendFileByPath(
281
285
  req,
@@ -286,6 +290,7 @@ export default class StatusPageAPI extends BaseAPI<
286
290
 
287
291
  logger.debug(
288
292
  `Favicon file found. Sending file: ${statusPage.faviconFile.name}`,
293
+ getLogAttributesFromRequest(req as any),
289
294
  );
290
295
 
291
296
  return Response.sendFileResponse(req, res, statusPage.faviconFile);
@@ -294,7 +299,7 @@ export default class StatusPageAPI extends BaseAPI<
294
299
  return Response.sendErrorResponse(req, res, error);
295
300
  }
296
301
 
297
- logger.error(error);
302
+ logger.error(error, getLogAttributesFromRequest(req as any));
298
303
  return Response.sendErrorResponse(
299
304
  req,
300
305
  res,
@@ -344,7 +349,7 @@ export default class StatusPageAPI extends BaseAPI<
344
349
  return Response.sendErrorResponse(req, res, error);
345
350
  }
346
351
 
347
- logger.error(error);
352
+ logger.error(error, getLogAttributesFromRequest(req as any));
348
353
  return Response.sendErrorResponse(
349
354
  req,
350
355
  res,
@@ -394,7 +399,7 @@ export default class StatusPageAPI extends BaseAPI<
394
399
  return Response.sendErrorResponse(req, res, error);
395
400
  }
396
401
 
397
- logger.error(error);
402
+ logger.error(error, getLogAttributesFromRequest(req as any));
398
403
  return Response.sendErrorResponse(
399
404
  req,
400
405
  res,
@@ -604,7 +609,7 @@ export default class StatusPageAPI extends BaseAPI<
604
609
  res.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
605
610
  return res.send(svg);
606
611
  } catch (err) {
607
- logger.error(err);
612
+ logger.error(err, getLogAttributesFromRequest(req as any));
608
613
  return res.status(500).send("Internal Server Error");
609
614
  }
610
615
  },
@@ -684,7 +689,10 @@ export default class StatusPageAPI extends BaseAPI<
684
689
 
685
690
  const token: string = req.params["token"] as string;
686
691
 
687
- logger.debug(`CNAME Verification: Host:${host} - Token:${token}`);
692
+ logger.debug(
693
+ `CNAME Verification: Host:${host} - Token:${token}`,
694
+ getLogAttributesFromRequest(req as any),
695
+ );
688
696
 
689
697
  const domain: StatusPageDomain | null =
690
698
  await StatusPageDomainService.findOneBy({
@@ -720,6 +728,7 @@ export default class StatusPageAPI extends BaseAPI<
720
728
  async (req: ExpressRequest, res: ExpressResponse) => {
721
729
  logger.debug(
722
730
  `ACME challenge validation request received for token: ${req.params["token"]} from host: ${req.headers["host"]}`,
731
+ getLogAttributesFromRequest(req as any),
723
732
  );
724
733
 
725
734
  const challenge: AcmeChallenge | null =
@@ -738,6 +747,7 @@ export default class StatusPageAPI extends BaseAPI<
738
747
  if (!challenge) {
739
748
  logger.error(
740
749
  `ACME challenge not found for token: ${req.params["token"]} from host: ${req.headers["host"]}`,
750
+ getLogAttributesFromRequest(req as any),
741
751
  );
742
752
  return Response.sendErrorResponse(
743
753
  req,
@@ -3106,6 +3116,7 @@ export default class StatusPageAPI extends BaseAPI<
3106
3116
 
3107
3117
  logger.debug(
3108
3118
  `Managing Existing Subscription for Status Page: ${statusPageId}`,
3119
+ getLogAttributesFromRequest(req as any),
3109
3120
  );
3110
3121
 
3111
3122
  await this.checkHasReadAccess({
@@ -3134,20 +3145,27 @@ export default class StatusPageAPI extends BaseAPI<
3134
3145
  });
3135
3146
 
3136
3147
  if (!statusPage) {
3137
- logger.debug(`Status page not found with ID: ${statusPageId}`);
3148
+ logger.debug(
3149
+ `Status page not found with ID: ${statusPageId}`,
3150
+ getLogAttributesFromRequest(req as any),
3151
+ );
3138
3152
  throw new BadDataException("Status Page not found");
3139
3153
  }
3140
3154
 
3141
3155
  if (!statusPage.showSubscriberPageOnStatusPage) {
3142
3156
  logger.debug(
3143
3157
  `Subscriber page not enabled for status page with ID: ${statusPageId}`,
3158
+ getLogAttributesFromRequest(req as any),
3144
3159
  );
3145
3160
  throw new BadDataException(
3146
3161
  "Subscribes not enabled for this status page.",
3147
3162
  );
3148
3163
  }
3149
3164
 
3150
- logger.debug(`Status page found: ${JSON.stringify(statusPage)}`);
3165
+ logger.debug(
3166
+ `Status page found: ${JSON.stringify(statusPage)}`,
3167
+ getLogAttributesFromRequest(req as any),
3168
+ );
3151
3169
 
3152
3170
  if (
3153
3171
  req.body.data["subscriberEmail"] &&
@@ -3155,6 +3173,7 @@ export default class StatusPageAPI extends BaseAPI<
3155
3173
  ) {
3156
3174
  logger.debug(
3157
3175
  `Email subscribers not enabled for status page with ID: ${statusPageId}`,
3176
+ getLogAttributesFromRequest(req as any),
3158
3177
  );
3159
3178
  throw new BadDataException(
3160
3179
  "Email subscribers not enabled for this status page.",
@@ -3167,6 +3186,7 @@ export default class StatusPageAPI extends BaseAPI<
3167
3186
  ) {
3168
3187
  logger.debug(
3169
3188
  `Slack subscribers not enabled for status page with ID: ${statusPageId}`,
3189
+ getLogAttributesFromRequest(req as any),
3170
3190
  );
3171
3191
  throw new BadDataException(
3172
3192
  "Slack subscribers not enabled for this status page.",
@@ -3176,6 +3196,7 @@ export default class StatusPageAPI extends BaseAPI<
3176
3196
  if (req.body.data["subscriberPhone"] && !statusPage.enableSmsSubscribers) {
3177
3197
  logger.debug(
3178
3198
  `SMS subscribers not enabled for status page with ID: ${statusPageId}`,
3199
+ getLogAttributesFromRequest(req as any),
3179
3200
  );
3180
3201
  throw new BadDataException(
3181
3202
  "SMS subscribers not enabled for this status page.",
@@ -3191,6 +3212,7 @@ export default class StatusPageAPI extends BaseAPI<
3191
3212
  ) {
3192
3213
  logger.debug(
3193
3214
  `No email, slack workspace name or phone provided for subscription to status page with ID: ${statusPageId}`,
3215
+ getLogAttributesFromRequest(req as any),
3194
3216
  );
3195
3217
  throw new BadDataException(
3196
3218
  "Email, phone or slack workspace name is required to subscribe to this status page.",
@@ -3214,7 +3236,10 @@ export default class StatusPageAPI extends BaseAPI<
3214
3236
  let statusPageSubscriber: StatusPageSubscriber | null = null;
3215
3237
 
3216
3238
  if (email) {
3217
- logger.debug(`Setting subscriber email: ${email}`);
3239
+ logger.debug(
3240
+ `Setting subscriber email: ${email}`,
3241
+ getLogAttributesFromRequest(req as any),
3242
+ );
3218
3243
  statusPageSubscriber = await StatusPageSubscriberService.findOneBy({
3219
3244
  query: {
3220
3245
  subscriberEmail: email,
@@ -3231,7 +3256,10 @@ export default class StatusPageAPI extends BaseAPI<
3231
3256
  }
3232
3257
 
3233
3258
  if (phone) {
3234
- logger.debug(`Setting subscriber phone: ${phone}`);
3259
+ logger.debug(
3260
+ `Setting subscriber phone: ${phone}`,
3261
+ getLogAttributesFromRequest(req as any),
3262
+ );
3235
3263
  statusPageSubscriber = await StatusPageSubscriberService.findOneBy({
3236
3264
  query: {
3237
3265
  subscriberPhone: phone,
@@ -3248,7 +3276,10 @@ export default class StatusPageAPI extends BaseAPI<
3248
3276
  }
3249
3277
 
3250
3278
  if (slackWorkspaceName) {
3251
- logger.debug(`Setting subscriber slack workspace: ${slackWorkspaceName}`);
3279
+ logger.debug(
3280
+ `Setting subscriber slack workspace: ${slackWorkspaceName}`,
3281
+ getLogAttributesFromRequest(req as any),
3282
+ );
3252
3283
  statusPageSubscriber = await StatusPageSubscriberService.findOneBy({
3253
3284
  query: {
3254
3285
  slackWorkspaceName: slackWorkspaceName,
@@ -3269,6 +3300,7 @@ export default class StatusPageAPI extends BaseAPI<
3269
3300
  // not found, return bad data
3270
3301
  logger.debug(
3271
3302
  `Subscriber not found for email: ${email}, phone: ${phone}, or slack workspace: ${slackWorkspaceName}`,
3303
+ getLogAttributesFromRequest(req as any),
3272
3304
  );
3273
3305
 
3274
3306
  let identifierType: string = "email";
@@ -3355,7 +3387,7 @@ export default class StatusPageAPI extends BaseAPI<
3355
3387
  ),
3356
3388
  statusPageId: statusPage.id!,
3357
3389
  }).catch((err: Error) => {
3358
- logger.error(err);
3390
+ logger.error(err, getLogAttributesFromRequest(req as any));
3359
3391
  });
3360
3392
  }
3361
3393
 
@@ -3366,12 +3398,13 @@ export default class StatusPageAPI extends BaseAPI<
3366
3398
  url: statusPageSubscriber.slackIncomingWebhookUrl,
3367
3399
  text: slackMessage,
3368
3400
  }).catch((err: Error) => {
3369
- logger.error(err);
3401
+ logger.error(err, getLogAttributesFromRequest(req as any));
3370
3402
  });
3371
3403
  }
3372
3404
 
3373
3405
  logger.debug(
3374
3406
  `Subscription management link sent to subscriber with ID: ${statusPageSubscriber.id}`,
3407
+ getLogAttributesFromRequest(req as any),
3375
3408
  );
3376
3409
  }
3377
3410
  }
@@ -3382,7 +3415,10 @@ export default class StatusPageAPI extends BaseAPI<
3382
3415
  req.params["statusPageId"] as string,
3383
3416
  );
3384
3417
 
3385
- logger.debug(`Subscribing to status page with ID: ${objectId}`);
3418
+ logger.debug(
3419
+ `Subscribing to status page with ID: ${objectId}`,
3420
+ getLogAttributesFromRequest(req as any),
3421
+ );
3386
3422
 
3387
3423
  await this.checkHasReadAccess({
3388
3424
  statusPageId: objectId,
@@ -3410,20 +3446,27 @@ export default class StatusPageAPI extends BaseAPI<
3410
3446
  });
3411
3447
 
3412
3448
  if (!statusPage) {
3413
- logger.debug(`Status page not found with ID: ${objectId}`);
3449
+ logger.debug(
3450
+ `Status page not found with ID: ${objectId}`,
3451
+ getLogAttributesFromRequest(req as any),
3452
+ );
3414
3453
  throw new BadDataException("Status Page not found");
3415
3454
  }
3416
3455
 
3417
3456
  if (!statusPage.showSubscriberPageOnStatusPage) {
3418
3457
  logger.debug(
3419
3458
  `Subscriber page not enabled for status page with ID: ${objectId}`,
3459
+ getLogAttributesFromRequest(req as any),
3420
3460
  );
3421
3461
  throw new BadDataException(
3422
3462
  "Subscribes not enabled for this status page.",
3423
3463
  );
3424
3464
  }
3425
3465
 
3426
- logger.debug(`Status page found: ${JSON.stringify(statusPage)}`);
3466
+ logger.debug(
3467
+ `Status page found: ${JSON.stringify(statusPage)}`,
3468
+ getLogAttributesFromRequest(req as any),
3469
+ );
3427
3470
 
3428
3471
  if (
3429
3472
  req.body.data["subscriberEmail"] &&
@@ -3431,6 +3474,7 @@ export default class StatusPageAPI extends BaseAPI<
3431
3474
  ) {
3432
3475
  logger.debug(
3433
3476
  `Email subscribers not enabled for status page with ID: ${objectId}`,
3477
+ getLogAttributesFromRequest(req as any),
3434
3478
  );
3435
3479
  throw new BadDataException(
3436
3480
  "Email subscribers not enabled for this status page.",
@@ -3440,6 +3484,7 @@ export default class StatusPageAPI extends BaseAPI<
3440
3484
  if (req.body.data["subscriberPhone"] && !statusPage.enableSmsSubscribers) {
3441
3485
  logger.debug(
3442
3486
  `SMS subscribers not enabled for status page with ID: ${objectId}`,
3487
+ getLogAttributesFromRequest(req as any),
3443
3488
  );
3444
3489
  throw new BadDataException(
3445
3490
  "SMS subscribers not enabled for this status page.",
@@ -3454,6 +3499,7 @@ export default class StatusPageAPI extends BaseAPI<
3454
3499
  ) {
3455
3500
  logger.debug(
3456
3501
  `Slack subscribers not enabled for status page with ID: ${objectId}`,
3502
+ getLogAttributesFromRequest(req as any),
3457
3503
  );
3458
3504
  throw new BadDataException(
3459
3505
  "Slack subscribers not enabled for this status page.",
@@ -3466,6 +3512,7 @@ export default class StatusPageAPI extends BaseAPI<
3466
3512
  ) {
3467
3513
  logger.debug(
3468
3514
  `Microsoft Teams subscribers not enabled for status page with ID: ${objectId}`,
3515
+ getLogAttributesFromRequest(req as any),
3469
3516
  );
3470
3517
  throw new BadDataException(
3471
3518
  "Microsoft Teams subscribers not enabled for this status page.",
@@ -3480,6 +3527,7 @@ export default class StatusPageAPI extends BaseAPI<
3480
3527
  ) {
3481
3528
  logger.debug(
3482
3529
  `No email, phone, slack workspace name, or Microsoft Teams workspace name provided for subscription to status page with ID: ${objectId}`,
3530
+ getLogAttributesFromRequest(req as any),
3483
3531
  );
3484
3532
  throw new BadDataException(
3485
3533
  "Email, phone, slack workspace name, or Microsoft Teams workspace name is required to subscribe to this status page.",
@@ -3525,6 +3573,7 @@ export default class StatusPageAPI extends BaseAPI<
3525
3573
  if (!req.params["subscriberId"]) {
3526
3574
  logger.debug(
3527
3575
  `Creating new subscriber for status page with ID: ${objectId}`,
3576
+ getLogAttributesFromRequest(req as any),
3528
3577
  );
3529
3578
  statusPageSubscriber = new StatusPageSubscriber();
3530
3579
  } else {
@@ -3534,6 +3583,7 @@ export default class StatusPageAPI extends BaseAPI<
3534
3583
 
3535
3584
  logger.debug(
3536
3585
  `Updating existing subscriber with ID: ${subscriberId} for status page with ID: ${objectId}`,
3586
+ getLogAttributesFromRequest(req as any),
3537
3587
  );
3538
3588
  statusPageSubscriber = await StatusPageSubscriberService.findOneBy({
3539
3589
  query: {
@@ -3545,7 +3595,10 @@ export default class StatusPageAPI extends BaseAPI<
3545
3595
  });
3546
3596
 
3547
3597
  if (!statusPageSubscriber) {
3548
- logger.debug(`Subscriber not found with ID: ${subscriberId}`);
3598
+ logger.debug(
3599
+ `Subscriber not found with ID: ${subscriberId}`,
3600
+ getLogAttributesFromRequest(req as any),
3601
+ );
3549
3602
  throw new BadDataException("Subscriber not found");
3550
3603
  }
3551
3604
 
@@ -3553,17 +3606,26 @@ export default class StatusPageAPI extends BaseAPI<
3553
3606
  }
3554
3607
 
3555
3608
  if (email) {
3556
- logger.debug(`Setting subscriber email: ${email}`);
3609
+ logger.debug(
3610
+ `Setting subscriber email: ${email}`,
3611
+ getLogAttributesFromRequest(req as any),
3612
+ );
3557
3613
  statusPageSubscriber.subscriberEmail = email;
3558
3614
  }
3559
3615
 
3560
3616
  if (phone) {
3561
- logger.debug(`Setting subscriber phone: ${phone}`);
3617
+ logger.debug(
3618
+ `Setting subscriber phone: ${phone}`,
3619
+ getLogAttributesFromRequest(req as any),
3620
+ );
3562
3621
  statusPageSubscriber.subscriberPhone = phone;
3563
3622
  }
3564
3623
 
3565
3624
  if (slackIncomingWebhookUrl) {
3566
- logger.debug(`Setting subscriber slack: ${slackIncomingWebhookUrl}`);
3625
+ logger.debug(
3626
+ `Setting subscriber slack: ${slackIncomingWebhookUrl}`,
3627
+ getLogAttributesFromRequest(req as any),
3628
+ );
3567
3629
  statusPageSubscriber.slackIncomingWebhookUrl = URL.fromString(
3568
3630
  slackIncomingWebhookUrl,
3569
3631
  );
@@ -3572,6 +3634,7 @@ export default class StatusPageAPI extends BaseAPI<
3572
3634
  if (slackWorkspaceName) {
3573
3635
  logger.debug(
3574
3636
  `Setting subscriber slack workspace name: ${slackWorkspaceName}`,
3637
+ getLogAttributesFromRequest(req as any),
3575
3638
  );
3576
3639
  statusPageSubscriber.slackWorkspaceName = slackWorkspaceName;
3577
3640
  }
@@ -3579,6 +3642,7 @@ export default class StatusPageAPI extends BaseAPI<
3579
3642
  if (microsoftTeamsIncomingWebhookUrl) {
3580
3643
  logger.debug(
3581
3644
  `Setting subscriber Microsoft Teams webhook: ${microsoftTeamsIncomingWebhookUrl}`,
3645
+ getLogAttributesFromRequest(req as any),
3582
3646
  );
3583
3647
  statusPageSubscriber.microsoftTeamsIncomingWebhookUrl = URL.fromString(
3584
3648
  microsoftTeamsIncomingWebhookUrl,
@@ -3588,6 +3652,7 @@ export default class StatusPageAPI extends BaseAPI<
3588
3652
  if (microsoftTeamsWorkspaceName) {
3589
3653
  logger.debug(
3590
3654
  `Setting subscriber Microsoft Teams workspace name: ${microsoftTeamsWorkspaceName}`,
3655
+ getLogAttributesFromRequest(req as any),
3591
3656
  );
3592
3657
  statusPageSubscriber.microsoftTeamsWorkspaceName =
3593
3658
  microsoftTeamsWorkspaceName;
@@ -3599,6 +3664,7 @@ export default class StatusPageAPI extends BaseAPI<
3599
3664
  ) {
3600
3665
  logger.debug(
3601
3666
  `Subscribers not allowed to choose resources for status page with ID: ${objectId}`,
3667
+ getLogAttributesFromRequest(req as any),
3602
3668
  );
3603
3669
  throw new BadDataException(
3604
3670
  "Subscribers are not allowed to choose resources for this status page.",
@@ -3611,6 +3677,7 @@ export default class StatusPageAPI extends BaseAPI<
3611
3677
  ) {
3612
3678
  logger.debug(
3613
3679
  `Subscribers not allowed to choose event types for status page with ID: ${objectId}`,
3680
+ getLogAttributesFromRequest(req as any),
3614
3681
  );
3615
3682
  throw new BadDataException(
3616
3683
  "Subscribers are not allowed to choose event types for this status page.",
@@ -3634,6 +3701,7 @@ export default class StatusPageAPI extends BaseAPI<
3634
3701
  ) {
3635
3702
  logger.debug(
3636
3703
  `Setting subscriber resources: ${JSON.stringify(req.body.data["statusPageResources"])}`,
3704
+ getLogAttributesFromRequest(req as any),
3637
3705
  );
3638
3706
  statusPageSubscriber.statusPageResources = req.body.data[
3639
3707
  "statusPageResources"
@@ -3646,6 +3714,7 @@ export default class StatusPageAPI extends BaseAPI<
3646
3714
  ) {
3647
3715
  logger.debug(
3648
3716
  `Setting subscriber event types: ${JSON.stringify(req.body.data["statusPageEventTypes"])}`,
3717
+ getLogAttributesFromRequest(req as any),
3649
3718
  );
3650
3719
  statusPageSubscriber.statusPageEventTypes = req.body.data[
3651
3720
  "statusPageEventTypes"
@@ -3654,7 +3723,10 @@ export default class StatusPageAPI extends BaseAPI<
3654
3723
 
3655
3724
  if (isUpdate) {
3656
3725
  // check isUnsubscribed is set to false.
3657
- logger.debug(`Updating subscriber with ID: ${statusPageSubscriber.id}`);
3726
+ logger.debug(
3727
+ `Updating subscriber with ID: ${statusPageSubscriber.id}`,
3728
+ getLogAttributesFromRequest(req as any),
3729
+ );
3658
3730
  statusPageSubscriber.isUnsubscribed = Boolean(
3659
3731
  req.body.data["isUnsubscribed"],
3660
3732
  );
@@ -3674,6 +3746,7 @@ export default class StatusPageAPI extends BaseAPI<
3674
3746
  } else {
3675
3747
  logger.debug(
3676
3748
  `Creating new subscriber: ${JSON.stringify(statusPageSubscriber)}`,
3749
+ getLogAttributesFromRequest(req as any),
3677
3750
  );
3678
3751
  await StatusPageSubscriberService.create({
3679
3752
  data: statusPageSubscriber,
@@ -3685,6 +3758,7 @@ export default class StatusPageAPI extends BaseAPI<
3685
3758
 
3686
3759
  logger.debug(
3687
3760
  `Subscription process completed for status page with ID: ${objectId}`,
3761
+ getLogAttributesFromRequest(req as any),
3688
3762
  );
3689
3763
  }
3690
3764
 
@@ -8,7 +8,7 @@ import {
8
8
  ExpressResponse,
9
9
  NextFunction,
10
10
  } from "../Utils/Express";
11
- import logger from "../Utils/Logger";
11
+ import logger, { getLogAttributesFromRequest } from "../Utils/Logger";
12
12
  import Response from "../Utils/Response";
13
13
  import BaseAPI from "./BaseAPI";
14
14
  import CommonAPI from "./CommonAPI";
@@ -223,12 +223,15 @@ export default class StatusPageDomainAPI extends BaseAPI<
223
223
  );
224
224
  }
225
225
 
226
- logger.debug("Ordering SSL");
226
+ logger.debug("Ordering SSL", getLogAttributesFromRequest(req as any));
227
227
 
228
228
  // provision SSL
229
229
  await StatusPageDomainService.orderCert(domain);
230
230
 
231
- logger.debug("SSL Provisioned for domain - " + domain.fullDomain);
231
+ logger.debug(
232
+ "SSL Provisioned for domain - " + domain.fullDomain,
233
+ getLogAttributesFromRequest(req as any),
234
+ );
232
235
 
233
236
  return Response.sendEmptySuccessResponse(req, res);
234
237
  } catch (e) {
@@ -5,7 +5,7 @@ import UserService, {
5
5
  Service as UserServiceType,
6
6
  } from "../Services/UserService";
7
7
  import { ExpressRequest, ExpressResponse } from "../Utils/Express";
8
- import logger from "../Utils/Logger";
8
+ import logger, { getLogAttributesFromRequest } from "../Utils/Logger";
9
9
  import Response from "../Utils/Response";
10
10
  import BaseAPI from "./BaseAPI";
11
11
 
@@ -71,7 +71,7 @@ export default class UserAPI extends BaseAPI<User, UserServiceType> {
71
71
 
72
72
  return this.sendBlankProfile(req, res);
73
73
  } catch (error) {
74
- logger.error(error);
74
+ logger.error(error, getLogAttributesFromRequest(req as any));
75
75
  return this.sendBlankProfile(req, res);
76
76
  }
77
77
  },
@@ -84,7 +84,7 @@ export default class UserAPI extends BaseAPI<User, UserServiceType> {
84
84
  try {
85
85
  Response.sendFileByPath(req, res, BLANK_PROFILE_PICTURE_PATH);
86
86
  } catch (error) {
87
- logger.error(error);
87
+ logger.error(error, getLogAttributesFromRequest(req as any));
88
88
  Response.sendErrorResponse(
89
89
  req,
90
90
  res,
@@ -10,7 +10,7 @@ import {
10
10
  OneUptimeRequest,
11
11
  } from "../Utils/Express";
12
12
  import Response from "../Utils/Response";
13
- import logger from "../Utils/Logger";
13
+ import logger, { getLogAttributesFromRequest } from "../Utils/Logger";
14
14
  import BaseAPI from "./BaseAPI";
15
15
  import BadDataException from "../../Types/Exception/BadDataException";
16
16
  import ObjectID from "../../Types/ObjectID";
@@ -111,7 +111,10 @@ export default class UserCallAPI extends BaseAPI<
111
111
  },
112
112
  );
113
113
  } catch (e) {
114
- logger.error(e);
114
+ logger.error(
115
+ e,
116
+ getLogAttributesFromRequest(req as OneUptimeRequest),
117
+ );
115
118
  }
116
119
 
117
120
  return Response.sendEmptySuccessResponse(req, res);
@@ -10,7 +10,7 @@ import {
10
10
  OneUptimeRequest,
11
11
  } from "../Utils/Express";
12
12
  import Response from "../Utils/Response";
13
- import logger from "../Utils/Logger";
13
+ import logger, { getLogAttributesFromRequest } from "../Utils/Logger";
14
14
  import BaseAPI from "./BaseAPI";
15
15
  import BadDataException from "../../Types/Exception/BadDataException";
16
16
  import ObjectID from "../../Types/ObjectID";
@@ -110,7 +110,10 @@ export default class UserEmailAPI extends BaseAPI<
110
110
  },
111
111
  );
112
112
  } catch (e) {
113
- logger.error(e);
113
+ logger.error(
114
+ e,
115
+ getLogAttributesFromRequest(req as OneUptimeRequest),
116
+ );
114
117
  }
115
118
 
116
119
  return Response.sendEmptySuccessResponse(req, res);
@@ -5,7 +5,7 @@ import UserPushService, {
5
5
  import UserNotificationRuleService from "../Services/UserNotificationRuleService";
6
6
  import PushNotificationService from "../Services/PushNotificationService";
7
7
  import PushNotificationUtil from "../Utils/PushNotificationUtil";
8
- import logger from "../Utils/Logger";
8
+ import logger, { getLogAttributesFromRequest } from "../Utils/Logger";
9
9
  import {
10
10
  ExpressRequest,
11
11
  ExpressResponse,
@@ -131,7 +131,10 @@ export default class UserPushAPI extends BaseAPI<
131
131
  },
132
132
  );
133
133
  } catch (e) {
134
- logger.error(e);
134
+ logger.error(
135
+ e,
136
+ getLogAttributesFromRequest(req as OneUptimeRequest),
137
+ );
135
138
  }
136
139
 
137
140
  return Response.sendJsonObjectResponse(req, res, {
@@ -346,7 +349,10 @@ export default class UserPushAPI extends BaseAPI<
346
349
  },
347
350
  );
348
351
  } catch (e) {
349
- logger.error(e);
352
+ logger.error(
353
+ e,
354
+ getLogAttributesFromRequest(req as OneUptimeRequest),
355
+ );
350
356
  }
351
357
 
352
358
  return Response.sendEmptySuccessResponse(req, res);
@@ -10,7 +10,7 @@ import {
10
10
  OneUptimeRequest,
11
11
  } from "../Utils/Express";
12
12
  import Response from "../Utils/Response";
13
- import logger from "../Utils/Logger";
13
+ import logger, { getLogAttributesFromRequest } from "../Utils/Logger";
14
14
  import BaseAPI from "./BaseAPI";
15
15
  import BadDataException from "../../Types/Exception/BadDataException";
16
16
  import ObjectID from "../../Types/ObjectID";
@@ -107,7 +107,10 @@ export default class UserSMSAPI extends BaseAPI<UserSMS, UserSMSServiceType> {
107
107
  },
108
108
  );
109
109
  } catch (e) {
110
- logger.error(e);
110
+ logger.error(
111
+ e,
112
+ getLogAttributesFromRequest(req as OneUptimeRequest),
113
+ );
111
114
  }
112
115
 
113
116
  return Response.sendEmptySuccessResponse(req, res);
@@ -10,7 +10,7 @@ import {
10
10
  OneUptimeRequest,
11
11
  } from "../Utils/Express";
12
12
  import Response from "../Utils/Response";
13
- import logger from "../Utils/Logger";
13
+ import logger, { getLogAttributesFromRequest } from "../Utils/Logger";
14
14
  import BaseAPI from "./BaseAPI";
15
15
  import BadDataException from "../../Types/Exception/BadDataException";
16
16
  import ObjectID from "../../Types/ObjectID";
@@ -116,7 +116,10 @@ export default class UserWhatsAppAPI extends BaseAPI<
116
116
  },
117
117
  );
118
118
  } catch (e) {
119
- logger.error(e);
119
+ logger.error(
120
+ e,
121
+ getLogAttributesFromRequest(req as OneUptimeRequest),
122
+ );
120
123
  }
121
124
 
122
125
  return Response.sendEmptySuccessResponse(req, res);
@@ -0,0 +1,47 @@
1
+ import { MigrationInterface, QueryRunner } from "typeorm";
2
+
3
+ export class MigrationName1774559064921 implements MigrationInterface {
4
+ public name = "MigrationName1774559064921";
5
+
6
+ public async up(queryRunner: QueryRunner): Promise<void> {
7
+ /*
8
+ * First, deduplicate existing services by keeping the oldest one (smallest _id / earliest createdAt).
9
+ * Reassign any foreign key references from duplicate services to the kept service,
10
+ * then delete the duplicates.
11
+ */
12
+
13
+ /*
14
+ * Find and delete duplicate services, keeping the one with the earliest createdAt.
15
+ * For each (projectId, name) group with duplicates, keep the min(_id) row.
16
+ */
17
+ await queryRunner.query(`
18
+ DELETE FROM "Service"
19
+ WHERE "_id" IN (
20
+ SELECT s."_id"
21
+ FROM "Service" s
22
+ INNER JOIN (
23
+ SELECT "projectId", LOWER("name") as lower_name, MIN("createdAt") as min_created
24
+ FROM "Service"
25
+ WHERE "deletedAt" IS NULL
26
+ GROUP BY "projectId", LOWER("name")
27
+ HAVING COUNT(*) > 1
28
+ ) dups
29
+ ON s."projectId" = dups."projectId"
30
+ AND LOWER(s."name") = dups.lower_name
31
+ AND s."createdAt" > dups.min_created
32
+ AND s."deletedAt" IS NULL
33
+ )
34
+ `);
35
+
36
+ // Now add a unique index on (projectId, name) for non-deleted rows.
37
+ await queryRunner.query(
38
+ `CREATE UNIQUE INDEX "IDX_SERVICE_PROJECT_NAME_UNIQUE" ON "Service" ("projectId", LOWER("name")) WHERE "deletedAt" IS NULL`,
39
+ );
40
+ }
41
+
42
+ public async down(queryRunner: QueryRunner): Promise<void> {
43
+ await queryRunner.query(
44
+ `DROP INDEX IF EXISTS "IDX_SERVICE_PROJECT_NAME_UNIQUE"`,
45
+ );
46
+ }
47
+ }