@oneuptime/common 10.0.65 → 10.0.67

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 (276) hide show
  1. package/Models/DatabaseModels/DockerHostOwnerTeam.ts +464 -0
  2. package/Models/DatabaseModels/DockerHostOwnerUser.ts +463 -0
  3. package/Models/DatabaseModels/GlobalConfig.ts +56 -0
  4. package/Models/DatabaseModels/Index.ts +28 -0
  5. package/Models/DatabaseModels/KubernetesClusterOwnerTeam.ts +464 -0
  6. package/Models/DatabaseModels/KubernetesClusterOwnerUser.ts +463 -0
  7. package/Models/DatabaseModels/KubernetesResource.ts +548 -0
  8. package/Models/DatabaseModels/MetricPipelineRule.ts +804 -0
  9. package/Models/DatabaseModels/MetricRecordingRule.ts +470 -0
  10. package/Models/DatabaseModels/Monitor.ts +2 -0
  11. package/Models/DatabaseModels/Project.ts +83 -0
  12. package/Models/DatabaseModels/Service.ts +79 -0
  13. package/Models/DatabaseModels/TelegramLog.ts +1025 -0
  14. package/Models/DatabaseModels/TraceDropFilter.ts +508 -0
  15. package/Models/DatabaseModels/TracePipeline.ts +436 -0
  16. package/Models/DatabaseModels/TracePipelineProcessor.ts +454 -0
  17. package/Models/DatabaseModels/TraceRecordingRule.ts +470 -0
  18. package/Models/DatabaseModels/TraceScrubRule.ts +546 -0
  19. package/Models/DatabaseModels/UserNotificationRule.ts +49 -0
  20. package/Models/DatabaseModels/UserNotificationSetting.ts +17 -0
  21. package/Models/DatabaseModels/UserOnCallLogTimeline.ts +48 -0
  22. package/Models/DatabaseModels/UserTelegram.ts +312 -0
  23. package/Server/API/KubernetesResourceAPI.ts +129 -0
  24. package/Server/API/UserTelegramAPI.ts +167 -0
  25. package/Server/Infrastructure/Postgres/SchemaMigrations/1776504277320-MigrationName.ts +399 -0
  26. package/Server/Infrastructure/Postgres/SchemaMigrations/1776505976155-AddTracePipelineTables.ts +205 -0
  27. package/Server/Infrastructure/Postgres/SchemaMigrations/1776509413763-MigrationName.ts +335 -0
  28. package/Server/Infrastructure/Postgres/SchemaMigrations/1776541018853-MigrationName.ts +29 -0
  29. package/Server/Infrastructure/Postgres/SchemaMigrations/1776544084793-MigrationName.ts +53 -0
  30. package/Server/Infrastructure/Postgres/SchemaMigrations/1776761171349-MigrationName.ts +325 -0
  31. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +12 -1
  32. package/Server/Services/DockerHostOwnerTeamService.ts +10 -0
  33. package/Server/Services/DockerHostOwnerUserService.ts +10 -0
  34. package/Server/Services/Index.ts +6 -0
  35. package/Server/Services/KubernetesClusterOwnerTeamService.ts +10 -0
  36. package/Server/Services/KubernetesClusterOwnerUserService.ts +10 -0
  37. package/Server/Services/KubernetesResourceService.ts +351 -0
  38. package/Server/Services/MetricPipelineRuleService.ts +10 -0
  39. package/Server/Services/MetricRecordingRuleService.ts +10 -0
  40. package/Server/Services/TelegramLogService.ts +15 -0
  41. package/Server/Services/TelegramService.ts +139 -0
  42. package/Server/Services/TraceDropFilterService.ts +10 -0
  43. package/Server/Services/TracePipelineProcessorService.ts +10 -0
  44. package/Server/Services/TracePipelineService.ts +10 -0
  45. package/Server/Services/TraceRecordingRuleService.ts +10 -0
  46. package/Server/Services/TraceScrubRuleService.ts +10 -0
  47. package/Server/Services/UserNotificationRuleService.ts +350 -1
  48. package/Server/Services/UserNotificationSettingService.ts +114 -0
  49. package/Server/Services/UserTelegramService.ts +140 -0
  50. package/Server/Utils/Monitor/Criteria/CompareCriteria.ts +71 -9
  51. package/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.ts +483 -75
  52. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +379 -6
  53. package/Server/Utils/Monitor/MonitorResource.ts +29 -15
  54. package/Server/Utils/Monitor/MonitorTemplateUtil.ts +29 -16
  55. package/Tests/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.test.ts +502 -0
  56. package/Tests/Types/Date.test.ts +158 -0
  57. package/Tests/Utils/MetricUnitUtil.test.ts +216 -0
  58. package/Tests/Utils/Metrics/MetricFormulaEvaluator.test.ts +269 -0
  59. package/Tests/Utils/Metrics/MetricResultUnitConverter.test.ts +231 -0
  60. package/Tests/Utils/RecordingRuleExpression.test.ts +177 -0
  61. package/Types/Date.ts +12 -3
  62. package/Types/Icon/IconProp.ts +1 -0
  63. package/Types/Kubernetes/KubernetesInventoryExtractor.ts +327 -0
  64. package/Types/Kubernetes/KubernetesObjectParser.ts +1949 -0
  65. package/Types/Metrics/MetricDownsamplingRetentionDays.ts +49 -0
  66. package/Types/Metrics/MetricFormulaConfigData.ts +4 -0
  67. package/Types/Metrics/MetricPipelineRuleFilterCondition.ts +136 -0
  68. package/Types/Metrics/MetricPipelineRuleType.ts +27 -0
  69. package/Types/Metrics/RecordingRuleDefinition.ts +180 -0
  70. package/Types/Monitor/CriteriaFilter.ts +43 -0
  71. package/Types/Monitor/MetricMonitor/MetricCriteriaContext.ts +70 -0
  72. package/Types/Permission.ts +531 -0
  73. package/Types/Telegram/TelegramMessage.ts +9 -0
  74. package/Types/TelegramStatus.ts +14 -0
  75. package/Types/Trace/TraceAggregationType.ts +17 -0
  76. package/Types/Trace/TraceDropFilterAction.ts +6 -0
  77. package/Types/Trace/TracePipelineProcessorType.ts +56 -0
  78. package/Types/Trace/TraceRecordingRuleDefinition.ts +218 -0
  79. package/Types/Trace/TraceScrubAction.ts +7 -0
  80. package/Types/Trace/TraceScrubField.ts +8 -0
  81. package/Types/Trace/TraceScrubPatternType.ts +10 -0
  82. package/UI/Components/CardSelect/CardSelect.tsx +9 -1
  83. package/UI/Components/Charts/ChartGroup/ChartGroup.tsx +6 -10
  84. package/UI/Components/Forms/Fields/FormField.tsx +1 -0
  85. package/UI/Components/Forms/Types/Field.ts +1 -0
  86. package/UI/Components/Icon/Icon.tsx +15 -0
  87. package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +57 -0
  88. package/UI/Components/Page/Page.tsx +6 -0
  89. package/Utils/MetricUnitUtil.ts +289 -0
  90. package/Utils/Metrics/MetricFormulaEvaluator.ts +610 -0
  91. package/Utils/Metrics/MetricResultUnitConverter.ts +91 -0
  92. package/Utils/Metrics/RecordingRuleExpression.ts +359 -0
  93. package/Utils/ValueFormatter.ts +137 -13
  94. package/build/dist/Models/DatabaseModels/DockerHostOwnerTeam.js +480 -0
  95. package/build/dist/Models/DatabaseModels/DockerHostOwnerTeam.js.map +1 -0
  96. package/build/dist/Models/DatabaseModels/DockerHostOwnerUser.js +479 -0
  97. package/build/dist/Models/DatabaseModels/DockerHostOwnerUser.js.map +1 -0
  98. package/build/dist/Models/DatabaseModels/GlobalConfig.js +59 -0
  99. package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
  100. package/build/dist/Models/DatabaseModels/Index.js +28 -0
  101. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  102. package/build/dist/Models/DatabaseModels/KubernetesClusterOwnerTeam.js +480 -0
  103. package/build/dist/Models/DatabaseModels/KubernetesClusterOwnerTeam.js.map +1 -0
  104. package/build/dist/Models/DatabaseModels/KubernetesClusterOwnerUser.js +479 -0
  105. package/build/dist/Models/DatabaseModels/KubernetesClusterOwnerUser.js.map +1 -0
  106. package/build/dist/Models/DatabaseModels/KubernetesResource.js +590 -0
  107. package/build/dist/Models/DatabaseModels/KubernetesResource.js.map +1 -0
  108. package/build/dist/Models/DatabaseModels/MetricPipelineRule.js +836 -0
  109. package/build/dist/Models/DatabaseModels/MetricPipelineRule.js.map +1 -0
  110. package/build/dist/Models/DatabaseModels/MetricRecordingRule.js +497 -0
  111. package/build/dist/Models/DatabaseModels/MetricRecordingRule.js.map +1 -0
  112. package/build/dist/Models/DatabaseModels/Monitor.js +2 -0
  113. package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
  114. package/build/dist/Models/DatabaseModels/Project.js +85 -0
  115. package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
  116. package/build/dist/Models/DatabaseModels/Service.js +79 -0
  117. package/build/dist/Models/DatabaseModels/Service.js.map +1 -1
  118. package/build/dist/Models/DatabaseModels/TelegramLog.js +1056 -0
  119. package/build/dist/Models/DatabaseModels/TelegramLog.js.map +1 -0
  120. package/build/dist/Models/DatabaseModels/TraceDropFilter.js +536 -0
  121. package/build/dist/Models/DatabaseModels/TraceDropFilter.js.map +1 -0
  122. package/build/dist/Models/DatabaseModels/TracePipeline.js +462 -0
  123. package/build/dist/Models/DatabaseModels/TracePipeline.js.map +1 -0
  124. package/build/dist/Models/DatabaseModels/TracePipelineProcessor.js +476 -0
  125. package/build/dist/Models/DatabaseModels/TracePipelineProcessor.js.map +1 -0
  126. package/build/dist/Models/DatabaseModels/TraceRecordingRule.js +497 -0
  127. package/build/dist/Models/DatabaseModels/TraceRecordingRule.js.map +1 -0
  128. package/build/dist/Models/DatabaseModels/TraceScrubRule.js +575 -0
  129. package/build/dist/Models/DatabaseModels/TraceScrubRule.js.map +1 -0
  130. package/build/dist/Models/DatabaseModels/UserNotificationRule.js +49 -0
  131. package/build/dist/Models/DatabaseModels/UserNotificationRule.js.map +1 -1
  132. package/build/dist/Models/DatabaseModels/UserNotificationSetting.js +19 -0
  133. package/build/dist/Models/DatabaseModels/UserNotificationSetting.js.map +1 -1
  134. package/build/dist/Models/DatabaseModels/UserOnCallLogTimeline.js +48 -0
  135. package/build/dist/Models/DatabaseModels/UserOnCallLogTimeline.js.map +1 -1
  136. package/build/dist/Models/DatabaseModels/UserTelegram.js +331 -0
  137. package/build/dist/Models/DatabaseModels/UserTelegram.js.map +1 -0
  138. package/build/dist/Server/API/KubernetesResourceAPI.js +98 -0
  139. package/build/dist/Server/API/KubernetesResourceAPI.js.map +1 -0
  140. package/build/dist/Server/API/UserTelegramAPI.js +99 -0
  141. package/build/dist/Server/API/UserTelegramAPI.js.map +1 -0
  142. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1776504277320-MigrationName.js +144 -0
  143. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1776504277320-MigrationName.js.map +1 -0
  144. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1776505976155-AddTracePipelineTables.js +82 -0
  145. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1776505976155-AddTracePipelineTables.js.map +1 -0
  146. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1776509413763-MigrationName.js +118 -0
  147. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1776509413763-MigrationName.js.map +1 -0
  148. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1776541018853-MigrationName.js +16 -0
  149. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1776541018853-MigrationName.js.map +1 -0
  150. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1776544084793-MigrationName.js +24 -0
  151. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1776544084793-MigrationName.js.map +1 -0
  152. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1776761171349-MigrationName.js +116 -0
  153. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1776761171349-MigrationName.js.map +1 -0
  154. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +12 -0
  155. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  156. package/build/dist/Server/Services/DockerHostOwnerTeamService.js +9 -0
  157. package/build/dist/Server/Services/DockerHostOwnerTeamService.js.map +1 -0
  158. package/build/dist/Server/Services/DockerHostOwnerUserService.js +9 -0
  159. package/build/dist/Server/Services/DockerHostOwnerUserService.js.map +1 -0
  160. package/build/dist/Server/Services/Index.js +6 -0
  161. package/build/dist/Server/Services/Index.js.map +1 -1
  162. package/build/dist/Server/Services/KubernetesClusterOwnerTeamService.js +9 -0
  163. package/build/dist/Server/Services/KubernetesClusterOwnerTeamService.js.map +1 -0
  164. package/build/dist/Server/Services/KubernetesClusterOwnerUserService.js +9 -0
  165. package/build/dist/Server/Services/KubernetesClusterOwnerUserService.js.map +1 -0
  166. package/build/dist/Server/Services/KubernetesResourceService.js +237 -0
  167. package/build/dist/Server/Services/KubernetesResourceService.js.map +1 -0
  168. package/build/dist/Server/Services/MetricPipelineRuleService.js +9 -0
  169. package/build/dist/Server/Services/MetricPipelineRuleService.js.map +1 -0
  170. package/build/dist/Server/Services/MetricRecordingRuleService.js +9 -0
  171. package/build/dist/Server/Services/MetricRecordingRuleService.js.map +1 -0
  172. package/build/dist/Server/Services/TelegramLogService.js +13 -0
  173. package/build/dist/Server/Services/TelegramLogService.js.map +1 -0
  174. package/build/dist/Server/Services/TelegramService.js +100 -0
  175. package/build/dist/Server/Services/TelegramService.js.map +1 -0
  176. package/build/dist/Server/Services/TraceDropFilterService.js +9 -0
  177. package/build/dist/Server/Services/TraceDropFilterService.js.map +1 -0
  178. package/build/dist/Server/Services/TracePipelineProcessorService.js +9 -0
  179. package/build/dist/Server/Services/TracePipelineProcessorService.js.map +1 -0
  180. package/build/dist/Server/Services/TracePipelineService.js +9 -0
  181. package/build/dist/Server/Services/TracePipelineService.js.map +1 -0
  182. package/build/dist/Server/Services/TraceRecordingRuleService.js +9 -0
  183. package/build/dist/Server/Services/TraceRecordingRuleService.js.map +1 -0
  184. package/build/dist/Server/Services/TraceScrubRuleService.js +9 -0
  185. package/build/dist/Server/Services/TraceScrubRuleService.js.map +1 -0
  186. package/build/dist/Server/Services/UserNotificationRuleService.js +272 -21
  187. package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
  188. package/build/dist/Server/Services/UserNotificationSettingService.js +94 -0
  189. package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
  190. package/build/dist/Server/Services/UserTelegramService.js +133 -0
  191. package/build/dist/Server/Services/UserTelegramService.js.map +1 -0
  192. package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js +56 -9
  193. package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js.map +1 -1
  194. package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.js +335 -53
  195. package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.js.map +1 -1
  196. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +277 -5
  197. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  198. package/build/dist/Server/Utils/Monitor/MonitorResource.js +25 -12
  199. package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
  200. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +24 -12
  201. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
  202. package/build/dist/Tests/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.test.js +407 -0
  203. package/build/dist/Tests/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.test.js.map +1 -0
  204. package/build/dist/Tests/Types/Date.test.js +96 -0
  205. package/build/dist/Tests/Types/Date.test.js.map +1 -1
  206. package/build/dist/Tests/Utils/MetricUnitUtil.test.js +159 -0
  207. package/build/dist/Tests/Utils/MetricUnitUtil.test.js.map +1 -0
  208. package/build/dist/Tests/Utils/Metrics/MetricFormulaEvaluator.test.js +224 -0
  209. package/build/dist/Tests/Utils/Metrics/MetricFormulaEvaluator.test.js.map +1 -0
  210. package/build/dist/Tests/Utils/Metrics/MetricResultUnitConverter.test.js +180 -0
  211. package/build/dist/Tests/Utils/Metrics/MetricResultUnitConverter.test.js.map +1 -0
  212. package/build/dist/Tests/Utils/RecordingRuleExpression.test.js +142 -0
  213. package/build/dist/Tests/Utils/RecordingRuleExpression.test.js.map +1 -0
  214. package/build/dist/Types/Date.js +9 -3
  215. package/build/dist/Types/Date.js.map +1 -1
  216. package/build/dist/Types/Icon/IconProp.js +1 -0
  217. package/build/dist/Types/Icon/IconProp.js.map +1 -1
  218. package/build/dist/Types/Kubernetes/KubernetesInventoryExtractor.js +200 -0
  219. package/build/dist/Types/Kubernetes/KubernetesInventoryExtractor.js.map +1 -0
  220. package/build/dist/Types/Kubernetes/KubernetesObjectParser.js +1205 -0
  221. package/build/dist/Types/Kubernetes/KubernetesObjectParser.js.map +1 -0
  222. package/build/dist/Types/Metrics/MetricDownsamplingRetentionDays.js +32 -0
  223. package/build/dist/Types/Metrics/MetricDownsamplingRetentionDays.js.map +1 -0
  224. package/build/dist/Types/Metrics/MetricPipelineRuleFilterCondition.js +103 -0
  225. package/build/dist/Types/Metrics/MetricPipelineRuleFilterCondition.js.map +1 -0
  226. package/build/dist/Types/Metrics/MetricPipelineRuleType.js +27 -0
  227. package/build/dist/Types/Metrics/MetricPipelineRuleType.js.map +1 -0
  228. package/build/dist/Types/Metrics/RecordingRuleDefinition.js +110 -0
  229. package/build/dist/Types/Metrics/RecordingRuleDefinition.js.map +1 -0
  230. package/build/dist/Types/Monitor/CriteriaFilter.js +22 -0
  231. package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
  232. package/build/dist/Types/Monitor/MetricMonitor/MetricCriteriaContext.js +2 -0
  233. package/build/dist/Types/Monitor/MetricMonitor/MetricCriteriaContext.js.map +1 -0
  234. package/build/dist/Types/Permission.js +464 -0
  235. package/build/dist/Types/Permission.js.map +1 -1
  236. package/build/dist/Types/Telegram/TelegramMessage.js +2 -0
  237. package/build/dist/Types/Telegram/TelegramMessage.js.map +1 -0
  238. package/build/dist/Types/TelegramStatus.js +15 -0
  239. package/build/dist/Types/TelegramStatus.js.map +1 -0
  240. package/build/dist/Types/Trace/TraceAggregationType.js +18 -0
  241. package/build/dist/Types/Trace/TraceAggregationType.js.map +1 -0
  242. package/build/dist/Types/Trace/TraceDropFilterAction.js +7 -0
  243. package/build/dist/Types/Trace/TraceDropFilterAction.js.map +1 -0
  244. package/build/dist/Types/Trace/TracePipelineProcessorType.js +10 -0
  245. package/build/dist/Types/Trace/TracePipelineProcessorType.js.map +1 -0
  246. package/build/dist/Types/Trace/TraceRecordingRuleDefinition.js +145 -0
  247. package/build/dist/Types/Trace/TraceRecordingRuleDefinition.js.map +1 -0
  248. package/build/dist/Types/Trace/TraceScrubAction.js +8 -0
  249. package/build/dist/Types/Trace/TraceScrubAction.js.map +1 -0
  250. package/build/dist/Types/Trace/TraceScrubField.js +9 -0
  251. package/build/dist/Types/Trace/TraceScrubField.js.map +1 -0
  252. package/build/dist/Types/Trace/TraceScrubPatternType.js +11 -0
  253. package/build/dist/Types/Trace/TraceScrubPatternType.js.map +1 -0
  254. package/build/dist/UI/Components/CardSelect/CardSelect.js +3 -1
  255. package/build/dist/UI/Components/CardSelect/CardSelect.js.map +1 -1
  256. package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js +6 -9
  257. package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js.map +1 -1
  258. package/build/dist/UI/Components/Forms/Fields/FormField.js +1 -1
  259. package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
  260. package/build/dist/UI/Components/Icon/Icon.js +5 -0
  261. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  262. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +30 -0
  263. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
  264. package/build/dist/UI/Components/Page/Page.js +1 -0
  265. package/build/dist/UI/Components/Page/Page.js.map +1 -1
  266. package/build/dist/Utils/MetricUnitUtil.js +232 -0
  267. package/build/dist/Utils/MetricUnitUtil.js.map +1 -0
  268. package/build/dist/Utils/Metrics/MetricFormulaEvaluator.js +453 -0
  269. package/build/dist/Utils/Metrics/MetricFormulaEvaluator.js.map +1 -0
  270. package/build/dist/Utils/Metrics/MetricResultUnitConverter.js +61 -0
  271. package/build/dist/Utils/Metrics/MetricResultUnitConverter.js.map +1 -0
  272. package/build/dist/Utils/Metrics/RecordingRuleExpression.js +298 -0
  273. package/build/dist/Utils/Metrics/RecordingRuleExpression.js.map +1 -0
  274. package/build/dist/Utils/ValueFormatter.js +123 -13
  275. package/build/dist/Utils/ValueFormatter.js.map +1 -1
  276. package/package.json +2 -2
@@ -9,6 +9,7 @@ import IncidentSeverityService from "./IncidentSeverityService";
9
9
  import MailService from "./MailService";
10
10
  import ShortLinkService from "./ShortLinkService";
11
11
  import SmsService from "./SmsService";
12
+ import TelegramService from "./TelegramService";
12
13
  import WhatsAppService from "./WhatsAppService";
13
14
  import UserEmailService from "./UserEmailService";
14
15
  import UserOnCallLogService from "./UserOnCallLogService";
@@ -32,6 +33,7 @@ import ObjectID from "../../Types/ObjectID";
32
33
  import PushDeviceType from "../../Types/PushNotification/PushDeviceType";
33
34
  import Phone from "../../Types/Phone";
34
35
  import SMS from "../../Types/SMS/SMS";
36
+ import TelegramMessage from "../../Types/Telegram/TelegramMessage";
35
37
  import WhatsAppMessage from "../../Types/WhatsApp/WhatsAppMessage";
36
38
  import {
37
39
  renderWhatsAppTemplate,
@@ -74,6 +76,7 @@ export interface NotificationMethodDescriptor {
74
76
  userSmsId?: ObjectID;
75
77
  userCallId?: ObjectID;
76
78
  userWhatsAppId?: ObjectID;
79
+ userTelegramId?: ObjectID;
77
80
  userPushId?: ObjectID;
78
81
  }
79
82
 
@@ -165,6 +168,11 @@ export class Service extends DatabaseService<Model> {
165
168
  phone: true,
166
169
  isVerified: true,
167
170
  },
171
+ userTelegram: {
172
+ telegramChatId: true,
173
+ telegramUserHandle: true,
174
+ isVerified: true,
175
+ },
168
176
  userEmail: {
169
177
  email: true,
170
178
  isVerified: true,
@@ -896,6 +904,184 @@ export class Service extends DatabaseService<Model> {
896
904
  });
897
905
  }
898
906
 
907
+ // send Telegram.
908
+ if (
909
+ notificationRuleItem.userTelegram?.telegramChatId &&
910
+ notificationRuleItem.userTelegram?.isVerified
911
+ ) {
912
+ if (
913
+ options.userNotificationEventType ===
914
+ UserNotificationEventType.AlertCreated &&
915
+ alert
916
+ ) {
917
+ logTimelineItem.status = UserNotificationStatus.Sending;
918
+ logTimelineItem.statusMessage = `Sending Telegram message.`;
919
+ logTimelineItem.userTelegramId = notificationRuleItem.userTelegram.id!;
920
+
921
+ const updatedLog: UserOnCallLogTimeline =
922
+ await UserOnCallLogTimelineService.create({
923
+ data: logTimelineItem,
924
+ props: {
925
+ isRoot: true,
926
+ },
927
+ });
928
+
929
+ const telegramMessage: TelegramMessage = {
930
+ to: notificationRuleItem.userTelegram.telegramChatId,
931
+ body: await this.generateTelegramBodyForAlertCreated(
932
+ alert,
933
+ updatedLog.id!,
934
+ ),
935
+ parseMode: "HTML",
936
+ disableWebPagePreview: true,
937
+ };
938
+
939
+ TelegramService.sendTelegramMessage(telegramMessage, {
940
+ projectId: alert.projectId,
941
+ alertId: alert.id!,
942
+ userOnCallLogTimelineId: updatedLog.id!,
943
+ userId: notificationRuleItem.userId!,
944
+ onCallPolicyId: options.onCallPolicyId,
945
+ onCallPolicyEscalationRuleId: options.onCallPolicyEscalationRuleId,
946
+ teamId: options.userBelongsToTeamId,
947
+ onCallDutyPolicyExecutionLogTimelineId:
948
+ options.onCallDutyPolicyExecutionLogTimelineId,
949
+ onCallScheduleId: options.onCallScheduleId,
950
+ }).catch(async (err: Error) => {
951
+ await UserOnCallLogTimelineService.updateOneById({
952
+ id: updatedLog.id!,
953
+ data: {
954
+ status: UserNotificationStatus.Error,
955
+ statusMessage: err.message || "Error sending Telegram message.",
956
+ },
957
+ props: {
958
+ isRoot: true,
959
+ },
960
+ });
961
+ });
962
+ }
963
+
964
+ if (
965
+ options.userNotificationEventType ===
966
+ UserNotificationEventType.IncidentCreated &&
967
+ incident
968
+ ) {
969
+ logTimelineItem.status = UserNotificationStatus.Sending;
970
+ logTimelineItem.statusMessage = `Sending Telegram message.`;
971
+ logTimelineItem.userTelegramId = notificationRuleItem.userTelegram.id!;
972
+
973
+ const updatedLog: UserOnCallLogTimeline =
974
+ await UserOnCallLogTimelineService.create({
975
+ data: logTimelineItem,
976
+ props: {
977
+ isRoot: true,
978
+ },
979
+ });
980
+
981
+ const telegramMessage: TelegramMessage = {
982
+ to: notificationRuleItem.userTelegram.telegramChatId,
983
+ body: await this.generateTelegramBodyForIncidentCreated(
984
+ incident,
985
+ updatedLog.id!,
986
+ ),
987
+ parseMode: "HTML",
988
+ disableWebPagePreview: true,
989
+ };
990
+
991
+ TelegramService.sendTelegramMessage(telegramMessage, {
992
+ projectId: incident.projectId,
993
+ incidentId: incident.id!,
994
+ userOnCallLogTimelineId: updatedLog.id!,
995
+ userId: notificationRuleItem.userId!,
996
+ onCallPolicyId: options.onCallPolicyId,
997
+ onCallPolicyEscalationRuleId: options.onCallPolicyEscalationRuleId,
998
+ teamId: options.userBelongsToTeamId,
999
+ onCallDutyPolicyExecutionLogTimelineId:
1000
+ options.onCallDutyPolicyExecutionLogTimelineId,
1001
+ onCallScheduleId: options.onCallScheduleId,
1002
+ }).catch(async (err: Error) => {
1003
+ await UserOnCallLogTimelineService.updateOneById({
1004
+ id: updatedLog.id!,
1005
+ data: {
1006
+ status: UserNotificationStatus.Error,
1007
+ statusMessage: err.message || "Error sending Telegram message.",
1008
+ },
1009
+ props: {
1010
+ isRoot: true,
1011
+ },
1012
+ });
1013
+ });
1014
+ }
1015
+
1016
+ if (
1017
+ options.userNotificationEventType ===
1018
+ UserNotificationEventType.AlertEpisodeCreated &&
1019
+ alertEpisode
1020
+ ) {
1021
+ logTimelineItem.status = UserNotificationStatus.Sending;
1022
+ logTimelineItem.statusMessage = `Sending Telegram message.`;
1023
+ logTimelineItem.userTelegramId = notificationRuleItem.userTelegram.id!;
1024
+
1025
+ const updatedLog: UserOnCallLogTimeline =
1026
+ await UserOnCallLogTimelineService.create({
1027
+ data: logTimelineItem,
1028
+ props: {
1029
+ isRoot: true,
1030
+ },
1031
+ });
1032
+
1033
+ const telegramMessage: TelegramMessage = {
1034
+ to: notificationRuleItem.userTelegram.telegramChatId,
1035
+ body: await this.generateTelegramBodyForAlertEpisodeCreated(
1036
+ alertEpisode,
1037
+ updatedLog.id!,
1038
+ ),
1039
+ parseMode: "HTML",
1040
+ disableWebPagePreview: true,
1041
+ };
1042
+
1043
+ TelegramService.sendTelegramMessage(telegramMessage, {
1044
+ projectId: alertEpisode.projectId,
1045
+ alertEpisodeId: alertEpisode.id!,
1046
+ userOnCallLogTimelineId: updatedLog.id!,
1047
+ userId: notificationRuleItem.userId!,
1048
+ onCallPolicyId: options.onCallPolicyId,
1049
+ onCallPolicyEscalationRuleId: options.onCallPolicyEscalationRuleId,
1050
+ teamId: options.userBelongsToTeamId,
1051
+ onCallDutyPolicyExecutionLogTimelineId:
1052
+ options.onCallDutyPolicyExecutionLogTimelineId,
1053
+ onCallScheduleId: options.onCallScheduleId,
1054
+ }).catch(async (err: Error) => {
1055
+ await UserOnCallLogTimelineService.updateOneById({
1056
+ id: updatedLog.id!,
1057
+ data: {
1058
+ status: UserNotificationStatus.Error,
1059
+ statusMessage: err.message || "Error sending Telegram message.",
1060
+ },
1061
+ props: {
1062
+ isRoot: true,
1063
+ },
1064
+ });
1065
+ });
1066
+ }
1067
+ }
1068
+
1069
+ if (
1070
+ notificationRuleItem.userTelegram &&
1071
+ !notificationRuleItem.userTelegram?.isVerified
1072
+ ) {
1073
+ logTimelineItem.status = UserNotificationStatus.Error;
1074
+ logTimelineItem.statusMessage = `Telegram message not sent because the Telegram account is not verified.`;
1075
+ logTimelineItem.userTelegramId = notificationRuleItem.userTelegram.id!;
1076
+
1077
+ await UserOnCallLogTimelineService.create({
1078
+ data: logTimelineItem,
1079
+ props: {
1080
+ isRoot: true,
1081
+ },
1082
+ });
1083
+ }
1084
+
899
1085
  // send call.
900
1086
  if (
901
1087
  notificationRuleItem.userCall?.phone &&
@@ -1680,6 +1866,161 @@ export class Service extends DatabaseService<Model> {
1680
1866
  return sms;
1681
1867
  }
1682
1868
 
1869
+ private async buildOnCallAcknowledgeShortUrl(
1870
+ userOnCallLogTimelineId: ObjectID,
1871
+ ): Promise<URL> {
1872
+ const host: Hostname = await DatabaseConfig.getHost();
1873
+ const httpProtocol: Protocol = await DatabaseConfig.getHttpProtocol();
1874
+
1875
+ const shortUrl: ShortLink = await ShortLinkService.saveShortLinkFor(
1876
+ new URL(
1877
+ httpProtocol,
1878
+ host,
1879
+ new Route(AppApiRoute.toString())
1880
+ .addRoute(new UserOnCallLogTimeline().crudApiPath!)
1881
+ .addRoute("/acknowledge-page/" + userOnCallLogTimelineId.toString()),
1882
+ ),
1883
+ );
1884
+ return await ShortLinkService.getShortenedUrl(shortUrl);
1885
+ }
1886
+
1887
+ /*
1888
+ * Telegram's HTML parse_mode supports <b>, <i>, <a>, <code>. Only <, >, and &
1889
+ * need escaping inside those tags' text content.
1890
+ */
1891
+ private escapeTelegramHtml(value: string): string {
1892
+ return value
1893
+ .replace(/&/g, "&amp;")
1894
+ .replace(/</g, "&lt;")
1895
+ .replace(/>/g, "&gt;");
1896
+ }
1897
+
1898
+ @CaptureSpan()
1899
+ public async generateTelegramBodyForAlertCreated(
1900
+ alert: Alert,
1901
+ userOnCallLogTimelineId: ObjectID,
1902
+ ): Promise<string> {
1903
+ const ackUrl: URL = await this.buildOnCallAcknowledgeShortUrl(
1904
+ userOnCallLogTimelineId,
1905
+ );
1906
+
1907
+ const alertIdentifier: string =
1908
+ alert.alertNumber !== undefined
1909
+ ? `${alert.alertNumberWithPrefix || "#" + alert.alertNumber} — ${alert.title || "Alert"}`
1910
+ : alert.title || "Alert";
1911
+
1912
+ const lines: Array<string> = [
1913
+ "🚨 <b>New alert assigned to you</b>",
1914
+ "",
1915
+ `📋 <b>${this.escapeTelegramHtml(alertIdentifier)}</b>`,
1916
+ "",
1917
+ "👤 You're getting this because you're on call.",
1918
+ ];
1919
+
1920
+ if (alert.projectId && alert.id) {
1921
+ const dashboardUrl: URL = await AlertService.getAlertLinkInDashboard(
1922
+ alert.projectId,
1923
+ alert.id,
1924
+ );
1925
+ lines.push(
1926
+ "",
1927
+ `🔎 <a href="${this.escapeTelegramHtml(dashboardUrl.toString())}">View alert in OneUptime</a>`,
1928
+ );
1929
+ }
1930
+
1931
+ lines.push(
1932
+ "",
1933
+ `✅ <a href="${this.escapeTelegramHtml(ackUrl.toString())}">Tap to acknowledge</a>`,
1934
+ );
1935
+
1936
+ return lines.join("\n");
1937
+ }
1938
+
1939
+ @CaptureSpan()
1940
+ public async generateTelegramBodyForIncidentCreated(
1941
+ incident: Incident,
1942
+ userOnCallLogTimelineId: ObjectID,
1943
+ ): Promise<string> {
1944
+ const ackUrl: URL = await this.buildOnCallAcknowledgeShortUrl(
1945
+ userOnCallLogTimelineId,
1946
+ );
1947
+
1948
+ const incidentIdentifier: string =
1949
+ incident.incidentNumber !== undefined
1950
+ ? `${incident.incidentNumberWithPrefix || "#" + incident.incidentNumber} — ${incident.title || "Incident"}`
1951
+ : incident.title || "Incident";
1952
+
1953
+ const lines: Array<string> = [
1954
+ "🔥 <b>New incident assigned to you</b>",
1955
+ "",
1956
+ `📋 <b>${this.escapeTelegramHtml(incidentIdentifier)}</b>`,
1957
+ "",
1958
+ "👤 You're getting this because you're on call.",
1959
+ ];
1960
+
1961
+ if (incident.projectId && incident.id) {
1962
+ const dashboardUrl: URL =
1963
+ await IncidentService.getIncidentLinkInDashboard(
1964
+ incident.projectId,
1965
+ incident.id,
1966
+ );
1967
+ lines.push(
1968
+ "",
1969
+ `🔎 <a href="${this.escapeTelegramHtml(dashboardUrl.toString())}">View incident in OneUptime</a>`,
1970
+ );
1971
+ }
1972
+
1973
+ lines.push(
1974
+ "",
1975
+ `✅ <a href="${this.escapeTelegramHtml(ackUrl.toString())}">Tap to acknowledge</a>`,
1976
+ );
1977
+
1978
+ return lines.join("\n");
1979
+ }
1980
+
1981
+ @CaptureSpan()
1982
+ public async generateTelegramBodyForAlertEpisodeCreated(
1983
+ alertEpisode: AlertEpisode,
1984
+ userOnCallLogTimelineId: ObjectID,
1985
+ ): Promise<string> {
1986
+ const ackUrl: URL = await this.buildOnCallAcknowledgeShortUrl(
1987
+ userOnCallLogTimelineId,
1988
+ );
1989
+
1990
+ const episodeIdentifier: string = alertEpisode.episodeNumberWithPrefix
1991
+ ? `${alertEpisode.episodeNumberWithPrefix} — ${alertEpisode.title || "Alert Episode"}`
1992
+ : alertEpisode.episodeNumber !== undefined
1993
+ ? `#${alertEpisode.episodeNumber} — ${alertEpisode.title || "Alert Episode"}`
1994
+ : alertEpisode.title || "Alert Episode";
1995
+
1996
+ const lines: Array<string> = [
1997
+ "🔔 <b>New alert episode assigned to you</b>",
1998
+ "",
1999
+ `📋 <b>${this.escapeTelegramHtml(episodeIdentifier)}</b>`,
2000
+ "",
2001
+ "👤 You're getting this because you're on call.",
2002
+ ];
2003
+
2004
+ if (alertEpisode.projectId && alertEpisode.id) {
2005
+ const dashboardUrl: URL =
2006
+ await AlertEpisodeService.getEpisodeLinkInDashboard(
2007
+ alertEpisode.projectId,
2008
+ alertEpisode.id,
2009
+ );
2010
+ lines.push(
2011
+ "",
2012
+ `🔎 <a href="${this.escapeTelegramHtml(dashboardUrl.toString())}">View alert episode in OneUptime</a>`,
2013
+ );
2014
+ }
2015
+
2016
+ lines.push(
2017
+ "",
2018
+ `✅ <a href="${this.escapeTelegramHtml(ackUrl.toString())}">Tap to acknowledge</a>`,
2019
+ );
2020
+
2021
+ return lines.join("\n");
2022
+ }
2023
+
1683
2024
  @CaptureSpan()
1684
2025
  public async generateWhatsAppTemplateForAlertCreated(
1685
2026
  to: Phone,
@@ -2288,12 +2629,14 @@ export class Service extends DatabaseService<Model> {
2288
2629
  !createBy.data.userSmsId &&
2289
2630
  !createBy.data.userWhatsApp &&
2290
2631
  !createBy.data.userWhatsAppId &&
2632
+ !createBy.data.userTelegram &&
2633
+ !createBy.data.userTelegramId &&
2291
2634
  !createBy.data.userEmailId &&
2292
2635
  !createBy.data.userPushId &&
2293
2636
  !createBy.data.userPush
2294
2637
  ) {
2295
2638
  throw new BadDataException(
2296
- "Call, SMS, WhatsApp, Email, or Push notification is required",
2639
+ "Call, SMS, WhatsApp, Telegram, Email, or Push notification is required",
2297
2640
  );
2298
2641
  }
2299
2642
 
@@ -2355,6 +2698,9 @@ export class Service extends DatabaseService<Model> {
2355
2698
  if (descriptor.userWhatsAppId) {
2356
2699
  rule.userWhatsAppId = descriptor.userWhatsAppId;
2357
2700
  }
2701
+ if (descriptor.userTelegramId) {
2702
+ rule.userTelegramId = descriptor.userTelegramId;
2703
+ }
2358
2704
  if (descriptor.userPushId) {
2359
2705
  rule.userPushId = descriptor.userPushId;
2360
2706
  }
@@ -2376,6 +2722,9 @@ export class Service extends DatabaseService<Model> {
2376
2722
  if (descriptor.userWhatsAppId) {
2377
2723
  query["userWhatsAppId"] = descriptor.userWhatsAppId;
2378
2724
  }
2725
+ if (descriptor.userTelegramId) {
2726
+ query["userTelegramId"] = descriptor.userTelegramId;
2727
+ }
2379
2728
  if (descriptor.userPushId) {
2380
2729
  query["userPushId"] = descriptor.userPushId;
2381
2730
  }
@@ -6,10 +6,12 @@ import DatabaseService from "./DatabaseService";
6
6
  import MailService from "./MailService";
7
7
  import SmsService from "./SmsService";
8
8
  import TeamMemberService from "./TeamMemberService";
9
+ import TelegramService from "./TelegramService";
9
10
  import UserCallService from "./UserCallService";
10
11
  import UserEmailService from "./UserEmailService";
11
12
  import UserSmsService from "./UserSmsService";
12
13
  import PushNotificationService from "./PushNotificationService";
14
+ import UserTelegramService from "./UserTelegramService";
13
15
  import UserWhatsAppService from "./UserWhatsAppService";
14
16
  import WhatsAppService from "./WhatsAppService";
15
17
  import { CallRequestMessage } from "../../Types/Call/CallRequest";
@@ -21,6 +23,9 @@ import ObjectID from "../../Types/ObjectID";
21
23
  import PositiveNumber from "../../Types/PositiveNumber";
22
24
  import { SMSMessage } from "../../Types/SMS/SMS";
23
25
  import PushNotificationMessage from "../../Types/PushNotification/PushNotificationMessage";
26
+ import TelegramMessage, {
27
+ TelegramMessagePayload,
28
+ } from "../../Types/Telegram/TelegramMessage";
24
29
  import WhatsAppMessage, {
25
30
  WhatsAppMessagePayload,
26
31
  } from "../../Types/WhatsApp/WhatsAppMessage";
@@ -28,6 +33,7 @@ import UserCall from "../../Models/DatabaseModels/UserCall";
28
33
  import UserEmail from "../../Models/DatabaseModels/UserEmail";
29
34
  import UserNotificationSetting from "../../Models/DatabaseModels/UserNotificationSetting";
30
35
  import UserSMS from "../../Models/DatabaseModels/UserSMS";
36
+ import UserTelegram from "../../Models/DatabaseModels/UserTelegram";
31
37
  import UserWhatsApp from "../../Models/DatabaseModels/UserWhatsApp";
32
38
  import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
33
39
  import { appendRecipientToWhatsAppMessage } from "../Utils/WhatsAppTemplateUtil";
@@ -47,6 +53,7 @@ export class Service extends DatabaseService<UserNotificationSetting> {
47
53
  callRequestMessage: CallRequestMessage;
48
54
  pushNotificationMessage: PushNotificationMessage;
49
55
  whatsAppMessage: WhatsAppMessagePayload;
56
+ telegramMessage?: TelegramMessagePayload | undefined;
50
57
  incidentId?: ObjectID | undefined;
51
58
  alertId?: ObjectID | undefined;
52
59
  alertEpisodeId?: ObjectID | undefined;
@@ -79,6 +86,7 @@ export class Service extends DatabaseService<UserNotificationSetting> {
79
86
  alertByEmail: true,
80
87
  alertBySMS: true,
81
88
  alertByWhatsApp: true,
89
+ alertByTelegram: true,
82
90
  alertByCall: true,
83
91
  alertByPush: true,
84
92
  },
@@ -239,6 +247,112 @@ export class Service extends DatabaseService<UserNotificationSetting> {
239
247
  }
240
248
  }
241
249
 
250
+ if (notificationSettings.alertByTelegram) {
251
+ const userTelegrams: Array<UserTelegram> =
252
+ await UserTelegramService.findBy({
253
+ query: {
254
+ userId: data.userId,
255
+ projectId: data.projectId,
256
+ isVerified: true,
257
+ },
258
+ select: {
259
+ telegramChatId: true,
260
+ },
261
+ limit: LIMIT_PER_PROJECT,
262
+ skip: 0,
263
+ props: {
264
+ isRoot: true,
265
+ },
266
+ });
267
+
268
+ /*
269
+ * When the caller did not provide a Telegram-specific message we build a
270
+ * nicely-formatted HTML body from the email subject + SMS body + optional
271
+ * URL from the email envelope, with a 🔔 prefix. If they did provide one,
272
+ * we respect their body/parseMode verbatim.
273
+ */
274
+ const callerProvidedTelegramBody: boolean = Boolean(
275
+ data.telegramMessage?.body,
276
+ );
277
+
278
+ const escapeHtml: (value: string) => string = (
279
+ value: string,
280
+ ): string => {
281
+ return value
282
+ .replace(/&/g, "&amp;")
283
+ .replace(/</g, "&lt;")
284
+ .replace(/>/g, "&gt;");
285
+ };
286
+
287
+ let telegramBody: string = "";
288
+ let telegramParseMode: TelegramMessage["parseMode"] | undefined =
289
+ undefined;
290
+
291
+ if (callerProvidedTelegramBody) {
292
+ telegramBody = data.telegramMessage!.body;
293
+ telegramParseMode = data.telegramMessage!.parseMode;
294
+ } else {
295
+ const subject: string = data.emailEnvelope.subject || "";
296
+ const smsBody: string = data.smsMessage.message || "";
297
+
298
+ if (subject || smsBody) {
299
+ const lines: Array<string> = [];
300
+ if (subject) {
301
+ lines.push(`🔔 <b>${escapeHtml(subject)}</b>`);
302
+ } else {
303
+ lines.push("🔔 <b>OneUptime notification</b>");
304
+ }
305
+ if (smsBody) {
306
+ lines.push("");
307
+ lines.push(escapeHtml(smsBody));
308
+ }
309
+ telegramBody = lines.join("\n");
310
+ telegramParseMode = "HTML";
311
+ }
312
+ }
313
+
314
+ if (!telegramBody) {
315
+ logger.warn(
316
+ "Skipping Telegram notification because message body is empty.",
317
+ );
318
+ } else {
319
+ for (const userTelegram of userTelegrams) {
320
+ if (!userTelegram.telegramChatId) {
321
+ continue;
322
+ }
323
+
324
+ const telegramMessage: TelegramMessage = {
325
+ to: userTelegram.telegramChatId,
326
+ body: telegramBody,
327
+ parseMode: telegramParseMode,
328
+ disableWebPagePreview:
329
+ data.telegramMessage?.disableWebPagePreview ?? true,
330
+ };
331
+
332
+ TelegramService.sendTelegramMessage(telegramMessage, {
333
+ projectId: data.projectId,
334
+ incidentId: data.incidentId,
335
+ alertId: data.alertId,
336
+ alertEpisodeId: data.alertEpisodeId,
337
+ incidentEpisodeId: data.incidentEpisodeId,
338
+ monitorId: data.monitorId,
339
+ scheduledMaintenanceId: data.scheduledMaintenanceId,
340
+ statusPageId: data.statusPageId,
341
+ statusPageAnnouncementId: data.statusPageAnnouncementId,
342
+ userId: data.userId,
343
+ teamId: data.teamId,
344
+ onCallPolicyId: data.onCallPolicyId,
345
+ onCallPolicyEscalationRuleId: data.onCallPolicyEscalationRuleId,
346
+ onCallDutyPolicyExecutionLogTimelineId:
347
+ data.onCallDutyPolicyExecutionLogTimelineId,
348
+ onCallScheduleId: data.onCallScheduleId,
349
+ }).catch((err: Error) => {
350
+ logger.error(err);
351
+ });
352
+ }
353
+ }
354
+ }
355
+
242
356
  if (notificationSettings.alertByCall) {
243
357
  const userCalls: Array<UserCall> = await UserCallService.findBy({
244
358
  query: {