@oneuptime/common 12.0.13 → 12.0.15

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 (561) hide show
  1. package/Models/DatabaseModels/GlobalOidc.ts +20 -0
  2. package/Models/DatabaseModels/GlobalSso.ts +20 -0
  3. package/Models/DatabaseModels/MarketingConversion.ts +19 -9
  4. package/Models/DatabaseModels/NetworkDeviceLinkRule.ts +46 -0
  5. package/Models/DatabaseModels/OnCallDutyPolicySchedule.ts +14 -0
  6. package/Models/DatabaseModels/StatusPage.ts +7 -4
  7. package/Models/DatabaseModels/UserCall.ts +94 -3
  8. package/Models/DatabaseModels/UserEmail.ts +94 -3
  9. package/Models/DatabaseModels/UserIncomingCallNumber.ts +94 -3
  10. package/Models/DatabaseModels/UserPush.ts +37 -0
  11. package/Models/DatabaseModels/UserSMS.ts +94 -3
  12. package/Models/DatabaseModels/UserWhatsApp.ts +93 -2
  13. package/Server/API/BaseAPI.ts +79 -14
  14. package/Server/API/StatusPageAPI.ts +29 -4
  15. package/Server/API/UserCallAPI.ts +53 -45
  16. package/Server/API/UserEmailAPI.ts +53 -44
  17. package/Server/API/UserIncomingCallNumberAPI.ts +48 -38
  18. package/Server/API/UserNotificationMethodAdminAPI.ts +481 -0
  19. package/Server/API/UserPushAPI.ts +126 -2
  20. package/Server/API/UserSmsAPI.ts +53 -44
  21. package/Server/API/UserWhatsAppAPI.ts +53 -50
  22. package/Server/EnvironmentConfig.ts +7 -0
  23. package/Server/Infrastructure/Postgres/SchemaMigrations/1787142779538-MigrationName.ts +154 -0
  24. package/Server/Infrastructure/Postgres/SchemaMigrations/1787156982416-MigrationName.ts +17 -0
  25. package/Server/Infrastructure/Postgres/SchemaMigrations/1787700000000-FixTotpOtpUrlAlgorithm.ts +45 -0
  26. package/Server/Infrastructure/Postgres/SchemaMigrations/1787800000000-AddScopeToNetworkDeviceLinkRule.ts +19 -0
  27. package/Server/Infrastructure/Postgres/SchemaMigrations/1787900000000-AddRestrictToAttachedProjectsToGlobalSso.ts +40 -0
  28. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +10 -0
  29. package/Server/Middleware/SlackAuthorization.ts +43 -6
  30. package/Server/Middleware/UserAuthorization.ts +236 -26
  31. package/Server/Middleware/VerificationCodeRateLimit.ts +586 -0
  32. package/Server/Middleware/WhatsAppAuthorization.ts +43 -3
  33. package/Server/Services/AnalyticsDatabaseService.ts +169 -0
  34. package/Server/Services/DatabaseService.ts +101 -0
  35. package/Server/Services/GlobalOidcProjectService.ts +126 -1
  36. package/Server/Services/GlobalOidcService.ts +132 -0
  37. package/Server/Services/GlobalSsoProjectService.ts +126 -1
  38. package/Server/Services/GlobalSsoService.ts +132 -0
  39. package/Server/Services/LogAggregationService.ts +5 -0
  40. package/Server/Services/PushNotificationService.ts +127 -12
  41. package/Server/Services/TeamMemberService.ts +53 -13
  42. package/Server/Services/UserCallService.ts +55 -24
  43. package/Server/Services/UserEmailService.ts +83 -17
  44. package/Server/Services/UserIncomingCallNumberService.ts +49 -85
  45. package/Server/Services/UserNotificationMethodAdminService.ts +1527 -0
  46. package/Server/Services/UserNotificationRuleService.ts +26 -0
  47. package/Server/Services/UserPushService.ts +89 -0
  48. package/Server/Services/UserSmsService.ts +50 -17
  49. package/Server/Services/UserWhatsAppService.ts +48 -15
  50. package/Server/Types/Database/QueryHelper.ts +30 -0
  51. package/Server/Utils/AnalyticsDatabase/QuerySettingsHelper.ts +59 -0
  52. package/Server/Utils/ChannelVerification.ts +510 -0
  53. package/Server/Utils/CronTab.ts +73 -0
  54. package/Server/Utils/GlobalSsoAuthorization.ts +175 -0
  55. package/Server/Utils/Marketing/ConversionUploadProvider.ts +35 -5
  56. package/Server/Utils/Marketing/Providers/GoogleAds.ts +1 -1
  57. package/Server/Utils/Marketing/Providers/LinkedIn.ts +1 -1
  58. package/Server/Utils/Marketing/Providers/Meta.ts +1 -1
  59. package/Server/Utils/Marketing/Providers/MicrosoftAds.ts +1 -1
  60. package/Server/Utils/Marketing/Providers/Reddit.ts +1 -1
  61. package/Server/Utils/Monitor/Criteria/APIRequestCriteria.ts +48 -33
  62. package/Server/Utils/Monitor/Criteria/DnsMonitorCriteria.ts +35 -30
  63. package/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.ts +33 -28
  64. package/Server/Utils/Monitor/Criteria/EvaluateOverTime.ts +475 -47
  65. package/Server/Utils/Monitor/Criteria/ExternalStatusPageMonitorCriteria.ts +35 -30
  66. package/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.ts +47 -44
  67. package/Server/Utils/Monitor/Criteria/SSLMonitorCriteria.ts +33 -28
  68. package/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.ts +69 -40
  69. package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +35 -29
  70. package/Server/Utils/Monitor/MonitorAlert.ts +24 -21
  71. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +8 -0
  72. package/Server/Utils/Monitor/MonitorIncident.ts +21 -18
  73. package/Server/Utils/Monitor/MonitorResource.ts +161 -21
  74. package/Server/Utils/Monitor/MonitorResourceContext.ts +107 -0
  75. package/Server/Utils/Monitor/MonitorStepResourceIdentity.ts +442 -0
  76. package/Server/Utils/Monitor/SeriesResourceLabels.ts +3 -3
  77. package/Server/Utils/Monitor/SeriesResourceLinker.ts +96 -28
  78. package/Server/Utils/StatusPageContentSecurityPolicy.ts +56 -0
  79. package/Server/Utils/StatusPageCustomizationAccess.ts +117 -0
  80. package/Server/Utils/TotpAuth.ts +137 -9
  81. package/Server/Utils/UserRegistrationToken.ts +182 -0
  82. package/Server/Utils/VerificationCode.ts +134 -0
  83. package/Tests/App/Dashboard/AdminNotificationRulesPage.test.tsx +173 -94
  84. package/Tests/App/Dashboard/AdminUserNotificationMethodsPage.test.tsx +1151 -0
  85. package/Tests/App/Dashboard/AdminUserOnCallPages.test.tsx +905 -0
  86. package/Tests/App/Dashboard/DashboardCommandPalette.test.tsx +338 -0
  87. package/Tests/App/Dashboard/InvestigationPanel.test.tsx +1 -1
  88. package/Tests/App/Dashboard/MonitorTypePicker.test.tsx +28 -0
  89. package/Tests/Models/UserPushCriticalAlertColumn.test.ts +172 -0
  90. package/Tests/Server/API/BaseAPIGetListParallel.test.ts +519 -0
  91. package/Tests/Server/API/NotificationChannelVerificationAPI.test.ts +543 -0
  92. package/Tests/Server/API/StatusPageCustomizationOrigin.test.ts +348 -0
  93. package/Tests/Server/API/UserIncomingCallNumberApi.test.ts +108 -18
  94. package/Tests/Server/API/UserNotificationMethodAdminAPI.test.ts +963 -0
  95. package/Tests/Server/API/UserPushCriticalAlertsApi.test.ts +114 -0
  96. package/Tests/Server/API/UserSmsApi.test.ts +107 -14
  97. package/Tests/Server/API/UserTotpAuthAPI.test.ts +427 -0
  98. package/Tests/Server/Infrastructure/Postgres/FixTotpOtpUrlAlgorithmMigration.test.ts +265 -0
  99. package/Tests/Server/Infrastructure/Postgres/SchemaMigrationsOrdering.test.ts +227 -0
  100. package/Tests/Server/Middleware/SlackAuthorization.test.ts +149 -0
  101. package/Tests/Server/Middleware/UserAuthorization.test.ts +27 -13
  102. package/Tests/Server/Middleware/UserAuthorizationGlobalSsoGovernance.test.ts +1455 -0
  103. package/Tests/Server/Middleware/UserAuthorizationSSOProvider.test.ts +91 -2
  104. package/Tests/Server/Middleware/VerificationCodeRateLimit.test.ts +775 -0
  105. package/Tests/Server/Middleware/WhatsAppAuthorization.test.ts +233 -0
  106. package/Tests/Server/Services/AddNetworkDeviceReachabilityColumnsMigration.test.ts +10 -62
  107. package/Tests/Server/Services/AnalyticsDatabasePaginationStability.test.ts +33 -13
  108. package/Tests/Server/Services/AnalyticsDatabaseSortKeyBoundary.test.ts +658 -0
  109. package/Tests/Server/Services/CriticalOnCallAlertDelivery.test.ts +458 -0
  110. package/Tests/Server/Services/CriticalPushAlertPayload.test.ts +301 -0
  111. package/Tests/Server/Services/DatabaseServiceAtomicIncrement.test.ts +143 -0
  112. package/Tests/Server/Services/DeliverNotificationForRuleExtraction.test.ts +1 -0
  113. package/Tests/Server/Services/DiscoveryScanClaimHookFreeSafety.test.ts +21 -8
  114. package/Tests/Server/Services/GlobalSsoProviderAuthorization.test.ts +1242 -0
  115. package/Tests/Server/Services/LogAggregationScanMemory.test.ts +421 -0
  116. package/Tests/Server/Services/LogAggregationService.test.ts +2 -2
  117. package/Tests/Server/Services/MonitorResourceProbeAgreementHydration.test.ts +459 -0
  118. package/Tests/Server/Services/MonitorResourceProbeAgreementReuse.test.ts +10 -0
  119. package/Tests/Server/Services/NotificationChannelCodeIssuance.test.ts +401 -0
  120. package/Tests/Server/Services/PushNotificationDeliveryOptions.test.ts +204 -0
  121. package/Tests/Server/Services/TeamMemberAutoAcceptInvitation.test.ts +21 -1
  122. package/Tests/Server/Services/TeamMemberInviteRegistrationToken.test.ts +290 -0
  123. package/Tests/Server/Services/UserNotificationMethodAdminService.test.ts +948 -0
  124. package/Tests/Server/Services/UserNotificationRuleExecuteItem.test.ts +1 -0
  125. package/Tests/Server/Services/UserPushCriticalAlertToggle.test.ts +255 -0
  126. package/Tests/Server/Services/UserTotpAuthEnrolment.test.ts +218 -0
  127. package/Tests/Server/TestingUtils/AuthenticatorApp.ts +248 -0
  128. package/Tests/Server/Types/AnalyticsDatabase/AggregateUtilBucketTimestamp.test.ts +416 -0
  129. package/Tests/Server/Types/Database/Permissions/NotificationChannelVerificationColumns.test.ts +135 -0
  130. package/Tests/Server/Types/Database/Permissions/OnCallScheduleRelationSelect.test.ts +504 -0
  131. package/Tests/Server/Types/Database/QueryHelperFindWithSameTextAnyOf.test.ts +91 -0
  132. package/Tests/Server/Types/Database/QueryHelperManyToManyAndEmptyValues.test.ts +551 -0
  133. package/Tests/Server/Types/Database/SelectUtil.test.ts +348 -0
  134. package/Tests/Server/Types/Workflow/Components/JsonToText.test.ts +384 -0
  135. package/Tests/Server/Types/Workflow/Components/MergeJson.test.ts +403 -0
  136. package/Tests/Server/Utils/Browser.test.ts +162 -0
  137. package/Tests/Server/Utils/ChannelVerification.test.ts +689 -0
  138. package/Tests/Server/Utils/CronTab.test.ts +116 -0
  139. package/Tests/Server/Utils/Express.test.ts +371 -0
  140. package/Tests/Server/Utils/GlobalSSOToken.test.ts +581 -0
  141. package/Tests/Server/Utils/GlobalSsoAuthorization.test.ts +1401 -0
  142. package/Tests/Server/Utils/Marketing/AdUploadableConversionTypes.test.ts +254 -0
  143. package/Tests/Server/Utils/Marketing/ConversionUploadProvider.test.ts +1 -1
  144. package/Tests/Server/Utils/Monitor/Criteria/APIRequestCriteriaEvaluateOverTime.test.ts +508 -0
  145. package/Tests/Server/Utils/Monitor/Criteria/APIRequestCriteriaPortTimings.test.ts +30 -9
  146. package/Tests/Server/Utils/Monitor/Criteria/CustomCodeMonitorCriteria.test.ts +707 -0
  147. package/Tests/Server/Utils/Monitor/Criteria/DnsMonitorCriteria.test.ts +698 -0
  148. package/Tests/Server/Utils/Monitor/Criteria/EvaluateOverTime.test.ts +987 -0
  149. package/Tests/Server/Utils/Monitor/Criteria/ExternalStatusPageMonitorCriteria.test.ts +916 -0
  150. package/Tests/Server/Utils/Monitor/Criteria/IncomingEmailBodyCriteria.test.ts +243 -0
  151. package/Tests/Server/Utils/Monitor/Criteria/IncomingRequestBodyCriteria.test.ts +278 -0
  152. package/Tests/Server/Utils/Monitor/Criteria/ProfileMonitorCriteria.test.ts +382 -0
  153. package/Tests/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.test.ts +1219 -0
  154. package/Tests/Server/Utils/Monitor/MonitorAlertResourceLinking.test.ts +160 -20
  155. package/Tests/Server/Utils/Monitor/MonitorDependencySuppressionCreatorSkip.test.ts +13 -8
  156. package/Tests/Server/Utils/Monitor/MonitorIncidentResourceLinking.test.ts +162 -18
  157. package/Tests/Server/Utils/Monitor/MonitorResourceContext.test.ts +349 -0
  158. package/Tests/Server/Utils/Monitor/MonitorResourceIngestedStepSelection.test.ts +86 -0
  159. package/Tests/Server/Utils/Monitor/MonitorStepResourceIdentity.test.ts +690 -0
  160. package/Tests/Server/Utils/Monitor/MonitorSummaryPersistence.test.ts +7 -2
  161. package/Tests/Server/Utils/Monitor/SeriesResourceLinker.test.ts +92 -18
  162. package/Tests/Server/Utils/PushNotificationUtilCreators.test.ts +267 -0
  163. package/Tests/Server/Utils/StatusPageContentSecurityPolicy.test.ts +136 -0
  164. package/Tests/Server/Utils/StatusPageCustomizationAccess.test.ts +223 -0
  165. package/Tests/Server/Utils/Telemetry/OneuptimeLabel.test.ts +439 -0
  166. package/Tests/Server/Utils/TotpAuth.test.ts +719 -0
  167. package/Tests/Server/Utils/UserRegistrationToken.test.ts +322 -0
  168. package/Tests/Server/Utils/VerificationCode.test.ts +296 -0
  169. package/Tests/Types/AutoRemediation/AutoRemediationSuggestionStatus.test.ts +192 -0
  170. package/Tests/Types/Call/CallRequest.test.ts +189 -0
  171. package/Tests/Types/Dashboard/DashboardSize.test.ts +226 -0
  172. package/Tests/Types/Incident/IncidentSlaStatus.test.ts +191 -0
  173. package/Tests/Types/Metrics/MetricDashboardMetricType.test.ts +278 -0
  174. package/Tests/Types/Metrics/MetricPipelineRuleType.test.ts +517 -0
  175. package/Tests/Types/Monitor/IncomingMonitorDefaultCriteria.test.ts +470 -0
  176. package/Tests/Types/Monitor/MonitorCriteriaInstance.test.ts +6 -4
  177. package/Tests/Types/Monitor/MonitorStepConfigHelpers.test.ts +165 -0
  178. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCatalog.test.ts +262 -5
  179. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCoverage.test.ts +1 -1
  180. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationNotificationMode.test.ts +1 -1
  181. package/Tests/Types/Monitor/ServiceAlertTemplates.test.ts +905 -0
  182. package/Tests/Types/NetworkDevice/NetworkDeviceLinkRuleScope.test.ts +215 -0
  183. package/Tests/Types/Service/ServiceLanguage.test.ts +255 -0
  184. package/Tests/Types/TextRandomGeneration.test.ts +211 -0
  185. package/Tests/UI/Components/Button.test.tsx +175 -1
  186. package/Tests/UI/Components/CodeBlockLanguages.test.tsx +236 -0
  187. package/Tests/UI/Components/CommandPalette/CommandPalette.test.tsx +568 -0
  188. package/Tests/UI/Components/CommandPalette/CommandPaletteKeyboard.test.tsx +239 -0
  189. package/Tests/UI/Components/CommandPalette/CommandPaletteProviders.test.tsx +400 -0
  190. package/Tests/UI/Components/CommandPalette/PaletteFilter.test.ts +234 -0
  191. package/Tests/UI/Components/CommandPalette/RecentCommands.test.ts +97 -0
  192. package/Tests/UI/Components/CountModelSideMenuItemGuard.test.tsx +198 -0
  193. package/Tests/UI/Components/FeedItemSafeMode.test.tsx +1 -1
  194. package/Tests/UI/Components/Forms/FormSubmitAnalytics.test.tsx +206 -0
  195. package/Tests/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.test.ts +267 -0
  196. package/Tests/UI/Components/List.test.tsx +9 -2
  197. package/Tests/UI/Components/ListLoadingStates.test.tsx +173 -0
  198. package/Tests/UI/Components/MarkdownLazy.test.tsx +113 -0
  199. package/Tests/UI/Components/MarkdownMermaidRetry.test.tsx +110 -0
  200. package/Tests/UI/Components/ModelTable/useCustomFieldColumns.test.tsx +8 -0
  201. package/Tests/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.test.ts +692 -0
  202. package/Tests/UI/Components/MoreMenuMotion.test.tsx +118 -0
  203. package/Tests/UI/Components/NavBarCommandKGating.test.tsx +178 -0
  204. package/Tests/UI/Components/OrderedStatesList.test.tsx +19 -2
  205. package/Tests/UI/Components/SideOverMotion.test.tsx +109 -0
  206. package/Tests/UI/Components/Skeleton.test.tsx +71 -0
  207. package/Tests/UI/Components/TableLoadingStates.test.tsx +279 -0
  208. package/Tests/UI/Components/Tabs.test.tsx +24 -0
  209. package/Tests/UI/Components/Toast.test.tsx +130 -7
  210. package/Tests/UI/Components/ToastStacking.test.tsx +198 -0
  211. package/Tests/UI/Utils/AIChatExport/ConversationMarkdown.test.ts +774 -0
  212. package/Tests/UI/Utils/AIChatExport/MarkdownBlocks.test.ts +791 -0
  213. package/Tests/UI/Utils/AIChatExport/MarkdownSafety.test.ts +544 -0
  214. package/Tests/UI/Utils/Dropdown.test.ts +423 -0
  215. package/Tests/UI/Utils/ModelAPITenantHeader.test.ts +122 -0
  216. package/Tests/UI/Utils/ModelListCache.test.ts +338 -0
  217. package/Tests/UI/Utils/ProjectListCacheInvalidation.test.ts +225 -0
  218. package/Tests/Utils/API.test.ts +16 -2
  219. package/Tests/Utils/Analytics.test.ts +187 -0
  220. package/Tests/Utils/Dashboard/Components/DashboardKubernetesResourceListShared.test.ts +347 -0
  221. package/Tests/Utils/Dashboard/Components/DashboardListSharedArgs.test.ts +259 -0
  222. package/Tests/Utils/Dashboard/Components/DashboardMonitorListComponent.test.ts +466 -0
  223. package/Tests/Utils/Monitor/MonitorMetricType.test.ts +80 -0
  224. package/Tests/Utils/Monitor/NetworkDeviceLinkRuleUtil.test.ts +1291 -0
  225. package/Tests/Utils/NetworkDiscovery/UnclaimedScanDiagnosis.test.ts +214 -0
  226. package/Tests/Utils/Rum/UrlScrubberSegments.test.ts +362 -0
  227. package/Types/Email/EmailTemplateType.ts +1 -0
  228. package/Types/Marketing/MarketingConversion.ts +12 -0
  229. package/Types/Monitor/CriteriaFilter.ts +9 -0
  230. package/Types/Monitor/MonitorCriteriaInstance.ts +41 -20
  231. package/Types/Monitor/Recommendation/MonitorRecommendationCatalog.ts +131 -8
  232. package/Types/Monitor/Recommendation/MonitorRecommendationTypes.ts +48 -8
  233. package/Types/Monitor/ServiceAlertTemplates.ts +1352 -0
  234. package/Types/NetworkDevice/NetworkDeviceLinkRuleScope.ts +51 -0
  235. package/Types/Permission.ts +35 -0
  236. package/Types/PushNotification/AndroidNotificationChannel.ts +26 -0
  237. package/Types/PushNotification/PushNotificationMessage.ts +15 -0
  238. package/Types/PushNotification/PushNotificationRequest.ts +8 -16
  239. package/Types/Service/ServiceLanguage.ts +144 -0
  240. package/Types/Text.ts +111 -19
  241. package/UI/Components/Button/Button.tsx +27 -14
  242. package/UI/Components/CodeBlock/CodeBlock.tsx +54 -7
  243. package/UI/Components/CodeBlock/LanguageRegistry.ts +103 -0
  244. package/UI/Components/CommandPalette/CommandPalette.tsx +790 -0
  245. package/UI/Components/CommandPalette/PaletteFilter.ts +196 -0
  246. package/UI/Components/CommandPalette/PaletteRow.tsx +173 -0
  247. package/UI/Components/CommandPalette/RecentCommands.ts +57 -0
  248. package/UI/Components/CommandPalette/Types.ts +49 -0
  249. package/UI/Components/CommandPalette/UseProviderSearch.ts +129 -0
  250. package/UI/Components/Dropdown/Dropdown.tsx +6 -1
  251. package/UI/Components/Feed/FeedItem.tsx +1 -1
  252. package/UI/Components/FormModal/BasicFormModal.tsx +12 -0
  253. package/UI/Components/Forms/BasicForm.tsx +13 -1
  254. package/UI/Components/Forms/BasicModelForm.tsx +2 -1
  255. package/UI/Components/Forms/ModelForm.tsx +10 -1
  256. package/UI/Components/Forms/Utils/FormAnalyticsName.ts +39 -0
  257. package/UI/Components/List/List.tsx +37 -5
  258. package/UI/Components/List/ListSkeleton.tsx +54 -0
  259. package/UI/Components/Markdown.tsx/LazyMarkdownViewer.tsx +6 -1
  260. package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +71 -26
  261. package/UI/Components/Modal/Modal.tsx +2 -2
  262. package/UI/Components/ModelFormModal/ModelFormModal.tsx +6 -1
  263. package/UI/Components/ModelTable/BaseModelTable.tsx +1 -1
  264. package/UI/Components/ModelTable/useCustomFieldColumns.ts +11 -5
  265. package/UI/Components/MoreMenu/MoreMenu.tsx +39 -1
  266. package/UI/Components/Navbar/NavBar.tsx +14 -1
  267. package/UI/Components/OrderedStatesList/OrderedStatesList.tsx +50 -5
  268. package/UI/Components/SideMenu/CountModelSideMenuItem.tsx +40 -1
  269. package/UI/Components/SideOver/SideOver.tsx +37 -2
  270. package/UI/Components/Skeleton/Skeleton.tsx +53 -0
  271. package/UI/Components/Table/Table.tsx +74 -44
  272. package/UI/Components/Table/TableSkeletonRows.tsx +141 -0
  273. package/UI/Components/Tabs/Tab.tsx +1 -1
  274. package/UI/Components/Toast/Toast.tsx +118 -53
  275. package/UI/Components/Toast/ToastInit.tsx +82 -32
  276. package/UI/Styles/Theme.css +40 -0
  277. package/UI/Utils/ModelAPI/ModelAPI.ts +20 -10
  278. package/UI/Utils/ModelListCache.ts +188 -0
  279. package/UI/Utils/Project.ts +29 -0
  280. package/Utils/API.ts +6 -1
  281. package/Utils/Analytics.ts +55 -2
  282. package/Utils/Monitor/MonitorMetricType.ts +40 -0
  283. package/Utils/Monitor/NetworkDeviceLinkRuleUtil.ts +587 -37
  284. package/Utils/NetworkDiscovery/UnclaimedScanDiagnosis.ts +115 -0
  285. package/build/dist/Models/DatabaseModels/GlobalOidc.js +21 -0
  286. package/build/dist/Models/DatabaseModels/GlobalOidc.js.map +1 -1
  287. package/build/dist/Models/DatabaseModels/GlobalSso.js +21 -0
  288. package/build/dist/Models/DatabaseModels/GlobalSso.js.map +1 -1
  289. package/build/dist/Models/DatabaseModels/MarketingConversion.js +20 -10
  290. package/build/dist/Models/DatabaseModels/MarketingConversion.js.map +1 -1
  291. package/build/dist/Models/DatabaseModels/NetworkDeviceLinkRule.js +47 -0
  292. package/build/dist/Models/DatabaseModels/NetworkDeviceLinkRule.js.map +1 -1
  293. package/build/dist/Models/DatabaseModels/OnCallDutyPolicySchedule.js +14 -0
  294. package/build/dist/Models/DatabaseModels/OnCallDutyPolicySchedule.js.map +1 -1
  295. package/build/dist/Models/DatabaseModels/StatusPage.js +4 -4
  296. package/build/dist/Models/DatabaseModels/StatusPage.js.map +1 -1
  297. package/build/dist/Models/DatabaseModels/UserCall.js +101 -3
  298. package/build/dist/Models/DatabaseModels/UserCall.js.map +1 -1
  299. package/build/dist/Models/DatabaseModels/UserEmail.js +101 -3
  300. package/build/dist/Models/DatabaseModels/UserEmail.js.map +1 -1
  301. package/build/dist/Models/DatabaseModels/UserIncomingCallNumber.js +101 -3
  302. package/build/dist/Models/DatabaseModels/UserIncomingCallNumber.js.map +1 -1
  303. package/build/dist/Models/DatabaseModels/UserPush.js +38 -0
  304. package/build/dist/Models/DatabaseModels/UserPush.js.map +1 -1
  305. package/build/dist/Models/DatabaseModels/UserSMS.js +101 -3
  306. package/build/dist/Models/DatabaseModels/UserSMS.js.map +1 -1
  307. package/build/dist/Models/DatabaseModels/UserWhatsApp.js +100 -2
  308. package/build/dist/Models/DatabaseModels/UserWhatsApp.js.map +1 -1
  309. package/build/dist/Server/API/BaseAPI.js +69 -13
  310. package/build/dist/Server/API/BaseAPI.js.map +1 -1
  311. package/build/dist/Server/API/StatusPageAPI.js +25 -4
  312. package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
  313. package/build/dist/Server/API/UserCallAPI.js +42 -38
  314. package/build/dist/Server/API/UserCallAPI.js.map +1 -1
  315. package/build/dist/Server/API/UserEmailAPI.js +42 -38
  316. package/build/dist/Server/API/UserEmailAPI.js.map +1 -1
  317. package/build/dist/Server/API/UserIncomingCallNumberAPI.js +37 -32
  318. package/build/dist/Server/API/UserIncomingCallNumberAPI.js.map +1 -1
  319. package/build/dist/Server/API/UserNotificationMethodAdminAPI.js +341 -0
  320. package/build/dist/Server/API/UserNotificationMethodAdminAPI.js.map +1 -0
  321. package/build/dist/Server/API/UserPushAPI.js +95 -2
  322. package/build/dist/Server/API/UserPushAPI.js.map +1 -1
  323. package/build/dist/Server/API/UserSmsAPI.js +42 -38
  324. package/build/dist/Server/API/UserSmsAPI.js.map +1 -1
  325. package/build/dist/Server/API/UserWhatsAppAPI.js +42 -40
  326. package/build/dist/Server/API/UserWhatsAppAPI.js.map +1 -1
  327. package/build/dist/Server/EnvironmentConfig.js +6 -0
  328. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  329. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787142779538-MigrationName.js +89 -0
  330. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787142779538-MigrationName.js.map +1 -0
  331. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787156982416-MigrationName.js +12 -0
  332. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787156982416-MigrationName.js.map +1 -0
  333. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787700000000-FixTotpOtpUrlAlgorithm.js +40 -0
  334. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787700000000-FixTotpOtpUrlAlgorithm.js.map +1 -0
  335. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787800000000-AddScopeToNetworkDeviceLinkRule.js +12 -0
  336. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787800000000-AddScopeToNetworkDeviceLinkRule.js.map +1 -0
  337. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787900000000-AddRestrictToAttachedProjectsToGlobalSso.js +29 -0
  338. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787900000000-AddRestrictToAttachedProjectsToGlobalSso.js.map +1 -0
  339. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +10 -0
  340. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  341. package/build/dist/Server/Middleware/SlackAuthorization.js +28 -4
  342. package/build/dist/Server/Middleware/SlackAuthorization.js.map +1 -1
  343. package/build/dist/Server/Middleware/UserAuthorization.js +197 -22
  344. package/build/dist/Server/Middleware/UserAuthorization.js.map +1 -1
  345. package/build/dist/Server/Middleware/VerificationCodeRateLimit.js +393 -0
  346. package/build/dist/Server/Middleware/VerificationCodeRateLimit.js.map +1 -0
  347. package/build/dist/Server/Middleware/WhatsAppAuthorization.js +32 -2
  348. package/build/dist/Server/Middleware/WhatsAppAuthorization.js.map +1 -1
  349. package/build/dist/Server/Services/AnalyticsDatabaseService.js +136 -0
  350. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  351. package/build/dist/Server/Services/DatabaseService.js +74 -0
  352. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  353. package/build/dist/Server/Services/GlobalOidcProjectService.js +105 -0
  354. package/build/dist/Server/Services/GlobalOidcProjectService.js.map +1 -1
  355. package/build/dist/Server/Services/GlobalOidcService.js +127 -0
  356. package/build/dist/Server/Services/GlobalOidcService.js.map +1 -1
  357. package/build/dist/Server/Services/GlobalSsoProjectService.js +105 -0
  358. package/build/dist/Server/Services/GlobalSsoProjectService.js.map +1 -1
  359. package/build/dist/Server/Services/GlobalSsoService.js +127 -0
  360. package/build/dist/Server/Services/GlobalSsoService.js.map +1 -1
  361. package/build/dist/Server/Services/LogAggregationService.js +5 -0
  362. package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
  363. package/build/dist/Server/Services/PushNotificationService.js +69 -30
  364. package/build/dist/Server/Services/PushNotificationService.js.map +1 -1
  365. package/build/dist/Server/Services/TeamMemberService.js +43 -7
  366. package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
  367. package/build/dist/Server/Services/UserCallService.js +54 -22
  368. package/build/dist/Server/Services/UserCallService.js.map +1 -1
  369. package/build/dist/Server/Services/UserEmailService.js +78 -17
  370. package/build/dist/Server/Services/UserEmailService.js.map +1 -1
  371. package/build/dist/Server/Services/UserIncomingCallNumberService.js +45 -74
  372. package/build/dist/Server/Services/UserIncomingCallNumberService.js.map +1 -1
  373. package/build/dist/Server/Services/UserNotificationMethodAdminService.js +1117 -0
  374. package/build/dist/Server/Services/UserNotificationMethodAdminService.js.map +1 -0
  375. package/build/dist/Server/Services/UserNotificationRuleService.js +20 -0
  376. package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
  377. package/build/dist/Server/Services/UserPushService.js +77 -0
  378. package/build/dist/Server/Services/UserPushService.js.map +1 -1
  379. package/build/dist/Server/Services/UserSmsService.js +50 -17
  380. package/build/dist/Server/Services/UserSmsService.js.map +1 -1
  381. package/build/dist/Server/Services/UserWhatsAppService.js +48 -15
  382. package/build/dist/Server/Services/UserWhatsAppService.js.map +1 -1
  383. package/build/dist/Server/Types/Database/QueryHelper.js +27 -0
  384. package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
  385. package/build/dist/Server/Utils/AnalyticsDatabase/QuerySettingsHelper.js +46 -0
  386. package/build/dist/Server/Utils/AnalyticsDatabase/QuerySettingsHelper.js.map +1 -1
  387. package/build/dist/Server/Utils/ChannelVerification.js +348 -0
  388. package/build/dist/Server/Utils/ChannelVerification.js.map +1 -0
  389. package/build/dist/Server/Utils/CronTab.js +66 -0
  390. package/build/dist/Server/Utils/CronTab.js.map +1 -1
  391. package/build/dist/Server/Utils/GlobalSsoAuthorization.js +112 -0
  392. package/build/dist/Server/Utils/GlobalSsoAuthorization.js.map +1 -0
  393. package/build/dist/Server/Utils/Marketing/ConversionUploadProvider.js +17 -1
  394. package/build/dist/Server/Utils/Marketing/ConversionUploadProvider.js.map +1 -1
  395. package/build/dist/Server/Utils/Marketing/Providers/GoogleAds.js +1 -1
  396. package/build/dist/Server/Utils/Marketing/Providers/GoogleAds.js.map +1 -1
  397. package/build/dist/Server/Utils/Marketing/Providers/LinkedIn.js +1 -1
  398. package/build/dist/Server/Utils/Marketing/Providers/LinkedIn.js.map +1 -1
  399. package/build/dist/Server/Utils/Marketing/Providers/Meta.js +1 -1
  400. package/build/dist/Server/Utils/Marketing/Providers/Meta.js.map +1 -1
  401. package/build/dist/Server/Utils/Marketing/Providers/MicrosoftAds.js +1 -1
  402. package/build/dist/Server/Utils/Marketing/Providers/MicrosoftAds.js.map +1 -1
  403. package/build/dist/Server/Utils/Marketing/Providers/Reddit.js +1 -1
  404. package/build/dist/Server/Utils/Marketing/Providers/Reddit.js.map +1 -1
  405. package/build/dist/Server/Utils/Monitor/Criteria/APIRequestCriteria.js +37 -35
  406. package/build/dist/Server/Utils/Monitor/Criteria/APIRequestCriteria.js.map +1 -1
  407. package/build/dist/Server/Utils/Monitor/Criteria/DnsMonitorCriteria.js +21 -25
  408. package/build/dist/Server/Utils/Monitor/Criteria/DnsMonitorCriteria.js.map +1 -1
  409. package/build/dist/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.js +20 -22
  410. package/build/dist/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.js.map +1 -1
  411. package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js +370 -42
  412. package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js.map +1 -1
  413. package/build/dist/Server/Utils/Monitor/Criteria/ExternalStatusPageMonitorCriteria.js +21 -25
  414. package/build/dist/Server/Utils/Monitor/Criteria/ExternalStatusPageMonitorCriteria.js.map +1 -1
  415. package/build/dist/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.js +34 -37
  416. package/build/dist/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.js.map +1 -1
  417. package/build/dist/Server/Utils/Monitor/Criteria/SSLMonitorCriteria.js +21 -25
  418. package/build/dist/Server/Utils/Monitor/Criteria/SSLMonitorCriteria.js.map +1 -1
  419. package/build/dist/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.js +64 -52
  420. package/build/dist/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.js.map +1 -1
  421. package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +25 -29
  422. package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js.map +1 -1
  423. package/build/dist/Server/Utils/Monitor/MonitorAlert.js +20 -17
  424. package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
  425. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +8 -0
  426. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  427. package/build/dist/Server/Utils/Monitor/MonitorIncident.js +17 -14
  428. package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
  429. package/build/dist/Server/Utils/Monitor/MonitorResource.js +123 -23
  430. package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
  431. package/build/dist/Server/Utils/Monitor/MonitorResourceContext.js +95 -0
  432. package/build/dist/Server/Utils/Monitor/MonitorResourceContext.js.map +1 -0
  433. package/build/dist/Server/Utils/Monitor/MonitorStepResourceIdentity.js +313 -0
  434. package/build/dist/Server/Utils/Monitor/MonitorStepResourceIdentity.js.map +1 -0
  435. package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js +3 -3
  436. package/build/dist/Server/Utils/Monitor/SeriesResourceLinker.js +67 -26
  437. package/build/dist/Server/Utils/Monitor/SeriesResourceLinker.js.map +1 -1
  438. package/build/dist/Server/Utils/StatusPageContentSecurityPolicy.js +39 -0
  439. package/build/dist/Server/Utils/StatusPageContentSecurityPolicy.js.map +1 -0
  440. package/build/dist/Server/Utils/StatusPageCustomizationAccess.js +85 -0
  441. package/build/dist/Server/Utils/StatusPageCustomizationAccess.js.map +1 -0
  442. package/build/dist/Server/Utils/TotpAuth.js +127 -8
  443. package/build/dist/Server/Utils/TotpAuth.js.map +1 -1
  444. package/build/dist/Server/Utils/UserRegistrationToken.js +170 -0
  445. package/build/dist/Server/Utils/UserRegistrationToken.js.map +1 -0
  446. package/build/dist/Server/Utils/VerificationCode.js +120 -0
  447. package/build/dist/Server/Utils/VerificationCode.js.map +1 -0
  448. package/build/dist/Types/Email/EmailTemplateType.js +1 -0
  449. package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
  450. package/build/dist/Types/Marketing/MarketingConversion.js +10 -0
  451. package/build/dist/Types/Marketing/MarketingConversion.js.map +1 -1
  452. package/build/dist/Types/Monitor/CriteriaFilter.js +1 -0
  453. package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
  454. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +42 -21
  455. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
  456. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js +77 -5
  457. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js.map +1 -1
  458. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js +18 -6
  459. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js.map +1 -1
  460. package/build/dist/Types/Monitor/ServiceAlertTemplates.js +1028 -0
  461. package/build/dist/Types/Monitor/ServiceAlertTemplates.js.map +1 -0
  462. package/build/dist/Types/NetworkDevice/NetworkDeviceLinkRuleScope.js +46 -0
  463. package/build/dist/Types/NetworkDevice/NetworkDeviceLinkRuleScope.js.map +1 -0
  464. package/build/dist/Types/Permission.js +33 -0
  465. package/build/dist/Types/Permission.js.map +1 -1
  466. package/build/dist/Types/PushNotification/AndroidNotificationChannel.js +27 -0
  467. package/build/dist/Types/PushNotification/AndroidNotificationChannel.js.map +1 -0
  468. package/build/dist/Types/Service/ServiceLanguage.js +96 -0
  469. package/build/dist/Types/Service/ServiceLanguage.js.map +1 -0
  470. package/build/dist/Types/Text.js +82 -17
  471. package/build/dist/Types/Text.js.map +1 -1
  472. package/build/dist/UI/Components/Button/Button.js +22 -14
  473. package/build/dist/UI/Components/Button/Button.js.map +1 -1
  474. package/build/dist/UI/Components/CodeBlock/CodeBlock.js +35 -3
  475. package/build/dist/UI/Components/CodeBlock/CodeBlock.js.map +1 -1
  476. package/build/dist/UI/Components/CodeBlock/LanguageRegistry.js +57 -0
  477. package/build/dist/UI/Components/CodeBlock/LanguageRegistry.js.map +1 -0
  478. package/build/dist/UI/Components/CommandPalette/CommandPalette.js +439 -0
  479. package/build/dist/UI/Components/CommandPalette/CommandPalette.js.map +1 -0
  480. package/build/dist/UI/Components/CommandPalette/PaletteFilter.js +135 -0
  481. package/build/dist/UI/Components/CommandPalette/PaletteFilter.js.map +1 -0
  482. package/build/dist/UI/Components/CommandPalette/PaletteRow.js +83 -0
  483. package/build/dist/UI/Components/CommandPalette/PaletteRow.js.map +1 -0
  484. package/build/dist/UI/Components/CommandPalette/RecentCommands.js +47 -0
  485. package/build/dist/UI/Components/CommandPalette/RecentCommands.js.map +1 -0
  486. package/build/dist/UI/Components/CommandPalette/Types.js +2 -0
  487. package/build/dist/UI/Components/CommandPalette/Types.js.map +1 -0
  488. package/build/dist/UI/Components/CommandPalette/UseProviderSearch.js +88 -0
  489. package/build/dist/UI/Components/CommandPalette/UseProviderSearch.js.map +1 -0
  490. package/build/dist/UI/Components/Dropdown/Dropdown.js +6 -1
  491. package/build/dist/UI/Components/Dropdown/Dropdown.js.map +1 -1
  492. package/build/dist/UI/Components/Feed/FeedItem.js +1 -1
  493. package/build/dist/UI/Components/Feed/FeedItem.js.map +1 -1
  494. package/build/dist/UI/Components/FormModal/BasicFormModal.js +2 -1
  495. package/build/dist/UI/Components/FormModal/BasicFormModal.js.map +1 -1
  496. package/build/dist/UI/Components/Forms/BasicForm.js +10 -1
  497. package/build/dist/UI/Components/Forms/BasicForm.js.map +1 -1
  498. package/build/dist/UI/Components/Forms/BasicModelForm.js +2 -1
  499. package/build/dist/UI/Components/Forms/BasicModelForm.js.map +1 -1
  500. package/build/dist/UI/Components/Forms/ModelForm.js +4 -1
  501. package/build/dist/UI/Components/Forms/ModelForm.js.map +1 -1
  502. package/build/dist/UI/Components/Forms/Utils/FormAnalyticsName.js +33 -0
  503. package/build/dist/UI/Components/Forms/Utils/FormAnalyticsName.js.map +1 -0
  504. package/build/dist/UI/Components/List/List.js +19 -5
  505. package/build/dist/UI/Components/List/List.js.map +1 -1
  506. package/build/dist/UI/Components/List/ListSkeleton.js +21 -0
  507. package/build/dist/UI/Components/List/ListSkeleton.js.map +1 -0
  508. package/build/dist/UI/Components/Markdown.tsx/LazyMarkdownViewer.js.map +1 -1
  509. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +52 -25
  510. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
  511. package/build/dist/UI/Components/Modal/Modal.js +2 -2
  512. package/build/dist/UI/Components/ModelFormModal/ModelFormModal.js +2 -1
  513. package/build/dist/UI/Components/ModelFormModal/ModelFormModal.js.map +1 -1
  514. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +1 -1
  515. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  516. package/build/dist/UI/Components/ModelTable/useCustomFieldColumns.js +9 -2
  517. package/build/dist/UI/Components/ModelTable/useCustomFieldColumns.js.map +1 -1
  518. package/build/dist/UI/Components/MoreMenu/MoreMenu.js +32 -1
  519. package/build/dist/UI/Components/MoreMenu/MoreMenu.js.map +1 -1
  520. package/build/dist/UI/Components/Navbar/NavBar.js +5 -1
  521. package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
  522. package/build/dist/UI/Components/OrderedStatesList/OrderedStatesList.js +29 -5
  523. package/build/dist/UI/Components/OrderedStatesList/OrderedStatesList.js.map +1 -1
  524. package/build/dist/UI/Components/SideMenu/CountModelSideMenuItem.js +23 -1
  525. package/build/dist/UI/Components/SideMenu/CountModelSideMenuItem.js.map +1 -1
  526. package/build/dist/UI/Components/SideOver/SideOver.js +23 -2
  527. package/build/dist/UI/Components/SideOver/SideOver.js.map +1 -1
  528. package/build/dist/UI/Components/Skeleton/Skeleton.js +23 -0
  529. package/build/dist/UI/Components/Skeleton/Skeleton.js.map +1 -0
  530. package/build/dist/UI/Components/Table/Table.js +35 -24
  531. package/build/dist/UI/Components/Table/Table.js.map +1 -1
  532. package/build/dist/UI/Components/Table/TableSkeletonRows.js +52 -0
  533. package/build/dist/UI/Components/Table/TableSkeletonRows.js.map +1 -0
  534. package/build/dist/UI/Components/Tabs/Tab.js +1 -1
  535. package/build/dist/UI/Components/Tabs/Tab.js.map +1 -1
  536. package/build/dist/UI/Components/Toast/Toast.js +77 -23
  537. package/build/dist/UI/Components/Toast/Toast.js.map +1 -1
  538. package/build/dist/UI/Components/Toast/ToastInit.js +37 -15
  539. package/build/dist/UI/Components/Toast/ToastInit.js.map +1 -1
  540. package/build/dist/UI/Utils/ModelAPI/ModelAPI.js +18 -9
  541. package/build/dist/UI/Utils/ModelAPI/ModelAPI.js.map +1 -1
  542. package/build/dist/UI/Utils/ModelListCache.js +126 -0
  543. package/build/dist/UI/Utils/ModelListCache.js.map +1 -0
  544. package/build/dist/UI/Utils/Project.js +24 -1
  545. package/build/dist/UI/Utils/Project.js.map +1 -1
  546. package/build/dist/Utils/API.js +6 -1
  547. package/build/dist/Utils/API.js.map +1 -1
  548. package/build/dist/Utils/Analytics.js +50 -2
  549. package/build/dist/Utils/Analytics.js.map +1 -1
  550. package/build/dist/Utils/Monitor/MonitorMetricType.js +37 -0
  551. package/build/dist/Utils/Monitor/MonitorMetricType.js.map +1 -1
  552. package/build/dist/Utils/Monitor/NetworkDeviceLinkRuleUtil.js +318 -37
  553. package/build/dist/Utils/Monitor/NetworkDeviceLinkRuleUtil.js.map +1 -1
  554. package/build/dist/Utils/NetworkDiscovery/UnclaimedScanDiagnosis.js +87 -0
  555. package/build/dist/Utils/NetworkDiscovery/UnclaimedScanDiagnosis.js.map +1 -0
  556. package/jest.config.json +1 -1
  557. package/package.json +2 -3
  558. package/Server/Utils/Monitor/MonitorClusterContext.ts +0 -182
  559. package/Tests/__mocks__/otpauth.js +0 -30
  560. package/build/dist/Server/Utils/Monitor/MonitorClusterContext.js +0 -141
  561. package/build/dist/Server/Utils/Monitor/MonitorClusterContext.js.map +0 -1
@@ -9,7 +9,7 @@ import {
9
9
  } from "../../../../Types/Monitor/CriteriaFilter";
10
10
  import IncomingMonitorRequest from "../../../../Types/Monitor/IncomingMonitor/IncomingMonitorRequest";
11
11
  import Typeof from "../../../../Types/Typeof";
12
- import EvaluateOverTime from "./EvaluateOverTime";
12
+ import EvaluateOverTime, { OverTimeCriteriaValue } from "./EvaluateOverTime";
13
13
  import CompareCriteria from "./CompareCriteria";
14
14
  import ProbeMonitorResponse from "../../../../Types/Probe/ProbeMonitorResponse";
15
15
  import CaptureSpan from "../../Telemetry/CaptureSpan";
@@ -19,6 +19,13 @@ export default class IncomingRequestCriteria {
19
19
  public static async isMonitorInstanceCriteriaFilterMet(input: {
20
20
  dataToProcess: DataToProcess;
21
21
  criteriaFilter: CriteriaFilter;
22
+ /*
23
+ * The monitor's monitoringInterval cron. Over-time filters use it to
24
+ * work out how many samples a fully covered window should hold, so a
25
+ * monitor that has only just started is not mistaken for one whose
26
+ * whole window is breaching.
27
+ */
28
+ monitoringInterval?: string | undefined;
22
29
  }): Promise<string | null> {
23
30
  // Server Monitoring Checks
24
31
 
@@ -37,36 +44,35 @@ export default class IncomingRequestCriteria {
37
44
 
38
45
  let value: number | string | undefined = input.criteriaFilter.value;
39
46
 
40
- let overTimeValue: Array<number | boolean> | number | boolean | undefined =
41
- undefined;
42
-
43
- if (
44
- input.criteriaFilter.evaluateOverTime &&
45
- input.criteriaFilter.evaluateOverTimeOptions
46
- ) {
47
- try {
48
- overTimeValue = await EvaluateOverTime.getValueOverTime({
49
- projectId: (input.dataToProcess as IncomingMonitorRequest).projectId,
50
- monitorId: input.dataToProcess.monitorId!,
51
- evaluateOverTimeOptions: input.criteriaFilter.evaluateOverTimeOptions,
52
- metricType: input.criteriaFilter.checkOn,
53
- });
54
-
55
- if (Array.isArray(overTimeValue) && overTimeValue.length === 0) {
56
- overTimeValue = undefined;
57
- }
58
- } catch (err) {
59
- logger.error(
60
- `Error in getting over time value for ${input.criteriaFilter.checkOn}`,
61
- );
62
- logger.error(err);
63
- overTimeValue = undefined;
64
- }
47
+ const overTime: OverTimeCriteriaValue =
48
+ await EvaluateOverTime.getOverTimeValueForCriteriaFilter({
49
+ projectId: (input.dataToProcess as IncomingMonitorRequest).projectId,
50
+ monitorId: input.dataToProcess.monitorId!,
51
+ criteriaFilter: input.criteriaFilter,
52
+ monitoringInterval: input.monitoringInterval,
53
+ });
54
+
55
+ /*
56
+ * The window could not back this over-time filter (nothing recorded yet,
57
+ * or the monitor has not been running long enough to cover it). Return
58
+ * the decision the no-data policy already made instead of falling
59
+ * through to the value that arrived with this one check - that fallback
60
+ * is what let "all values over the last N minutes" fire off a single
61
+ * bad reading.
62
+ */
63
+ if (overTime.earlyReturn) {
64
+ return overTime.earlyReturn.result;
65
65
  }
66
66
 
67
+ const overTimeValue:
68
+ | Array<number | boolean>
69
+ | number
70
+ | boolean
71
+ | undefined = overTime.value;
72
+
67
73
  if (input.criteriaFilter.checkOn === CheckOn.IsOnline) {
68
74
  const currentIsOnline: boolean | Array<boolean> =
69
- (overTimeValue as Array<boolean>) ||
75
+ (overTimeValue as Array<boolean>) ??
70
76
  (input.dataToProcess as ProbeMonitorResponse).isOnline;
71
77
 
72
78
  return CompareCriteria.compareCriteriaBoolean({
@@ -78,7 +84,7 @@ export default class IncomingRequestCriteria {
78
84
  // timeout.
79
85
  if (input.criteriaFilter.checkOn === CheckOn.IsRequestTimeout) {
80
86
  const currentIsTimeout: boolean | Array<boolean> =
81
- (overTimeValue as Array<boolean>) ||
87
+ (overTimeValue as Array<boolean>) ??
82
88
  (input.dataToProcess as ProbeMonitorResponse).isTimeout;
83
89
 
84
90
  return CompareCriteria.compareCriteriaBoolean({
@@ -160,36 +166,33 @@ export default class IncomingRequestCriteria {
160
166
  }
161
167
 
162
168
  if (input.criteriaFilter.checkOn === CheckOn.RequestBody) {
163
- let responseBody: string | JSONObject | undefined = (
169
+ let requestBody: string | JSONObject | undefined = (
164
170
  input.dataToProcess as IncomingMonitorRequest
165
171
  ).requestBody;
166
172
 
167
- if (responseBody && typeof responseBody === Typeof.Object) {
168
- responseBody = JSON.stringify(responseBody);
173
+ if (requestBody && typeof requestBody === Typeof.Object) {
174
+ requestBody = JSON.stringify(requestBody);
169
175
  }
170
176
 
171
- if (!responseBody) {
172
- return null;
173
- }
177
+ /*
178
+ * A request that carried no body is an empty body, not an unknown one.
179
+ * Normalising to "" (the same thing IncomingEmailCriteria does for the
180
+ * email fields) is what lets a "Not Contains" filter match a bodiless
181
+ * heartbeat ping - the default online criteria for this monitor type.
182
+ * "Contains" is unaffected: "" contains nothing.
183
+ */
184
+ const body: string = (requestBody as string | undefined) || "";
174
185
 
175
186
  // contains
176
187
  if (input.criteriaFilter.filterType === FilterType.Contains) {
177
- if (
178
- value &&
179
- responseBody &&
180
- (responseBody as string).includes(value as string)
181
- ) {
188
+ if (value && body.includes(value as string)) {
182
189
  return `Request body contains ${value}.`;
183
190
  }
184
191
  return null;
185
192
  }
186
193
 
187
194
  if (input.criteriaFilter.filterType === FilterType.NotContains) {
188
- if (
189
- value &&
190
- responseBody &&
191
- !(responseBody as string).includes(value as string)
192
- ) {
195
+ if (value && !body.includes(value as string)) {
193
196
  return `Request body does not contain ${value}.`;
194
197
  }
195
198
  return null;
@@ -8,15 +8,21 @@ import {
8
8
  } from "../../../../Types/Monitor/CriteriaFilter";
9
9
  import SslMonitorResponse from "../../../../Types/Monitor/SSLMonitor/SslMonitorResponse";
10
10
  import ProbeMonitorResponse from "../../../../Types/Probe/ProbeMonitorResponse";
11
- import EvaluateOverTime from "./EvaluateOverTime";
11
+ import EvaluateOverTime, { OverTimeCriteriaValue } from "./EvaluateOverTime";
12
12
  import CaptureSpan from "../../Telemetry/CaptureSpan";
13
- import logger from "../../Logger";
14
13
 
15
14
  export default class ServerMonitorCriteria {
16
15
  @CaptureSpan()
17
16
  public static async isMonitorInstanceCriteriaFilterMet(input: {
18
17
  dataToProcess: DataToProcess;
19
18
  criteriaFilter: CriteriaFilter;
19
+ /*
20
+ * The monitor's monitoringInterval cron. Over-time filters use it to
21
+ * work out how many samples a fully covered window should hold, so a
22
+ * monitor that has only just started is not mistaken for one whose
23
+ * whole window is breaching.
24
+ */
25
+ monitoringInterval?: string | undefined;
20
26
  }): Promise<string | null> {
21
27
  let threshold: number | string | undefined | null =
22
28
  input.criteriaFilter.value;
@@ -27,36 +33,35 @@ export default class ServerMonitorCriteria {
27
33
  const sslResponse: SslMonitorResponse | undefined =
28
34
  dataToProcess.sslResponse;
29
35
 
30
- let overTimeValue: Array<number | boolean> | number | boolean | undefined =
31
- undefined;
36
+ const overTime: OverTimeCriteriaValue =
37
+ await EvaluateOverTime.getOverTimeValueForCriteriaFilter({
38
+ projectId: (input.dataToProcess as ProbeMonitorResponse).projectId,
39
+ monitorId: input.dataToProcess.monitorId!,
40
+ criteriaFilter: input.criteriaFilter,
41
+ monitoringInterval: input.monitoringInterval,
42
+ });
32
43
 
33
- if (
34
- input.criteriaFilter.evaluateOverTime &&
35
- input.criteriaFilter.evaluateOverTimeOptions
36
- ) {
37
- try {
38
- overTimeValue = await EvaluateOverTime.getValueOverTime({
39
- projectId: (input.dataToProcess as ProbeMonitorResponse).projectId,
40
- monitorId: input.dataToProcess.monitorId!,
41
- evaluateOverTimeOptions: input.criteriaFilter.evaluateOverTimeOptions,
42
- metricType: input.criteriaFilter.checkOn,
43
- });
44
-
45
- if (Array.isArray(overTimeValue) && overTimeValue.length === 0) {
46
- overTimeValue = undefined;
47
- }
48
- } catch (err) {
49
- logger.error(
50
- `Error in getting over time value for ${input.criteriaFilter.checkOn}`,
51
- );
52
- logger.error(err);
53
- overTimeValue = undefined;
54
- }
44
+ /*
45
+ * The window could not back this over-time filter (nothing recorded yet,
46
+ * or the monitor has not been running long enough to cover it). Return
47
+ * the decision the no-data policy already made instead of falling
48
+ * through to the value that arrived with this one check - that fallback
49
+ * is what let "all values over the last N minutes" fire off a single
50
+ * bad reading.
51
+ */
52
+ if (overTime.earlyReturn) {
53
+ return overTime.earlyReturn.result;
55
54
  }
56
55
 
56
+ const overTimeValue:
57
+ | Array<number | boolean>
58
+ | number
59
+ | boolean
60
+ | undefined = overTime.value;
61
+
57
62
  if (input.criteriaFilter.checkOn === CheckOn.IsOnline) {
58
63
  const currentIsOnline: boolean | Array<boolean> =
59
- (overTimeValue as Array<boolean>) ||
64
+ (overTimeValue as Array<boolean>) ??
60
65
  (input.dataToProcess as ProbeMonitorResponse).isOnline;
61
66
 
62
67
  return CompareCriteria.compareCriteriaBoolean({
@@ -68,7 +73,7 @@ export default class ServerMonitorCriteria {
68
73
  // timeout.
69
74
  if (input.criteriaFilter.checkOn === CheckOn.IsRequestTimeout) {
70
75
  const currentIsTimeout: boolean | Array<boolean> =
71
- (overTimeValue as Array<boolean>) ||
76
+ (overTimeValue as Array<boolean>) ??
72
77
  (input.dataToProcess as ProbeMonitorResponse).isTimeout;
73
78
 
74
79
  return CompareCriteria.compareCriteriaBoolean({
@@ -1,6 +1,6 @@
1
1
  import DataToProcess from "../DataToProcess";
2
2
  import CompareCriteria from "./CompareCriteria";
3
- import EvaluateOverTime from "./EvaluateOverTime";
3
+ import EvaluateOverTime, { OverTimeCriteriaValue } from "./EvaluateOverTime";
4
4
  import OneUptimeDate from "../../../../Types/Date";
5
5
  import { BasicDiskMetrics } from "../../../../Types/Infrastructure/BasicMetrics";
6
6
  import { JSONObject } from "../../../../Types/JSON";
@@ -20,39 +20,60 @@ export default class ServerMonitorCriteria {
20
20
  public static async isMonitorInstanceCriteriaFilterMet(input: {
21
21
  dataToProcess: DataToProcess;
22
22
  criteriaFilter: CriteriaFilter;
23
+ /*
24
+ * The monitor's monitoringInterval cron. Over-time filters use it to
25
+ * work out how many samples a fully covered window should hold, so a
26
+ * monitor that has only just started is not mistaken for one whose
27
+ * whole window is breaching.
28
+ */
29
+ monitoringInterval?: string | undefined;
23
30
  }): Promise<string | null> {
24
31
  // Server Monitoring Checks
25
32
 
26
33
  let threshold: number | string | undefined | null =
27
34
  input.criteriaFilter.value;
28
- let overTimeValue: Array<number | boolean> | number | boolean | undefined =
29
- undefined;
35
+ const overTime: OverTimeCriteriaValue =
36
+ await EvaluateOverTime.getOverTimeValueForCriteriaFilter({
37
+ projectId: (input.dataToProcess as ServerMonitorResponse).projectId,
38
+ monitorId: input.dataToProcess.monitorId!,
39
+ criteriaFilter: input.criteriaFilter,
40
+ /*
41
+ * Only the disk-usage series carries a diskPath attribute, so
42
+ * scoping any other series by it would filter against an attribute
43
+ * no row has - and an empty window now means "cannot judge yet"
44
+ * rather than "compare the live value", which would silence the
45
+ * filter outright.
46
+ */
47
+ miscData:
48
+ input.criteriaFilter.checkOn === CheckOn.DiskUsagePercent
49
+ ? (input.criteriaFilter.serverMonitorOptions as JSONObject)
50
+ : undefined,
51
+ monitoringInterval: input.monitoringInterval,
52
+ });
30
53
 
54
+ /*
55
+ * The window could not back this over-time filter, so the no-data policy
56
+ * has already decided it - do not fall through to the value that arrived
57
+ * with this one check.
58
+ *
59
+ * "Is Online" is exempt: for a server monitor the absence of data IS the
60
+ * signal, and the differenceInMinutes check below already implements the
61
+ * "wait this long before calling it offline" behaviour off the agent's
62
+ * last check-in time. Letting it fall through preserves that.
63
+ */
31
64
  if (
32
- input.criteriaFilter.evaluateOverTime &&
33
- input.criteriaFilter.evaluateOverTimeOptions
65
+ overTime.earlyReturn &&
66
+ input.criteriaFilter.checkOn !== CheckOn.IsOnline
34
67
  ) {
35
- try {
36
- overTimeValue = await EvaluateOverTime.getValueOverTime({
37
- projectId: (input.dataToProcess as ServerMonitorResponse).projectId,
38
- monitorId: input.dataToProcess.monitorId!,
39
- evaluateOverTimeOptions: input.criteriaFilter.evaluateOverTimeOptions,
40
- metricType: input.criteriaFilter.checkOn,
41
- miscData: input.criteriaFilter.serverMonitorOptions as JSONObject,
42
- });
43
-
44
- if (Array.isArray(overTimeValue) && overTimeValue.length === 0) {
45
- overTimeValue = undefined;
46
- }
47
- } catch (err) {
48
- logger.error(
49
- `Error in getting over time value for ${input.criteriaFilter.checkOn}`,
50
- );
51
- logger.error(err);
52
- overTimeValue = undefined;
53
- }
68
+ return overTime.earlyReturn.result;
54
69
  }
55
70
 
71
+ const overTimeValue:
72
+ | Array<number | boolean>
73
+ | number
74
+ | boolean
75
+ | undefined = overTime.value;
76
+
56
77
  const lastCheckTime: Date = (input.dataToProcess as ServerMonitorResponse)
57
78
  .requestReceivedAt;
58
79
 
@@ -108,7 +129,7 @@ export default class ServerMonitorCriteria {
108
129
  differenceInMinutes >= offlineIfNotCheckedInMinutes
109
130
  ) {
110
131
  const currentIsOnline: boolean | Array<boolean> =
111
- (overTimeValue as Array<boolean>) || false; // false because no request receieved in the last 2 minutes
132
+ (overTimeValue as Array<boolean>) ?? false; // false because no request receieved in the last 2 minutes
112
133
 
113
134
  logger.debug(`Current Is Online: ${currentIsOnline}`);
114
135
 
@@ -127,7 +148,7 @@ export default class ServerMonitorCriteria {
127
148
  differenceInMinutes < offlineIfNotCheckedInMinutes
128
149
  ) {
129
150
  const currentIsOnline: boolean | Array<boolean> =
130
- (overTimeValue as Array<boolean>) || true; // true because request receieved in the last 2 minutes
151
+ (overTimeValue as Array<boolean>) ?? true; // true because request receieved in the last 2 minutes
131
152
 
132
153
  logger.debug(`Current Is Online: ${currentIsOnline}`);
133
154
 
@@ -148,10 +169,10 @@ export default class ServerMonitorCriteria {
148
169
  threshold = CompareCriteria.convertToNumber(threshold);
149
170
 
150
171
  const currentCpuPercent: number | Array<number> =
151
- (overTimeValue as Array<number>) ||
152
- (input.dataToProcess as ServerMonitorResponse)
172
+ (overTimeValue as Array<number>) ??
173
+ ((input.dataToProcess as ServerMonitorResponse)
153
174
  .basicInfrastructureMetrics?.cpuMetrics.percentUsed ||
154
- 0;
175
+ 0);
155
176
 
156
177
  return CompareCriteria.compareCriteriaNumbers({
157
178
  value: currentCpuPercent,
@@ -167,10 +188,10 @@ export default class ServerMonitorCriteria {
167
188
  threshold = CompareCriteria.convertToNumber(threshold);
168
189
 
169
190
  const memoryPercent: number | Array<number> =
170
- (overTimeValue as Array<number>) ||
171
- (input.dataToProcess as ServerMonitorResponse)
191
+ (overTimeValue as Array<number>) ??
192
+ ((input.dataToProcess as ServerMonitorResponse)
172
193
  .basicInfrastructureMetrics?.memoryMetrics.percentUsed ||
173
- 0;
194
+ 0);
174
195
 
175
196
  return CompareCriteria.compareCriteriaNumbers({
176
197
  value: memoryPercent,
@@ -201,8 +222,16 @@ export default class ServerMonitorCriteria {
201
222
  const diskUsagePercent: number =
202
223
  diskMetric?.percentUsed ?? diskMetric?.percentFree ?? 0;
203
224
 
225
+ /*
226
+ * Disk usage was the one server metric that computed its over-time
227
+ * window and then threw it away, comparing the reading from this check
228
+ * instead - so "evaluate over time" was a no-op here.
229
+ */
230
+ const value: number | Array<number> =
231
+ (overTimeValue as Array<number>) ?? diskUsagePercent;
232
+
204
233
  return CompareCriteria.compareCriteriaNumbers({
205
- value: diskUsagePercent,
234
+ value: value,
206
235
  threshold: threshold as number,
207
236
  criteriaFilter: input.criteriaFilter,
208
237
  });
@@ -232,7 +261,7 @@ export default class ServerMonitorCriteria {
232
261
  }
233
262
 
234
263
  const value: number | Array<number> =
235
- (overTimeValue as Array<number>) || currentLoad || 0;
264
+ (overTimeValue as Array<number>) ?? (currentLoad || 0);
236
265
 
237
266
  return CompareCriteria.compareCriteriaNumbers({
238
267
  value: value,
@@ -248,10 +277,10 @@ export default class ServerMonitorCriteria {
248
277
  threshold = CompareCriteria.convertToNumber(threshold);
249
278
 
250
279
  const swapPercent: number | Array<number> =
251
- (overTimeValue as Array<number>) ||
252
- (input.dataToProcess as ServerMonitorResponse)
280
+ (overTimeValue as Array<number>) ??
281
+ ((input.dataToProcess as ServerMonitorResponse)
253
282
  .basicInfrastructureMetrics?.memoryMetrics?.swapPercentUsed ||
254
- 0;
283
+ 0);
255
284
 
256
285
  return CompareCriteria.compareCriteriaNumbers({
257
286
  value: swapPercent,
@@ -267,10 +296,10 @@ export default class ServerMonitorCriteria {
267
296
  threshold = CompareCriteria.convertToNumber(threshold);
268
297
 
269
298
  const ioWaitPercent: number | Array<number> =
270
- (overTimeValue as Array<number>) ||
271
- (input.dataToProcess as ServerMonitorResponse)
299
+ (overTimeValue as Array<number>) ??
300
+ ((input.dataToProcess as ServerMonitorResponse)
272
301
  .basicInfrastructureMetrics?.cpuMetrics?.timeIoWaitPercent ||
273
- 0;
302
+ 0);
274
303
 
275
304
  return CompareCriteria.compareCriteriaNumbers({
276
305
  value: ioWaitPercent,
@@ -16,7 +16,7 @@ import SnmpMonitorResponse, {
16
16
  } from "../../../../Types/Monitor/SnmpMonitor/SnmpMonitorResponse";
17
17
  import SnmpTrap from "../../../../Types/Monitor/SnmpMonitor/SnmpTrap";
18
18
  import ProbeMonitorResponse from "../../../../Types/Probe/ProbeMonitorResponse";
19
- import EvaluateOverTime from "./EvaluateOverTime";
19
+ import EvaluateOverTime, { OverTimeCriteriaValue } from "./EvaluateOverTime";
20
20
  import MetricBaselineService, {
21
21
  BaselineSummary,
22
22
  MetricBaselineService as MetricBaselineServiceClass,
@@ -173,6 +173,13 @@ export default class SnmpMonitorCriteria {
173
173
  public static async isMonitorInstanceCriteriaFilterMet(input: {
174
174
  dataToProcess: DataToProcess;
175
175
  criteriaFilter: CriteriaFilter;
176
+ /*
177
+ * The monitor's monitoringInterval cron. Over-time filters use it to
178
+ * work out how many samples a fully covered window should hold, so a
179
+ * monitor that has only just started is not mistaken for one whose
180
+ * whole window is breaching.
181
+ */
182
+ monitoringInterval?: string | undefined;
176
183
  }): Promise<string | null> {
177
184
  let threshold: number | string | undefined | null =
178
185
  input.criteriaFilter.value;
@@ -240,37 +247,36 @@ export default class SnmpMonitorCriteria {
240
247
  return null;
241
248
  }
242
249
 
243
- let overTimeValue: Array<number | boolean> | number | boolean | undefined =
244
- undefined;
245
-
246
- if (
247
- input.criteriaFilter.evaluateOverTime &&
248
- input.criteriaFilter.evaluateOverTimeOptions
249
- ) {
250
- try {
251
- overTimeValue = await EvaluateOverTime.getValueOverTime({
252
- projectId: (input.dataToProcess as ProbeMonitorResponse).projectId,
253
- monitorId: input.dataToProcess.monitorId!,
254
- evaluateOverTimeOptions: input.criteriaFilter.evaluateOverTimeOptions,
255
- metricType: input.criteriaFilter.checkOn,
256
- });
250
+ const overTime: OverTimeCriteriaValue =
251
+ await EvaluateOverTime.getOverTimeValueForCriteriaFilter({
252
+ projectId: (input.dataToProcess as ProbeMonitorResponse).projectId,
253
+ monitorId: input.dataToProcess.monitorId!,
254
+ criteriaFilter: input.criteriaFilter,
255
+ monitoringInterval: input.monitoringInterval,
256
+ });
257
257
 
258
- if (Array.isArray(overTimeValue) && overTimeValue.length === 0) {
259
- overTimeValue = undefined;
260
- }
261
- } catch (err) {
262
- logger.error(
263
- `Error in getting over time value for ${input.criteriaFilter.checkOn}`,
264
- );
265
- logger.error(err);
266
- overTimeValue = undefined;
267
- }
258
+ /*
259
+ * The window could not back this over-time filter (nothing recorded yet,
260
+ * or the monitor has not been running long enough to cover it). Return
261
+ * the decision the no-data policy already made instead of falling
262
+ * through to the value that arrived with this one check - that fallback
263
+ * is what let "all values over the last N minutes" fire off a single
264
+ * bad reading.
265
+ */
266
+ if (overTime.earlyReturn) {
267
+ return overTime.earlyReturn.result;
268
268
  }
269
269
 
270
+ const overTimeValue:
271
+ | Array<number | boolean>
272
+ | number
273
+ | boolean
274
+ | undefined = overTime.value;
275
+
270
276
  // Check if SNMP device is online
271
277
  if (input.criteriaFilter.checkOn === CheckOn.SnmpIsOnline) {
272
278
  const currentIsOnline: boolean | Array<boolean> =
273
- (overTimeValue as Array<boolean>) ||
279
+ (overTimeValue as Array<boolean>) ??
274
280
  (input.dataToProcess as ProbeMonitorResponse).isOnline;
275
281
 
276
282
  return CompareCriteria.compareCriteriaBoolean({
@@ -288,9 +294,9 @@ export default class SnmpMonitorCriteria {
288
294
  }
289
295
 
290
296
  const currentResponseTime: number | Array<number> =
291
- (overTimeValue as Array<number>) ||
292
- snmpResponse?.responseTimeInMs ||
293
- (input.dataToProcess as ProbeMonitorResponse).responseTimeInMs;
297
+ (overTimeValue as Array<number>) ??
298
+ (snmpResponse?.responseTimeInMs ||
299
+ (input.dataToProcess as ProbeMonitorResponse).responseTimeInMs);
294
300
 
295
301
  if (currentResponseTime === null || currentResponseTime === undefined) {
296
302
  return null;
@@ -24,11 +24,11 @@ import NetworkDeviceOwnerUserService, {
24
24
  import logger, { LogAttributes } from "../Logger";
25
25
  import CaptureSpan from "../Telemetry/CaptureSpan";
26
26
  import DataToProcess from "./DataToProcess";
27
- import MonitorClusterContextUtil, {
28
- MonitorClusterContext,
29
- } from "./MonitorClusterContext";
27
+ import MonitorResourceContextUtil from "./MonitorResourceContext";
30
28
  import MonitorTemplateUtil from "./MonitorTemplateUtil";
31
- import SeriesResourceLinker from "./SeriesResourceLinker";
29
+ import SeriesResourceLinker, {
30
+ SeriesResolvedResourceIds,
31
+ } from "./SeriesResourceLinker";
32
32
  import MonitorDependencySuppression, {
33
33
  DependencySuppressionResult,
34
34
  } from "./MonitorDependencySuppression";
@@ -322,15 +322,17 @@ export default class MonitorAlert {
322
322
  }
323
323
 
324
324
  /*
325
- * Proxmox/Ceph monitors: resolve the monitored cluster once per
326
- * evaluation (lookup-only, from the step config's clusterIdentifier)
327
- * so every alert created below is attached to it. Series labels
328
- * cannot supply this they carry datapoint labels (`id`,
329
- * `ceph_daemon`, `pool_id`), not cluster identity, and ungrouped
330
- * templates have no series at all. No-op for other monitor types.
325
+ * Resolve the resources this monitor's own config names — its host,
326
+ * cluster, fleet, telemetry services, or the resource its metric
327
+ * filters scope it to once per evaluation, so every alert created
328
+ * below is attached to them. Series labels cannot supply this: they
329
+ * only exist for grouped criteria, and most monitors (every shipped
330
+ * Host/Docker/Podman template, all Logs/Traces/Exceptions monitors)
331
+ * are ungrouped. No-op, and no round-trip, for monitor types whose
332
+ * config names no resource.
331
333
  */
332
- const clusterContext: MonitorClusterContext =
333
- await MonitorClusterContextUtil.resolveClusterContextForMonitor({
334
+ const resourceContext: SeriesResolvedResourceIds =
335
+ await MonitorResourceContextUtil.resolveResourceContextForMonitor({
334
336
  monitor: input.monitor,
335
337
  });
336
338
 
@@ -556,21 +558,22 @@ export default class MonitorAlert {
556
558
  model: alert,
557
559
  seriesLabels,
558
560
  projectId: input.monitor.projectId!,
561
+ monitorType: input.monitor.monitorType,
559
562
  });
560
563
  }
561
564
 
562
565
  /*
563
- * Deterministic Proxmox/Ceph/Swarm/IoT cluster link from the
564
- * monitor's step config (resolved once above). The shipped
565
- * templates for those monitor types group by datapoint labels
566
- * that carry no cluster identity, so this — not the label path
567
- * above is what makes the per-cluster Activity tabs and badge
568
- * counts see monitor-created alerts. Runs for both grouped and
569
- * ungrouped alerts, and merges with whatever the labels resolved.
566
+ * Deterministic resource link from the monitor's step config
567
+ * (resolved once above). For most monitor types this — not the
568
+ * label path above is what makes the per-resource Activity
569
+ * tabs and badge counts see monitor-created alerts, because
570
+ * their criteria are ungrouped and emit no series labels at
571
+ * all. Runs for both grouped and ungrouped alerts, and merges
572
+ * with whatever the labels resolved.
570
573
  */
571
- SeriesResourceLinker.attachClusterContext({
574
+ SeriesResourceLinker.attachResolvedResources({
572
575
  model: alert,
573
- clusterContext,
576
+ resolved: resourceContext,
574
577
  });
575
578
 
576
579
  alert.onCallDutyPolicies =
@@ -666,6 +666,7 @@ ${contextBlock}
666
666
  await APIRequestCriteria.isMonitorInstanceCriteriaFilterMet({
667
667
  dataToProcess: input.dataToProcess,
668
668
  criteriaFilter: input.criteriaFilter,
669
+ monitoringInterval: input.monitor.monitoringInterval,
669
670
  });
670
671
 
671
672
  if (apiRequestCriteriaResult) {
@@ -711,6 +712,7 @@ ${contextBlock}
711
712
  await IncomingRequestCriteria.isMonitorInstanceCriteriaFilterMet({
712
713
  dataToProcess: input.dataToProcess,
713
714
  criteriaFilter: input.criteriaFilter,
715
+ monitoringInterval: input.monitor.monitoringInterval,
714
716
  });
715
717
 
716
718
  if (incomingRequestResult) {
@@ -735,6 +737,7 @@ ${contextBlock}
735
737
  await SSLMonitorCriteria.isMonitorInstanceCriteriaFilterMet({
736
738
  dataToProcess: input.dataToProcess,
737
739
  criteriaFilter: input.criteriaFilter,
740
+ monitoringInterval: input.monitor.monitoringInterval,
738
741
  });
739
742
 
740
743
  if (sslMonitorResult) {
@@ -747,6 +750,7 @@ ${contextBlock}
747
750
  await ServerMonitorCriteria.isMonitorInstanceCriteriaFilterMet({
748
751
  dataToProcess: input.dataToProcess,
749
752
  criteriaFilter: input.criteriaFilter,
753
+ monitoringInterval: input.monitor.monitoringInterval,
750
754
  });
751
755
 
752
756
  if (serverMonitorResult) {
@@ -830,6 +834,7 @@ ${contextBlock}
830
834
  await SnmpMonitorCriteria.isMonitorInstanceCriteriaFilterMet({
831
835
  dataToProcess: input.dataToProcess,
832
836
  criteriaFilter: input.criteriaFilter,
837
+ monitoringInterval: input.monitor.monitoringInterval,
833
838
  });
834
839
 
835
840
  if (snmpMonitorResult) {
@@ -842,6 +847,7 @@ ${contextBlock}
842
847
  await DnsMonitorCriteria.isMonitorInstanceCriteriaFilterMet({
843
848
  dataToProcess: input.dataToProcess,
844
849
  criteriaFilter: input.criteriaFilter,
850
+ monitoringInterval: input.monitor.monitoringInterval,
845
851
  });
846
852
 
847
853
  if (dnsMonitorResult) {
@@ -854,6 +860,7 @@ ${contextBlock}
854
860
  await DomainMonitorCriteria.isMonitorInstanceCriteriaFilterMet({
855
861
  dataToProcess: input.dataToProcess,
856
862
  criteriaFilter: input.criteriaFilter,
863
+ monitoringInterval: input.monitor.monitoringInterval,
857
864
  });
858
865
 
859
866
  if (domainMonitorResult) {
@@ -891,6 +898,7 @@ ${contextBlock}
891
898
  {
892
899
  dataToProcess: input.dataToProcess,
893
900
  criteriaFilter: input.criteriaFilter,
901
+ monitoringInterval: input.monitor.monitoringInterval,
894
902
  },
895
903
  );
896
904