@oneuptime/common 12.0.29 → 12.0.31

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 (664) hide show
  1. package/Models/AnalyticsModels/SecurityEvent.ts +48 -16
  2. package/Models/AnalyticsModels/ThreatIntelIndicator.ts +10 -5
  3. package/Models/DatabaseModels/AlertSeverity.ts +44 -0
  4. package/Models/DatabaseModels/DetectionRule.ts +16 -5
  5. package/Models/DatabaseModels/GoogleSecOpsConnection.ts +14 -5
  6. package/Models/DatabaseModels/IncidentSeverity.ts +44 -0
  7. package/Models/DatabaseModels/Index.ts +13 -0
  8. package/Models/DatabaseModels/NetworkDevice.ts +113 -3
  9. package/Models/DatabaseModels/NetworkDeviceAutoImportRule.ts +88 -0
  10. package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +22 -0
  11. package/Models/DatabaseModels/NetworkDeviceOidTemplate.ts +499 -0
  12. package/Models/DatabaseModels/OnCallDutyPolicySchedule.ts +43 -0
  13. package/Models/DatabaseModels/OnCallDutyPolicyScheduleCalendarFeed.ts +662 -0
  14. package/Models/DatabaseModels/ProjectOnCallCalendarFeed.ts +584 -0
  15. package/Models/DatabaseModels/ThreatIntelFeed.ts +16 -5
  16. package/Models/DatabaseModels/UserOnCallCalendarFeed.ts +546 -0
  17. package/Models/DatabaseModels/UserOnCallShiftReminder.ts +231 -0
  18. package/Models/DatabaseModels/UserOnCallShiftReminderLog.ts +331 -0
  19. package/Server/API/GlobalConfigAPI.ts +362 -183
  20. package/Server/API/OnCallCalendarAPI.ts +2194 -0
  21. package/Server/API/TelemetryAPI.ts +42 -4
  22. package/Server/EnvironmentConfig.ts +250 -0
  23. package/Server/Infrastructure/OnCallCalendarFeedCache.ts +1050 -0
  24. package/Server/Infrastructure/Postgres/SchemaMigrations/1790400000000-AddOnCallCalendarFeeds.ts +253 -0
  25. package/Server/Infrastructure/Postgres/SchemaMigrations/1790500000000-AddNetworkDeviceOidTemplate.ts +59 -0
  26. package/Server/Infrastructure/Postgres/SchemaMigrations/1790600000000-AddAutoImportRuleOidTemplate.ts +25 -0
  27. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +6 -0
  28. package/Server/Middleware/MultipartFormData.ts +118 -32
  29. package/Server/Middleware/OnCallCalendarFeedRateLimit.ts +487 -0
  30. package/Server/Services/AlertEpisodeLabelRuleEngineService.ts +9 -1
  31. package/Server/Services/AlertEpisodeOnCallRuleEngineService.ts +9 -1
  32. package/Server/Services/AlertEpisodeOwnerRuleEngineService.ts +9 -1
  33. package/Server/Services/AlertEpisodePrivacyRuleEngineService.ts +9 -1
  34. package/Server/Services/AlertGroupingEngineService.ts +9 -1
  35. package/Server/Services/AlertLabelRuleEngineService.ts +9 -1
  36. package/Server/Services/AlertOnCallRuleEngineService.ts +9 -1
  37. package/Server/Services/AlertOwnerRuleEngineService.ts +9 -1
  38. package/Server/Services/AlertPrivacyRuleEngineService.ts +9 -1
  39. package/Server/Services/AlertReminderRuleService.ts +9 -1
  40. package/Server/Services/AutoRemediationRuleEngineService.ts +9 -1
  41. package/Server/Services/CephClusterLabelRuleEngineService.ts +9 -1
  42. package/Server/Services/CephClusterOwnerRuleEngineService.ts +9 -1
  43. package/Server/Services/CloudResourceLabelRuleEngineService.ts +9 -1
  44. package/Server/Services/CloudResourceOwnerRuleEngineService.ts +9 -1
  45. package/Server/Services/DashboardLabelRuleEngineService.ts +9 -1
  46. package/Server/Services/DashboardOwnerRuleEngineService.ts +9 -1
  47. package/Server/Services/DockerHostLabelRuleEngineService.ts +9 -1
  48. package/Server/Services/DockerHostOwnerRuleEngineService.ts +9 -1
  49. package/Server/Services/DockerSwarmClusterLabelRuleEngineService.ts +9 -1
  50. package/Server/Services/DockerSwarmClusterOwnerRuleEngineService.ts +9 -1
  51. package/Server/Services/HostLabelRuleEngineService.ts +9 -1
  52. package/Server/Services/HostOwnerRuleEngineService.ts +9 -1
  53. package/Server/Services/IncidentEpisodeLabelRuleEngineService.ts +9 -1
  54. package/Server/Services/IncidentEpisodeOnCallRuleEngineService.ts +9 -1
  55. package/Server/Services/IncidentEpisodeOwnerRuleEngineService.ts +9 -1
  56. package/Server/Services/IncidentEpisodePrivacyRuleEngineService.ts +9 -1
  57. package/Server/Services/IncidentGroupingEngineService.ts +9 -1
  58. package/Server/Services/IncidentLabelRuleEngineService.ts +9 -1
  59. package/Server/Services/IncidentOnCallRuleEngineService.ts +9 -1
  60. package/Server/Services/IncidentOwnerRuleEngineService.ts +9 -1
  61. package/Server/Services/IncidentPrivacyRuleEngineService.ts +9 -1
  62. package/Server/Services/IncidentReminderRuleService.ts +9 -1
  63. package/Server/Services/IncidentSlaRuleService.ts +9 -1
  64. package/Server/Services/IncomingCallPolicyLabelRuleEngineService.ts +9 -1
  65. package/Server/Services/IncomingCallPolicyOwnerRuleEngineService.ts +9 -1
  66. package/Server/Services/Index.ts +14 -0
  67. package/Server/Services/IoTFleetLabelRuleEngineService.ts +9 -1
  68. package/Server/Services/IoTFleetOwnerRuleEngineService.ts +9 -1
  69. package/Server/Services/KubernetesClusterLabelRuleEngineService.ts +9 -1
  70. package/Server/Services/KubernetesClusterOwnerRuleEngineService.ts +9 -1
  71. package/Server/Services/KubernetesResourceService.ts +5 -1
  72. package/Server/Services/MonitorLabelRuleEngineService.ts +9 -1
  73. package/Server/Services/MonitorOwnerRuleEngineService.ts +9 -1
  74. package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +35 -0
  75. package/Server/Services/NetworkDeviceAutoImportRuleService.ts +96 -0
  76. package/Server/Services/NetworkDeviceLabelRuleEngineService.ts +9 -1
  77. package/Server/Services/NetworkDeviceOidTemplateService.ts +201 -0
  78. package/Server/Services/NetworkDeviceOwnerRuleEngineService.ts +9 -1
  79. package/Server/Services/NetworkDeviceService.ts +209 -1
  80. package/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.ts +32 -0
  81. package/Server/Services/OnCallDutyPolicyLabelRuleEngineService.ts +9 -1
  82. package/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.ts +9 -1
  83. package/Server/Services/OnCallDutyPolicyScheduleCalendarFeedService.ts +260 -0
  84. package/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.ts +9 -1
  85. package/Server/Services/OnCallDutyPolicyScheduleLayerService.ts +70 -3
  86. package/Server/Services/OnCallDutyPolicyScheduleLayerUserService.ts +138 -3
  87. package/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.ts +9 -1
  88. package/Server/Services/OnCallDutyPolicyScheduleService.ts +1465 -134
  89. package/Server/Services/OnCallDutyPolicyUserOverrideService.ts +167 -31
  90. package/Server/Services/PodmanHostLabelRuleEngineService.ts +9 -1
  91. package/Server/Services/PodmanHostOwnerRuleEngineService.ts +9 -1
  92. package/Server/Services/ProjectOnCallCalendarFeedService.ts +192 -0
  93. package/Server/Services/ProxmoxClusterLabelRuleEngineService.ts +9 -1
  94. package/Server/Services/ProxmoxClusterOwnerRuleEngineService.ts +9 -1
  95. package/Server/Services/RumApplicationLabelRuleEngineService.ts +9 -1
  96. package/Server/Services/RumApplicationOwnerRuleEngineService.ts +9 -1
  97. package/Server/Services/RunbookLabelRuleEngineService.ts +9 -1
  98. package/Server/Services/RunbookOwnerRuleEngineService.ts +9 -1
  99. package/Server/Services/RunbookRuleEngineService.ts +9 -1
  100. package/Server/Services/ScheduledMaintenanceLabelRuleEngineService.ts +9 -1
  101. package/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.ts +9 -1
  102. package/Server/Services/ScheduledMaintenanceReminderRuleService.ts +9 -1
  103. package/Server/Services/ServerlessFunctionLabelRuleEngineService.ts +9 -1
  104. package/Server/Services/ServerlessFunctionOwnerRuleEngineService.ts +9 -1
  105. package/Server/Services/ServiceLabelRuleEngineService.ts +9 -1
  106. package/Server/Services/ServiceOwnerRuleEngineService.ts +9 -1
  107. package/Server/Services/StatusPageLabelRuleEngineService.ts +9 -1
  108. package/Server/Services/StatusPageMonitorRuleEngineService.ts +7 -0
  109. package/Server/Services/StatusPageOwnerRuleEngineService.ts +9 -1
  110. package/Server/Services/TeamMemberService.ts +489 -1
  111. package/Server/Services/TeamService.ts +50 -0
  112. package/Server/Services/TelemetrySourceMapService.ts +266 -23
  113. package/Server/Services/UserNotificationSettingService.ts +44 -1
  114. package/Server/Services/UserOnCallCalendarFeedService.ts +159 -0
  115. package/Server/Services/UserOnCallShiftReminderLogService.ts +151 -0
  116. package/Server/Services/UserOnCallShiftReminderService.ts +112 -0
  117. package/Server/Services/UserService.ts +27 -0
  118. package/Server/Services/WorkflowLabelRuleEngineService.ts +9 -1
  119. package/Server/Services/WorkflowOwnerRuleEngineService.ts +9 -1
  120. package/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.ts +186 -0
  121. package/Server/Utils/Monitor/CapturedMetricAttributeUtil.ts +245 -0
  122. package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +21 -2
  123. package/Server/Utils/Monitor/MonitorMetricUtil.ts +55 -21
  124. package/Server/Utils/Monitor/MonitorTemplateUtil.ts +32 -0
  125. package/Server/Utils/Monitor/NetworkDeviceMetricUtil.ts +15 -2
  126. package/Server/Utils/Monitor/NetworkDeviceWalkUtil.ts +18 -1
  127. package/Server/Utils/Monitor/NetworkInventoryUtil.ts +10 -0
  128. package/Server/Utils/Monitor/SeriesResourceLabels.ts +34 -0
  129. package/Server/Utils/OnCall/CalendarFeedToken.ts +241 -0
  130. package/Server/Utils/OnCall/OnCallCalendarFeedRenderer.ts +1488 -0
  131. package/Server/Utils/OnCall/OnCallCalendarFeedUrls.ts +230 -0
  132. package/Server/Utils/OnCall/OnCallShiftChangeListeners.ts +227 -0
  133. package/Server/Utils/OnCall/OnCallShiftMaterializer.ts +1127 -0
  134. package/Server/Utils/OnCall/OnCallShiftReminderListener.ts +174 -0
  135. package/Server/Utils/OnCall/OnCallShiftReminderRunner.ts +2584 -0
  136. package/Server/Utils/Response.ts +134 -0
  137. package/Server/Utils/Rules/RuleEngineRuleRead.ts +48 -0
  138. package/Server/Utils/StartServer.ts +10 -0
  139. package/Server/Utils/Telemetry/AppMetrics.ts +51 -0
  140. package/Server/Utils/Telemetry/ExceptionSanitizer.ts +14 -1
  141. package/Server/Utils/Telemetry/LogExceptionExtractor.ts +14 -2
  142. package/Server/Utils/Telemetry/SourceMapResolver.ts +16 -5
  143. package/Server/Utils/Telemetry/StackTraceParser.ts +399 -0
  144. package/Tests/App/Dashboard/EventOverlayHook.test.tsx +125 -0
  145. package/Tests/App/Dashboard/HeaderImageAssets.test.tsx +93 -0
  146. package/Tests/App/Dashboard/OnCallCalendarFeedLinks.test.tsx +229 -0
  147. package/Tests/App/Dashboard/OnCallCalendarFeedPlanGate.test.tsx +489 -0
  148. package/Tests/App/Dashboard/OnCallCalendarFeedSideMenus.test.tsx +149 -0
  149. package/Tests/App/Dashboard/OnCallCalendarFeedUtil.test.ts +855 -0
  150. package/Tests/App/Dashboard/OnCallPersonalCalendarFeed.test.tsx +1209 -0
  151. package/Tests/App/Dashboard/OnCallReadinessSurfaces.test.tsx +3 -3
  152. package/Tests/App/Dashboard/OnCallSharedCalendarFeedCard.test.tsx +1019 -0
  153. package/Tests/App/Dashboard/OnCallShiftRemindersAndUpcomingShifts.test.tsx +655 -0
  154. package/Tests/App/Dashboard/UserElementEmail.test.tsx +12 -4
  155. package/Tests/App/Dashboard/UserEmailCallSites.test.tsx +1 -1
  156. package/Tests/App/Dashboard/UserSettingsSetupChecklistModel.test.ts +73 -0
  157. package/Tests/Models/DatabaseModels/DomainRoleTierCoverage.test.ts +14 -0
  158. package/Tests/Models/DatabaseModels/ModelRegistryInvariants.test.ts +469 -0
  159. package/Tests/Models/OnCallCalendarFeedModels.test.ts +642 -0
  160. package/Tests/Models/OnCallDutyPolicyScheduleCalendarFeed.test.ts +288 -0
  161. package/Tests/Models/OnCallDutyPolicyScheduleShiftConfigVersion.test.ts +88 -0
  162. package/Tests/Models/SecurityDomainAccessControl.test.ts +429 -0
  163. package/Tests/Models/UserOnCallShiftReminderModels.test.ts +368 -0
  164. package/Tests/Server/API/GlobalConfigLicense.test.ts +657 -0
  165. package/Tests/Server/API/Helpers.ts +8 -0
  166. package/Tests/Server/API/OnCallCalendarAPI.test.ts +4461 -0
  167. package/Tests/Server/API/SecurityEventAttributesAPI.test.ts +84 -6
  168. package/Tests/Server/API/TelemetryResolveStackTraceAPI.test.ts +805 -0
  169. package/Tests/Server/EnvironmentConfigOnCallCalendarFeed.test.ts +357 -0
  170. package/Tests/Server/Infrastructure/OnCallCalendarFeedCache.test.ts +1589 -0
  171. package/Tests/Server/Infrastructure/Postgres/AddOnCallCalendarFeedsMigration.test.ts +394 -0
  172. package/Tests/Server/Middleware/IdentityRateLimit.test.ts +1144 -0
  173. package/Tests/Server/Middleware/MultipartFormData.test.ts +618 -3
  174. package/Tests/Server/Middleware/OnCallCalendarFeedRateLimit.test.ts +1365 -0
  175. package/Tests/Server/Services/FeedRetentionConsistency.test.ts +70 -0
  176. package/Tests/Server/Services/MonitorLabelRuleEngineScale.test.ts +520 -0
  177. package/Tests/Server/Services/NetworkDeviceOidTemplateService.test.ts +332 -0
  178. package/Tests/Server/Services/NetworkDeviceOidTemplateWriteGuards.test.ts +409 -0
  179. package/Tests/Server/Services/OnCallCalendarFeedServices.test.ts +1103 -0
  180. package/Tests/Server/Services/OnCallDutyPolicyScheduleResolver.test.ts +1037 -0
  181. package/Tests/Server/Services/OnCallShiftConfigPropagation.test.ts +1270 -0
  182. package/Tests/Server/Services/RuleEngineRuleFetchLimit.test.ts +239 -0
  183. package/Tests/Server/Services/TeamDeleteMemberCleanup.test.ts +156 -0
  184. package/Tests/Server/Services/TeamMemberOnCallCleanup.test.ts +755 -0
  185. package/Tests/Server/Services/TelemetrySourceMapService.test.ts +1210 -2
  186. package/Tests/Server/Services/UserNotificationSettingShiftReminderDefaults.test.ts +267 -0
  187. package/Tests/Server/Services/UserOnCallShiftReminderServices.test.ts +583 -0
  188. package/Tests/Server/Services/UserServiceSeatLimit.test.ts +182 -0
  189. package/Tests/Server/Types/AnalyticsDatabase/SecurityEventModelPermission.test.ts +255 -0
  190. package/Tests/Server/Types/Database/Permissions/OnCallCalendarFeedPermissions.test.ts +254 -0
  191. package/Tests/Server/Types/Database/Permissions/ReadBlockPermission.test.ts +212 -0
  192. package/Tests/Server/Types/Database/Permissions/SecurityRoleAccess.test.ts +413 -0
  193. package/Tests/Server/Utils/CodeRepository.test.ts +689 -0
  194. package/Tests/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.test.ts +495 -0
  195. package/Tests/Server/Utils/ExceptionSanitizer.test.ts +77 -0
  196. package/Tests/Server/Utils/Monitor/CapturedMetricAttributeUtil.test.ts +284 -0
  197. package/Tests/Server/Utils/Monitor/MonitorCustomMetricAttributes.test.ts +503 -0
  198. package/Tests/Server/Utils/Monitor/MonitorTemplatePrototypePollution.test.ts +106 -0
  199. package/Tests/Server/Utils/Monitor/NetworkDeviceWalkLogWritePath.test.ts +33 -4
  200. package/Tests/Server/Utils/Monitor/NetworkDeviceWalkUtil.test.ts +14 -4
  201. package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +44 -0
  202. package/Tests/Server/Utils/OnCall/CalendarFeedToken.test.ts +467 -0
  203. package/Tests/Server/Utils/OnCall/OnCallCalendarFeedRenderer.test.ts +2142 -0
  204. package/Tests/Server/Utils/OnCall/OnCallCalendarFeedUrls.test.ts +278 -0
  205. package/Tests/Server/Utils/OnCall/OnCallResolverTestHarness.ts +440 -0
  206. package/Tests/Server/Utils/OnCall/OnCallShiftChangeListeners.test.ts +314 -0
  207. package/Tests/Server/Utils/OnCall/OnCallShiftMaterializer.test.ts +1502 -0
  208. package/Tests/Server/Utils/OnCall/OnCallShiftReminderListener.test.ts +491 -0
  209. package/Tests/Server/Utils/OnCall/OnCallShiftReminderRunner.test.ts +3088 -0
  210. package/Tests/Server/Utils/OnCall/OnCallShiftReminderTestHarness.ts +910 -0
  211. package/Tests/Server/Utils/OpenAPISpec.test.ts +536 -0
  212. package/Tests/Server/Utils/ResponseSendCalendarResponse.test.ts +561 -0
  213. package/Tests/Server/Utils/Rules/RuleEngineRuleRead.test.ts +115 -0
  214. package/Tests/Server/Utils/StackTraceParser.test.ts +610 -0
  215. package/Tests/Server/Utils/StartServerEncryptionSecretWarning.test.ts +64 -0
  216. package/Tests/Server/Utils/Telemetry/AppMetrics.test.ts +29 -0
  217. package/Tests/Server/Utils/Telemetry/LogExceptionExtractor.test.ts +0 -0
  218. package/Tests/Server/Utils/Telemetry/SourceMapLimits.test.ts +656 -0
  219. package/Tests/Server/Utils/Telemetry/SourceMapResolver.test.ts +100 -0
  220. package/Tests/Types/Calendar/ICalendar.test.ts +488 -0
  221. package/Tests/Types/Monitor/SnmpMonitor/SnmpOidListUtil.test.ts +454 -0
  222. package/Tests/Types/NotificationSetting/NotificationSettingEventType.test.ts +53 -0
  223. package/Tests/Types/OnCallDutyPolicy/CalendarFeedTestFixtures.ts +310 -0
  224. package/Tests/Types/OnCallDutyPolicy/CalendarFeedWindow.test.ts +205 -0
  225. package/Tests/Types/OnCallDutyPolicy/LayerUtilLayerMetaAndIterationCap.test.ts +458 -0
  226. package/Tests/Types/OnCallDutyPolicy/MaterializedShift.test.ts +197 -0
  227. package/Tests/Types/OnCallDutyPolicy/OnCallCalendarFeedUtil.test.ts +1986 -0
  228. package/Tests/Types/OnCallDutyPolicy/ScheduleShiftUtilGroupKey.test.ts +678 -0
  229. package/Tests/Types/OnCallDutyPolicy/ShiftSeamUtil.test.ts +417 -0
  230. package/Tests/Types/SecurityRolePermissions.test.ts +193 -0
  231. package/Tests/UI/Components/Charts/AnnotationLayout.test.ts +773 -0
  232. package/Tests/UI/Components/Charts/ChartAnnotationRail.test.tsx +789 -0
  233. package/Tests/UI/Components/Charts/ChartBucketIdentity.test.ts +254 -0
  234. package/Tests/UI/Components/Charts/TimeAnnotation.test.ts +471 -0
  235. package/Tests/UI/Components/EditionLabelLicenseRefresh.test.tsx +405 -0
  236. package/Tests/UI/Components/ErrorMessageRefreshControl.test.tsx +83 -0
  237. package/Tests/UI/Components/MarkdownConverters.test.ts +686 -0
  238. package/Tests/UI/Components/ModelTable/BaseModelTableDeleteAndEmptyStates.test.tsx +341 -0
  239. package/Tests/UI/Components/OrderedStatesList.test.tsx +5 -5
  240. package/Tests/UI/Components/PendingProjectInvitations.test.tsx +1 -1
  241. package/Tests/UI/Components/TableSortAndMobileColumns.test.tsx +195 -0
  242. package/Tests/UI/Components/XAxis.test.ts +270 -5
  243. package/Tests/UI/Components/XAxisDaylightSaving.test.ts +113 -0
  244. package/Tests/UI/Styles/ChartFocusRing.test.ts +153 -0
  245. package/Tests/UI/Styles/ChartFocusRingCoverage.test.tsx +377 -0
  246. package/Tests/UI/Styles/ThemeStylesheet.ts +162 -0
  247. package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +10 -0
  248. package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +2 -0
  249. package/Tests/Utils/EnterpriseLicenseSeats.test.ts +507 -0
  250. package/Tests/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.test.ts +951 -1
  251. package/Tests/Utils/NetworkDiscovery/DiscoveredHostUtil.test.ts +238 -0
  252. package/Tests/Utils/NetworkDiscovery/DiscoveryReverseDnsChain.test.ts +1056 -0
  253. package/Tests/Utils/NetworkDiscovery/ReverseDnsNameUtil.test.ts +882 -0
  254. package/Types/Calendar/ICalendar.ts +442 -0
  255. package/Types/Date.ts +39 -0
  256. package/Types/Email/EmailTemplateType.ts +2 -0
  257. package/Types/Monitor/SnmpMonitor/SnmpOidListUtil.ts +333 -0
  258. package/Types/NotificationSetting/NotificationSettingEventType.ts +4 -0
  259. package/Types/OnCallDutyPolicy/CalendarFeedWindow.ts +140 -0
  260. package/Types/OnCallDutyPolicy/Layer.ts +190 -35
  261. package/Types/OnCallDutyPolicy/MaterializedShift.ts +274 -0
  262. package/Types/OnCallDutyPolicy/OnCallCalendarFeedUtil.ts +1415 -0
  263. package/Types/OnCallDutyPolicy/ScheduleShiftUtil.ts +159 -4
  264. package/Types/OnCallDutyPolicy/ShiftSeamUtil.ts +106 -0
  265. package/Types/Permission.ts +96 -0
  266. package/Types/Rum/SessionReplay.ts +21 -0
  267. package/Types/Telemetry/SourceMap.ts +8 -0
  268. package/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.tsx +176 -0
  269. package/UI/Components/Charts/ChartLibrary/Annotations/AnnotationLayout.ts +745 -0
  270. package/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.tsx +576 -0
  271. package/UI/Components/Charts/ChartLibrary/Annotations/UseChartAnnotations.tsx +204 -0
  272. package/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.tsx +491 -544
  273. package/UI/Components/Charts/ChartLibrary/BarChart/BarChart.tsx +324 -372
  274. package/UI/Components/Charts/ChartLibrary/LineChart/LineChart.tsx +487 -540
  275. package/UI/Components/Charts/ChartLibrary/Types/FormattedReferenceRegion.ts +7 -3
  276. package/UI/Components/Charts/ChartLibrary/Types/FormattedTimeReferenceLine.ts +14 -3
  277. package/UI/Components/Charts/Types/ChartEventKind.ts +13 -0
  278. package/UI/Components/Charts/Types/ReferenceRegionProps.ts +6 -0
  279. package/UI/Components/Charts/Types/TimeReferenceLineProps.ts +20 -3
  280. package/UI/Components/Charts/Utils/TimeAnnotation.ts +69 -35
  281. package/UI/Components/Charts/Utils/XAxis.ts +125 -18
  282. package/UI/Components/EditionLabel/EditionLabel.tsx +280 -26
  283. package/UI/Components/ErrorMessage/ErrorMessage.tsx +21 -10
  284. package/UI/Components/Feed/FeedItem.tsx +4 -5
  285. package/UI/Components/Header/HeaderIconDropdownButton.tsx +1 -2
  286. package/UI/Components/Header/UserProfile/UserProfile.tsx +1 -2
  287. package/UI/Components/Image/Image.tsx +20 -3
  288. package/UI/Components/Markdown.tsx/MarkdownConverters.ts +0 -0
  289. package/UI/Components/MemberRoleAssignment/MemberRoleAssignment.tsx +1 -2
  290. package/UI/Components/ModelTable/BaseModelTable.tsx +150 -24
  291. package/UI/Components/Table/TableHeader.tsx +64 -48
  292. package/UI/Components/Table/TableRow.tsx +13 -3
  293. package/UI/Styles/Theme.css +38 -0
  294. package/Utils/EnterpriseLicense/EnterpriseLicenseSeats.ts +271 -0
  295. package/Utils/NetworkDiscovery/AutoImportRuleMatcher.ts +6 -0
  296. package/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.ts +141 -10
  297. package/Utils/NetworkDiscovery/DiscoveredHostUtil.ts +55 -3
  298. package/Utils/NetworkDiscovery/ReverseDnsNameUtil.ts +151 -0
  299. package/Utils/Rules/RuleEngineLimits.ts +32 -0
  300. package/build/dist/Models/AnalyticsModels/SecurityEvent.js +48 -16
  301. package/build/dist/Models/AnalyticsModels/SecurityEvent.js.map +1 -1
  302. package/build/dist/Models/AnalyticsModels/ThreatIntelIndicator.js +10 -5
  303. package/build/dist/Models/AnalyticsModels/ThreatIntelIndicator.js.map +1 -1
  304. package/build/dist/Models/DatabaseModels/AlertSeverity.js +46 -1
  305. package/build/dist/Models/DatabaseModels/AlertSeverity.js.map +1 -1
  306. package/build/dist/Models/DatabaseModels/DetectionRule.js +16 -5
  307. package/build/dist/Models/DatabaseModels/DetectionRule.js.map +1 -1
  308. package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js +14 -5
  309. package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js.map +1 -1
  310. package/build/dist/Models/DatabaseModels/IncidentSeverity.js +46 -1
  311. package/build/dist/Models/DatabaseModels/IncidentSeverity.js.map +1 -1
  312. package/build/dist/Models/DatabaseModels/Index.js +13 -0
  313. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  314. package/build/dist/Models/DatabaseModels/NetworkDevice.js +115 -3
  315. package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
  316. package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js +88 -0
  317. package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js.map +1 -1
  318. package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
  319. package/build/dist/Models/DatabaseModels/NetworkDeviceOidTemplate.js +519 -0
  320. package/build/dist/Models/DatabaseModels/NetworkDeviceOidTemplate.js.map +1 -0
  321. package/build/dist/Models/DatabaseModels/OnCallDutyPolicySchedule.js +44 -0
  322. package/build/dist/Models/DatabaseModels/OnCallDutyPolicySchedule.js.map +1 -1
  323. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleCalendarFeed.js +699 -0
  324. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleCalendarFeed.js.map +1 -0
  325. package/build/dist/Models/DatabaseModels/ProjectOnCallCalendarFeed.js +620 -0
  326. package/build/dist/Models/DatabaseModels/ProjectOnCallCalendarFeed.js.map +1 -0
  327. package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js +16 -5
  328. package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js.map +1 -1
  329. package/build/dist/Models/DatabaseModels/UserOnCallCalendarFeed.js +585 -0
  330. package/build/dist/Models/DatabaseModels/UserOnCallCalendarFeed.js.map +1 -0
  331. package/build/dist/Models/DatabaseModels/UserOnCallShiftReminder.js +247 -0
  332. package/build/dist/Models/DatabaseModels/UserOnCallShiftReminder.js.map +1 -0
  333. package/build/dist/Models/DatabaseModels/UserOnCallShiftReminderLog.js +355 -0
  334. package/build/dist/Models/DatabaseModels/UserOnCallShiftReminderLog.js.map +1 -0
  335. package/build/dist/Server/API/GlobalConfigAPI.js +293 -176
  336. package/build/dist/Server/API/GlobalConfigAPI.js.map +1 -1
  337. package/build/dist/Server/API/OnCallCalendarAPI.js +1371 -0
  338. package/build/dist/Server/API/OnCallCalendarAPI.js.map +1 -0
  339. package/build/dist/Server/API/TelemetryAPI.js +31 -3
  340. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  341. package/build/dist/Server/EnvironmentConfig.js +185 -0
  342. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  343. package/build/dist/Server/Infrastructure/OnCallCalendarFeedCache.js +663 -0
  344. package/build/dist/Server/Infrastructure/OnCallCalendarFeedCache.js.map +1 -0
  345. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790400000000-AddOnCallCalendarFeeds.js +103 -0
  346. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790400000000-AddOnCallCalendarFeeds.js.map +1 -0
  347. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790500000000-AddNetworkDeviceOidTemplate.js +26 -0
  348. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790500000000-AddNetworkDeviceOidTemplate.js.map +1 -0
  349. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790600000000-AddAutoImportRuleOidTemplate.js +14 -0
  350. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790600000000-AddAutoImportRuleOidTemplate.js.map +1 -0
  351. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +6 -0
  352. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  353. package/build/dist/Server/Middleware/MultipartFormData.js +93 -28
  354. package/build/dist/Server/Middleware/MultipartFormData.js.map +1 -1
  355. package/build/dist/Server/Middleware/OnCallCalendarFeedRateLimit.js +342 -0
  356. package/build/dist/Server/Middleware/OnCallCalendarFeedRateLimit.js.map +1 -0
  357. package/build/dist/Server/Services/AlertEpisodeLabelRuleEngineService.js +8 -1
  358. package/build/dist/Server/Services/AlertEpisodeLabelRuleEngineService.js.map +1 -1
  359. package/build/dist/Server/Services/AlertEpisodeOnCallRuleEngineService.js +8 -1
  360. package/build/dist/Server/Services/AlertEpisodeOnCallRuleEngineService.js.map +1 -1
  361. package/build/dist/Server/Services/AlertEpisodeOwnerRuleEngineService.js +8 -1
  362. package/build/dist/Server/Services/AlertEpisodeOwnerRuleEngineService.js.map +1 -1
  363. package/build/dist/Server/Services/AlertEpisodePrivacyRuleEngineService.js +8 -1
  364. package/build/dist/Server/Services/AlertEpisodePrivacyRuleEngineService.js.map +1 -1
  365. package/build/dist/Server/Services/AlertGroupingEngineService.js +8 -1
  366. package/build/dist/Server/Services/AlertGroupingEngineService.js.map +1 -1
  367. package/build/dist/Server/Services/AlertLabelRuleEngineService.js +8 -1
  368. package/build/dist/Server/Services/AlertLabelRuleEngineService.js.map +1 -1
  369. package/build/dist/Server/Services/AlertOnCallRuleEngineService.js +8 -1
  370. package/build/dist/Server/Services/AlertOnCallRuleEngineService.js.map +1 -1
  371. package/build/dist/Server/Services/AlertOwnerRuleEngineService.js +8 -1
  372. package/build/dist/Server/Services/AlertOwnerRuleEngineService.js.map +1 -1
  373. package/build/dist/Server/Services/AlertPrivacyRuleEngineService.js +8 -1
  374. package/build/dist/Server/Services/AlertPrivacyRuleEngineService.js.map +1 -1
  375. package/build/dist/Server/Services/AlertReminderRuleService.js +8 -1
  376. package/build/dist/Server/Services/AlertReminderRuleService.js.map +1 -1
  377. package/build/dist/Server/Services/AutoRemediationRuleEngineService.js +8 -1
  378. package/build/dist/Server/Services/AutoRemediationRuleEngineService.js.map +1 -1
  379. package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js +8 -1
  380. package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js.map +1 -1
  381. package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js +8 -1
  382. package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js.map +1 -1
  383. package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js +8 -1
  384. package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js.map +1 -1
  385. package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js +8 -1
  386. package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js.map +1 -1
  387. package/build/dist/Server/Services/DashboardLabelRuleEngineService.js +8 -1
  388. package/build/dist/Server/Services/DashboardLabelRuleEngineService.js.map +1 -1
  389. package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js +8 -1
  390. package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js.map +1 -1
  391. package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js +8 -1
  392. package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js.map +1 -1
  393. package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js +8 -1
  394. package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js.map +1 -1
  395. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js +8 -1
  396. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js.map +1 -1
  397. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js +8 -1
  398. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js.map +1 -1
  399. package/build/dist/Server/Services/HostLabelRuleEngineService.js +8 -1
  400. package/build/dist/Server/Services/HostLabelRuleEngineService.js.map +1 -1
  401. package/build/dist/Server/Services/HostOwnerRuleEngineService.js +8 -1
  402. package/build/dist/Server/Services/HostOwnerRuleEngineService.js.map +1 -1
  403. package/build/dist/Server/Services/IncidentEpisodeLabelRuleEngineService.js +8 -1
  404. package/build/dist/Server/Services/IncidentEpisodeLabelRuleEngineService.js.map +1 -1
  405. package/build/dist/Server/Services/IncidentEpisodeOnCallRuleEngineService.js +8 -1
  406. package/build/dist/Server/Services/IncidentEpisodeOnCallRuleEngineService.js.map +1 -1
  407. package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js +8 -1
  408. package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js.map +1 -1
  409. package/build/dist/Server/Services/IncidentEpisodePrivacyRuleEngineService.js +8 -1
  410. package/build/dist/Server/Services/IncidentEpisodePrivacyRuleEngineService.js.map +1 -1
  411. package/build/dist/Server/Services/IncidentGroupingEngineService.js +8 -1
  412. package/build/dist/Server/Services/IncidentGroupingEngineService.js.map +1 -1
  413. package/build/dist/Server/Services/IncidentLabelRuleEngineService.js +8 -1
  414. package/build/dist/Server/Services/IncidentLabelRuleEngineService.js.map +1 -1
  415. package/build/dist/Server/Services/IncidentOnCallRuleEngineService.js +8 -1
  416. package/build/dist/Server/Services/IncidentOnCallRuleEngineService.js.map +1 -1
  417. package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js +8 -1
  418. package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js.map +1 -1
  419. package/build/dist/Server/Services/IncidentPrivacyRuleEngineService.js +8 -1
  420. package/build/dist/Server/Services/IncidentPrivacyRuleEngineService.js.map +1 -1
  421. package/build/dist/Server/Services/IncidentReminderRuleService.js +8 -1
  422. package/build/dist/Server/Services/IncidentReminderRuleService.js.map +1 -1
  423. package/build/dist/Server/Services/IncidentSlaRuleService.js +8 -1
  424. package/build/dist/Server/Services/IncidentSlaRuleService.js.map +1 -1
  425. package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js +8 -1
  426. package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js.map +1 -1
  427. package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js +8 -1
  428. package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js.map +1 -1
  429. package/build/dist/Server/Services/Index.js +14 -0
  430. package/build/dist/Server/Services/Index.js.map +1 -1
  431. package/build/dist/Server/Services/IoTFleetLabelRuleEngineService.js +8 -1
  432. package/build/dist/Server/Services/IoTFleetLabelRuleEngineService.js.map +1 -1
  433. package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js +8 -1
  434. package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js.map +1 -1
  435. package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js +8 -1
  436. package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js.map +1 -1
  437. package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js +8 -1
  438. package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js.map +1 -1
  439. package/build/dist/Server/Services/KubernetesResourceService.js +5 -1
  440. package/build/dist/Server/Services/KubernetesResourceService.js.map +1 -1
  441. package/build/dist/Server/Services/MonitorLabelRuleEngineService.js +8 -1
  442. package/build/dist/Server/Services/MonitorLabelRuleEngineService.js.map +1 -1
  443. package/build/dist/Server/Services/MonitorOwnerRuleEngineService.js +8 -1
  444. package/build/dist/Server/Services/MonitorOwnerRuleEngineService.js.map +1 -1
  445. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +30 -21
  446. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
  447. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js +64 -0
  448. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js.map +1 -1
  449. package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js +8 -1
  450. package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js.map +1 -1
  451. package/build/dist/Server/Services/NetworkDeviceOidTemplateService.js +180 -0
  452. package/build/dist/Server/Services/NetworkDeviceOidTemplateService.js.map +1 -0
  453. package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js +8 -1
  454. package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js.map +1 -1
  455. package/build/dist/Server/Services/NetworkDeviceService.js +154 -1
  456. package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
  457. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js +20 -0
  458. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js.map +1 -1
  459. package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js +8 -1
  460. package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js.map +1 -1
  461. package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js +8 -1
  462. package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js.map +1 -1
  463. package/build/dist/Server/Services/OnCallDutyPolicyScheduleCalendarFeedService.js +219 -0
  464. package/build/dist/Server/Services/OnCallDutyPolicyScheduleCalendarFeedService.js.map +1 -0
  465. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js +8 -1
  466. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js.map +1 -1
  467. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerService.js +47 -3
  468. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerService.js.map +1 -1
  469. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerUserService.js +112 -3
  470. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerUserService.js.map +1 -1
  471. package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js +8 -1
  472. package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js.map +1 -1
  473. package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js +955 -9
  474. package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js.map +1 -1
  475. package/build/dist/Server/Services/OnCallDutyPolicyUserOverrideService.js +93 -6
  476. package/build/dist/Server/Services/OnCallDutyPolicyUserOverrideService.js.map +1 -1
  477. package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js +8 -1
  478. package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js.map +1 -1
  479. package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js +8 -1
  480. package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js.map +1 -1
  481. package/build/dist/Server/Services/ProjectOnCallCalendarFeedService.js +157 -0
  482. package/build/dist/Server/Services/ProjectOnCallCalendarFeedService.js.map +1 -0
  483. package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js +8 -1
  484. package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js.map +1 -1
  485. package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js +8 -1
  486. package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js.map +1 -1
  487. package/build/dist/Server/Services/RumApplicationLabelRuleEngineService.js +8 -1
  488. package/build/dist/Server/Services/RumApplicationLabelRuleEngineService.js.map +1 -1
  489. package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js +8 -1
  490. package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js.map +1 -1
  491. package/build/dist/Server/Services/RunbookLabelRuleEngineService.js +8 -1
  492. package/build/dist/Server/Services/RunbookLabelRuleEngineService.js.map +1 -1
  493. package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js +8 -1
  494. package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js.map +1 -1
  495. package/build/dist/Server/Services/RunbookRuleEngineService.js +8 -1
  496. package/build/dist/Server/Services/RunbookRuleEngineService.js.map +1 -1
  497. package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js +8 -1
  498. package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js.map +1 -1
  499. package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js +8 -1
  500. package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js.map +1 -1
  501. package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js +8 -1
  502. package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js.map +1 -1
  503. package/build/dist/Server/Services/ServerlessFunctionLabelRuleEngineService.js +8 -1
  504. package/build/dist/Server/Services/ServerlessFunctionLabelRuleEngineService.js.map +1 -1
  505. package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js +8 -1
  506. package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js.map +1 -1
  507. package/build/dist/Server/Services/ServiceLabelRuleEngineService.js +8 -1
  508. package/build/dist/Server/Services/ServiceLabelRuleEngineService.js.map +1 -1
  509. package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js +8 -1
  510. package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js.map +1 -1
  511. package/build/dist/Server/Services/StatusPageLabelRuleEngineService.js +8 -1
  512. package/build/dist/Server/Services/StatusPageLabelRuleEngineService.js.map +1 -1
  513. package/build/dist/Server/Services/StatusPageMonitorRuleEngineService.js +6 -0
  514. package/build/dist/Server/Services/StatusPageMonitorRuleEngineService.js.map +1 -1
  515. package/build/dist/Server/Services/StatusPageOwnerRuleEngineService.js +8 -1
  516. package/build/dist/Server/Services/StatusPageOwnerRuleEngineService.js.map +1 -1
  517. package/build/dist/Server/Services/TeamMemberService.js +396 -1
  518. package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
  519. package/build/dist/Server/Services/TeamService.js +43 -0
  520. package/build/dist/Server/Services/TeamService.js.map +1 -1
  521. package/build/dist/Server/Services/TelemetrySourceMapService.js +213 -19
  522. package/build/dist/Server/Services/TelemetrySourceMapService.js.map +1 -1
  523. package/build/dist/Server/Services/UserNotificationSettingService.js +26 -1
  524. package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
  525. package/build/dist/Server/Services/UserOnCallCalendarFeedService.js +140 -0
  526. package/build/dist/Server/Services/UserOnCallCalendarFeedService.js.map +1 -0
  527. package/build/dist/Server/Services/UserOnCallShiftReminderLogService.js +116 -0
  528. package/build/dist/Server/Services/UserOnCallShiftReminderLogService.js.map +1 -0
  529. package/build/dist/Server/Services/UserOnCallShiftReminderService.js +92 -0
  530. package/build/dist/Server/Services/UserOnCallShiftReminderService.js.map +1 -0
  531. package/build/dist/Server/Services/UserService.js +25 -0
  532. package/build/dist/Server/Services/UserService.js.map +1 -1
  533. package/build/dist/Server/Services/WorkflowLabelRuleEngineService.js +8 -1
  534. package/build/dist/Server/Services/WorkflowLabelRuleEngineService.js.map +1 -1
  535. package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js +8 -1
  536. package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js.map +1 -1
  537. package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js +145 -0
  538. package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js.map +1 -0
  539. package/build/dist/Server/Utils/Monitor/CapturedMetricAttributeUtil.js +201 -0
  540. package/build/dist/Server/Utils/Monitor/CapturedMetricAttributeUtil.js.map +1 -0
  541. package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +19 -2
  542. package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js.map +1 -1
  543. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +42 -23
  544. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
  545. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +29 -0
  546. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
  547. package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js +11 -2
  548. package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js.map +1 -1
  549. package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js +16 -1
  550. package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js.map +1 -1
  551. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +10 -0
  552. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
  553. package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js +33 -0
  554. package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js.map +1 -1
  555. package/build/dist/Server/Utils/OnCall/CalendarFeedToken.js +161 -0
  556. package/build/dist/Server/Utils/OnCall/CalendarFeedToken.js.map +1 -0
  557. package/build/dist/Server/Utils/OnCall/OnCallCalendarFeedRenderer.js +983 -0
  558. package/build/dist/Server/Utils/OnCall/OnCallCalendarFeedRenderer.js.map +1 -0
  559. package/build/dist/Server/Utils/OnCall/OnCallCalendarFeedUrls.js +155 -0
  560. package/build/dist/Server/Utils/OnCall/OnCallCalendarFeedUrls.js.map +1 -0
  561. package/build/dist/Server/Utils/OnCall/OnCallShiftChangeListeners.js +145 -0
  562. package/build/dist/Server/Utils/OnCall/OnCallShiftChangeListeners.js.map +1 -0
  563. package/build/dist/Server/Utils/OnCall/OnCallShiftMaterializer.js +752 -0
  564. package/build/dist/Server/Utils/OnCall/OnCallShiftMaterializer.js.map +1 -0
  565. package/build/dist/Server/Utils/OnCall/OnCallShiftReminderListener.js +92 -0
  566. package/build/dist/Server/Utils/OnCall/OnCallShiftReminderListener.js.map +1 -0
  567. package/build/dist/Server/Utils/OnCall/OnCallShiftReminderRunner.js +1786 -0
  568. package/build/dist/Server/Utils/OnCall/OnCallShiftReminderRunner.js.map +1 -0
  569. package/build/dist/Server/Utils/Response.js +97 -0
  570. package/build/dist/Server/Utils/Response.js.map +1 -1
  571. package/build/dist/Server/Utils/Rules/RuleEngineRuleRead.js +37 -0
  572. package/build/dist/Server/Utils/Rules/RuleEngineRuleRead.js.map +1 -0
  573. package/build/dist/Server/Utils/StartServer.js +9 -1
  574. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  575. package/build/dist/Server/Utils/Telemetry/AppMetrics.js +41 -0
  576. package/build/dist/Server/Utils/Telemetry/AppMetrics.js.map +1 -1
  577. package/build/dist/Server/Utils/Telemetry/ExceptionSanitizer.js +12 -1
  578. package/build/dist/Server/Utils/Telemetry/ExceptionSanitizer.js.map +1 -1
  579. package/build/dist/Server/Utils/Telemetry/LogExceptionExtractor.js +14 -2
  580. package/build/dist/Server/Utils/Telemetry/LogExceptionExtractor.js.map +1 -1
  581. package/build/dist/Server/Utils/Telemetry/SourceMapResolver.js +15 -5
  582. package/build/dist/Server/Utils/Telemetry/SourceMapResolver.js.map +1 -1
  583. package/build/dist/Server/Utils/Telemetry/StackTraceParser.js +307 -0
  584. package/build/dist/Server/Utils/Telemetry/StackTraceParser.js.map +1 -1
  585. package/build/dist/Types/Calendar/ICalendar.js +290 -0
  586. package/build/dist/Types/Calendar/ICalendar.js.map +1 -0
  587. package/build/dist/Types/Date.js +27 -0
  588. package/build/dist/Types/Date.js.map +1 -1
  589. package/build/dist/Types/Email/EmailTemplateType.js +2 -0
  590. package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
  591. package/build/dist/Types/Monitor/SnmpMonitor/SnmpOidListUtil.js +253 -0
  592. package/build/dist/Types/Monitor/SnmpMonitor/SnmpOidListUtil.js.map +1 -0
  593. package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js +3 -0
  594. package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js.map +1 -1
  595. package/build/dist/Types/OnCallDutyPolicy/CalendarFeedWindow.js +97 -0
  596. package/build/dist/Types/OnCallDutyPolicy/CalendarFeedWindow.js.map +1 -0
  597. package/build/dist/Types/OnCallDutyPolicy/Layer.js +113 -19
  598. package/build/dist/Types/OnCallDutyPolicy/Layer.js.map +1 -1
  599. package/build/dist/Types/OnCallDutyPolicy/MaterializedShift.js +134 -0
  600. package/build/dist/Types/OnCallDutyPolicy/MaterializedShift.js.map +1 -0
  601. package/build/dist/Types/OnCallDutyPolicy/OnCallCalendarFeedUtil.js +800 -0
  602. package/build/dist/Types/OnCallDutyPolicy/OnCallCalendarFeedUtil.js.map +1 -0
  603. package/build/dist/Types/OnCallDutyPolicy/ScheduleShiftUtil.js +97 -3
  604. package/build/dist/Types/OnCallDutyPolicy/ScheduleShiftUtil.js.map +1 -1
  605. package/build/dist/Types/OnCallDutyPolicy/ShiftSeamUtil.js +77 -0
  606. package/build/dist/Types/OnCallDutyPolicy/ShiftSeamUtil.js.map +1 -0
  607. package/build/dist/Types/Permission.js +86 -0
  608. package/build/dist/Types/Permission.js.map +1 -1
  609. package/build/dist/Types/Rum/SessionReplay.js +19 -0
  610. package/build/dist/Types/Rum/SessionReplay.js.map +1 -1
  611. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.js +83 -0
  612. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.js.map +1 -0
  613. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationLayout.js +531 -0
  614. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationLayout.js.map +1 -0
  615. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.js +264 -0
  616. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.js.map +1 -0
  617. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/UseChartAnnotations.js +122 -0
  618. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/UseChartAnnotations.js.map +1 -0
  619. package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js +213 -233
  620. package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js.map +1 -1
  621. package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js +139 -152
  622. package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js.map +1 -1
  623. package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js +212 -232
  624. package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js.map +1 -1
  625. package/build/dist/UI/Components/Charts/Types/ChartEventKind.js +14 -0
  626. package/build/dist/UI/Components/Charts/Types/ChartEventKind.js.map +1 -0
  627. package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js +57 -28
  628. package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js.map +1 -1
  629. package/build/dist/UI/Components/Charts/Utils/XAxis.js +103 -17
  630. package/build/dist/UI/Components/Charts/Utils/XAxis.js.map +1 -1
  631. package/build/dist/UI/Components/EditionLabel/EditionLabel.js +198 -23
  632. package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
  633. package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js +15 -5
  634. package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js.map +1 -1
  635. package/build/dist/UI/Components/Feed/FeedItem.js +4 -5
  636. package/build/dist/UI/Components/Feed/FeedItem.js.map +1 -1
  637. package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js +1 -2
  638. package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js.map +1 -1
  639. package/build/dist/UI/Components/Header/UserProfile/UserProfile.js.map +1 -1
  640. package/build/dist/UI/Components/Image/Image.js +6 -1
  641. package/build/dist/UI/Components/Image/Image.js.map +1 -1
  642. package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js +0 -0
  643. package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js.map +1 -1
  644. package/build/dist/UI/Components/MemberRoleAssignment/MemberRoleAssignment.js +1 -2
  645. package/build/dist/UI/Components/MemberRoleAssignment/MemberRoleAssignment.js.map +1 -1
  646. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +104 -23
  647. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  648. package/build/dist/UI/Components/Table/TableHeader.js +20 -22
  649. package/build/dist/UI/Components/Table/TableHeader.js.map +1 -1
  650. package/build/dist/UI/Components/Table/TableRow.js +13 -4
  651. package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
  652. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js +153 -0
  653. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js.map +1 -0
  654. package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js.map +1 -1
  655. package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js +127 -7
  656. package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js.map +1 -1
  657. package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js +50 -3
  658. package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js.map +1 -1
  659. package/build/dist/Utils/NetworkDiscovery/ReverseDnsNameUtil.js +132 -0
  660. package/build/dist/Utils/NetworkDiscovery/ReverseDnsNameUtil.js.map +1 -0
  661. package/build/dist/Utils/Rules/RuleEngineLimits.js +31 -0
  662. package/build/dist/Utils/Rules/RuleEngineLimits.js.map +1 -0
  663. package/jest.config.json +1 -0
  664. package/package.json +2 -2
@@ -1,5 +1,7 @@
1
1
  import CalendarEvent from "../Calendar/CalendarEvent";
2
2
  import OneUptimeDate from "../Date";
3
+ import { ROTATION_PERIOD_START_KEY } from "./Layer";
4
+ import UserOverrideUtil, { OverrideEventMeta } from "./UserOverrideUtil";
3
5
 
4
6
  /*
5
7
  * Turns the low-level calendar events produced by LayerUtil into the
@@ -36,6 +38,38 @@ export interface OnCallShift {
36
38
  * coverage ("40h across the week") instead of the misleading span ("4d 8h").
37
39
  */
38
40
  coverageSeconds: number;
41
+ /*
42
+ * Metadata carried over from the FIRST raw segment folded into this shift:
43
+ * the override that produced it (UserOverrideUtil stamps it on the event)
44
+ * and the layer it came from (LayerUtil stamps layerId/layerName when the
45
+ * caller identified the layer). Only present when the segment carried them.
46
+ *
47
+ * With the default grouping (by user id) a shift can span segments from
48
+ * several layers or override windows, so these describe the first segment
49
+ * only. Callers that need them to hold for the WHOLE shift pass a groupKey
50
+ * that includes them (see groupKeyByUserOverrideAndLayer), which is what the
51
+ * on-call calendar feed does.
52
+ */
53
+ override?: OverrideEventMeta;
54
+ layerId?: string;
55
+ layerName?: string;
56
+ }
57
+
58
+ /*
59
+ * Decides which raw segments may be folded into the same shift. Two adjacent
60
+ * segments are merged only when their keys are equal (and they touch, or the
61
+ * caller asked to merge across gaps).
62
+ */
63
+ export type ShiftGroupKeyFunction = (event: CalendarEvent) => string;
64
+
65
+ export interface GroupEventsIntoShiftsOptions {
66
+ mergeAcrossGaps?: boolean | undefined;
67
+ /*
68
+ * Defaults to the on-call user id (event.title), which is what every
69
+ * schedule summary in the dashboard wants: "Alice, Mon 09:00 -> Fri 17:00"
70
+ * regardless of which layer or override put her there.
71
+ */
72
+ groupKey?: ShiftGroupKeyFunction | undefined;
39
73
  }
40
74
 
41
75
  export interface CoverageGap {
@@ -116,13 +150,15 @@ export default class ScheduleShiftUtil {
116
150
  */
117
151
  public static groupEventsIntoShifts(
118
152
  events: Array<CalendarEvent>,
119
- options?: { mergeAcrossGaps?: boolean | undefined } | undefined,
153
+ options?: GroupEventsIntoShiftsOptions | undefined,
120
154
  ): Array<OnCallShift> {
121
155
  if (!events || events.length === 0) {
122
156
  return [];
123
157
  }
124
158
 
125
159
  const mergeAcrossGaps: boolean = Boolean(options?.mergeAcrossGaps);
160
+ const groupKey: ShiftGroupKeyFunction =
161
+ options?.groupKey ?? ScheduleShiftUtil.defaultGroupKey;
126
162
 
127
163
  // Work on a copy sorted by start time; never mutate the caller's array.
128
164
  const sorted: Array<CalendarEvent> = [...events]
@@ -142,16 +178,18 @@ export default class ScheduleShiftUtil {
142
178
  });
143
179
 
144
180
  const shifts: Array<OnCallShift> = [];
181
+ let lastKey: string | null = null;
145
182
 
146
183
  for (const event of sorted) {
147
184
  const userId: string = event.title;
185
+ const key: string = groupKey(event);
148
186
  const eventSeconds: number = OneUptimeDate.getDifferenceInSeconds(
149
187
  event.end,
150
188
  event.start,
151
189
  );
152
190
  const last: OnCallShift | undefined = shifts[shifts.length - 1];
153
191
 
154
- const sameUser: boolean = Boolean(last) && last!.userId === userId;
192
+ const sameUser: boolean = Boolean(last) && lastKey === key;
155
193
 
156
194
  const isContiguous: boolean =
157
195
  Boolean(last) &&
@@ -175,17 +213,134 @@ export default class ScheduleShiftUtil {
175
213
  continue;
176
214
  }
177
215
 
178
- shifts.push({
216
+ const shift: OnCallShift = {
179
217
  userId,
180
218
  start: event.start,
181
219
  end: event.end,
182
220
  coverageSeconds: eventSeconds,
183
- });
221
+ };
222
+
223
+ /*
224
+ * Only add the metadata keys when the segment carries them, so callers
225
+ * that never stamp them (every dashboard summary) get the exact shift
226
+ * objects they always did.
227
+ */
228
+ const override: OverrideEventMeta | null =
229
+ UserOverrideUtil.getOverrideMeta(event);
230
+ if (override) {
231
+ shift.override = override;
232
+ }
233
+
234
+ const layerId: string | undefined =
235
+ ScheduleShiftUtil.getEventLayerId(event);
236
+ if (layerId !== undefined) {
237
+ shift.layerId = layerId;
238
+ }
239
+
240
+ const layerName: string | undefined =
241
+ ScheduleShiftUtil.getEventLayerName(event);
242
+ if (layerName !== undefined) {
243
+ shift.layerName = layerName;
244
+ }
245
+
246
+ shifts.push(shift);
247
+ lastKey = key;
184
248
  }
185
249
 
186
250
  return shifts;
187
251
  }
188
252
 
253
+ // The default grouping: one shift per run of the same on-call user.
254
+ public static defaultGroupKey(event: CalendarEvent): string {
255
+ return event.title;
256
+ }
257
+
258
+ /*
259
+ * Grouping that keeps a shift inside ONE layer, ONE override window and ONE
260
+ * rotation period: the user id, plus the override identity (original user +
261
+ * window) when the segment was produced by an override, plus the layer id
262
+ * when known, plus the rotation period the engine stamped on the event. This
263
+ * is the key the on-call calendar feed groups with, so an override split
264
+ * yields A / B / A as three events and a layer handover is visible as a
265
+ * boundary instead of being folded into a single shift.
266
+ *
267
+ * The rotation period matters because two consecutive turns held by the SAME
268
+ * user (a single-user layer, or [A, A, B]) are contiguous across the engine's
269
+ * 1 s seam and would otherwise fold into one block whose start and end are
270
+ * decided by how far the expansion window reached — the block would slide
271
+ * forward every time the feed window did, changing the event's UID and
272
+ * DTSTART for every subscriber. Override segments deliberately ignore the
273
+ * period: an override that spans a rotation boundary is ONE stretch of cover
274
+ * and stays one event.
275
+ */
276
+ public static groupKeyByUserOverrideAndLayer(event: CalendarEvent): string {
277
+ const override: OverrideEventMeta | null =
278
+ UserOverrideUtil.getOverrideMeta(event);
279
+
280
+ const overridePart: string = override
281
+ ? `${override.originalUserId}@${override.overrideStartsAt.getTime()}-${override.overrideEndsAt.getTime()}`
282
+ : "";
283
+
284
+ const periodStart: number | undefined = override
285
+ ? undefined
286
+ : ScheduleShiftUtil.getEventRotationPeriodStart(event);
287
+
288
+ const periodPart: string =
289
+ periodStart === undefined ? "" : periodStart.toString();
290
+
291
+ return `${event.title}|${overridePart}|${ScheduleShiftUtil.getEventLayerId(event) ?? ""}|${periodPart}`;
292
+ }
293
+
294
+ /*
295
+ * LayerUtil stamps layerId/layerName onto merged events (see
296
+ * PriorityCalendarEvents). CalendarEvent is a JSONObject, so the keys are
297
+ * read through the index signature and type-checked here.
298
+ */
299
+ public static getEventLayerId(event: CalendarEvent): string | undefined {
300
+ const value: unknown = (event as unknown as Record<string, unknown>)[
301
+ "layerId"
302
+ ];
303
+ return typeof value === "string" ? value : undefined;
304
+ }
305
+
306
+ public static getEventLayerName(event: CalendarEvent): string | undefined {
307
+ const value: unknown = (event as unknown as Record<string, unknown>)[
308
+ "layerName"
309
+ ];
310
+ return typeof value === "string" ? value : undefined;
311
+ }
312
+
313
+ /*
314
+ * Epoch milliseconds of the rotation period an engine event belongs to (see
315
+ * ROTATION_PERIOD_START_KEY in Layer.ts). Undefined for hand-built events and
316
+ * for anything that did not come out of LayerUtil — those simply group as
317
+ * they always did. Dates and ISO strings are accepted so a JSON round trip
318
+ * does not silently drop the period.
319
+ */
320
+ public static getEventRotationPeriodStart(
321
+ event: CalendarEvent,
322
+ ): number | undefined {
323
+ const value: unknown = (event as unknown as Record<string, unknown>)[
324
+ ROTATION_PERIOD_START_KEY
325
+ ];
326
+
327
+ if (typeof value === "number") {
328
+ return Number.isFinite(value) ? value : undefined;
329
+ }
330
+
331
+ if (value instanceof Date) {
332
+ const time: number = value.getTime();
333
+ return Number.isNaN(time) ? undefined : time;
334
+ }
335
+
336
+ if (typeof value === "string") {
337
+ const parsed: number = Date.parse(value);
338
+ return Number.isNaN(parsed) ? undefined : parsed;
339
+ }
340
+
341
+ return undefined;
342
+ }
343
+
189
344
  /*
190
345
  * The shift that contains `now` (the person on call right now) and the first
191
346
  * shift that starts after `now` (up next). Either can be null: `current` is
@@ -0,0 +1,106 @@
1
+ /*
2
+ * Seam normalisation for resolved on-call segments.
3
+ *
4
+ * The rotation engine and its post-processors leave one-second artefacts at
5
+ * every boundary: LayerUtil resumes each segment one second after the
6
+ * previous one ends (Layer.ts advances with addRemoveSeconds(end, 1)), the
7
+ * multi-layer priority merge trims to `start - 1s` / `end + 1s`, and the
8
+ * override splitter cuts at the exact instant. Fed straight into a calendar
9
+ * that renders as 09:00:01 -> 16:59:59, with adjacent shifts that neither
10
+ * touch nor overlap — which Google's week view draws side by side.
11
+ *
12
+ * Handoff and restriction times are minute-granular by construction, so the
13
+ * artefacts are unambiguous: a start on second 1 means the minute, an end on
14
+ * second 59 means the next minute, and two segments a second apart are
15
+ * meant to touch. Everything else is left alone.
16
+ */
17
+
18
+ export interface TimeSegment {
19
+ start: Date;
20
+ end: Date;
21
+ }
22
+
23
+ // Segments this close together (in ms) are made to touch exactly.
24
+ export const SEAM_TOLERANCE_MILLISECONDS: number = 1000;
25
+
26
+ const MILLISECONDS_PER_MINUTE: number = 60 * 1000;
27
+
28
+ export default class ShiftSeamUtil {
29
+ /*
30
+ * Returns a NEW array (sorted by start, then end) of NEW segment objects
31
+ * with the seams normalised; neither the input array nor its segments are
32
+ * mutated. Any extra properties on the segments are preserved, so this can
33
+ * run on OnCallShift / MaterializedShift objects directly.
34
+ *
35
+ * Rules, in order:
36
+ * 1. a start whose seconds == 1 snaps DOWN to the minute;
37
+ * 2. an end whose seconds == 59 snaps UP to the next minute;
38
+ * 3. walking in start order, when the next segment starts 0..1 s after
39
+ * this one ends, this one's end becomes exactly the next one's start.
40
+ * Snapping only ever widens a segment, so it cannot create an empty or
41
+ * inverted one; a segment that is already empty or inverted is left alone.
42
+ */
43
+ public static normalizeSeams<T extends TimeSegment>(
44
+ segments: Array<T>,
45
+ ): Array<T> {
46
+ const normalized: Array<T> = segments.map((segment: T) => {
47
+ const snappedStart: Date = ShiftSeamUtil.snapStart(segment.start);
48
+ const snappedEnd: Date = ShiftSeamUtil.snapEnd(segment.end);
49
+
50
+ const keepSnaps: boolean =
51
+ segment.end.getTime() > segment.start.getTime() &&
52
+ snappedEnd.getTime() > snappedStart.getTime();
53
+
54
+ return {
55
+ ...segment,
56
+ start: keepSnaps ? snappedStart : new Date(segment.start.getTime()),
57
+ end: keepSnaps ? snappedEnd : new Date(segment.end.getTime()),
58
+ };
59
+ });
60
+
61
+ normalized.sort((a: T, b: T) => {
62
+ const byStart: number = a.start.getTime() - b.start.getTime();
63
+ if (byStart !== 0) {
64
+ return byStart;
65
+ }
66
+ return a.end.getTime() - b.end.getTime();
67
+ });
68
+
69
+ for (let i: number = 0; i < normalized.length - 1; i++) {
70
+ const segment: T = normalized[i]!;
71
+ const next: T = normalized[i + 1]!;
72
+
73
+ const delta: number = next.start.getTime() - segment.end.getTime();
74
+
75
+ if (delta >= 0 && delta <= SEAM_TOLERANCE_MILLISECONDS) {
76
+ segment.end = new Date(next.start.getTime());
77
+ }
78
+ }
79
+
80
+ return normalized;
81
+ }
82
+
83
+ // 10:00:01(.xxx) -> 10:00:00.000; anything else is returned as a copy.
84
+ public static snapStart(date: Date): Date {
85
+ if (date.getUTCSeconds() === 1) {
86
+ return new Date(
87
+ Math.floor(date.getTime() / MILLISECONDS_PER_MINUTE) *
88
+ MILLISECONDS_PER_MINUTE,
89
+ );
90
+ }
91
+
92
+ return new Date(date.getTime());
93
+ }
94
+
95
+ // 16:59:59(.xxx) -> 17:00:00.000; anything else is returned as a copy.
96
+ public static snapEnd(date: Date): Date {
97
+ if (date.getUTCSeconds() === 59) {
98
+ return new Date(
99
+ (Math.floor(date.getTime() / MILLISECONDS_PER_MINUTE) + 1) *
100
+ MILLISECONDS_PER_MINUTE,
101
+ );
102
+ }
103
+
104
+ return new Date(date.getTime());
105
+ }
106
+ }
@@ -101,6 +101,25 @@ enum Permission {
101
101
  TelemetryMember = "TelemetryMember",
102
102
  TelemetryViewer = "TelemetryViewer",
103
103
 
104
+ /*
105
+ * SIEM data is its own domain, not a fourth telemetry signal. Security
106
+ * events, the Sigma detection rules over them, the threat-intel feeds and
107
+ * their indicators, and the SecOps connector credentials all read through
108
+ * these three tiers and through nothing else that is handed out broadly -
109
+ * not ProjectMember, not the project-wide Viewer, not the Telemetry tiers.
110
+ *
111
+ * That exclusion is the whole point of the family. A SIEM holds authentication
112
+ * failures, privilege escalations and the analyst's own investigation trail;
113
+ * "everyone who can open a dashboard can read it" is not an access policy an
114
+ * organisation deploying one can accept. Whoever should see it is given a
115
+ * Security tier deliberately, the same way BillingViewer is given
116
+ * deliberately, and everybody else - including a Telemetry Admin with the run
117
+ * of every log, metric and trace in the project - sees nothing.
118
+ */
119
+ SecurityAdmin = "SecurityAdmin",
120
+ SecurityMember = "SecurityMember",
121
+ SecurityViewer = "SecurityViewer",
122
+
104
123
  SettingsAdmin = "SettingsAdmin",
105
124
  SettingsMember = "SettingsMember",
106
125
  SettingsViewer = "SettingsViewer",
@@ -617,6 +636,11 @@ enum Permission {
617
636
  EditNetworkDeviceAutoImportRule = "EditNetworkDeviceAutoImportRule",
618
637
  ReadNetworkDeviceAutoImportRule = "ReadNetworkDeviceAutoImportRule",
619
638
 
639
+ CreateNetworkDeviceOidTemplate = "CreateNetworkDeviceOidTemplate",
640
+ DeleteNetworkDeviceOidTemplate = "DeleteNetworkDeviceOidTemplate",
641
+ EditNetworkDeviceOidTemplate = "EditNetworkDeviceOidTemplate",
642
+ ReadNetworkDeviceOidTemplate = "ReadNetworkDeviceOidTemplate",
643
+
620
644
  // Podman Host Label Rule Permissions
621
645
  CreatePodmanHostLabelRule = "CreatePodmanHostLabelRule",
622
646
  DeletePodmanHostLabelRule = "DeletePodmanHostLabelRule",
@@ -2371,6 +2395,36 @@ export class PermissionHelper {
2371
2395
  isRolePermission: true,
2372
2396
  group: PermissionGroup.Telemetry,
2373
2397
  },
2398
+ {
2399
+ permission: Permission.SecurityAdmin,
2400
+ title: "Security Admin",
2401
+ description:
2402
+ "Full control over the SIEM: security events, Sigma detection rules, threat intelligence feeds and indicators, and Google SecOps connections. Security data is not readable through any other role.",
2403
+ isAssignableToTenant: true,
2404
+ isAccessControlPermission: false,
2405
+ isRolePermission: true,
2406
+ group: PermissionGroup.Security,
2407
+ },
2408
+ {
2409
+ permission: Permission.SecurityMember,
2410
+ title: "Security Member",
2411
+ description:
2412
+ "Can read security events and threat intelligence, and create, edit, and delete detection rules and threat intel feeds. Cannot configure Google SecOps connections.",
2413
+ isAssignableToTenant: true,
2414
+ isAccessControlPermission: false,
2415
+ isRolePermission: true,
2416
+ group: PermissionGroup.Security,
2417
+ },
2418
+ {
2419
+ permission: Permission.SecurityViewer,
2420
+ title: "Security Viewer",
2421
+ description:
2422
+ "Read-only access to security events, detection rules, threat intelligence feeds, and indicators.",
2423
+ isAssignableToTenant: true,
2424
+ isAccessControlPermission: false,
2425
+ isRolePermission: true,
2426
+ group: PermissionGroup.Security,
2427
+ },
2374
2428
  {
2375
2429
  permission: Permission.SettingsAdmin,
2376
2430
  title: "Settings Admin",
@@ -12341,6 +12395,48 @@ export class PermissionHelper {
12341
12395
  group: PermissionGroup.Telemetry,
12342
12396
  },
12343
12397
 
12398
+ // OID Collection Template Permissions
12399
+ {
12400
+ permission: Permission.CreateNetworkDeviceOidTemplate,
12401
+ title: "Create OID Collection Template",
12402
+ description:
12403
+ "This permission can create OID Collection Templates in this project.",
12404
+ isAssignableToTenant: true,
12405
+ isAccessControlPermission: false,
12406
+ isRolePermission: false,
12407
+ group: PermissionGroup.Telemetry,
12408
+ },
12409
+ {
12410
+ permission: Permission.DeleteNetworkDeviceOidTemplate,
12411
+ title: "Delete OID Collection Template",
12412
+ description:
12413
+ "This permission can delete OID Collection Templates of this project.",
12414
+ isAssignableToTenant: true,
12415
+ isAccessControlPermission: false,
12416
+ isRolePermission: false,
12417
+ group: PermissionGroup.Telemetry,
12418
+ },
12419
+ {
12420
+ permission: Permission.EditNetworkDeviceOidTemplate,
12421
+ title: "Edit OID Collection Template",
12422
+ description:
12423
+ "This permission can edit OID Collection Templates of this project. Editing a template changes what every linked device collects on its next poll.",
12424
+ isAssignableToTenant: true,
12425
+ isAccessControlPermission: false,
12426
+ isRolePermission: false,
12427
+ group: PermissionGroup.Telemetry,
12428
+ },
12429
+ {
12430
+ permission: Permission.ReadNetworkDeviceOidTemplate,
12431
+ title: "Read OID Collection Template",
12432
+ description:
12433
+ "This permission can read OID Collection Templates of this project.",
12434
+ isAssignableToTenant: true,
12435
+ isAccessControlPermission: false,
12436
+ isRolePermission: false,
12437
+ group: PermissionGroup.Telemetry,
12438
+ },
12439
+
12344
12440
  // Podman Host Label Rule Permissions
12345
12441
  {
12346
12442
  permission: Permission.CreatePodmanHostLabelRule,
@@ -35,6 +35,27 @@ export const MAX_SESSION_REPLAY_CHUNK_BYTES: number = 2 * 1024 * 1024;
35
35
  /* Frames a single catch-up request may concatenate. */
36
36
  export const MAX_SESSION_REPLAY_CHUNKS_PER_REQUEST: number = 8;
37
37
 
38
+ /*
39
+ * Largest DECOMPRESSED payload the ingest worker will inflate for one frame,
40
+ * and therefore the largest single indivisible rrweb event the recorder may
41
+ * put on the wire.
42
+ *
43
+ * The two numbers have to be the same number, which is why this lives in
44
+ * Common rather than in either side. A FullSnapshot is one rrweb event: it
45
+ * cannot be cut in half and still parse, so when it is bigger than the flush
46
+ * threshold the recorder posts it whole in a chunk of its own rather than
47
+ * cutting it. That is only safe while the recorder's ceiling is exactly the
48
+ * worker's — a recorder willing to send more than the worker will inflate
49
+ * produces a chunk that is accepted, queued, and then dropped at decode time,
50
+ * leaving a hole in the chunk sequence with nothing anywhere reporting it.
51
+ *
52
+ * Compression is what makes the number affordable: a snapshot this size gzips
53
+ * to a small fraction of MAX_SESSION_REPLAY_CHUNK_BYTES, which is the cap on
54
+ * the bytes actually posted.
55
+ */
56
+ export const SESSION_REPLAY_MAX_DECOMPRESSED_FRAME_BYTES: number =
57
+ 8 * 1024 * 1024;
58
+
38
59
  /*
39
60
  * Hard stop per session. At the 15s flush cadence this is ~2 hours of
40
61
  * continuous recording, comfortably past the 4-hour session cap once
@@ -53,4 +53,12 @@ export interface ResolveStackTraceResult {
53
53
  resolvedCount: number;
54
54
  /** Number of source maps found for the (service, release) pair. */
55
55
  sourceMapCount: number;
56
+ /**
57
+ * Maps that a frame matched but that were not loaded, because loading them
58
+ * would have exceeded the resolver's per-request byte budget
59
+ * (SOURCE_MAP_MAX_BYTES_PER_RESOLVE). Non-zero means symbols are missing
60
+ * for a reason an operator can fix by raising the budget — as opposed to
61
+ * the maps simply never having been uploaded.
62
+ */
63
+ sourceMapsSkippedForSize: number;
56
64
  }
@@ -0,0 +1,176 @@
1
+ import React from "react";
2
+ import FormattedTimeReferenceLine from "../Types/FormattedTimeReferenceLine";
3
+ import { AnnotationHover } from "./ChartAnnotationLayer";
4
+ import { clampHoverCardLeft, getMarkerColor } from "./AnnotationLayout";
5
+ import { cx } from "../Utils/Cx";
6
+
7
+ /*
8
+ * Wide enough for an incident title at 12px without wrapping to three
9
+ * lines, narrow enough that two cards could sit side by side on a
10
+ * dashboard widget.
11
+ */
12
+ export const HOVER_CARD_WIDTH: number = 288;
13
+
14
+ /** Clear of the chip's ring, so the card never covers what opened it. */
15
+ const HOVER_CARD_TOP_GAP: number = 6;
16
+
17
+ export interface AnnotationHoverCardProps {
18
+ hover: AnnotationHover;
19
+ /** Keeps the card open while the pointer travels from chip to card. */
20
+ onMouseEnter: () => void;
21
+ onMouseLeave: () => void;
22
+ /** Closes the card; Escape and an activated row both use it. */
23
+ onDismiss: () => void;
24
+ }
25
+
26
+ /**
27
+ * The card behind a rail chip or a region pill.
28
+ *
29
+ * This is where an event's label lives now. The old inline labels had to
30
+ * fit in the plot, which is why they were rotated, truncated, and hidden
31
+ * outright past six markers; an HTML card over the chart has none of those
32
+ * limits, so the full title, its subtitle and its link all fit.
33
+ */
34
+ const AnnotationHoverCard: React.FunctionComponent<AnnotationHoverCardProps> = (
35
+ props: AnnotationHoverCardProps,
36
+ ): React.ReactElement => {
37
+ const { hover } = props;
38
+
39
+ const left: number = clampHoverCardLeft({
40
+ anchorX: hover.anchorX,
41
+ cardWidth: HOVER_CARD_WIDTH,
42
+ chartWidth: hover.chartWidth,
43
+ });
44
+
45
+ const regionSubtitle: string | undefined = hover.region?.original.subtitle;
46
+ const rows: Array<FormattedTimeReferenceLine> = hover.markers;
47
+
48
+ /*
49
+ * A card opened from the keyboard takes focus, so a cluster's events are
50
+ * reachable by Tab; one opened by hover leaves focus where it was, so a
51
+ * passing pointer never yanks it.
52
+ */
53
+ const firstRowRef: React.RefObject<HTMLButtonElement> =
54
+ React.useRef<HTMLButtonElement>(null);
55
+ const shouldTakeFocus: boolean = Boolean(hover.takeFocus);
56
+
57
+ React.useEffect((): void => {
58
+ if (shouldTakeFocus) {
59
+ firstRowRef.current?.focus();
60
+ }
61
+ }, [shouldTakeFocus, hover.id]);
62
+
63
+ return (
64
+ <div
65
+ data-testid="chart-annotation-hover-card"
66
+ className={cx(
67
+ "pointer-events-auto absolute z-20 rounded-md border text-sm shadow-md",
68
+ "border-gray-200",
69
+ "bg-white",
70
+ )}
71
+ style={{
72
+ left: `${left}px`,
73
+ top: `${hover.anchorY + HOVER_CARD_TOP_GAP}px`,
74
+ width: `${HOVER_CARD_WIDTH}px`,
75
+ }}
76
+ onMouseEnter={props.onMouseEnter}
77
+ onMouseLeave={props.onMouseLeave}
78
+ /*
79
+ * Focus moving into the card blurs the chip that opened it, and the
80
+ * chip's blur schedules the close. These cancel and re-arm that on
81
+ * the card's own terms, which is what makes a clustered event
82
+ * reachable by keyboard at all: without them the card would shut
83
+ * 140ms after taking focus, taking the focus with it.
84
+ */
85
+ onFocus={props.onMouseEnter}
86
+ onBlur={props.onMouseLeave}
87
+ onKeyDown={(event: React.KeyboardEvent): void => {
88
+ if (event.key === "Escape") {
89
+ event.stopPropagation();
90
+ props.onDismiss();
91
+ }
92
+ }}
93
+ >
94
+ <div className={cx("border-b border-inherit px-3 py-2")}>
95
+ <p className={cx("truncate font-medium", "text-gray-900")}>
96
+ {hover.heading}
97
+ </p>
98
+ {rows.length > 1 ? (
99
+ <p className={cx("text-xs", "text-gray-500")}>{rows.length} events</p>
100
+ ) : null}
101
+ {regionSubtitle ? (
102
+ <p className={cx("truncate text-xs", "text-gray-500")}>
103
+ {regionSubtitle}
104
+ </p>
105
+ ) : null}
106
+ </div>
107
+
108
+ {/*
109
+ * The row list is capped tight: the card sits over the plot while it
110
+ * is open, and every pixel of it is a pixel the reader cannot
111
+ * drag-select or hover for a value. A long cluster scrolls.
112
+ */}
113
+ {rows.length > 0 ? (
114
+ <div className={cx("max-h-44 overflow-y-auto py-1")}>
115
+ {rows.map(
116
+ (
117
+ marker: FormattedTimeReferenceLine,
118
+ index: number,
119
+ ): React.ReactElement => {
120
+ const onClick: (() => void) | undefined = marker.original.onClick;
121
+ const label: string = marker.original.label || "Event";
122
+
123
+ return (
124
+ <button
125
+ key={`annotation-row-${index}`}
126
+ ref={index === 0 ? firstRowRef : undefined}
127
+ type="button"
128
+ data-testid="chart-annotation-hover-row"
129
+ disabled={!onClick}
130
+ className={cx(
131
+ "flex w-full items-start gap-2 px-3 py-1.5 text-left",
132
+ onClick
133
+ ? "cursor-pointer hover:bg-gray-50"
134
+ : "cursor-default",
135
+ )}
136
+ onClick={(event: React.MouseEvent): void => {
137
+ event.stopPropagation();
138
+ onClick?.();
139
+ }}
140
+ >
141
+ <span
142
+ aria-hidden="true"
143
+ className={cx("mt-1 h-2 w-2 shrink-0 rounded-full")}
144
+ style={{ backgroundColor: getMarkerColor(marker) }}
145
+ />
146
+ <span className={cx("min-w-0 flex-1")}>
147
+ <span
148
+ className={cx(
149
+ "block text-xs font-medium",
150
+ "text-gray-900",
151
+ )}
152
+ >
153
+ {label}
154
+ </span>
155
+ {marker.original.subtitle ? (
156
+ <span
157
+ className={cx(
158
+ "block truncate text-xs",
159
+ "text-gray-500",
160
+ )}
161
+ >
162
+ {marker.original.subtitle}
163
+ </span>
164
+ ) : null}
165
+ </span>
166
+ </button>
167
+ );
168
+ },
169
+ )}
170
+ </div>
171
+ ) : null}
172
+ </div>
173
+ );
174
+ };
175
+
176
+ export default AnnotationHoverCard;