@oneuptime/common 13.0.7 → 14.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (759) hide show
  1. package/Models/AnalyticsModels/AuditLog.ts +23 -15
  2. package/Models/DatabaseModels/GlobalConfig.ts +24 -0
  3. package/Models/DatabaseModels/Monitor.ts +3 -2
  4. package/Models/DatabaseModels/MonitorTemplate.ts +2 -1
  5. package/Models/DatabaseModels/OnCallDutyPolicyScheduleCalendarFeed.ts +1 -1
  6. package/Models/DatabaseModels/ProjectOnCallCalendarFeed.ts +1 -1
  7. package/Models/DatabaseModels/UserOnCallCalendarFeed.ts +1 -1
  8. package/Scripts/generate-service-worker.js +65 -4
  9. package/Server/API/AIBillingAPI.ts +1 -0
  10. package/Server/API/AIInsightAPI.ts +1 -4
  11. package/Server/API/AIInvestigationAPI.ts +1 -4
  12. package/Server/API/AIReadinessAPI.ts +4 -5
  13. package/Server/API/AlertAPI.ts +1 -0
  14. package/Server/API/AutoRemediationAPI.ts +1 -4
  15. package/Server/API/BaseAPI.ts +34 -0
  16. package/Server/API/BaseAnalyticsAPI.ts +80 -9
  17. package/Server/API/BillingAPI.ts +2 -0
  18. package/Server/API/BillingInvoiceAPI.ts +1 -0
  19. package/Server/API/BillingPaymentMethodAPI.ts +2 -0
  20. package/Server/API/CodeFixRunAPI.ts +1 -3
  21. package/Server/API/CommonAPI.ts +68 -4
  22. package/Server/API/DashboardAPI.ts +12 -12
  23. package/Server/API/GlobalConfigAPI.ts +243 -460
  24. package/Server/API/IncidentAPI.ts +2 -0
  25. package/Server/API/IncidentEpisodeAPI.ts +1 -0
  26. package/Server/API/NotificationAPI.ts +1 -0
  27. package/Server/API/OnCallCalendarAPI.ts +4 -5
  28. package/Server/API/OnCallDutyPolicyAPI.ts +7 -0
  29. package/Server/API/OnCallReadinessAPI.ts +4 -1
  30. package/Server/API/OnCallScheduleTimelineAPI.ts +731 -0
  31. package/Server/API/ProjectAPI.ts +1 -0
  32. package/Server/API/ProjectOIDC.ts +25 -16
  33. package/Server/API/ProjectSSO.ts +24 -16
  34. package/Server/API/ScheduledMaintenanceAPI.ts +1 -0
  35. package/Server/API/StatusPageAPI.ts +261 -74
  36. package/Server/API/TeamMemberAPI.ts +13 -1
  37. package/Server/API/UserCallAPI.ts +2 -0
  38. package/Server/API/UserEmailAPI.ts +2 -0
  39. package/Server/API/UserIncomingCallNumberAPI.ts +2 -0
  40. package/Server/API/UserMicrosoftTeamsAPI.ts +1 -0
  41. package/Server/API/UserSlackAPI.ts +1 -0
  42. package/Server/API/UserSmsAPI.ts +2 -0
  43. package/Server/API/UserTotpAuthAPI.ts +1 -0
  44. package/Server/API/UserWebAuthnAPI.ts +2 -0
  45. package/Server/API/UserWebhookAPI.ts +1 -0
  46. package/Server/API/UserWhatsAppAPI.ts +2 -0
  47. package/Server/Enterprise/EnterpriseEdition.ts +649 -0
  48. package/Server/Enterprise/EnterpriseFeature.ts +48 -0
  49. package/Server/Enterprise/EnterpriseLicenseSnapshot.ts +192 -0
  50. package/Server/Enterprise/EnterpriseServerModule.ts +233 -0
  51. package/Server/EnvironmentConfig.ts +147 -2
  52. package/Server/Infrastructure/Postgres/SchemaMigrations/1793900000000-AddEnterpriseEditionFirstSeenAt.ts +25 -0
  53. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +2 -0
  54. package/Server/Middleware/MasterAdminAuthorization.ts +13 -2
  55. package/Server/Middleware/UserAuthorization.ts +117 -21
  56. package/Server/Services/ApiKeyPermissionService.ts +101 -4
  57. package/Server/Services/AuditLogService.ts +84 -1079
  58. package/Server/Services/DatabaseService.ts +245 -0
  59. package/Server/Services/DetectionRuleService.ts +5 -4
  60. package/Server/Services/EnterpriseLicenseService.ts +38 -0
  61. package/Server/Services/GlobalConfigService.ts +80 -1
  62. package/Server/Services/MonitorProbeService.ts +116 -20
  63. package/Server/Services/MonitorService.ts +56 -4
  64. package/Server/Services/MonitorStatusTimelineService.ts +284 -0
  65. package/Server/Services/MonitorTemplateService.ts +26 -0
  66. package/Server/Services/OnCallDutyPolicyChildService.ts +261 -0
  67. package/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.ts +2 -2
  68. package/Server/Services/OnCallDutyPolicyEscalationRuleService.ts +2 -2
  69. package/Server/Services/OnCallDutyPolicyEscalationRuleTeamService.ts +2 -2
  70. package/Server/Services/OnCallDutyPolicyEscalationRuleUserService.ts +2 -2
  71. package/Server/Services/PayAsYouGoBillingService.ts +23 -28
  72. package/Server/Services/ProjectService.ts +302 -0
  73. package/Server/Services/RumSessionPinService.ts +293 -22
  74. package/Server/Services/StatusPagePrivateUserService.ts +7 -3
  75. package/Server/Services/StatusPageService.ts +78 -1
  76. package/Server/Services/TeamMemberService.ts +11 -0
  77. package/Server/Services/TeamPermissionService.ts +120 -26
  78. package/Server/Services/TeamService.ts +10 -0
  79. package/Server/Services/ThreatIntelFeedService.ts +6 -3
  80. package/Server/Services/UserService.ts +10 -17
  81. package/Server/Types/Database/Permissions/BasePermission.ts +9 -7
  82. package/Server/Types/Database/Permissions/CreatePermission.ts +15 -0
  83. package/Server/Types/Database/Permissions/EditionPermission.ts +208 -18
  84. package/Server/Types/Database/Permissions/Index.ts +75 -11
  85. package/Server/Types/Database/Permissions/TablePermission.ts +34 -31
  86. package/Server/Types/Database/Permissions/UpdatePermission.ts +29 -0
  87. package/Server/Types/Markdown.ts +41 -0
  88. package/Server/Utils/AI/AIChatPrivacyFilter.ts +8 -0
  89. package/Server/Utils/AI/AIRunPrivacyFilter.ts +8 -0
  90. package/Server/Utils/CommunityEditionSsoReport.ts +361 -0
  91. package/Server/Utils/EditionEnforcement.ts +233 -0
  92. package/Server/Utils/FrontendEnvironment.ts +41 -2
  93. package/Server/Utils/InstanceHealth/RedisHealth.ts +12 -277
  94. package/Server/Utils/MasterAdminPageAccess.ts +61 -0
  95. package/Server/Utils/Monitor/AffectedResourceList.ts +190 -0
  96. package/Server/Utils/Monitor/Criteria/EvaluateOverTime.ts +10 -1
  97. package/Server/Utils/Monitor/MonitorAlert.ts +3 -1
  98. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +543 -333
  99. package/Server/Utils/Monitor/MonitorIncident.ts +3 -1
  100. package/Server/Utils/Monitor/MonitoringIntervalValidator.ts +116 -0
  101. package/Server/Utils/OnCall/OnCallCalendarFeedRenderer.ts +1 -1
  102. package/Server/Utils/Realtime.ts +163 -45
  103. package/Server/Utils/SecurityEvent/DetectionRuleEvaluator.ts +11 -28
  104. package/Server/Utils/SecurityEvent/GoogleSecOpsSeverityRepair.ts +170 -0
  105. package/Server/Utils/SecurityEvent/Sigma/SigmaClickhouseCompiler.ts +1 -1
  106. package/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelFeedPoller.ts +6 -2
  107. package/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelMatcher.ts +10 -9
  108. package/Server/Utils/Workspace/Slack/Slack.ts +423 -10
  109. package/Tests/App/Accounts/LoginPasskey.test.tsx +18 -0
  110. package/Tests/App/Accounts/LoginSsoEdition.test.tsx +616 -0
  111. package/Tests/App/AdminDashboard/AdminAuthenticationSsoEdition.test.tsx +217 -0
  112. package/Tests/App/AdminDashboard/AdminEnterprisePluginPage.test.tsx +357 -0
  113. package/Tests/App/AdminDashboard/EnterpriseLicensesShell.test.tsx +214 -0
  114. package/Tests/App/AdminDashboard/GlobalSSOEnterpriseShells.test.tsx +271 -0
  115. package/Tests/App/AdminDashboard/HealthShells.test.tsx +659 -0
  116. package/Tests/App/Dashboard/AffectedResourcesPicker.test.tsx +1059 -0
  117. package/Tests/App/Dashboard/AffectedResourcesPickerEditForm.test.tsx +376 -0
  118. package/Tests/App/Dashboard/AffectedResourcesPickerHiddenTypes.test.tsx +757 -0
  119. package/Tests/App/Dashboard/AffectedResourcesSummaryStep.test.tsx +307 -0
  120. package/Tests/App/Dashboard/ArgumentsFormGroupByUnlistedAttributes.test.tsx +131 -0
  121. package/Tests/App/Dashboard/AuditLogsAndComplianceShells.test.tsx +572 -0
  122. package/Tests/App/Dashboard/DashboardHeaderRequests.test.tsx +1 -1
  123. package/Tests/App/Dashboard/DashboardMonitorLabelVariable.test.tsx +9 -1
  124. package/Tests/App/Dashboard/DashboardVariableAllContract.test.tsx +24 -0
  125. package/Tests/App/Dashboard/DashboardVariableSelector.test.tsx +162 -8
  126. package/Tests/App/Dashboard/EnterpriseFeatureUpgrade.test.tsx +547 -0
  127. package/Tests/App/Dashboard/EnterprisePluginPage.test.tsx +667 -0
  128. package/Tests/App/Dashboard/EntityFilterDropdownArchivedSlos.test.tsx +105 -6
  129. package/Tests/App/Dashboard/EntityFilterDropdownUnlistedSelection.test.tsx +434 -0
  130. package/Tests/App/Dashboard/EscalationRuleReadiness.test.tsx +276 -1
  131. package/Tests/App/Dashboard/IdentityEnterpriseShells.test.tsx +319 -0
  132. package/Tests/App/Dashboard/OnCallCalendarFeedSideMenus.test.tsx +9 -1
  133. package/Tests/App/Dashboard/OnboardingSsoEmptyState.test.tsx +185 -0
  134. package/Tests/App/Dashboard/PayAsYouGoConsentGate.test.tsx +58 -42
  135. package/Tests/App/Dashboard/PayAsYouGoNotices.test.tsx +42 -5
  136. package/Tests/App/Dashboard/ResourceAuditLogsSideMenus.test.tsx +34 -23
  137. package/Tests/App/Dashboard/ScheduleTimeline.test.tsx +1580 -0
  138. package/Tests/App/Dashboard/ScheduleTimelineAPI.test.ts +280 -0
  139. package/Tests/App/Dashboard/ScheduleTimelineModel.test.ts +673 -0
  140. package/Tests/App/Dashboard/SecurityEventConnectionDiagnostics.test.tsx +133 -70
  141. package/Tests/App/Dashboard/SecurityEventDetailPanel.test.tsx +399 -0
  142. package/Tests/App/Dashboard/SecurityEventListRow.test.tsx +214 -0
  143. package/Tests/App/Dashboard/SecurityEventsDetectionRulesPage.test.tsx +86 -3
  144. package/Tests/App/Dashboard/SecurityEventsEmptyState.test.tsx +1 -58
  145. package/Tests/App/Dashboard/SecurityEventsGuideContent.test.ts +1313 -0
  146. package/Tests/App/Dashboard/SecurityEventsHowItWorksCard.test.tsx +536 -0
  147. package/Tests/App/Dashboard/SecurityEventsNavTabs.test.tsx +248 -0
  148. package/Tests/App/Dashboard/SecurityEventsNoResults.test.tsx +222 -0
  149. package/Tests/App/Dashboard/SecurityEventsThreatIntelPage.test.tsx +199 -0
  150. package/Tests/App/Dashboard/SecurityEventsViewer.test.tsx +1203 -0
  151. package/Tests/App/Dashboard/SloOverviewHero.test.tsx +171 -36
  152. package/Tests/App/Dashboard/SloViewSideMenu.test.tsx +215 -0
  153. package/Tests/App/Dashboard/SloViewSideMenuCounts.test.tsx +40 -3
  154. package/Tests/App/Dashboard/UserEmailCallSites.test.tsx +11 -91
  155. package/Tests/App/PublicDashboard/DashboardVariableSelector.test.tsx +12 -4
  156. package/Tests/App/PublicDashboard/PublicDashboardWidgetListAuth.test.tsx +623 -0
  157. package/Tests/App/StatusPage/StatusPageSsoEmptyState.test.tsx +319 -0
  158. package/Tests/Helpers/RefreshAwareApiScan.ts +757 -0
  159. package/Tests/Helpers/TenantScopedRequestScan.ts +515 -0
  160. package/Tests/Models/OnCallCalendarFeedModels.test.ts +23 -1
  161. package/Tests/Scripts/GenerateServiceWorker.test.ts +931 -0
  162. package/Tests/Server/API/AIChatRouteAuthorization.test.ts +138 -5
  163. package/Tests/Server/API/AIGenerationProjectAIToggle.test.ts +187 -0
  164. package/Tests/Server/API/AIInvestigationAvailabilityAuthorization.test.ts +51 -3
  165. package/Tests/Server/API/AIInvestigationEvidenceAPI.test.ts +55 -2
  166. package/Tests/Server/API/BaseAPICreateItemDoesNotMutateModel.test.ts +130 -0
  167. package/Tests/Server/API/BaseAnalyticsAPIAggregateCache.test.ts +729 -0
  168. package/Tests/Server/API/BillingPayAsYouGoStatus.test.ts +93 -7
  169. package/Tests/Server/API/BillingPaymentMethodAPI.test.ts +36 -3
  170. package/Tests/Server/API/CommonAPIAuthGuard.test.ts +1003 -24
  171. package/Tests/Server/API/DashboardPublicRateLimit.test.ts +6 -3
  172. package/Tests/Server/API/ExpiredSessionAIRoutes.test.ts +708 -0
  173. package/Tests/Server/API/ExpiredSessionCustomRoutes.test.ts +928 -0
  174. package/Tests/Server/API/ExpiredSessionMonitorTemplate.test.ts +319 -0
  175. package/Tests/Server/API/ExpiredSessionOnCallDutyPolicy.test.ts +336 -0
  176. package/Tests/Server/API/ExpiredSessionRouteGuards.test.ts +820 -0
  177. package/Tests/Server/API/GlobalConfigLicense.test.ts +766 -381
  178. package/Tests/Server/API/NotificationChannelVerificationAPI.test.ts +115 -12
  179. package/Tests/Server/API/OnCallCalendarAPI.test.ts +375 -8
  180. package/Tests/Server/API/OnCallReadinessAPI.test.ts +196 -912
  181. package/Tests/Server/API/OnCallScheduleTimelineAPI.test.ts +1513 -0
  182. package/Tests/Server/API/OnCallSetupReminderAPI.test.ts +119 -7
  183. package/Tests/Server/API/ProjectScopedCustomRouteAuth.test.ts +111 -4
  184. package/Tests/Server/API/PublicRouteInvalidAccessToken.test.ts +615 -0
  185. package/Tests/Server/API/SecurityEventAttributesAPI.test.ts +89 -2
  186. package/Tests/Server/API/SessionReplayAPI.test.ts +121 -0
  187. package/Tests/Server/API/SsoProviderListingsEdition.test.ts +432 -0
  188. package/Tests/Server/API/StatusPageMasterPasswordRateLimit.test.ts +4 -2
  189. package/Tests/Server/API/StatusPagePostmortemVisibility.test.ts +441 -0
  190. package/Tests/Server/API/StatusPageTestEmailReportAuth.test.ts +664 -0
  191. package/Tests/Server/API/TeamMemberLeaveScimLockEdition.test.ts +252 -0
  192. package/Tests/Server/API/TeamMemberRemoveUserFromProjectAPI.test.ts +7 -0
  193. package/Tests/Server/API/UserIncomingCallNumberApi.test.ts +6 -0
  194. package/Tests/Server/API/UserNotificationSettingAPI.test.ts +65 -4
  195. package/Tests/Server/API/UserProjectsAPI.test.ts +63 -3
  196. package/Tests/Server/API/UserTotpAuthAPI.test.ts +48 -2
  197. package/Tests/Server/API/UserWebAuthnAuthenticationOptionsRoute.test.ts +11 -2
  198. package/Tests/Server/API/UserWebAuthnBackupCodeMinting.test.ts +46 -3
  199. package/Tests/Server/API/UserWebAuthnPasskeyAPI.test.ts +18 -2
  200. package/Tests/Server/API/ZZVerifyChatsAuth.test.ts +24 -7
  201. package/Tests/Server/Enterprise/EnterpriseEdition.test.ts +824 -0
  202. package/Tests/Server/Enterprise/EnterpriseFeatureActive.test.ts +643 -0
  203. package/Tests/Server/Enterprise/EnterpriseLicenseSnapshot.test.ts +294 -0
  204. package/Tests/Server/Enterprise/EnterpriseModelFeatureMap.test.ts +93 -0
  205. package/Tests/Server/Enterprise/EnterpriseOnlyModulesLiveInEe.test.ts +582 -0
  206. package/Tests/Server/Enterprise/EnterpriseServerModule.test.ts +247 -0
  207. package/Tests/Server/Enterprise/FakeEnterpriseModule.ts +502 -0
  208. package/Tests/Server/Enterprise/TestBillingFlag.ts +70 -0
  209. package/Tests/Server/EnvironmentConfigEnterpriseEdition.test.ts +314 -0
  210. package/Tests/Server/Infrastructure/ContainerBootConfiguration.test.ts +289 -0
  211. package/Tests/Server/Infrastructure/E2EClickHouseFixtureAccess.test.ts +5 -1
  212. package/Tests/Server/Middleware/ExpiredSessionUserMiddleware.test.ts +563 -0
  213. package/Tests/Server/Middleware/MasterAdminAuthorization.test.ts +299 -19
  214. package/Tests/Server/Middleware/PublicRouteUserMiddleware.test.ts +453 -0
  215. package/Tests/Server/Middleware/UserAuthorization.test.ts +37 -2
  216. package/Tests/Server/Middleware/UserAuthorizationEditionEnforcement.test.ts +516 -0
  217. package/Tests/Server/Services/AIChatPrivacyPin.test.ts +24 -0
  218. package/Tests/Server/Services/ApiKeyPermissionSecurity.test.ts +2 -0
  219. package/Tests/Server/Services/ApiKeyPermissionService.test.ts +3 -3
  220. package/Tests/Server/Services/AuditLogService.test.ts +460 -990
  221. package/Tests/Server/Services/CreateAndReadResponsesKeepIds.test.ts +263 -0
  222. package/Tests/Server/Services/DatabaseServiceCreateSuppliedId.test.ts +147 -0
  223. package/Tests/Server/Services/DatabaseServiceLoginBeforeHooks.test.ts +1078 -0
  224. package/Tests/Server/Services/DatabaseServiceTenantRelationGuard.test.ts +259 -0
  225. package/Tests/Server/Services/DatabaseServiceWriteOperatorValues.test.ts +147 -0
  226. package/Tests/Server/Services/EnterpriseLicenseServiceKeyGeneration.test.ts +151 -0
  227. package/Tests/Server/Services/GlobalConfigServiceLicenseColumns.test.ts +357 -0
  228. package/Tests/Server/Services/MonitorDestinationInfoIPv6.test.ts +101 -0
  229. package/Tests/Server/Services/MonitorPayAsYouGoBilling.test.ts +115 -1
  230. package/Tests/Server/Services/MonitorProbeServiceIntervalScheduling.test.ts +333 -0
  231. package/Tests/Server/Services/MonitorStatusTimelineDailyAggregates.test.ts +303 -0
  232. package/Tests/Server/Services/OnCallChildCreateAuthorizationPostgres.test.ts +711 -0
  233. package/Tests/Server/Services/OnCallDutyPolicyChildService.test.ts +733 -0
  234. package/Tests/Server/Services/PayAsYouGoBillingService.test.ts +190 -140
  235. package/Tests/Server/Services/PayAsYouGoStripeRateLimitBudget.test.ts +4 -9
  236. package/Tests/Server/Services/PermissionBlockDeletion.test.ts +780 -0
  237. package/Tests/Server/Services/PermissionBlockDeletionPostgres.test.ts +628 -0
  238. package/Tests/Server/Services/ProjectServiceAuditLogLicense.test.ts +701 -0
  239. package/Tests/Server/Services/ProjectServiceAuditLogSettingsCache.test.ts +31 -35
  240. package/Tests/Server/Services/ProjectServiceCreateSubscriptionStarted.test.ts +77 -1
  241. package/Tests/Server/Services/RumSessionPinCreatePermission.test.ts +715 -0
  242. package/Tests/Server/Services/ScimPushGroupsTeamLocksEdition.test.ts +431 -0
  243. package/Tests/Server/Services/SsoRequirementReadMasking.test.ts +419 -0
  244. package/Tests/Server/Services/SsoRequirementWriteGuard.test.ts +769 -0
  245. package/Tests/Server/Services/StatusPagePrivateUserInvitationPolicy.test.ts +94 -0
  246. package/Tests/Server/Services/TeamMemberMultiTenantReadPostgres.test.ts +394 -0
  247. package/Tests/Server/Services/TeamPrivilegeEscalation.test.ts +6 -0
  248. package/Tests/Server/Services/TelemetryPayAsYouGoBilling.test.ts +131 -0
  249. package/Tests/Server/Services/UserAuthenticationService.test.ts +35 -0
  250. package/Tests/Server/Services/UserNotificationRuleAdminGuards.test.ts +13 -2
  251. package/Tests/Server/Services/UserServiceSeatLimit.test.ts +94 -56
  252. package/Tests/Server/Types/Database/Permissions/EditionPermission.test.ts +1823 -0
  253. package/Tests/Server/Types/Database/Permissions/ModelPermissionAnonymousRefusal.test.ts +518 -0
  254. package/Tests/Server/Types/Database/Permissions/MultiTenantPermissions.test.ts +350 -0
  255. package/Tests/Server/Types/Database/Permissions/OnCallCalendarFeedPermissions.test.ts +282 -25
  256. package/Tests/Server/Types/Database/Permissions/TableLevelBlockPermission.test.ts +459 -0
  257. package/Tests/Server/Types/Markdown.test.ts +181 -0
  258. package/Tests/Server/Utils/AI/AIRunPrivacyFilter.test.ts +101 -9
  259. package/Tests/Server/Utils/AI/ChatAgentHelpers.test.ts +88 -4
  260. package/Tests/Server/Utils/AI/Toolbox/ExceptionTools.test.ts +459 -0
  261. package/Tests/Server/Utils/AI/Toolbox/LogTools.test.ts +794 -0
  262. package/Tests/Server/Utils/AI/Toolbox/RecentChangesTools.test.ts +574 -0
  263. package/Tests/Server/Utils/AI/Toolbox/SecurityEventTools.test.ts +596 -0
  264. package/Tests/Server/Utils/CaptchaRequestAndLogging.test.ts +395 -0
  265. package/Tests/Server/Utils/CommunityEditionSsoReport.test.ts +565 -0
  266. package/Tests/Server/Utils/EditionEnforcement.test.ts +303 -0
  267. package/Tests/Server/Utils/FrontendEnvironment.test.ts +367 -0
  268. package/Tests/Server/Utils/InstanceHealth/RedisHealth.test.ts +38 -418
  269. package/Tests/Server/Utils/MasterAdminPageAccess.test.ts +251 -0
  270. package/Tests/Server/Utils/Monitor/AffectedResourceList.test.ts +518 -0
  271. package/Tests/Server/Utils/Monitor/Criteria/EvaluateOverTime.test.ts +24 -4
  272. package/Tests/Server/Utils/Monitor/MonitorActionTimestamps.test.ts +616 -0
  273. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluator.test.ts +934 -96
  274. package/Tests/Server/Utils/Monitor/MonitoringIntervalValidator.test.ts +188 -0
  275. package/Tests/Server/Utils/Realtime.test.ts +502 -0
  276. package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsConnectorSeverity.test.ts +216 -0
  277. package/Tests/Server/Utils/SecurityEvent/DetectionRuleEvaluator.test.ts +142 -0
  278. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsSeverityRepair.test.ts +140 -0
  279. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsSeverityRepairClickhouseIntegration.test.ts +542 -0
  280. package/Tests/Server/Utils/Telemetry/ChangeEventRow.test.ts +743 -0
  281. package/Tests/Server/Utils/Telemetry/RuntimeMetrics.test.ts +465 -0
  282. package/Tests/Server/Utils/Workspace/MicrosoftTeams/Messages/Alert.test.ts +202 -0
  283. package/Tests/Server/Utils/Workspace/MicrosoftTeams/Messages/Incident.test.ts +194 -0
  284. package/Tests/Server/Utils/Workspace/MicrosoftTeams/Messages/ScheduledMaintenance.test.ts +231 -0
  285. package/Tests/Server/Utils/Workspace/Slack/Messages/Alert.test.ts +194 -0
  286. package/Tests/Server/Utils/Workspace/Slack/Messages/AlertEpisode.test.ts +194 -0
  287. package/Tests/Server/Utils/Workspace/Slack/Messages/Incident.test.ts +194 -0
  288. package/Tests/Server/Utils/Workspace/Slack/Messages/IncidentEpisode.test.ts +194 -0
  289. package/Tests/Server/Utils/Workspace/Slack/Messages/ScheduledMaintenance.test.ts +247 -0
  290. package/Tests/Server/Utils/Workspace/Slack/SlackMarkdownSectionSplit.test.ts +1209 -0
  291. package/Tests/Types/AI/AIInsightEvidence.test.ts +206 -0
  292. package/Tests/Types/API/HostnameFromAuthority.test.ts +20 -10
  293. package/Tests/Types/API/HostnameIPv6.test.ts +149 -0
  294. package/Tests/Types/BaseDatabase/DatabaseCommonInteractionPropsUtilAnonymous.test.ts +144 -0
  295. package/Tests/Types/Call/CallProvider.test.ts +528 -0
  296. package/Tests/Types/Database/CanonicalModelInstance.test.ts +190 -0
  297. package/Tests/Types/Kubernetes/KubernetesCostIngest.test.ts +236 -0
  298. package/Tests/Types/OnCallDutyPolicy/ScheduleTimeline.test.ts +736 -0
  299. package/Tests/Types/OnCallDutyPolicy/ScheduleTimelineLayout.test.ts +996 -0
  300. package/Tests/Types/SecurityEvent/SigmaRule.test.ts +142 -0
  301. package/Tests/Types/Workflow/Components/JSON.test.ts +182 -0
  302. package/Tests/UI/Components/BasicFormDropdownNormalization.test.tsx +116 -1
  303. package/Tests/UI/Components/Dropdown/DropdownAsyncOptions.test.tsx +81 -0
  304. package/Tests/UI/Components/EditionLabelLapseCopy.ts +104 -0
  305. package/Tests/UI/Components/EditionLabelLicenseManagerWiring.test.tsx +254 -0
  306. package/Tests/UI/Components/EditionLabelLicenseRefresh.test.tsx +165 -171
  307. package/Tests/UI/Components/EditionLabelLicenseStatus.test.tsx +1586 -0
  308. package/Tests/UI/Components/EditionLabelLicenseWritesGuard.test.tsx +157 -0
  309. package/Tests/UI/Components/EventAttachmentList.test.tsx +174 -0
  310. package/Tests/UI/Components/Forms/BasicFormBurnRateTemplateDefaults.test.tsx +395 -0
  311. package/Tests/UI/Components/Forms/BasicFormCollapsibleSections.test.tsx +286 -0
  312. package/Tests/UI/Components/Forms/FormSummary.test.tsx +128 -0
  313. package/Tests/UI/Components/Graphs/DayUptimeGraph.test.tsx +49 -2
  314. package/Tests/UI/Components/MarkdownConverters.test.ts +684 -0
  315. package/Tests/UI/Components/ModelListEmptyState.test.tsx +289 -0
  316. package/Tests/UI/Components/ModelTable/BaseModelTableQueryChange.test.tsx +365 -0
  317. package/Tests/UI/Components/OpenAuthenticatedUrl.test.ts +358 -0
  318. package/Tests/UI/Components/SessionAwareImage.test.tsx +496 -0
  319. package/Tests/UI/Components/TelemetryHistogramZeroBuckets.test.tsx +190 -0
  320. package/Tests/UI/Components/TelemetryViewer/TelemetryViewerEmptyContent.test.tsx +131 -0
  321. package/Tests/UI/Components/TooltipInteractive.test.tsx +97 -0
  322. package/Tests/UI/EsbuildEnterpriseAlias.test.ts +1127 -0
  323. package/Tests/UI/MicrosoftTeams/MicrosoftTeamsChatsCardInstallGuidance.test.tsx +1 -1
  324. package/Tests/UI/Monitor/EvaluationLogListTimestamps.test.tsx +367 -0
  325. package/Tests/UI/Utils/API/BaseAPIRefreshSession.test.ts +1087 -0
  326. package/Tests/UI/Utils/API/DashboardHost.ts +12 -0
  327. package/Tests/UI/Utils/API/FakeAxiosServer.ts +183 -0
  328. package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +10 -0
  329. package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +2 -0
  330. package/Tests/UI/Utils/Cookie.test.ts +440 -0
  331. package/Tests/UI/Utils/ModelAPIRequestClient.test.ts +278 -0
  332. package/Tests/UI/Utils/Navigation.test.ts +33 -0
  333. package/Tests/UI/Utils/PricingPlan.test.ts +295 -0
  334. package/Tests/UI/Utils/Realtime.test.ts +759 -0
  335. package/Tests/UI/Utils/Telemetry/Telemetry.test.ts +500 -0
  336. package/Tests/Utils/APIInstanceDispatch.test.ts +311 -0
  337. package/Tests/Utils/HostAddressUtil.test.ts +138 -0
  338. package/Tests/Utils/Monitor/MonitorDestinationUtil.test.ts +313 -0
  339. package/Tests/Utils/Monitor/MonitoringIntervalUtil.test.ts +304 -0
  340. package/Tests/Utils/SecurityEvent/GoogleSecOpsAlertNormalizerSeverity.test.ts +565 -0
  341. package/Tests/Utils/StatusPage/UptimeDailyAggregateUtil.test.ts +248 -0
  342. package/Types/API/Hostname.ts +63 -16
  343. package/Types/BaseDatabase/DatabaseCommonInteractionPropsUtil.ts +40 -0
  344. package/Types/Database/AccessControl/ColumnAccessControl.ts +19 -7
  345. package/Types/Database/AccessControl/ColumnBillingAccessControl.ts +19 -7
  346. package/Types/Database/AccessControl/OwnerOnlyColumn.ts +15 -6
  347. package/Types/Database/CanonicalModelInstance.ts +102 -0
  348. package/Types/Database/TableColumn.ts +20 -6
  349. package/Types/EnterpriseLicense/EnterpriseLicensePeriods.ts +29 -0
  350. package/Types/IP/IPv6.ts +6 -1
  351. package/Types/Monitor/MonitorEvaluationSummary.ts +3 -0
  352. package/Types/Monitor/MonitorStep.ts +6 -1
  353. package/Types/Monitor/ProxmoxAlertTemplates.ts +1 -1
  354. package/Types/OnCallDutyPolicy/ScheduleTimeline.ts +507 -0
  355. package/Types/OnCallDutyPolicy/ScheduleTimelineLayout.ts +589 -0
  356. package/Types/Realtime/EventName.ts +11 -0
  357. package/Types/SecurityEvent/DetectionFindingConstants.ts +14 -0
  358. package/Types/SecurityEvent/OcsfSeverity.ts +31 -26
  359. package/Types/SecurityEvent/SigmaRule.ts +51 -0
  360. package/Types/SecurityEvent/ThreatIntelConstants.ts +18 -0
  361. package/Types/StatusPage/UptimeDailyAggregate.ts +110 -0
  362. package/UI/Components/AttachmentList/EventAttachmentList.tsx +30 -2
  363. package/UI/Components/Dashboard/DashboardVariableControl.tsx +12 -2
  364. package/UI/Components/Dropdown/Dropdown.tsx +6 -1
  365. package/UI/Components/EditionLabel/EditionLabel.tsx +808 -1195
  366. package/UI/Components/EditionLabel/LicenseManager.ts +119 -0
  367. package/UI/Components/EventItem/EventItem.tsx +12 -1
  368. package/UI/Components/Forms/BasicForm.tsx +151 -126
  369. package/UI/Components/Forms/CollapsibleFormSection.tsx +63 -0
  370. package/UI/Components/Forms/Fields/FormField.tsx +10 -4
  371. package/UI/Components/Forms/FormSummary.tsx +7 -0
  372. package/UI/Components/Forms/Types/Field.ts +10 -0
  373. package/UI/Components/Graphs/DayUptimeGraph.tsx +123 -15
  374. package/UI/Components/Markdown.tsx/MarkdownConverters.ts +0 -0
  375. package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +2 -1
  376. package/UI/Components/Markdown.tsx/SessionAwareImage.tsx +122 -0
  377. package/UI/Components/ModelList/ModelList.tsx +11 -1
  378. package/UI/Components/ModelTable/BaseModelTable.tsx +34 -5
  379. package/UI/Components/ModelTable/TableView.tsx +1 -1
  380. package/UI/Components/MonitorGraphs/Uptime.tsx +69 -0
  381. package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +28 -12
  382. package/UI/Components/TelemetryViewer/components/TelemetryHistogram.tsx +8 -1
  383. package/UI/Components/Tooltip/Tooltip.tsx +8 -1
  384. package/UI/Utils/API/API.ts +173 -12
  385. package/UI/Utils/API/RequestOptions.ts +11 -0
  386. package/UI/Utils/AnalyticsModelAPI/AnalyticsModelAPI.ts +31 -7
  387. package/UI/Utils/ModelAPI/ModelAPI.ts +30 -9
  388. package/UI/Utils/Navigation.ts +9 -0
  389. package/UI/Utils/OpenAuthenticatedUrl.ts +154 -0
  390. package/UI/Utils/Realtime.ts +176 -30
  391. package/UI/esbuild-enterprise.js +263 -0
  392. package/Utils/API.ts +14 -5
  393. package/Utils/EnterpriseLicense/EnterpriseLicenseUsage.ts +7 -2
  394. package/Utils/HostAddressUtil.ts +94 -0
  395. package/Utils/Monitor/MonitorDestinationUtil.ts +157 -0
  396. package/Utils/Monitor/MonitoringIntervalUtil.ts +436 -0
  397. package/Utils/SecurityEvent/GoogleSecOpsAlertNormalizer.ts +157 -7
  398. package/Utils/SecurityEvent/Sigma/SigmaRuleParser.ts +9 -17
  399. package/Utils/Slo/SloBurnRateTemplate.ts +2 -2
  400. package/Utils/StatusPage/UptimeDailyAggregateUtil.ts +192 -0
  401. package/build/dist/Models/AnalyticsModels/AuditLog.js +23 -15
  402. package/build/dist/Models/AnalyticsModels/AuditLog.js.map +1 -1
  403. package/build/dist/Models/DatabaseModels/GlobalConfig.js +25 -0
  404. package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
  405. package/build/dist/Models/DatabaseModels/Monitor.js +2 -2
  406. package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
  407. package/build/dist/Models/DatabaseModels/MonitorTemplate.js +2 -1
  408. package/build/dist/Models/DatabaseModels/MonitorTemplate.js.map +1 -1
  409. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleCalendarFeed.js +1 -1
  410. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleCalendarFeed.js.map +1 -1
  411. package/build/dist/Models/DatabaseModels/ProjectOnCallCalendarFeed.js +1 -1
  412. package/build/dist/Models/DatabaseModels/ProjectOnCallCalendarFeed.js.map +1 -1
  413. package/build/dist/Models/DatabaseModels/UserOnCallCalendarFeed.js +1 -1
  414. package/build/dist/Models/DatabaseModels/UserOnCallCalendarFeed.js.map +1 -1
  415. package/build/dist/Server/API/AIBillingAPI.js +1 -1
  416. package/build/dist/Server/API/AIBillingAPI.js.map +1 -1
  417. package/build/dist/Server/API/AIInsightAPI.js +1 -4
  418. package/build/dist/Server/API/AIInsightAPI.js.map +1 -1
  419. package/build/dist/Server/API/AIInvestigationAPI.js +1 -4
  420. package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
  421. package/build/dist/Server/API/AIReadinessAPI.js +1 -3
  422. package/build/dist/Server/API/AIReadinessAPI.js.map +1 -1
  423. package/build/dist/Server/API/AlertAPI.js +1 -1
  424. package/build/dist/Server/API/AlertAPI.js.map +1 -1
  425. package/build/dist/Server/API/AutoRemediationAPI.js +1 -4
  426. package/build/dist/Server/API/AutoRemediationAPI.js.map +1 -1
  427. package/build/dist/Server/API/BaseAPI.js +33 -0
  428. package/build/dist/Server/API/BaseAPI.js.map +1 -1
  429. package/build/dist/Server/API/BaseAnalyticsAPI.js +55 -10
  430. package/build/dist/Server/API/BaseAnalyticsAPI.js.map +1 -1
  431. package/build/dist/Server/API/BillingAPI.js +2 -2
  432. package/build/dist/Server/API/BillingAPI.js.map +1 -1
  433. package/build/dist/Server/API/BillingInvoiceAPI.js +1 -1
  434. package/build/dist/Server/API/BillingInvoiceAPI.js.map +1 -1
  435. package/build/dist/Server/API/BillingPaymentMethodAPI.js +2 -2
  436. package/build/dist/Server/API/BillingPaymentMethodAPI.js.map +1 -1
  437. package/build/dist/Server/API/CodeFixRunAPI.js +1 -3
  438. package/build/dist/Server/API/CodeFixRunAPI.js.map +1 -1
  439. package/build/dist/Server/API/CommonAPI.js +50 -5
  440. package/build/dist/Server/API/CommonAPI.js.map +1 -1
  441. package/build/dist/Server/API/DashboardAPI.js +12 -12
  442. package/build/dist/Server/API/DashboardAPI.js.map +1 -1
  443. package/build/dist/Server/API/GlobalConfigAPI.js +158 -342
  444. package/build/dist/Server/API/GlobalConfigAPI.js.map +1 -1
  445. package/build/dist/Server/API/IncidentAPI.js +2 -2
  446. package/build/dist/Server/API/IncidentAPI.js.map +1 -1
  447. package/build/dist/Server/API/IncidentEpisodeAPI.js +1 -1
  448. package/build/dist/Server/API/IncidentEpisodeAPI.js.map +1 -1
  449. package/build/dist/Server/API/NotificationAPI.js +1 -1
  450. package/build/dist/Server/API/NotificationAPI.js.map +1 -1
  451. package/build/dist/Server/API/OnCallCalendarAPI.js +1 -4
  452. package/build/dist/Server/API/OnCallCalendarAPI.js.map +1 -1
  453. package/build/dist/Server/API/OnCallDutyPolicyAPI.js +6 -0
  454. package/build/dist/Server/API/OnCallDutyPolicyAPI.js.map +1 -1
  455. package/build/dist/Server/API/OnCallReadinessAPI.js +4 -1
  456. package/build/dist/Server/API/OnCallReadinessAPI.js.map +1 -1
  457. package/build/dist/Server/API/OnCallScheduleTimelineAPI.js +494 -0
  458. package/build/dist/Server/API/OnCallScheduleTimelineAPI.js.map +1 -0
  459. package/build/dist/Server/API/ProjectAPI.js +1 -1
  460. package/build/dist/Server/API/ProjectAPI.js.map +1 -1
  461. package/build/dist/Server/API/ProjectOIDC.js +24 -16
  462. package/build/dist/Server/API/ProjectOIDC.js.map +1 -1
  463. package/build/dist/Server/API/ProjectSSO.js +24 -16
  464. package/build/dist/Server/API/ProjectSSO.js.map +1 -1
  465. package/build/dist/Server/API/ScheduledMaintenanceAPI.js +1 -1
  466. package/build/dist/Server/API/ScheduledMaintenanceAPI.js.map +1 -1
  467. package/build/dist/Server/API/StatusPageAPI.js +218 -76
  468. package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
  469. package/build/dist/Server/API/TeamMemberAPI.js +11 -4
  470. package/build/dist/Server/API/TeamMemberAPI.js.map +1 -1
  471. package/build/dist/Server/API/UserCallAPI.js +2 -2
  472. package/build/dist/Server/API/UserCallAPI.js.map +1 -1
  473. package/build/dist/Server/API/UserEmailAPI.js +2 -2
  474. package/build/dist/Server/API/UserEmailAPI.js.map +1 -1
  475. package/build/dist/Server/API/UserIncomingCallNumberAPI.js +2 -2
  476. package/build/dist/Server/API/UserIncomingCallNumberAPI.js.map +1 -1
  477. package/build/dist/Server/API/UserMicrosoftTeamsAPI.js +1 -1
  478. package/build/dist/Server/API/UserMicrosoftTeamsAPI.js.map +1 -1
  479. package/build/dist/Server/API/UserSlackAPI.js +1 -1
  480. package/build/dist/Server/API/UserSlackAPI.js.map +1 -1
  481. package/build/dist/Server/API/UserSmsAPI.js +2 -2
  482. package/build/dist/Server/API/UserSmsAPI.js.map +1 -1
  483. package/build/dist/Server/API/UserTotpAuthAPI.js +1 -1
  484. package/build/dist/Server/API/UserTotpAuthAPI.js.map +1 -1
  485. package/build/dist/Server/API/UserWebAuthnAPI.js +2 -2
  486. package/build/dist/Server/API/UserWebAuthnAPI.js.map +1 -1
  487. package/build/dist/Server/API/UserWebhookAPI.js +1 -1
  488. package/build/dist/Server/API/UserWebhookAPI.js.map +1 -1
  489. package/build/dist/Server/API/UserWhatsAppAPI.js +2 -2
  490. package/build/dist/Server/API/UserWhatsAppAPI.js.map +1 -1
  491. package/build/dist/Server/Enterprise/EnterpriseEdition.js +466 -0
  492. package/build/dist/Server/Enterprise/EnterpriseEdition.js.map +1 -0
  493. package/build/dist/Server/Enterprise/EnterpriseFeature.js +39 -0
  494. package/build/dist/Server/Enterprise/EnterpriseFeature.js.map +1 -0
  495. package/build/dist/Server/Enterprise/EnterpriseLicenseSnapshot.js +70 -0
  496. package/build/dist/Server/Enterprise/EnterpriseLicenseSnapshot.js.map +1 -0
  497. package/build/dist/Server/Enterprise/EnterpriseServerModule.js +84 -0
  498. package/build/dist/Server/Enterprise/EnterpriseServerModule.js.map +1 -0
  499. package/build/dist/Server/EnvironmentConfig.js +84 -2
  500. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  501. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793900000000-AddEnterpriseEditionFirstSeenAt.js +18 -0
  502. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793900000000-AddEnterpriseEditionFirstSeenAt.js.map +1 -0
  503. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +2 -0
  504. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  505. package/build/dist/Server/Middleware/MasterAdminAuthorization.js +11 -2
  506. package/build/dist/Server/Middleware/MasterAdminAuthorization.js.map +1 -1
  507. package/build/dist/Server/Middleware/UserAuthorization.js +94 -15
  508. package/build/dist/Server/Middleware/UserAuthorization.js.map +1 -1
  509. package/build/dist/Server/Services/ApiKeyPermissionService.js +80 -4
  510. package/build/dist/Server/Services/ApiKeyPermissionService.js.map +1 -1
  511. package/build/dist/Server/Services/AuditLogService.js +71 -740
  512. package/build/dist/Server/Services/AuditLogService.js.map +1 -1
  513. package/build/dist/Server/Services/DatabaseService.js +171 -0
  514. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  515. package/build/dist/Server/Services/DetectionRuleService.js +4 -4
  516. package/build/dist/Server/Services/DetectionRuleService.js.map +1 -1
  517. package/build/dist/Server/Services/EnterpriseLicenseService.js +34 -0
  518. package/build/dist/Server/Services/EnterpriseLicenseService.js.map +1 -1
  519. package/build/dist/Server/Services/GlobalConfigService.js +63 -0
  520. package/build/dist/Server/Services/GlobalConfigService.js.map +1 -1
  521. package/build/dist/Server/Services/MonitorProbeService.js +90 -17
  522. package/build/dist/Server/Services/MonitorProbeService.js.map +1 -1
  523. package/build/dist/Server/Services/MonitorService.js +45 -4
  524. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  525. package/build/dist/Server/Services/MonitorStatusTimelineService.js +242 -0
  526. package/build/dist/Server/Services/MonitorStatusTimelineService.js.map +1 -1
  527. package/build/dist/Server/Services/MonitorTemplateService.js +16 -0
  528. package/build/dist/Server/Services/MonitorTemplateService.js.map +1 -1
  529. package/build/dist/Server/Services/OnCallDutyPolicyChildService.js +170 -0
  530. package/build/dist/Server/Services/OnCallDutyPolicyChildService.js.map +1 -0
  531. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js +2 -2
  532. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js.map +1 -1
  533. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleService.js +2 -2
  534. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleService.js.map +1 -1
  535. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleTeamService.js +2 -2
  536. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleTeamService.js.map +1 -1
  537. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleUserService.js +2 -2
  538. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleUserService.js.map +1 -1
  539. package/build/dist/Server/Services/PayAsYouGoBillingService.js +20 -27
  540. package/build/dist/Server/Services/PayAsYouGoBillingService.js.map +1 -1
  541. package/build/dist/Server/Services/ProjectService.js +231 -0
  542. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  543. package/build/dist/Server/Services/RumSessionPinService.js +198 -16
  544. package/build/dist/Server/Services/RumSessionPinService.js.map +1 -1
  545. package/build/dist/Server/Services/StatusPagePrivateUserService.js +7 -3
  546. package/build/dist/Server/Services/StatusPagePrivateUserService.js.map +1 -1
  547. package/build/dist/Server/Services/StatusPageService.js +71 -0
  548. package/build/dist/Server/Services/StatusPageService.js.map +1 -1
  549. package/build/dist/Server/Services/TeamMemberService.js +10 -0
  550. package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
  551. package/build/dist/Server/Services/TeamPermissionService.js +89 -27
  552. package/build/dist/Server/Services/TeamPermissionService.js.map +1 -1
  553. package/build/dist/Server/Services/TeamService.js +9 -0
  554. package/build/dist/Server/Services/TeamService.js.map +1 -1
  555. package/build/dist/Server/Services/ThreatIntelFeedService.js +5 -4
  556. package/build/dist/Server/Services/ThreatIntelFeedService.js.map +1 -1
  557. package/build/dist/Server/Services/UserService.js +10 -16
  558. package/build/dist/Server/Services/UserService.js.map +1 -1
  559. package/build/dist/Server/Types/Database/Permissions/BasePermission.js +9 -6
  560. package/build/dist/Server/Types/Database/Permissions/BasePermission.js.map +1 -1
  561. package/build/dist/Server/Types/Database/Permissions/CreatePermission.js +10 -0
  562. package/build/dist/Server/Types/Database/Permissions/CreatePermission.js.map +1 -1
  563. package/build/dist/Server/Types/Database/Permissions/EditionPermission.js +154 -14
  564. package/build/dist/Server/Types/Database/Permissions/EditionPermission.js.map +1 -1
  565. package/build/dist/Server/Types/Database/Permissions/Index.js +60 -6
  566. package/build/dist/Server/Types/Database/Permissions/Index.js.map +1 -1
  567. package/build/dist/Server/Types/Database/Permissions/TablePermission.js +24 -16
  568. package/build/dist/Server/Types/Database/Permissions/TablePermission.js.map +1 -1
  569. package/build/dist/Server/Types/Database/Permissions/UpdatePermission.js +17 -0
  570. package/build/dist/Server/Types/Database/Permissions/UpdatePermission.js.map +1 -1
  571. package/build/dist/Server/Types/Markdown.js +31 -0
  572. package/build/dist/Server/Types/Markdown.js.map +1 -1
  573. package/build/dist/Server/Utils/AI/AIChatPrivacyFilter.js +7 -0
  574. package/build/dist/Server/Utils/AI/AIChatPrivacyFilter.js.map +1 -1
  575. package/build/dist/Server/Utils/AI/AIRunPrivacyFilter.js +7 -0
  576. package/build/dist/Server/Utils/AI/AIRunPrivacyFilter.js.map +1 -1
  577. package/build/dist/Server/Utils/CommunityEditionSsoReport.js +223 -0
  578. package/build/dist/Server/Utils/CommunityEditionSsoReport.js.map +1 -0
  579. package/build/dist/Server/Utils/EditionEnforcement.js +187 -0
  580. package/build/dist/Server/Utils/EditionEnforcement.js.map +1 -0
  581. package/build/dist/Server/Utils/FrontendEnvironment.js +31 -2
  582. package/build/dist/Server/Utils/FrontendEnvironment.js.map +1 -1
  583. package/build/dist/Server/Utils/InstanceHealth/RedisHealth.js +6 -193
  584. package/build/dist/Server/Utils/InstanceHealth/RedisHealth.js.map +1 -1
  585. package/build/dist/Server/Utils/MasterAdminPageAccess.js +39 -0
  586. package/build/dist/Server/Utils/MasterAdminPageAccess.js.map +1 -0
  587. package/build/dist/Server/Utils/Monitor/AffectedResourceList.js +96 -0
  588. package/build/dist/Server/Utils/Monitor/AffectedResourceList.js.map +1 -0
  589. package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js +8 -1
  590. package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js.map +1 -1
  591. package/build/dist/Server/Utils/Monitor/MonitorAlert.js +3 -1
  592. package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
  593. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +449 -261
  594. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  595. package/build/dist/Server/Utils/Monitor/MonitorIncident.js +3 -1
  596. package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
  597. package/build/dist/Server/Utils/Monitor/MonitoringIntervalValidator.js +88 -0
  598. package/build/dist/Server/Utils/Monitor/MonitoringIntervalValidator.js.map +1 -0
  599. package/build/dist/Server/Utils/Realtime.js +126 -37
  600. package/build/dist/Server/Utils/Realtime.js.map +1 -1
  601. package/build/dist/Server/Utils/SecurityEvent/DetectionRuleEvaluator.js +7 -25
  602. package/build/dist/Server/Utils/SecurityEvent/DetectionRuleEvaluator.js.map +1 -1
  603. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOpsSeverityRepair.js +127 -0
  604. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOpsSeverityRepair.js.map +1 -0
  605. package/build/dist/Server/Utils/SecurityEvent/Sigma/SigmaClickhouseCompiler.js +1 -1
  606. package/build/dist/Server/Utils/SecurityEvent/Sigma/SigmaClickhouseCompiler.js.map +1 -1
  607. package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelFeedPoller.js +3 -2
  608. package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelFeedPoller.js.map +1 -1
  609. package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelMatcher.js +4 -8
  610. package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelMatcher.js.map +1 -1
  611. package/build/dist/Server/Utils/Workspace/Slack/Slack.js +331 -11
  612. package/build/dist/Server/Utils/Workspace/Slack/Slack.js.map +1 -1
  613. package/build/dist/Types/API/Hostname.js +59 -11
  614. package/build/dist/Types/API/Hostname.js.map +1 -1
  615. package/build/dist/Types/BaseDatabase/DatabaseCommonInteractionPropsUtil.js +31 -1
  616. package/build/dist/Types/BaseDatabase/DatabaseCommonInteractionPropsUtil.js.map +1 -1
  617. package/build/dist/Types/Database/AccessControl/ColumnAccessControl.js +19 -7
  618. package/build/dist/Types/Database/AccessControl/ColumnAccessControl.js.map +1 -1
  619. package/build/dist/Types/Database/AccessControl/ColumnBillingAccessControl.js +19 -7
  620. package/build/dist/Types/Database/AccessControl/ColumnBillingAccessControl.js.map +1 -1
  621. package/build/dist/Types/Database/AccessControl/OwnerOnlyColumn.js +13 -6
  622. package/build/dist/Types/Database/AccessControl/OwnerOnlyColumn.js.map +1 -1
  623. package/build/dist/Types/Database/CanonicalModelInstance.js +88 -0
  624. package/build/dist/Types/Database/CanonicalModelInstance.js.map +1 -0
  625. package/build/dist/Types/Database/TableColumn.js +19 -6
  626. package/build/dist/Types/Database/TableColumn.js.map +1 -1
  627. package/build/dist/Types/EnterpriseLicense/EnterpriseLicensePeriods.js +28 -0
  628. package/build/dist/Types/EnterpriseLicense/EnterpriseLicensePeriods.js.map +1 -0
  629. package/build/dist/Types/IP/IPv6.js +6 -1
  630. package/build/dist/Types/IP/IPv6.js.map +1 -1
  631. package/build/dist/Types/Monitor/MonitorStep.js +5 -0
  632. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  633. package/build/dist/Types/Monitor/ProxmoxAlertTemplates.js +1 -1
  634. package/build/dist/Types/OnCallDutyPolicy/ScheduleTimeline.js +321 -0
  635. package/build/dist/Types/OnCallDutyPolicy/ScheduleTimeline.js.map +1 -0
  636. package/build/dist/Types/OnCallDutyPolicy/ScheduleTimelineLayout.js +372 -0
  637. package/build/dist/Types/OnCallDutyPolicy/ScheduleTimelineLayout.js.map +1 -0
  638. package/build/dist/Types/Realtime/EventName.js +10 -0
  639. package/build/dist/Types/Realtime/EventName.js.map +1 -1
  640. package/build/dist/Types/SecurityEvent/DetectionFindingConstants.js +11 -0
  641. package/build/dist/Types/SecurityEvent/DetectionFindingConstants.js.map +1 -1
  642. package/build/dist/Types/SecurityEvent/OcsfSeverity.js +30 -25
  643. package/build/dist/Types/SecurityEvent/OcsfSeverity.js.map +1 -1
  644. package/build/dist/Types/SecurityEvent/SigmaRule.js +47 -0
  645. package/build/dist/Types/SecurityEvent/SigmaRule.js.map +1 -1
  646. package/build/dist/Types/SecurityEvent/ThreatIntelConstants.js +14 -0
  647. package/build/dist/Types/SecurityEvent/ThreatIntelConstants.js.map +1 -1
  648. package/build/dist/Types/StatusPage/UptimeDailyAggregate.js +32 -0
  649. package/build/dist/Types/StatusPage/UptimeDailyAggregate.js.map +1 -0
  650. package/build/dist/UI/Components/AttachmentList/EventAttachmentList.js +9 -4
  651. package/build/dist/UI/Components/AttachmentList/EventAttachmentList.js.map +1 -1
  652. package/build/dist/UI/Components/Dashboard/DashboardVariableControl.js +10 -2
  653. package/build/dist/UI/Components/Dashboard/DashboardVariableControl.js.map +1 -1
  654. package/build/dist/UI/Components/Dropdown/Dropdown.js +5 -1
  655. package/build/dist/UI/Components/Dropdown/Dropdown.js.map +1 -1
  656. package/build/dist/UI/Components/EditionLabel/EditionLabel.js +425 -585
  657. package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
  658. package/build/dist/UI/Components/EditionLabel/LicenseManager.js +2 -0
  659. package/build/dist/UI/Components/EditionLabel/LicenseManager.js.map +1 -0
  660. package/build/dist/UI/Components/EventItem/EventItem.js +2 -2
  661. package/build/dist/UI/Components/EventItem/EventItem.js.map +1 -1
  662. package/build/dist/UI/Components/Forms/BasicForm.js +70 -64
  663. package/build/dist/UI/Components/Forms/BasicForm.js.map +1 -1
  664. package/build/dist/UI/Components/Forms/CollapsibleFormSection.js +27 -0
  665. package/build/dist/UI/Components/Forms/CollapsibleFormSection.js.map +1 -0
  666. package/build/dist/UI/Components/Forms/Fields/FormField.js +10 -7
  667. package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
  668. package/build/dist/UI/Components/Forms/FormSummary.js +7 -0
  669. package/build/dist/UI/Components/Forms/FormSummary.js.map +1 -1
  670. package/build/dist/UI/Components/Graphs/DayUptimeGraph.js +90 -17
  671. package/build/dist/UI/Components/Graphs/DayUptimeGraph.js.map +1 -1
  672. package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js +0 -0
  673. package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js.map +1 -1
  674. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +2 -1
  675. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
  676. package/build/dist/UI/Components/Markdown.tsx/SessionAwareImage.js +84 -0
  677. package/build/dist/UI/Components/Markdown.tsx/SessionAwareImage.js.map +1 -0
  678. package/build/dist/UI/Components/ModelList/ModelList.js +4 -1
  679. package/build/dist/UI/Components/ModelList/ModelList.js.map +1 -1
  680. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +14 -1
  681. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  682. package/build/dist/UI/Components/ModelTable/TableView.js +1 -1
  683. package/build/dist/UI/Components/ModelTable/TableView.js.map +1 -1
  684. package/build/dist/UI/Components/MonitorGraphs/Uptime.js +42 -1
  685. package/build/dist/UI/Components/MonitorGraphs/Uptime.js.map +1 -1
  686. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js +2 -2
  687. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js.map +1 -1
  688. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js +8 -1
  689. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js.map +1 -1
  690. package/build/dist/UI/Components/Tooltip/Tooltip.js +2 -1
  691. package/build/dist/UI/Components/Tooltip/Tooltip.js.map +1 -1
  692. package/build/dist/UI/Utils/API/API.js +143 -19
  693. package/build/dist/UI/Utils/API/API.js.map +1 -1
  694. package/build/dist/UI/Utils/AnalyticsModelAPI/AnalyticsModelAPI.js +21 -7
  695. package/build/dist/UI/Utils/AnalyticsModelAPI/AnalyticsModelAPI.js.map +1 -1
  696. package/build/dist/UI/Utils/ModelAPI/ModelAPI.js +26 -9
  697. package/build/dist/UI/Utils/ModelAPI/ModelAPI.js.map +1 -1
  698. package/build/dist/UI/Utils/Navigation.js +8 -0
  699. package/build/dist/UI/Utils/Navigation.js.map +1 -1
  700. package/build/dist/UI/Utils/OpenAuthenticatedUrl.js +92 -0
  701. package/build/dist/UI/Utils/OpenAuthenticatedUrl.js.map +1 -0
  702. package/build/dist/UI/Utils/Realtime.js +120 -15
  703. package/build/dist/UI/Utils/Realtime.js.map +1 -1
  704. package/build/dist/Utils/API.js +13 -5
  705. package/build/dist/Utils/API.js.map +1 -1
  706. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js +6 -2
  707. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js.map +1 -1
  708. package/build/dist/Utils/HostAddressUtil.js +80 -0
  709. package/build/dist/Utils/HostAddressUtil.js.map +1 -0
  710. package/build/dist/Utils/Monitor/MonitorDestinationUtil.js +127 -0
  711. package/build/dist/Utils/Monitor/MonitorDestinationUtil.js.map +1 -0
  712. package/build/dist/Utils/Monitor/MonitoringIntervalUtil.js +374 -0
  713. package/build/dist/Utils/Monitor/MonitoringIntervalUtil.js.map +1 -0
  714. package/build/dist/Utils/SecurityEvent/GoogleSecOpsAlertNormalizer.js +123 -6
  715. package/build/dist/Utils/SecurityEvent/GoogleSecOpsAlertNormalizer.js.map +1 -1
  716. package/build/dist/Utils/SecurityEvent/Sigma/SigmaRuleParser.js +4 -18
  717. package/build/dist/Utils/SecurityEvent/Sigma/SigmaRuleParser.js.map +1 -1
  718. package/build/dist/Utils/Slo/SloBurnRateTemplate.js +2 -2
  719. package/build/dist/Utils/StatusPage/UptimeDailyAggregateUtil.js +148 -0
  720. package/build/dist/Utils/StatusPage/UptimeDailyAggregateUtil.js.map +1 -0
  721. package/jest.config.json +3 -1
  722. package/package.json +1 -1
  723. package/test-setup.sh +103 -34
  724. package/tsconfig.json +13 -0
  725. package/Server/API/EnterpriseLicenseAPI.ts +0 -925
  726. package/Server/API/TeamComplianceAPI.ts +0 -158
  727. package/Server/Middleware/SCIMAuthorization.ts +0 -141
  728. package/Server/Services/TeamComplianceService.ts +0 -733
  729. package/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.ts +0 -186
  730. package/Server/Utils/InstanceHealth/PostgresHealth.ts +0 -286
  731. package/Tests/App/AdminDashboard/EnterpriseLicenseInstanceActivity.test.tsx +0 -451
  732. package/Tests/App/Dashboard/AuditLogsTable.test.tsx +0 -598
  733. package/Tests/App/Dashboard/SecurityEventsSideMenu.test.tsx +0 -247
  734. package/Tests/App/Dashboard/SecurityEventsTableColumns.test.tsx +0 -382
  735. package/Tests/Server/API/EnterpriseLicenseReportUserCount.test.ts +0 -1851
  736. package/Tests/Server/Middleware/SCIMAuthorization.test.ts +0 -525
  737. package/Tests/Server/Services/TeamComplianceServiceBehaviour.test.ts +0 -1845
  738. package/Tests/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.test.ts +0 -495
  739. package/Tests/Server/Utils/InstanceHealth/PostgresHealth.test.ts +0 -337
  740. package/Tests/Utils/EnterpriseLicenseSeats.test.ts +0 -576
  741. package/Tests/Utils/EnterpriseLicenseSync.test.ts +0 -568
  742. package/Utils/EnterpriseLicense/EnterpriseLicenseSeats.ts +0 -287
  743. package/Utils/EnterpriseLicense/EnterpriseLicenseSync.ts +0 -244
  744. package/build/dist/Server/API/EnterpriseLicenseAPI.js +0 -646
  745. package/build/dist/Server/API/EnterpriseLicenseAPI.js.map +0 -1
  746. package/build/dist/Server/API/TeamComplianceAPI.js +0 -111
  747. package/build/dist/Server/API/TeamComplianceAPI.js.map +0 -1
  748. package/build/dist/Server/Middleware/SCIMAuthorization.js +0 -124
  749. package/build/dist/Server/Middleware/SCIMAuthorization.js.map +0 -1
  750. package/build/dist/Server/Services/TeamComplianceService.js +0 -537
  751. package/build/dist/Server/Services/TeamComplianceService.js.map +0 -1
  752. package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js +0 -145
  753. package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js.map +0 -1
  754. package/build/dist/Server/Utils/InstanceHealth/PostgresHealth.js +0 -194
  755. package/build/dist/Server/Utils/InstanceHealth/PostgresHealth.js.map +0 -1
  756. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js +0 -168
  757. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js.map +0 -1
  758. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSync.js +0 -174
  759. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSync.js.map +0 -1
@@ -0,0 +1,374 @@
1
+ /*
2
+ * How often a monitor is probed: the canonical reading of
3
+ * `Monitor.monitoringInterval` (and `MonitorTemplate.monitoringInterval`).
4
+ *
5
+ * WHY IT LIVES IN Common
6
+ *
7
+ * The column is free-text ShortText and is supposed to hold a 5-field cron
8
+ * expression, but nothing ever validated it. Four places have an opinion
9
+ * about what a stored value MEANS and they must not disagree:
10
+ *
11
+ * - the write hooks (MonitorService / MonitorTemplateService) — which now
12
+ * normalize on save, so the column converges on canonical cron;
13
+ * - the claim query (MonitorProbeService.claimMonitorProbesForProbing) —
14
+ * which derives `nextPingAt` and is the thing that actually schedules
15
+ * the probe;
16
+ * - the telemetry-monitor worker and the over-time criteria evaluator —
17
+ * which need the cadence to size their evaluation windows;
18
+ * - the data migration that cleans the rows written before any of this.
19
+ *
20
+ * It is isomorphic (no server-only imports) because the dashboard needs the
21
+ * same reading to render a stored value, and pure and TOTAL — it never
22
+ * throws. Policy (reject / rewrite / leave alone) belongs to the caller:
23
+ * the write hook throws, the scheduler falls back, the migration skips.
24
+ * Same reason RescanIntervalUtil and ScanTargetUtil sit in Common.
25
+ *
26
+ * WHAT WENT WRONG, so the next person does not undo it
27
+ *
28
+ * A monitor storing "5m" was not a cron expression, so cron-parser threw,
29
+ * and the claim query caught that and fell back to a hard-coded "one minute
30
+ * from now". A monitor configured for five minutes was probed every ~75
31
+ * seconds — four times the requested rate — silently, for as long as the row
32
+ * existed. 103 monitors across 10 projects were in that state. Most of them
33
+ * got there by copying OUR OWN Terraform examples, which passed the dropdown
34
+ * LABEL ("Every 5 minutes") where the API wanted the VALUE ("*\/5 * * * *").
35
+ *
36
+ * THE INTERPRETIVE RULE THIS ENCODES
37
+ *
38
+ * A bare duration in THIS column is always a CADENCE, never a clock
39
+ * position: "5m" means "every five minutes", not "at five past". That is
40
+ * unambiguous here because the column's only consumer is a polling
41
+ * schedule. Do not lift this parser somewhere a duration could mean an
42
+ * offset. Note CronTime.ts spells out the same cadence-shaped constants.
43
+ */
44
+ import CronTab from "../CronTab";
45
+ export var MonitoringIntervalNormalizationStatus;
46
+ (function (MonitoringIntervalNormalizationStatus) {
47
+ /*
48
+ * Null, undefined or blank. A legitimate state: the monitor is not probed
49
+ * on a schedule (Manual monitors, and ~4,177 rows in production).
50
+ */
51
+ MonitoringIntervalNormalizationStatus["Empty"] = "Empty";
52
+ /* Already a valid cron expression. Returned byte-identical. */
53
+ MonitoringIntervalNormalizationStatus["AlreadyCanonical"] = "AlreadyCanonical";
54
+ /* Understood, and rewritten to canonical cron. */
55
+ MonitoringIntervalNormalizationStatus["Normalized"] = "Normalized";
56
+ /* Not understood. The caller decides what that means. */
57
+ MonitoringIntervalNormalizationStatus["Unrecognized"] = "Unrecognized";
58
+ })(MonitoringIntervalNormalizationStatus || (MonitoringIntervalNormalizationStatus = {}));
59
+ /*
60
+ * Cadences that divide their unit evenly.
61
+ *
62
+ * A 7-minute step fires at :00, :07 ... :56 and then :00 again — a four-minute
63
+ * gap at every hour wrap. It is NOT "every 7 minutes", so storing it as the
64
+ * normalization of "every 7 minutes" would be storing a lie. We only accept
65
+ * n where the unit divides evenly; everything else is Unrecognized and the
66
+ * caller can tell the user to write the cron they actually want.
67
+ */
68
+ const minutesDivideEvenly = (n) => {
69
+ return n >= 2 && n <= 59 && 60 % n === 0;
70
+ };
71
+ const hoursDivideEvenly = (n) => {
72
+ return n >= 2 && n <= 23 && 24 % n === 0;
73
+ };
74
+ /*
75
+ * Labels the dashboard dropdown offers, mirrored here because Common cannot
76
+ * import from the App package. MonitoringIntervalLabelParity.test.ts fails
77
+ * if MonitorIntervalDropdownOptions.ts and this list ever drift apart — that
78
+ * test is the link, not this comment.
79
+ */
80
+ const DASHBOARD_DROPDOWN_LABELS = {
81
+ "every minute": "* * * * *",
82
+ "every 2 minutes": "*/2 * * * *",
83
+ "every 5 minutes": "*/5 * * * *",
84
+ "every 10 minutes": "*/10 * * * *",
85
+ "every 15 minutes": "*/15 * * * *",
86
+ "every 30 minutes": "*/30 * * * *",
87
+ "every hour": "0 * * * *",
88
+ "every 2 hours": "0 */2 * * *",
89
+ "every 3 hours": "0 */3 * * *",
90
+ "every 6 hours": "0 */6 * * *",
91
+ "every 12 hours": "0 */12 * * *",
92
+ "every day": "0 0 * * *",
93
+ };
94
+ /*
95
+ * Bare adverbs, which carry no number to run through the grammar.
96
+ */
97
+ const ADVERB_LABELS = {
98
+ minutely: "* * * * *",
99
+ hourly: "0 * * * *",
100
+ daily: "0 0 * * *",
101
+ nightly: "0 0 * * *",
102
+ weekly: "0 0 * * 0",
103
+ monthly: "0 0 1 * *",
104
+ yearly: "0 0 1 1 *",
105
+ annually: "0 0 1 1 *",
106
+ };
107
+ /*
108
+ * The unit vocabulary the duration grammar accepts. Seconds are deliberately
109
+ * absent: the claim loop runs once a minute, so a sub-minute cadence cannot
110
+ * be honoured and accepting one would promise a rate we never deliver.
111
+ */
112
+ /*
113
+ * Numbers written as words. "Every Five Minutes" is in the production
114
+ * census, so the grammar has to read these; the range stops where a cadence
115
+ * stops being plausible rather than trying to be a general number parser.
116
+ */
117
+ const SPELLED_NUMBERS = {
118
+ a: 1,
119
+ an: 1,
120
+ one: 1,
121
+ two: 2,
122
+ three: 3,
123
+ four: 4,
124
+ five: 5,
125
+ six: 6,
126
+ seven: 7,
127
+ eight: 8,
128
+ nine: 9,
129
+ ten: 10,
130
+ eleven: 11,
131
+ twelve: 12,
132
+ fifteen: 15,
133
+ twenty: 20,
134
+ thirty: 30,
135
+ sixty: 60,
136
+ };
137
+ const DIGITS_ONLY = /^\d+$/u;
138
+ const MINUTE_UNITS = [
139
+ "m",
140
+ "min",
141
+ "mins",
142
+ "minute",
143
+ "minutes",
144
+ ];
145
+ const HOUR_UNITS = ["h", "hr", "hrs", "hour", "hours"];
146
+ const DAY_UNITS = ["d", "day", "days"];
147
+ const WEEK_UNITS = ["w", "week", "weeks"];
148
+ class MonitoringIntervalUtil {
149
+ /*
150
+ * Lowercase, collapse any run of whitespace (including the non-breaking
151
+ * space that survives a copy-paste out of our docs) to one space, and drop
152
+ * wrapping quotes and a trailing period. Lookup keys are built this way so
153
+ * "EVERY 5 MINUTES." and "every 5 minutes" are the same key.
154
+ *
155
+ * toLowerCase, not toLocaleLowerCase: in a Turkish locale the latter maps
156
+ * "I" to a dotless i and the table would stop matching.
157
+ */
158
+ static toLookupKey(value) {
159
+ return value
160
+ .replace(/[\s\u00a0]+/g, " ")
161
+ .trim()
162
+ .replace(/^["']+|["']+$/g, "")
163
+ .replace(/\.+$/, "")
164
+ .trim()
165
+ .toLowerCase();
166
+ }
167
+ /*
168
+ * The preset labels we ship, keyed for lookup. Built by iterating
169
+ * CronTab.PRESETS rather than retyping them, so a preset added there is
170
+ * understood here without anyone remembering to update this file.
171
+ */
172
+ static buildLabelTable() {
173
+ const table = {};
174
+ for (const preset of CronTab.PRESETS) {
175
+ table[MonitoringIntervalUtil.toLookupKey(preset.label)] = preset.value;
176
+ }
177
+ /*
178
+ * The dashboard's own labels win where the two lists disagree on
179
+ * wording, because that is what an operator sees on screen and what
180
+ * they are most likely to paste into an API call.
181
+ */
182
+ for (const [label, cron] of Object.entries(DASHBOARD_DROPDOWN_LABELS)) {
183
+ table[label] = cron;
184
+ }
185
+ for (const [label, cron] of Object.entries(ADVERB_LABELS)) {
186
+ table[label] = cron;
187
+ }
188
+ return table;
189
+ }
190
+ static getLabelTable() {
191
+ if (!MonitoringIntervalUtil.labelTable) {
192
+ MonitoringIntervalUtil.labelTable =
193
+ MonitoringIntervalUtil.buildLabelTable();
194
+ }
195
+ return MonitoringIntervalUtil.labelTable;
196
+ }
197
+ /*
198
+ * "5m", "every 5 minutes", "2 hrs", "1 day" -> cron, or null.
199
+ *
200
+ * A missing count means one ("every minute", "hourly" handled above;
201
+ * "minute" and "m" land here). The divisor guards above decide whether a
202
+ * count is expressible as a cron step at all.
203
+ */
204
+ static fromDurationGrammar(key) {
205
+ /*
206
+ * A digit may sit flush against its unit ("5m"); a spelled-out number
207
+ * needs a separator or "fiveminutes" would parse. Hence the two
208
+ * alternatives rather than one `\s*`.
209
+ */
210
+ const match = key.match(/^(every\s+)?(?:(\d+)\s*|([a-z]+)\s+)?([a-z]+)$/);
211
+ if (!match) {
212
+ return null;
213
+ }
214
+ const hasEveryPrefix = Boolean(match[1]);
215
+ const digitCount = match[2];
216
+ const wordCount = match[3];
217
+ const unit = match[4];
218
+ const rawCount = digitCount !== null && digitCount !== void 0 ? digitCount : wordCount;
219
+ let count;
220
+ if (rawCount === undefined) {
221
+ /*
222
+ * A bare unit with no count and no "every" is not a cadence, it is a
223
+ * noun: "minutes" tells us nothing. Require one or the other, so
224
+ * "every minute" and "1 minute" are read and "minutes" is refused.
225
+ */
226
+ if (!hasEveryPrefix) {
227
+ return null;
228
+ }
229
+ count = 1;
230
+ }
231
+ else if (DIGITS_ONLY.test(rawCount)) {
232
+ count = parseInt(rawCount, 10);
233
+ }
234
+ else {
235
+ /*
236
+ * Spelled-out numbers: "Every Five Minutes" is a real production
237
+ * value, so the grammar has to read words as well as digits.
238
+ */
239
+ const spelled = SPELLED_NUMBERS[rawCount];
240
+ if (spelled === undefined) {
241
+ return null;
242
+ }
243
+ count = spelled;
244
+ }
245
+ if (!Number.isFinite(count) || count < 1) {
246
+ return null;
247
+ }
248
+ if (MINUTE_UNITS.includes(unit)) {
249
+ if (count === 1) {
250
+ return "* * * * *";
251
+ }
252
+ if (count === 60) {
253
+ return "0 * * * *";
254
+ }
255
+ return minutesDivideEvenly(count) ? `*/${count} * * * *` : null;
256
+ }
257
+ if (HOUR_UNITS.includes(unit)) {
258
+ if (count === 1) {
259
+ return "0 * * * *";
260
+ }
261
+ if (count === 24) {
262
+ return "0 0 * * *";
263
+ }
264
+ return hoursDivideEvenly(count) ? `0 */${count} * * *` : null;
265
+ }
266
+ if (DAY_UNITS.includes(unit)) {
267
+ return count === 1 ? "0 0 * * *" : null;
268
+ }
269
+ if (WEEK_UNITS.includes(unit)) {
270
+ return count === 1 ? "0 0 * * 0" : null;
271
+ }
272
+ return null;
273
+ }
274
+ /**
275
+ * Read a stored (or inbound) monitoring interval.
276
+ *
277
+ * Never throws. Never guesses at something it does not understand — an
278
+ * unrecognized value comes back as Unrecognized with a null cron, and the
279
+ * caller decides whether that is a 400, a log line, or a skipped row.
280
+ */
281
+ static normalize(value) {
282
+ if (value === null || value === undefined || typeof value !== "string") {
283
+ return {
284
+ status: MonitoringIntervalNormalizationStatus.Empty,
285
+ cron: null,
286
+ input: null,
287
+ };
288
+ }
289
+ const collapsed = value.replace(/[\s\u00a0]+/g, " ").trim();
290
+ if (collapsed === "") {
291
+ return {
292
+ status: MonitoringIntervalNormalizationStatus.Empty,
293
+ cron: null,
294
+ input: value,
295
+ };
296
+ }
297
+ /*
298
+ * Valid cron first, and on the RAW value.
299
+ *
300
+ * This is what keeps the ~4,700 rows that were always correct on an
301
+ * identical code path, byte for byte. It also means anything cron-parser
302
+ * accepts but this hand-rolled grammar does not — "@hourly", six-field
303
+ * expressions, step/range combinations nobody here anticipated — is
304
+ * passed through untouched rather than being "corrected" into something
305
+ * else. A normalizer that disagrees with the runtime parser would
306
+ * reintroduce this very bug in mirror image.
307
+ */
308
+ if (CronTab.isValid(collapsed)) {
309
+ return {
310
+ status: collapsed === value
311
+ ? MonitoringIntervalNormalizationStatus.AlreadyCanonical
312
+ : MonitoringIntervalNormalizationStatus.Normalized,
313
+ cron: collapsed,
314
+ input: value,
315
+ };
316
+ }
317
+ const key = MonitoringIntervalUtil.toLookupKey(collapsed);
318
+ const fromLabel = MonitoringIntervalUtil.getLabelTable()[key];
319
+ if (fromLabel) {
320
+ return {
321
+ status: MonitoringIntervalNormalizationStatus.Normalized,
322
+ cron: fromLabel,
323
+ input: value,
324
+ };
325
+ }
326
+ /*
327
+ * "every-1-min" and friends: treat a hyphen or underscore as a space and
328
+ * try the label table and the grammar again. Done after the plain
329
+ * lookup so a legitimate cron is never mangled by it.
330
+ */
331
+ const looseKey = key.replace(/[-_]+/g, " ").replace(/\s+/g, " ");
332
+ const fromLooseLabel = MonitoringIntervalUtil.getLabelTable()[looseKey];
333
+ if (fromLooseLabel) {
334
+ return {
335
+ status: MonitoringIntervalNormalizationStatus.Normalized,
336
+ cron: fromLooseLabel,
337
+ input: value,
338
+ };
339
+ }
340
+ const fromGrammar = MonitoringIntervalUtil.fromDurationGrammar(key) ||
341
+ MonitoringIntervalUtil.fromDurationGrammar(looseKey);
342
+ if (fromGrammar) {
343
+ return {
344
+ status: MonitoringIntervalNormalizationStatus.Normalized,
345
+ cron: fromGrammar,
346
+ input: value,
347
+ };
348
+ }
349
+ return {
350
+ status: MonitoringIntervalNormalizationStatus.Unrecognized,
351
+ cron: null,
352
+ input: value,
353
+ };
354
+ }
355
+ /**
356
+ * The cron this value means, or null if it is empty or not understood.
357
+ *
358
+ * The convenience form for read paths that only want a schedule and have
359
+ * their own fallback for "no schedule".
360
+ */
361
+ static toCronOrNull(value) {
362
+ return MonitoringIntervalUtil.normalize(value).cron;
363
+ }
364
+ /**
365
+ * The canonical cron for a recognised cadence label, for building error
366
+ * messages that tell the caller what to write instead.
367
+ */
368
+ static getSuggestedCronForMessage() {
369
+ return "*/5 * * * *";
370
+ }
371
+ }
372
+ MonitoringIntervalUtil.labelTable = null;
373
+ export default MonitoringIntervalUtil;
374
+ //# sourceMappingURL=MonitoringIntervalUtil.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MonitoringIntervalUtil.js","sourceRoot":"","sources":["../../../../Utils/Monitor/MonitoringIntervalUtil.ts"],"names":[],"mappings":"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"}
@@ -22,7 +22,10 @@ import { buildObservables, contentHashEventUid, flattenPayload, parseEventTime,
22
22
  * metadata; the others still have an id, timestamps, tags and (for SOAR)
23
23
  * the originating system, which is enough for a finding row.
24
24
  */
25
- const DETECTION_FINDING_CLASS_UID = 2004;
25
+ export const DETECTION_FINDING_CLASS_UID = 2004;
26
+ // The source every row this normalizer writes is attributed to.
27
+ export const GOOGLE_SECOPS_VENDOR_NAME = "Google";
28
+ export const GOOGLE_SECOPS_PRODUCT_NAME = "Google SecOps";
26
29
  /*
27
30
  * How many sample events to mine for observables. Detections can carry
28
31
  * hundreds of matched events; a handful is enough to identify the
@@ -42,6 +45,20 @@ const COLLECTION_TYPES = [
42
45
  "MACHINE_INTELLIGENCE_ALERT",
43
46
  "SOAR_ALERT",
44
47
  ];
48
+ /*
49
+ * Google's recommended risk_score ranges for custom detections, highest
50
+ * band first (https://docs.cloud.google.com/chronicle/docs/yara-l/outcome-syntax):
51
+ * 90-100 critical, 80-89 high, 50-79 medium, 20-49 low, 1-19 observations.
52
+ * A score grades into the first band whose minimum it reaches; a score of
53
+ * zero or less grades nothing.
54
+ */
55
+ export const GOOGLE_SECOPS_RISK_SCORE_BANDS = [
56
+ { minimum: 90, severity: OcsfSeverity.Critical },
57
+ { minimum: 80, severity: OcsfSeverity.High },
58
+ { minimum: 50, severity: OcsfSeverity.Medium },
59
+ { minimum: 20, severity: OcsfSeverity.Low },
60
+ { minimum: 0, severity: OcsfSeverity.Informational },
61
+ ];
45
62
  function collectSampleEvents(payload) {
46
63
  var _a;
47
64
  const events = [];
@@ -86,6 +103,108 @@ function readDetectionEntry(payload) {
86
103
  }
87
104
  return null;
88
105
  }
106
+ /*
107
+ * Every value stored under one key of a Google key/value list. ruleLabels
108
+ * and outcomes both arrive as [{ key, value }]; a plain object map is
109
+ * accepted too, the shape a hand-built webhook body may use. Keys compare
110
+ * trimmed and case-insensitively because YARA-L meta keys are free text.
111
+ */
112
+ function readKeyedValues(list, key) {
113
+ const wanted = key.toLowerCase();
114
+ const values = [];
115
+ if (Array.isArray(list)) {
116
+ for (const entry of list) {
117
+ if (!entry || typeof entry !== "object" || Array.isArray(entry)) {
118
+ continue;
119
+ }
120
+ const entryKey = entry["key"];
121
+ if (typeof entryKey === "string" &&
122
+ entryKey.trim().toLowerCase() === wanted) {
123
+ values.push(entry["value"]);
124
+ }
125
+ }
126
+ return values;
127
+ }
128
+ if (list && typeof list === "object") {
129
+ for (const entryKey of Object.keys(list)) {
130
+ if (entryKey.trim().toLowerCase() === wanted) {
131
+ values.push(list[entryKey]);
132
+ }
133
+ }
134
+ }
135
+ return values;
136
+ }
137
+ /*
138
+ * A severity only when the text names one. "Unknown" is the absence of a
139
+ * grade, not a grade, so it does not stop the search for a real one.
140
+ */
141
+ function gradeSeverityText(value) {
142
+ if (typeof value !== "string" && typeof value !== "number") {
143
+ return null;
144
+ }
145
+ const severity = normalizeOcsfSeverity(String(value));
146
+ return severity === OcsfSeverity.Unknown ? null : severity;
147
+ }
148
+ function gradeRiskScore(value) {
149
+ let score = Number.NaN;
150
+ if (typeof value === "number") {
151
+ score = value;
152
+ }
153
+ else if (typeof value === "string" && value.trim() !== "") {
154
+ score = Number(value);
155
+ }
156
+ if (!Number.isFinite(score) || score <= 0) {
157
+ return null;
158
+ }
159
+ for (const band of GOOGLE_SECOPS_RISK_SCORE_BANDS) {
160
+ if (score >= band.minimum) {
161
+ return band.severity;
162
+ }
163
+ }
164
+ return null;
165
+ }
166
+ function firstGrade(values, grade) {
167
+ for (const value of values) {
168
+ const severity = grade(value);
169
+ if (severity) {
170
+ return severity;
171
+ }
172
+ }
173
+ return null;
174
+ }
175
+ /*
176
+ * Where a detection's severity lives depends on who wrote the rule.
177
+ *
178
+ * 1. detection[].severity — Google grades its own curated rules (Applied
179
+ * Threat Intelligence, the curated rule sets) here.
180
+ * 2. The Collection's own severity — SOAR alerts and webhook bodies.
181
+ * 3. detection[].ruleLabels "severity" — a custom YARA-L rule's
182
+ * `meta: severity = "High"`. Google leaves detection[].severity empty
183
+ * for these and returns the meta section as ruleLabels; it is the value
184
+ * the SecOps rules dashboard shows as the rule's severity.
185
+ * 4. detection[].outcomes "risk_score" — a rule that sets no severity but
186
+ * scores its detections with $risk_score, graded with Google's
187
+ * published bands. Only the outcome counts: the bare riskScore field
188
+ * is filled with a default (40 when alerting, 15 when not) for rules
189
+ * that set no score, and grading that would invent a severity.
190
+ *
191
+ * The first two are the only places read before, and they are read first,
192
+ * so a detection that already graded grades exactly as it did.
193
+ */
194
+ function resolveSeverity(payload, detection) {
195
+ var _a;
196
+ const ruleLabels = detection
197
+ ? (_a = readValue(detection, "ruleLabels")) !== null && _a !== void 0 ? _a : readValue(detection, "rule_labels")
198
+ : null;
199
+ const outcomes = detection
200
+ ? readValue(detection, "outcomes")
201
+ : null;
202
+ return ((detection && gradeSeverityText(readString(detection, "severity"))) ||
203
+ gradeSeverityText(readString(payload, "severity")) ||
204
+ firstGrade(readKeyedValues(ruleLabels, "severity"), gradeSeverityText) ||
205
+ firstGrade(readKeyedValues(outcomes, "risk_score"), gradeRiskScore) ||
206
+ OcsfSeverity.Unknown);
207
+ }
89
208
  function readCollectionType(payload) {
90
209
  return readString(payload, "type").toUpperCase();
91
210
  }
@@ -174,9 +293,7 @@ export default class GoogleSecOpsAlertNormalizer {
174
293
  readString(detection, "ruleVersionId") ||
175
294
  readString(detection, "rule_version_id")
176
295
  : "";
177
- const severityName = (detection && normalizeOcsfSeverity(readString(detection, "severity"))) ||
178
- normalizeOcsfSeverity(readString(payload, "severity")) ||
179
- OcsfSeverity.Unknown;
296
+ const severityName = resolveSeverity(payload, detection);
180
297
  const time = parseEventTime((_c = (_b = (_a = readValue(payload, "detectionTime")) !== null && _a !== void 0 ? _a : readValue(payload, "detection_time")) !== null && _b !== void 0 ? _b : readValue(payload, "createdTime")) !== null && _c !== void 0 ? _c : readValue(payload, "created_time"));
181
298
  /*
182
299
  * Mine the matched UDM sample events for entities. The detection row's
@@ -216,8 +333,8 @@ export default class GoogleSecOpsAlertNormalizer {
216
333
  readString(payload, "detection.alert_state") ||
217
334
  "",
218
335
  message,
219
- vendorName: "Google",
220
- productName: "Google SecOps",
336
+ vendorName: GOOGLE_SECOPS_VENDOR_NAME,
337
+ productName: GOOGLE_SECOPS_PRODUCT_NAME,
221
338
  ruleId,
222
339
  ruleName,
223
340
  mitreTactics: firstSample ? firstSample.mitreTactics : [],
@@ -1 +1 @@
1
- {"version":3,"file":"GoogleSecOpsAlertNormalizer.js","sourceRoot":"","sources":["../../../../Utils/SecurityEvent/GoogleSecOpsAlertNormalizer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GoogleSecOpsAlertNormalizer.js","sourceRoot":"","sources":["../../../../Utils/SecurityEvent/GoogleSecOpsAlertNormalizer.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import yaml from "js-yaml";
2
2
  import BadDataException from "../../../Types/Exception/BadDataException";
3
- import { SigmaLevel, } from "../../../Types/SecurityEvent/SigmaRule";
3
+ import { SIGMA_DEFAULT_LEVEL, SIGMA_SUPPORTED_MODIFIERS, SigmaLevel, } from "../../../Types/SecurityEvent/SigmaRule";
4
4
  /*
5
5
  * Sigma YAML -> typed SigmaRule.
6
6
  *
@@ -11,21 +11,7 @@ import { SigmaLevel, } from "../../../Types/SecurityEvent/SigmaRule";
11
11
  * error rather than silently ignored — a rule that parses is a rule the
12
12
  * engine evaluates faithfully.
13
13
  */
14
- const SUPPORTED_MODIFIERS = new Set([
15
- "contains",
16
- "startswith",
17
- "endswith",
18
- "all",
19
- "re",
20
- "cased",
21
- "gt",
22
- "gte",
23
- "lt",
24
- "lte",
25
- "cidr",
26
- "exists",
27
- "windash",
28
- ]);
14
+ const SUPPORTED_MODIFIERS = new Set(SIGMA_SUPPORTED_MODIFIERS);
29
15
  const WHITESPACE_REGEX = /\s/;
30
16
  const COUNT_REGEX = /^\d+$/;
31
17
  const TACTIC_TAG_REGEX = /^ta\d{4}$/i;
@@ -306,10 +292,10 @@ export default class SigmaRuleParser {
306
292
  const condition = new ConditionParser(tokenizeCondition(conditionRaw)).parse();
307
293
  // Every referenced selection must exist.
308
294
  this.validateConditionReferences(condition, selections);
309
- const levelRaw = String(doc["level"] || "medium").toLowerCase();
295
+ const levelRaw = String(doc["level"] || SIGMA_DEFAULT_LEVEL).toLowerCase();
310
296
  const level = Object.values(SigmaLevel).includes(levelRaw)
311
297
  ? levelRaw
312
- : SigmaLevel.Medium;
298
+ : SIGMA_DEFAULT_LEVEL;
313
299
  const tags = Array.isArray(doc["tags"])
314
300
  ? doc["tags"].map((tag) => {
315
301
  return String(tag);