@oneuptime/common 11.7.0 → 11.7.2

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 (264) hide show
  1. package/Models/DatabaseModels/DashboardDomain.ts +1 -0
  2. package/Models/DatabaseModels/Incident.ts +2 -0
  3. package/Models/DatabaseModels/IncidentEpisode.ts +1 -0
  4. package/Models/DatabaseModels/IncidentEpisodePublicNote.ts +1 -0
  5. package/Models/DatabaseModels/IncidentEpisodeStateTimeline.ts +1 -0
  6. package/Models/DatabaseModels/IncidentPublicNote.ts +1 -0
  7. package/Models/DatabaseModels/IncidentStateTimeline.ts +1 -0
  8. package/Models/DatabaseModels/Monitor.ts +1 -0
  9. package/Models/DatabaseModels/MonitorStatusTimeline.ts +1 -0
  10. package/Models/DatabaseModels/NetworkSite.ts +1 -0
  11. package/Models/DatabaseModels/NetworkSiteStatusTimeline.ts +1 -0
  12. package/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.ts +1 -0
  13. package/Models/DatabaseModels/OnCallDutyPolicySchedule.ts +2 -0
  14. package/Models/DatabaseModels/Probe.ts +13 -13
  15. package/Models/DatabaseModels/ScheduledMaintenance.ts +1 -0
  16. package/Models/DatabaseModels/ScheduledMaintenancePublicNote.ts +1 -0
  17. package/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.ts +1 -0
  18. package/Models/DatabaseModels/ScheduledMaintenanceTemplate.ts +1 -0
  19. package/Models/DatabaseModels/StatusPage.ts +1 -0
  20. package/Models/DatabaseModels/StatusPageAnnouncement.ts +1 -0
  21. package/Models/DatabaseModels/StatusPageDomain.ts +1 -0
  22. package/Models/DatabaseModels/WorkspaceNotificationSummary.ts +1 -0
  23. package/Models/DatabaseModels/WorkspaceProjectAuthToken.ts +11 -0
  24. package/Server/API/BaseAPI.ts +17 -1
  25. package/Server/API/CommonAPI.ts +32 -0
  26. package/Server/API/MicrosoftTeamsAPI.ts +99 -2
  27. package/Server/API/ProbeAPI.ts +2 -0
  28. package/Server/API/SlackAPI.ts +62 -0
  29. package/Server/API/StatusPageAPI.ts +157 -192
  30. package/Server/Infrastructure/Postgres/SchemaMigrations/1785140242697-AddHotQueryIndexes.ts +89 -0
  31. package/Server/Infrastructure/Postgres/SchemaMigrations/1785148065137-AddHotQueryIndexesSecondPass.ts +61 -0
  32. package/Server/Infrastructure/Postgres/SchemaMigrations/1785240000000-RepairCrossProjectMonitorStatusReferences.ts +280 -0
  33. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +6 -0
  34. package/Server/Services/DatabaseService.ts +11 -3
  35. package/Server/Services/MonitorGroupService.ts +145 -0
  36. package/Server/Services/MonitorService.ts +231 -30
  37. package/Server/Services/ProbeService.ts +319 -16
  38. package/Server/Services/StatusPageService.ts +72 -42
  39. package/Server/Services/WorkspaceNotificationRuleService.ts +232 -2
  40. package/Server/Utils/Database/PostgresErrorTranslator.ts +131 -0
  41. package/Server/Utils/Monitor/MonitorResource.ts +88 -35
  42. package/Server/Utils/Monitor/MonitorStatusTimeline.ts +21 -1
  43. package/Server/Utils/Monitor/MonitorStepsProjectValidator.ts +158 -0
  44. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +706 -6
  45. package/Tests/Models/DatabaseModels/ProbeColumnAccessControl.test.ts +103 -0
  46. package/Tests/Server/API/BaseAPIUpdateNoOp.test.ts +135 -0
  47. package/Tests/Server/API/CommonAPIAuthGuard.test.ts +317 -0
  48. package/Tests/Server/API/MicrosoftTeamsManifest.test.ts +228 -0
  49. package/Tests/Server/API/ProbeAPI.test.ts +6 -0
  50. package/Tests/Server/API/ZZVerifyChatsAuth.test.ts +167 -0
  51. package/Tests/Server/Services/AddHotQueryIndexesMigration.test.ts +255 -0
  52. package/Tests/Server/Services/AddHotQueryIndexesSecondPassMigration.test.ts +258 -0
  53. package/Tests/Server/Services/DatabaseServiceSanitizeUpdateData.test.ts +1 -1
  54. package/Tests/Server/Services/DiscoveryScanClaimHookFreeSafety.test.ts +121 -0
  55. package/Tests/Server/Services/HeartbeatWriteFastPathSafety.test.ts +200 -0
  56. package/Tests/Server/Services/HookFreeWriteSafetySecondPass.test.ts +181 -0
  57. package/Tests/Server/Services/MonitorGroupServiceBatchedStatuses.test.ts +513 -0
  58. package/Tests/Server/Services/MonitorResourceProbeAgreementReuse.test.ts +492 -0
  59. package/Tests/Server/Services/MonitorServiceProbeSelection.test.ts +401 -0
  60. package/Tests/Server/Services/MonitorStatusTimelineFastPath.test.ts +453 -0
  61. package/Tests/Server/Services/ProbeAuthKeyCacheAndHeartbeat.test.ts +679 -0
  62. package/Tests/Server/Services/ServiceLevelObjectiveService.test.ts +3 -3
  63. package/Tests/Server/Services/StatusPageDomainResolutionCache.test.ts +245 -0
  64. package/Tests/Server/Services/StatusPageOverviewTimelineWindow.test.ts +283 -0
  65. package/Tests/Server/Services/StatusPageServiceMcp.test.ts +17 -1
  66. package/Tests/Server/Services/StatusPageServiceMonitorGroupBatching.test.ts +331 -0
  67. package/Tests/Server/Services/UserOnCallLogClaimNotificationRule.test.ts +12 -12
  68. package/Tests/Server/Services/WorkspaceNotificationRuleChats.test.ts +1390 -0
  69. package/Tests/Server/Utils/AI/Insights/InsightFixRouting.test.ts +4 -4
  70. package/Tests/Server/Utils/AI/Insights/InsightScanner.test.ts +2 -2
  71. package/Tests/Server/Utils/AI/Insights/InsightStore.test.ts +1 -3
  72. package/Tests/Server/Utils/AI/Insights/InsightStoreHardening.test.ts +1 -3
  73. package/Tests/Server/Utils/AI/Insights/InsightTriage.test.ts +1 -1
  74. package/Tests/Server/Utils/AI/Insights/InsightTriageRunner.test.ts +5 -5
  75. package/Tests/Server/Utils/Alert/AlertPrivacyFilter.test.ts +187 -0
  76. package/Tests/Server/Utils/AlertEpisode/AlertEpisodePrivacyFilter.test.ts +170 -0
  77. package/Tests/Server/Utils/Database/PostgresErrorTranslator.test.ts +125 -0
  78. package/Tests/Server/Utils/Incident/IncidentPrivacyFilter.test.ts +264 -0
  79. package/Tests/Server/Utils/IncidentEpisode/IncidentEpisodePrivacyFilter.test.ts +175 -0
  80. package/Tests/Server/Utils/Monitor/MonitorStepsProjectValidator.test.ts +181 -0
  81. package/Tests/Server/Utils/Monitor/NetworkDeviceWalkUtil.test.ts +1 -1
  82. package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +2 -2
  83. package/Tests/Server/Utils/Workspace/MicrosoftTeamsChannelsList.test.ts +341 -0
  84. package/Tests/Server/Utils/Workspace/MicrosoftTeamsChats.test.ts +2175 -0
  85. package/Tests/Server/Utils/Workspace/SlackChannelsList.test.ts +585 -0
  86. package/Tests/Types/Billing/MeteredPlan.test.ts +46 -0
  87. package/Tests/Types/DateUserTimezone.test.ts +205 -0
  88. package/Tests/Types/DateUserTimezoneOverridesBrowser.test.ts +73 -0
  89. package/Tests/Types/Workspace/NotificationRules/NotificationRuleCondition.test.ts +219 -1
  90. package/Tests/UI/Components/BulkUpdateForm.test.tsx +174 -0
  91. package/Tests/UI/Components/CardModelDetailEdit.test.tsx +315 -0
  92. package/Tests/UI/Components/ModelDetailSelect.test.tsx +229 -0
  93. package/Tests/UI/Components/ModelTable/BaseModelTableBulkSelectAll.test.tsx +1258 -0
  94. package/Tests/UI/Components/ModelTableExportFromColumns.test.ts +153 -0
  95. package/Tests/UI/Components/MonacoLoader.test.ts +67 -0
  96. package/Tests/UI/Components/MonacoRuntime.test.ts +121 -0
  97. package/Tests/UI/Components/TableBulkCsvExport.test.tsx +212 -3
  98. package/Tests/UI/Components/TimePicker/TimePicker.test.tsx +11 -0
  99. package/Tests/UI/Utils/Project.test.ts +809 -0
  100. package/Tests/UI/Utils/TableColumnsToCsv.test.ts +360 -0
  101. package/Tests/Utils/Alerts/AlertMetricType.test.ts +143 -0
  102. package/Tests/Utils/Dashboard/VariableUrlState.test.ts +219 -0
  103. package/Tests/Utils/Incident/IncidentMetricType.test.ts +174 -0
  104. package/Tests/Utils/Monitor/MonitorProbeSelectionUtil.test.ts +145 -0
  105. package/Tests/Utils/StatusPage/ResourceUptime.test.ts +263 -0
  106. package/Types/Date.ts +119 -50
  107. package/Types/Workspace/NotificationRules/BaseNotificationRule.ts +4 -0
  108. package/Types/Workspace/NotificationRules/NotificationRuleCondition.ts +25 -10
  109. package/Types/Workspace/WorkspaceMessagePayload.ts +1 -0
  110. package/UI/Components/BulkUpdate/BulkUpdateForm.tsx +63 -8
  111. package/UI/Components/CodeEditor/CodeEditor.tsx +3 -0
  112. package/UI/Components/CodeEditor/MonacoLoader.ts +36 -0
  113. package/UI/Components/Forms/Fields/FormField.tsx +13 -3
  114. package/UI/Components/Forms/ModelForm.tsx +41 -18
  115. package/UI/Components/Input/Input.tsx +6 -1
  116. package/UI/Components/ModelDetail/CardModelDetail.tsx +23 -1
  117. package/UI/Components/ModelDetail/ModelDetail.tsx +46 -1
  118. package/UI/Components/ModelTable/BaseModelTable.tsx +300 -30
  119. package/UI/Components/ModelTable/Column.ts +12 -0
  120. package/UI/Components/ModelTable/ExportFromColumns.ts +57 -0
  121. package/UI/Components/Navbar/NavBar.tsx +66 -1
  122. package/UI/Components/Table/Table.tsx +52 -13
  123. package/UI/Components/Table/Types/Column.ts +18 -0
  124. package/UI/Components/TimePicker/TimePicker.tsx +8 -4
  125. package/UI/Utils/Project.ts +214 -18
  126. package/UI/Utils/TableColumnsToCsv.ts +86 -6
  127. package/UI/Utils/User.ts +19 -0
  128. package/UI/esbuild-config.js +34 -0
  129. package/Utils/Monitor/MonitorProbeSelectionUtil.ts +72 -0
  130. package/build/dist/Models/DatabaseModels/DashboardDomain.js +1 -0
  131. package/build/dist/Models/DatabaseModels/DashboardDomain.js.map +1 -1
  132. package/build/dist/Models/DatabaseModels/Incident.js +2 -0
  133. package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
  134. package/build/dist/Models/DatabaseModels/IncidentEpisode.js +1 -0
  135. package/build/dist/Models/DatabaseModels/IncidentEpisode.js.map +1 -1
  136. package/build/dist/Models/DatabaseModels/IncidentEpisodePublicNote.js +1 -0
  137. package/build/dist/Models/DatabaseModels/IncidentEpisodePublicNote.js.map +1 -1
  138. package/build/dist/Models/DatabaseModels/IncidentEpisodeStateTimeline.js +1 -0
  139. package/build/dist/Models/DatabaseModels/IncidentEpisodeStateTimeline.js.map +1 -1
  140. package/build/dist/Models/DatabaseModels/IncidentPublicNote.js +1 -0
  141. package/build/dist/Models/DatabaseModels/IncidentPublicNote.js.map +1 -1
  142. package/build/dist/Models/DatabaseModels/IncidentStateTimeline.js +1 -0
  143. package/build/dist/Models/DatabaseModels/IncidentStateTimeline.js.map +1 -1
  144. package/build/dist/Models/DatabaseModels/Monitor.js +1 -0
  145. package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
  146. package/build/dist/Models/DatabaseModels/MonitorStatusTimeline.js +1 -0
  147. package/build/dist/Models/DatabaseModels/MonitorStatusTimeline.js.map +1 -1
  148. package/build/dist/Models/DatabaseModels/NetworkSite.js +1 -0
  149. package/build/dist/Models/DatabaseModels/NetworkSite.js.map +1 -1
  150. package/build/dist/Models/DatabaseModels/NetworkSiteStatusTimeline.js +1 -0
  151. package/build/dist/Models/DatabaseModels/NetworkSiteStatusTimeline.js.map +1 -1
  152. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.js +1 -0
  153. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.js.map +1 -1
  154. package/build/dist/Models/DatabaseModels/OnCallDutyPolicySchedule.js +2 -0
  155. package/build/dist/Models/DatabaseModels/OnCallDutyPolicySchedule.js.map +1 -1
  156. package/build/dist/Models/DatabaseModels/Probe.js +13 -13
  157. package/build/dist/Models/DatabaseModels/Probe.js.map +1 -1
  158. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +1 -0
  159. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
  160. package/build/dist/Models/DatabaseModels/ScheduledMaintenancePublicNote.js +1 -0
  161. package/build/dist/Models/DatabaseModels/ScheduledMaintenancePublicNote.js.map +1 -1
  162. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.js +1 -0
  163. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.js.map +1 -1
  164. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplate.js +1 -0
  165. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplate.js.map +1 -1
  166. package/build/dist/Models/DatabaseModels/StatusPage.js +1 -0
  167. package/build/dist/Models/DatabaseModels/StatusPage.js.map +1 -1
  168. package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js +1 -0
  169. package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js.map +1 -1
  170. package/build/dist/Models/DatabaseModels/StatusPageDomain.js +1 -0
  171. package/build/dist/Models/DatabaseModels/StatusPageDomain.js.map +1 -1
  172. package/build/dist/Models/DatabaseModels/WorkspaceNotificationSummary.js +1 -0
  173. package/build/dist/Models/DatabaseModels/WorkspaceNotificationSummary.js.map +1 -1
  174. package/build/dist/Models/DatabaseModels/WorkspaceProjectAuthToken.js.map +1 -1
  175. package/build/dist/Server/API/BaseAPI.js +12 -1
  176. package/build/dist/Server/API/BaseAPI.js.map +1 -1
  177. package/build/dist/Server/API/CommonAPI.js +21 -0
  178. package/build/dist/Server/API/CommonAPI.js.map +1 -1
  179. package/build/dist/Server/API/MicrosoftTeamsAPI.js +72 -2
  180. package/build/dist/Server/API/MicrosoftTeamsAPI.js.map +1 -1
  181. package/build/dist/Server/API/ProbeAPI.js +2 -0
  182. package/build/dist/Server/API/ProbeAPI.js.map +1 -1
  183. package/build/dist/Server/API/SlackAPI.js +44 -0
  184. package/build/dist/Server/API/SlackAPI.js.map +1 -1
  185. package/build/dist/Server/API/StatusPageAPI.js +98 -152
  186. package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
  187. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785140242697-AddHotQueryIndexes.js +36 -0
  188. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785140242697-AddHotQueryIndexes.js.map +1 -0
  189. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785148065137-AddHotQueryIndexesSecondPass.js +26 -0
  190. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785148065137-AddHotQueryIndexesSecondPass.js.map +1 -0
  191. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785240000000-RepairCrossProjectMonitorStatusReferences.js +254 -0
  192. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785240000000-RepairCrossProjectMonitorStatusReferences.js.map +1 -0
  193. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +6 -0
  194. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  195. package/build/dist/Server/Services/DatabaseService.js +10 -2
  196. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  197. package/build/dist/Server/Services/MonitorGroupService.js +118 -0
  198. package/build/dist/Server/Services/MonitorGroupService.js.map +1 -1
  199. package/build/dist/Server/Services/MonitorService.js +198 -24
  200. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  201. package/build/dist/Server/Services/ProbeService.js +238 -9
  202. package/build/dist/Server/Services/ProbeService.js.map +1 -1
  203. package/build/dist/Server/Services/StatusPageService.js +46 -39
  204. package/build/dist/Server/Services/StatusPageService.js.map +1 -1
  205. package/build/dist/Server/Services/WorkspaceNotificationRuleService.js +178 -3
  206. package/build/dist/Server/Services/WorkspaceNotificationRuleService.js.map +1 -1
  207. package/build/dist/Server/Utils/Database/PostgresErrorTranslator.js +80 -0
  208. package/build/dist/Server/Utils/Database/PostgresErrorTranslator.js.map +1 -0
  209. package/build/dist/Server/Utils/Monitor/MonitorResource.js +67 -29
  210. package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
  211. package/build/dist/Server/Utils/Monitor/MonitorStatusTimeline.js +31 -14
  212. package/build/dist/Server/Utils/Monitor/MonitorStatusTimeline.js.map +1 -1
  213. package/build/dist/Server/Utils/Monitor/MonitorStepsProjectValidator.js +117 -0
  214. package/build/dist/Server/Utils/Monitor/MonitorStepsProjectValidator.js.map +1 -0
  215. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +549 -7
  216. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
  217. package/build/dist/Types/Date.js +106 -35
  218. package/build/dist/Types/Date.js.map +1 -1
  219. package/build/dist/Types/Workspace/NotificationRules/NotificationRuleCondition.js +17 -7
  220. package/build/dist/Types/Workspace/NotificationRules/NotificationRuleCondition.js.map +1 -1
  221. package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js +37 -11
  222. package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js.map +1 -1
  223. package/build/dist/UI/Components/CodeEditor/CodeEditor.js +2 -0
  224. package/build/dist/UI/Components/CodeEditor/CodeEditor.js.map +1 -1
  225. package/build/dist/UI/Components/CodeEditor/MonacoLoader.js +34 -0
  226. package/build/dist/UI/Components/CodeEditor/MonacoLoader.js.map +1 -0
  227. package/build/dist/UI/Components/Forms/Fields/FormField.js +11 -3
  228. package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
  229. package/build/dist/UI/Components/Forms/ModelForm.js +37 -17
  230. package/build/dist/UI/Components/Forms/ModelForm.js.map +1 -1
  231. package/build/dist/UI/Components/Input/Input.js +6 -1
  232. package/build/dist/UI/Components/Input/Input.js.map +1 -1
  233. package/build/dist/UI/Components/ModelDetail/CardModelDetail.js +22 -1
  234. package/build/dist/UI/Components/ModelDetail/CardModelDetail.js.map +1 -1
  235. package/build/dist/UI/Components/ModelDetail/ModelDetail.js +31 -1
  236. package/build/dist/UI/Components/ModelDetail/ModelDetail.js.map +1 -1
  237. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +234 -21
  238. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  239. package/build/dist/UI/Components/ModelTable/ExportFromColumns.js +30 -0
  240. package/build/dist/UI/Components/ModelTable/ExportFromColumns.js.map +1 -0
  241. package/build/dist/UI/Components/Navbar/NavBar.js +39 -1
  242. package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
  243. package/build/dist/UI/Components/Table/Table.js +31 -11
  244. package/build/dist/UI/Components/Table/Table.js.map +1 -1
  245. package/build/dist/UI/Components/TimePicker/TimePicker.js +4 -4
  246. package/build/dist/UI/Components/TimePicker/TimePicker.js.map +1 -1
  247. package/build/dist/UI/Utils/Project.js +161 -15
  248. package/build/dist/UI/Utils/Project.js.map +1 -1
  249. package/build/dist/UI/Utils/TableColumnsToCsv.js +67 -6
  250. package/build/dist/UI/Utils/TableColumnsToCsv.js.map +1 -1
  251. package/build/dist/UI/Utils/User.js +19 -0
  252. package/build/dist/UI/Utils/User.js.map +1 -1
  253. package/build/dist/Utils/Monitor/MonitorProbeSelectionUtil.js +52 -0
  254. package/build/dist/Utils/Monitor/MonitorProbeSelectionUtil.js.map +1 -0
  255. package/package.json +4 -3
  256. package/Server/Infrastructure/Postgres/SchemaMigrations/1773414578773-MigrationName.ts +0 -79
  257. package/Server/Infrastructure/Postgres/SchemaMigrations/1773500000000-MigrationName.ts +0 -41
  258. package/Server/Infrastructure/Postgres/SchemaMigrations/1776886248361-MigrationName.ts +0 -17
  259. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1773414578773-MigrationName.js +0 -34
  260. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1773414578773-MigrationName.js.map +0 -1
  261. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1773500000000-MigrationName.js +0 -22
  262. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1773500000000-MigrationName.js.map +0 -1
  263. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1776886248361-MigrationName.js +0 -12
  264. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1776886248361-MigrationName.js.map +0 -1
@@ -7,6 +7,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  var __metadata = (this && this.__metadata) || function (k, v) {
8
8
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
9
  };
10
+ import crypto from "crypto";
10
11
  import DatabaseService from "./DatabaseService";
11
12
  import ObjectID from "../../Types/ObjectID";
12
13
  import Version from "../../Types/Version";
@@ -30,16 +31,197 @@ import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
30
31
  import { IsBillingEnabled } from "../EnvironmentConfig";
31
32
  import GlobalCache from "../Infrastructure/GlobalCache";
32
33
  import { createWhatsAppMessageFromTemplate } from "../Utils/WhatsAppTemplateUtil";
34
+ /*
35
+ * Cache namespace for the probe heartbeat throttle: holds the wall-clock of
36
+ * the last attempted lastAlive write per probe, so at most one Postgres
37
+ * write happens per probe per 30 seconds no matter how many requests the
38
+ * probe sends.
39
+ */
40
+ const PROBE_LAST_ALIVE_CACHE_NAMESPACE = "probe-last-alive";
41
+ /*
42
+ * Cache namespace for probe authentication: probeId → SHA-256 of the
43
+ * probe's CURRENT key, written only after the key was verified against the
44
+ * database. Lets the probe-auth middleware skip its per-request Probe
45
+ * SELECT — the exact query that queues behind a starved connection pool and
46
+ * stalls heartbeats. Entries are deleted whenever a probe's key changes or
47
+ * the probe is deleted (see onUpdateSuccess / onDeleteSuccess below), and
48
+ * the TTL bounds the exposure if that invalidation is ever missed.
49
+ */
50
+ const PROBE_AUTH_KEY_HASH_CACHE_NAMESPACE = "probe-auth-key-hash";
51
+ const PROBE_AUTH_KEY_HASH_CACHE_TTL_IN_SECONDS = 120;
52
+ /*
53
+ * Revocation sentinel. Invalidation WRITES this value (with the normal TTL)
54
+ * instead of deleting the key: a bare DELETE can be silently undone by an
55
+ * in-flight verification that DB-checked the OLD key just before a rotation
56
+ * committed and then re-cached it just after the delete ran. The sentinel —
57
+ * combined with verifyProbeKey's write-only-if-unchanged re-read below —
58
+ * makes the straggler skip its write, so invalidation wins the race. It can
59
+ * never equal a real SHA-256 hex digest, so on the auth path it always
60
+ * behaves as a cache miss.
61
+ */
62
+ const PROBE_AUTH_KEY_REVOKED_SENTINEL = "revoked";
63
+ /*
64
+ * Upper bound for a single Redis cache operation on the probe request path.
65
+ * The ioredis client has no command timeout, so a stalled-but-open Redis
66
+ * socket would otherwise hang the probe-auth middleware forever with no
67
+ * error at all. Cache is an optimization here — on timeout we fall back to
68
+ * the database, exactly as we do when Redis rejects.
69
+ */
70
+ const PROBE_CACHE_OPERATION_TIMEOUT_IN_MS = 2000;
33
71
  export class Service extends DatabaseService {
34
72
  constructor() {
35
73
  super(Model);
36
74
  }
75
+ /*
76
+ * Bounds a cache operation in time. Promise.race subscribes to both
77
+ * promises, so a late settlement of the losing cache operation is
78
+ * observed and can never surface as an unhandled rejection.
79
+ */
80
+ async boundedCacheOperation(operationName, operation) {
81
+ let timer = undefined;
82
+ const timeout = new Promise((_resolve, reject) => {
83
+ timer = setTimeout(() => {
84
+ reject(new Error(`${operationName} timed out after ${PROBE_CACHE_OPERATION_TIMEOUT_IN_MS}ms`));
85
+ }, PROBE_CACHE_OPERATION_TIMEOUT_IN_MS);
86
+ });
87
+ try {
88
+ return await Promise.race([operation, timeout]);
89
+ }
90
+ finally {
91
+ if (timer) {
92
+ clearTimeout(timer);
93
+ }
94
+ }
95
+ }
96
+ hashProbeKey(probeKey) {
97
+ return crypto.createHash("sha256").update(probeKey).digest("hex");
98
+ }
99
+ /*
100
+ * Verifies a probeId/probeKey pair, serving repeat verifications from
101
+ * cache. This runs on EVERY authenticated probe request (heartbeats,
102
+ * monitor list fetches, result ingest), so it must stay responsive even
103
+ * when the Postgres pool is saturated — which is exactly when the
104
+ * heartbeat matters most: if this check queues behind a starved pool, the
105
+ * probe's lastAlive goes stale and a healthy probe gets flagged
106
+ * Disconnected.
107
+ *
108
+ * Security invariants:
109
+ * - The cache stores only a SHA-256 hash of the key, never the key.
110
+ * - A cache entry is only ever written from a value that was JUST
111
+ * verified against the database.
112
+ * - A cache mismatch falls through to the database, so a rotated key
113
+ * works immediately.
114
+ * - Rotating or deleting a probe overwrites its cache entry cluster-wide
115
+ * with the revocation sentinel (GlobalCache is Redis-backed), and the
116
+ * write below is write-only-if-unchanged so an in-flight verification
117
+ * straddling the rotation cannot resurrect the old hash. The TTL caps
118
+ * the stale window if the invalidation write itself fails: a REVOKED
119
+ * key can then still authenticate for at most
120
+ * PROBE_AUTH_KEY_HASH_CACHE_TTL_IN_SECONDS.
121
+ * - Any cache failure (Redis down, slow, timeout) falls back to the
122
+ * database check — never open.
123
+ */
124
+ async verifyProbeKey(data) {
125
+ var _a, _b, _c, _d;
126
+ if (!data.probeId) {
127
+ throw new BadDataException("probeId is required");
128
+ }
129
+ if (!data.probeKey) {
130
+ throw new BadDataException("probeKey is required");
131
+ }
132
+ const presentedKeyHash = this.hashProbeKey(data.probeKey);
133
+ try {
134
+ const cachedKeyHash = await this.boundedCacheOperation("Probe auth cache read", GlobalCache.getString(PROBE_AUTH_KEY_HASH_CACHE_NAMESPACE, data.probeId.toString()));
135
+ if (cachedKeyHash && cachedKeyHash === presentedKeyHash) {
136
+ return true;
137
+ }
138
+ }
139
+ catch (err) {
140
+ logger.error("Error in reading probe auth cache", {
141
+ probeId: (_a = data.probeId) === null || _a === void 0 ? void 0 : _a.toString(),
142
+ });
143
+ logger.error(err, {
144
+ probeId: (_b = data.probeId) === null || _b === void 0 ? void 0 : _b.toString(),
145
+ });
146
+ }
147
+ // Cache miss, mismatch (e.g. key rotated), or cache failure: ask the DB.
148
+ const probe = await this.findOneBy({
149
+ query: {
150
+ _id: data.probeId.toString(),
151
+ key: data.probeKey,
152
+ },
153
+ select: {
154
+ _id: true,
155
+ },
156
+ props: {
157
+ isRoot: true,
158
+ },
159
+ });
160
+ if (!probe) {
161
+ return false;
162
+ }
163
+ try {
164
+ /*
165
+ * Write-only-if-unchanged: re-read the entry right before writing and
166
+ * skip the write when someone else changed it since our first read.
167
+ * The DB verification above can straddle a key rotation — its SELECT
168
+ * resolves against the pre-rotation row, the rotation commits and
169
+ * invalidates, and an unconditional write here would then re-cache
170
+ * the just-revoked key for a fresh TTL. Seeing the revocation
171
+ * sentinel (or any other concurrent write) means skip: the DB check
172
+ * stays the source of truth and caching resumes once the entry
173
+ * expires. The remaining race window is the microseconds between
174
+ * this re-read and the write — down from the full DB round-trip.
175
+ */
176
+ const currentCacheValue = await this.boundedCacheOperation("Probe auth cache pre-write read", GlobalCache.getString(PROBE_AUTH_KEY_HASH_CACHE_NAMESPACE, data.probeId.toString()));
177
+ if (currentCacheValue === null ||
178
+ currentCacheValue === presentedKeyHash) {
179
+ await this.boundedCacheOperation("Probe auth cache write", GlobalCache.setString(PROBE_AUTH_KEY_HASH_CACHE_NAMESPACE, data.probeId.toString(), presentedKeyHash, {
180
+ expiresInSeconds: PROBE_AUTH_KEY_HASH_CACHE_TTL_IN_SECONDS,
181
+ }));
182
+ }
183
+ }
184
+ catch (err) {
185
+ // Next request re-verifies against the DB. Nothing is broken.
186
+ logger.error("Error in writing probe auth cache", {
187
+ probeId: (_c = data.probeId) === null || _c === void 0 ? void 0 : _c.toString(),
188
+ });
189
+ logger.error(err, {
190
+ probeId: (_d = data.probeId) === null || _d === void 0 ? void 0 : _d.toString(),
191
+ });
192
+ }
193
+ return true;
194
+ }
195
+ /*
196
+ * Replaces cached auth entries with the revocation sentinel so a rotated
197
+ * key stops working everywhere immediately (the cache is Redis-backed and
198
+ * shared by all pods). A sentinel WRITE rather than a delete: a deleted
199
+ * key can be silently re-created by an in-flight verification that
200
+ * DB-checked the old key just before the rotation committed, whereas the
201
+ * sentinel makes that straggler's write-only-if-unchanged check fail.
202
+ * Errors are logged loudly but not thrown: the entries also expire via
203
+ * TTL, and failing the surrounding update/delete over a cache hiccup
204
+ * would be worse than a bounded stale window.
205
+ */
206
+ async invalidateProbeAuthCache(probeIds) {
207
+ for (const probeId of probeIds) {
208
+ try {
209
+ await this.boundedCacheOperation("Probe auth cache invalidation", GlobalCache.setString(PROBE_AUTH_KEY_HASH_CACHE_NAMESPACE, probeId.toString(), PROBE_AUTH_KEY_REVOKED_SENTINEL, {
210
+ expiresInSeconds: PROBE_AUTH_KEY_HASH_CACHE_TTL_IN_SECONDS,
211
+ }));
212
+ }
213
+ catch (err) {
214
+ logger.error(`CRITICAL: failed to invalidate probe auth cache for probe ${probeId.toString()} — a rotated/revoked probe key may keep authenticating for up to ${PROBE_AUTH_KEY_HASH_CACHE_TTL_IN_SECONDS}s`, { probeId: probeId === null || probeId === void 0 ? void 0 : probeId.toString() });
215
+ logger.error(err, { probeId: probeId === null || probeId === void 0 ? void 0 : probeId.toString() });
216
+ }
217
+ }
218
+ }
37
219
  async saveLastAliveInCache(probeId, lastAlive) {
38
220
  if (!probeId) {
39
221
  throw new BadDataException("probeId is required");
40
222
  }
41
223
  try {
42
- await GlobalCache.setString("probe-last-alive", probeId.toString(), OneUptimeDate.toString(lastAlive));
224
+ await this.boundedCacheOperation("Probe last-alive cache write", GlobalCache.setString(PROBE_LAST_ALIVE_CACHE_NAMESPACE, probeId.toString(), OneUptimeDate.toString(lastAlive)));
43
225
  }
44
226
  catch (err) {
45
227
  logger.error("Error in saving last alive in cache", {
@@ -52,7 +234,7 @@ export class Service extends DatabaseService {
52
234
  const now = OneUptimeDate.getCurrentDate();
53
235
  try {
54
236
  // before we hit the database, we need to check if the lastAlive was updated in Global Cache.
55
- const previousLastAliveCheck = await GlobalCache.getString("probe-last-alive", probeId.toString());
237
+ const previousLastAliveCheck = await this.boundedCacheOperation("Probe last-alive cache read", GlobalCache.getString(PROBE_LAST_ALIVE_CACHE_NAMESPACE, probeId.toString()));
56
238
  if (!previousLastAliveCheck) {
57
239
  await this.saveLastAliveInCache(probeId, now);
58
240
  return true;
@@ -94,12 +276,39 @@ export class Service extends DatabaseService {
94
276
  * hooks (onBeforeUpdate/onUpdateSuccess) are inert here. See
95
277
  * ServiceService.updateLastSeen.
96
278
  */
97
- await this.updateColumnsByIdWithoutHooks({
98
- id: probeId,
99
- data: {
100
- lastAlive: now,
101
- },
102
- });
279
+ try {
280
+ await this.updateColumnsByIdWithoutHooks({
281
+ id: probeId,
282
+ data: {
283
+ lastAlive: now,
284
+ },
285
+ });
286
+ }
287
+ catch (err) {
288
+ /*
289
+ * The 30s throttle stamp was written BEFORE this write was attempted
290
+ * (shouldSaveLastAlive sets it — deliberately, as dogpile
291
+ * protection). If we leave it in place after a FAILED write, every
292
+ * request for the next 30 seconds silently skips the retry, lastAlive
293
+ * quietly crosses the connection-status worker's staleness threshold,
294
+ * and a healthy probe gets flagged Disconnected. Clear the stamp so
295
+ * the very next request retries the write.
296
+ */
297
+ await this.clearLastAliveThrottle(probeId);
298
+ throw err;
299
+ }
300
+ }
301
+ // Best-effort: on failure the throttle simply expires on its own.
302
+ async clearLastAliveThrottle(probeId) {
303
+ try {
304
+ await this.boundedCacheOperation("Probe last-alive throttle clear", GlobalCache.deleteKey(PROBE_LAST_ALIVE_CACHE_NAMESPACE, probeId.toString()));
305
+ }
306
+ catch (err) {
307
+ logger.error("Error in clearing last alive throttle", {
308
+ probeId: probeId === null || probeId === void 0 ? void 0 : probeId.toString(),
309
+ });
310
+ logger.error(err, { probeId: probeId === null || probeId === void 0 ? void 0 : probeId.toString() });
311
+ }
103
312
  }
104
313
  async onBeforeCreate(createBy) {
105
314
  if (!createBy.data.key) {
@@ -192,7 +401,16 @@ export class Service extends DatabaseService {
192
401
  }
193
402
  return { updateBy: updateBy, carryForward };
194
403
  }
195
- async onUpdateSuccess(onUpdate, _updatedItemIds) {
404
+ async onUpdateSuccess(onUpdate, updatedItemIds) {
405
+ /*
406
+ * Key rotation: the auth middleware trusts a cached hash of the key, so
407
+ * the moment the key column changes the cached entries for the updated
408
+ * probes must go — otherwise the OLD key keeps authenticating until the
409
+ * cache TTL runs out.
410
+ */
411
+ if (onUpdate.updateBy.data.key !== undefined) {
412
+ await this.invalidateProbeAuthCache(updatedItemIds);
413
+ }
196
414
  if (onUpdate.carryForward &&
197
415
  onUpdate.carryForward.probesToNotifyOwners.length > 0) {
198
416
  for (const probe of onUpdate.carryForward.probesToNotifyOwners) {
@@ -204,6 +422,11 @@ export class Service extends DatabaseService {
204
422
  }
205
423
  return Promise.resolve(onUpdate);
206
424
  }
425
+ async onDeleteSuccess(onDelete, itemIdsBeforeDelete) {
426
+ // A deleted probe's key must stop authenticating.
427
+ await this.invalidateProbeAuthCache(itemIdsBeforeDelete);
428
+ return Promise.resolve(onDelete);
429
+ }
207
430
  async notifyOwnersOnStatusChange(data) {
208
431
  var _a, _b, _c, _d;
209
432
  const probe = await this.findOneById({
@@ -345,6 +568,12 @@ __decorate([
345
568
  __metadata("design:paramtypes", [Object, Array]),
346
569
  __metadata("design:returntype", Promise)
347
570
  ], Service.prototype, "onUpdateSuccess", null);
571
+ __decorate([
572
+ CaptureSpan(),
573
+ __metadata("design:type", Function),
574
+ __metadata("design:paramtypes", [Object, Array]),
575
+ __metadata("design:returntype", Promise)
576
+ ], Service.prototype, "onDeleteSuccess", null);
348
577
  __decorate([
349
578
  CaptureSpan(),
350
579
  __metadata("design:type", Function),
@@ -1 +1 @@
1
- {"version":3,"file":"ProbeService.js","sourceRoot":"","sources":["../../../../Server/Services/ProbeService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ProbeService.js","sourceRoot":"","sources":["../../../../Server/Services/ProbeService.ts"],"names":[],"mappings":"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"}
@@ -45,7 +45,7 @@ import StatusPageSubscriberNotificationMethod from "../../Types/StatusPage/Statu
45
45
  import { StatusPageApiRoute } from "../../ServiceRoute";
46
46
  import ProjectSMTPConfigService from "./ProjectSmtpConfigService";
47
47
  import StatusPageResourceService from "./StatusPageResourceService";
48
- import MonitorGroupResourceService from "./MonitorGroupResourceService";
48
+ import MonitorGroupService from "./MonitorGroupService";
49
49
  import QueryHelper from "../Types/Database/QueryHelper";
50
50
  import OneUptimeDate from "../../Types/Date";
51
51
  import IncidentService from "./IncidentService";
@@ -71,6 +71,18 @@ export class Service extends DatabaseService {
71
71
  * `clearStatusPageUrlCache` after writes to the underlying domain.
72
72
  */
73
73
  this.statusPageUrlCache = new InMemoryTTLCache(10000);
74
+ /*
75
+ * Caches verified custom-domain -> statusPageId resolution. Every public
76
+ * status-page API call served on a custom domain (overview, incidents,
77
+ * announcements, polling — several per page view) starts with this lookup,
78
+ * and the mapping only changes when a customer provisions or removes a
79
+ * domain (which takes minutes anyway), so a 60s staleness window is the
80
+ * same tradeoff `statusPageUrlCache` above already accepts. Only
81
+ * SUCCESSFUL resolutions are cached: misses re-query, so a freshly
82
+ * verified domain works immediately and attacker-controlled Host headers
83
+ * cannot fill the cache with negative entries.
84
+ */
85
+ this.statusPageDomainToIdCache = new InMemoryTTLCache(10000);
74
86
  }
75
87
  clearStatusPageUrlCache(statusPageId) {
76
88
  if (statusPageId) {
@@ -79,6 +91,13 @@ export class Service extends DatabaseService {
79
91
  }
80
92
  this.statusPageUrlCache.clear();
81
93
  }
94
+ clearStatusPageDomainToIdCache(fullDomain) {
95
+ if (fullDomain) {
96
+ this.statusPageDomainToIdCache.delete(fullDomain);
97
+ return;
98
+ }
99
+ this.statusPageDomainToIdCache.clear();
100
+ }
82
101
  /*
83
102
  * Mirrors `resolveStatusPageIdOrThrow` in `Common/Server/API/StatusPageAPI.ts`
84
103
  * (module-private there), but returns null instead of throwing so callers can
@@ -91,6 +110,10 @@ export class Service extends DatabaseService {
91
110
  return null;
92
111
  }
93
112
  if (statusPageIdOrDomain.includes(".")) {
113
+ const cachedStatusPageId = this.statusPageDomainToIdCache.get(statusPageIdOrDomain);
114
+ if (cachedStatusPageId) {
115
+ return new ObjectID(cachedStatusPageId);
116
+ }
94
117
  const statusPageDomain = await StatusPageDomainService.findOneBy({
95
118
  query: {
96
119
  fullDomain: statusPageIdOrDomain,
@@ -108,6 +131,7 @@ export class Service extends DatabaseService {
108
131
  if (!statusPageDomain || !statusPageDomain.statusPageId) {
109
132
  return null;
110
133
  }
134
+ this.statusPageDomainToIdCache.set(statusPageIdOrDomain, statusPageDomain.statusPageId.toString(), Service.DOMAIN_TO_ID_CACHE_TTL_MS);
111
135
  return statusPageDomain.statusPageId;
112
136
  }
113
137
  try {
@@ -967,7 +991,10 @@ export class Service extends DatabaseService {
967
991
  });
968
992
  }
969
993
  async getMonitorIdsOnStatusPage(data) {
970
- const statusPageResources = await this.getStatusPageResources(data);
994
+ const statusPageResources = data.statusPageResources ||
995
+ (await this.getStatusPageResources({
996
+ statusPageId: data.statusPageId,
997
+ }));
971
998
  const monitorGroupIds = statusPageResources
972
999
  .map((resource) => {
973
1000
  return resource.monitorGroupId;
@@ -984,29 +1011,11 @@ export class Service extends DatabaseService {
984
1011
  .filter((id) => {
985
1012
  return Boolean(id); // remove nulls
986
1013
  });
1014
+ // Batched: one query for all monitor groups instead of one per group.
1015
+ const monitorIdsByGroupId = await MonitorGroupService.getMonitorIdsInMonitorGroups(monitorGroupIds);
987
1016
  for (const monitorGroupId of monitorGroupIds) {
988
- // get current status of monitors in the group.
989
1017
  // get monitors in the group.
990
- const groupResources = await MonitorGroupResourceService.findBy({
991
- query: {
992
- monitorGroupId: monitorGroupId,
993
- },
994
- select: {
995
- monitorId: true,
996
- },
997
- props: {
998
- isRoot: true,
999
- },
1000
- limit: LIMIT_PER_PROJECT,
1001
- skip: 0,
1002
- });
1003
- const monitorsInGroupIds = groupResources
1004
- .map((resource) => {
1005
- return resource.monitorId;
1006
- })
1007
- .filter((id) => {
1008
- return Boolean(id); // remove nulls
1009
- });
1018
+ const monitorsInGroupIds = monitorIdsByGroupId[monitorGroupId.toString()] || [];
1010
1019
  for (const monitorId of monitorsInGroupIds) {
1011
1020
  if (!monitorsOnStatusPage.find((item) => {
1012
1021
  return item.toString() === monitorId.toString();
@@ -1067,24 +1076,21 @@ export class Service extends DatabaseService {
1067
1076
  }
1068
1077
  async getMonitorGroupCurrentStatuses(data) {
1069
1078
  const monitorGroupCurrentStatuses = {};
1079
+ /*
1080
+ * Batched: this used to issue one MonitorGroupResource query per status
1081
+ * page resource (not even per distinct group) on every badge render and
1082
+ * subscriber report. One query now serves all groups.
1083
+ */
1084
+ const resourcesByGroupId = await MonitorGroupService.getMonitorGroupResourcesByGroupIds(data.statusPageResources
1085
+ .map((resource) => {
1086
+ return resource.monitorGroupId;
1087
+ })
1088
+ .filter((id) => {
1089
+ return Boolean(id); // remove nulls
1090
+ }));
1070
1091
  for (const resource of data.statusPageResources) {
1071
1092
  if (resource.monitorGroupId) {
1072
- const monitorGroupResources = await MonitorGroupResourceService.findBy({
1073
- query: {
1074
- monitorGroupId: resource.monitorGroupId,
1075
- },
1076
- select: {
1077
- monitorId: true,
1078
- monitor: {
1079
- currentMonitorStatusId: true,
1080
- },
1081
- },
1082
- skip: 0,
1083
- limit: LIMIT_PER_PROJECT,
1084
- props: {
1085
- isRoot: true,
1086
- },
1087
- });
1093
+ const monitorGroupResources = resourcesByGroupId[resource.monitorGroupId.toString()] || [];
1088
1094
  const statuses = monitorGroupResources
1089
1095
  .filter((item) => {
1090
1096
  return (item.monitor &&
@@ -1149,6 +1155,7 @@ export class Service extends DatabaseService {
1149
1155
  return currentStatus;
1150
1156
  }
1151
1157
  }
1158
+ Service.DOMAIN_TO_ID_CACHE_TTL_MS = 60 * 1000;
1152
1159
  __decorate([
1153
1160
  CaptureSpan(),
1154
1161
  __metadata("design:type", Function),