@oneuptime/common 12.0.23 → 12.0.25

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 (323) hide show
  1. package/Models/AnalyticsModels/Span.ts +101 -0
  2. package/Models/DatabaseModels/DetectionRule.ts +55 -0
  3. package/Models/DatabaseModels/NetworkDeviceAutoImportRule.ts +27 -7
  4. package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +67 -0
  5. package/Models/DatabaseModels/Project.ts +68 -0
  6. package/Models/DatabaseModels/User.ts +68 -0
  7. package/Server/API/BaseAPI.ts +0 -24
  8. package/Server/API/SlackAPI.ts +0 -2
  9. package/Server/API/TelemetryAPI.ts +29 -0
  10. package/Server/Infrastructure/Postgres/SchemaMigrations/1789400000000-AddNameToNetworkDeviceDiscoveryScan.ts +28 -0
  11. package/Server/Infrastructure/Postgres/SchemaMigrations/1789500000000-AddCampaignUtmFields.ts +49 -0
  12. package/Server/Infrastructure/Postgres/SchemaMigrations/1789512000000-AddDetectionRuleDistinctCountColumns.ts +33 -0
  13. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +6 -0
  14. package/Server/Middleware/GzipRequestBody.ts +311 -0
  15. package/Server/Middleware/MultipartFormData.ts +87 -3
  16. package/Server/Middleware/SlackAuthorization.ts +96 -18
  17. package/Server/Services/DetectionRuleService.ts +73 -6
  18. package/Server/Services/Index.ts +205 -0
  19. package/Server/Services/NetworkDeviceDiscoveryScanService.ts +59 -0
  20. package/Server/Services/NetworkDeviceService.ts +148 -0
  21. package/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.ts +65 -0
  22. package/Server/Services/OnCallDutyPolicyFeedService.ts +1 -1
  23. package/Server/Services/ProjectService.ts +29 -19
  24. package/Server/Services/SecurityEventService.ts +90 -13
  25. package/Server/Services/StatusPageResourceService.ts +223 -0
  26. package/Server/Services/TelemetryAttributeService.ts +17 -0
  27. package/Server/Services/UserService.ts +4 -6
  28. package/Server/Types/Markdown.ts +161 -67
  29. package/Server/Utils/AI/Toolbox/OnCallTools.ts +12 -4
  30. package/Server/Utils/AnalyticsDatabase/Statement.ts +13 -1
  31. package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +297 -6
  32. package/Server/Utils/Attribution.ts +4 -0
  33. package/Server/Utils/Marketing/MarketingEventUtil.ts +45 -7
  34. package/Server/Utils/SecurityEvent/DetectionRuleEvaluator.ts +55 -3
  35. package/Server/Utils/SecurityEvent/Sigma/SigmaClickhouseCompiler.ts +21 -0
  36. package/Server/Utils/StartServer.ts +12 -32
  37. package/Server/Utils/Telemetry/LlmCostBudgetEvaluator.ts +101 -4
  38. package/Server/Utils/Telemetry/LlmMetricSpend.ts +181 -0
  39. package/Server/Utils/Telemetry/LlmSpan.ts +46 -0
  40. package/Server/Utils/Workspace/Slack/Actions/Auth.ts +0 -12
  41. package/Server/Views/Partials/AnalyticsConsent.ejs +159 -102
  42. package/Server/Views/Partials/Head.ejs +2 -1
  43. package/Tests/App/Dashboard/AdminUserNotificationMethodsPage.test.tsx +776 -38
  44. package/Tests/App/Dashboard/CorrelateFilterBuilder.test.tsx +359 -0
  45. package/Tests/App/Dashboard/CorrelateGraph.test.tsx +865 -0
  46. package/Tests/App/Dashboard/CorrelationGraph.test.ts +346 -0
  47. package/Tests/App/Dashboard/CriteriaFilterConditionDropdown.test.tsx +256 -0
  48. package/Tests/App/Dashboard/CriteriaFilterDefaults.test.ts +738 -0
  49. package/Tests/App/Dashboard/CriteriaFilterMonitorTypeChange.test.ts +1122 -0
  50. package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +283 -0
  51. package/Tests/App/Dashboard/ExternalStatusPageCriteriaFilter.test.ts +407 -0
  52. package/Tests/App/Dashboard/LlmCallsTableIdentity.test.tsx +322 -0
  53. package/Tests/App/Dashboard/LlmOverview.test.tsx +335 -0
  54. package/Tests/App/Dashboard/LlmSpanDisplay.test.ts +391 -0
  55. package/Tests/App/Dashboard/LlmUsageBreakdown.test.tsx +1007 -0
  56. package/Tests/App/Dashboard/MetricSeriesInvestigateMenu.test.tsx +5 -14
  57. package/Tests/App/Dashboard/MonitorCriteriaActionToggles.test.tsx +426 -0
  58. package/Tests/App/Dashboard/MonitorStepsCriteriaAlignmentWiring.test.tsx +352 -0
  59. package/Tests/App/Dashboard/OnCallLayerCardOverrides.test.tsx +278 -0
  60. package/Tests/App/Dashboard/OnCallLayerShiftPreviewOverrides.test.ts +237 -0
  61. package/Tests/App/Dashboard/OnCallReadinessSurfaces.test.tsx +2 -2
  62. package/Tests/App/Dashboard/OnCallSchedulePreviewOverrides.test.tsx +460 -0
  63. package/Tests/App/Dashboard/SecurityEventAttributeUtil.test.ts +171 -0
  64. package/Tests/App/Dashboard/SecurityEventCorrelation.test.ts +857 -0
  65. package/Tests/App/Dashboard/SecurityEventDetailObservables.test.tsx +194 -0
  66. package/Tests/App/Dashboard/SecurityEventsDetectionRulesPage.test.tsx +124 -0
  67. package/Tests/App/Dashboard/SecurityEventsMonitorStepForm.test.tsx +79 -19
  68. package/Tests/App/Dashboard/SecurityEventsTableColumns.test.tsx +382 -0
  69. package/Tests/App/StatusPage/BulkAddStatusPageMonitors.test.ts +216 -0
  70. package/Tests/App/StatusPage/BulkAddStatusPageMonitorsModal.test.tsx +590 -11
  71. package/Tests/App/StatusPage/StatusPageResourceExplorer.test.tsx +757 -0
  72. package/Tests/Models/DiscoveryScanNameColumn.test.ts +293 -0
  73. package/Tests/Server/API/BaseAPI.test.ts +41 -0
  74. package/Tests/Server/API/BaseAPIUpdatePayloadValidation.test.ts +9 -16
  75. package/Tests/Server/API/SecurityEventAttributesAPI.test.ts +564 -0
  76. package/Tests/Server/Infrastructure/Postgres/SchemaMigrationsOrdering.test.ts +120 -4
  77. package/Tests/Server/Middleware/GzipRequestBody.test.ts +725 -0
  78. package/Tests/Server/Middleware/MultipartFormData.test.ts +298 -0
  79. package/Tests/Server/Middleware/SlackAuthorization.test.ts +262 -5
  80. package/Tests/Server/Services/AddDetectionRuleDistinctCountColumnsMigration.test.ts +311 -0
  81. package/Tests/Server/Services/DetectionRuleService.test.ts +134 -2
  82. package/Tests/Server/Services/DiscoveryScanClaimHookFreeSafety.test.ts +7 -1
  83. package/Tests/Server/Services/FeedRetentionConsistency.test.ts +131 -0
  84. package/Tests/Server/Services/NetworkDeviceDiscoveryScanService.test.ts +194 -0
  85. package/Tests/Server/Services/NetworkDeviceMonitorStatusStamp.test.ts +800 -0
  86. package/Tests/Server/Services/OnCallScheduleAttachRosterRefresh.test.ts +244 -0
  87. package/Tests/Server/Services/SecurityEventService.test.ts +376 -0
  88. package/Tests/Server/Services/StatusPageResourceDuplicates.test.ts +703 -0
  89. package/Tests/Server/Services/TelemetryAttributeServiceSecurityEvent.test.ts +256 -0
  90. package/Tests/Server/Types/Workflow/Components/ComponentRegistryParity.test.ts +417 -0
  91. package/Tests/Server/Utils/AnalyticsDatabase/StatementGeneratorWhereOperators.test.ts +677 -0
  92. package/Tests/Server/Utils/Marketing/MarketingEventUtil.test.ts +43 -0
  93. package/Tests/Server/Utils/Monitor/Criteria/ProfileMonitorCriteria.test.ts +15 -11
  94. package/Tests/Server/Utils/SecurityEvent/DetectionRuleEvaluator.test.ts +369 -8
  95. package/Tests/Server/Utils/SecurityEvent/SigmaClickhouseCompiler.test.ts +35 -0
  96. package/Tests/Server/Utils/Telemetry/LlmCostBudgetEvaluator.test.ts +387 -4
  97. package/Tests/Server/Utils/Telemetry/LlmMetricSpend.test.ts +386 -0
  98. package/Tests/Server/Utils/Telemetry/LlmSpan.test.ts +804 -0
  99. package/Tests/Server/Views/AnalyticsConsentPartial.test.ts +48 -5
  100. package/Tests/Types/Code/YamlSyntax.test.ts +396 -0
  101. package/Tests/Types/Monitor/MetricAndProfileDefaultCriteria.test.ts +957 -0
  102. package/Tests/Types/Monitor/MonitorCriteriaActionValidation.test.ts +598 -0
  103. package/Tests/Types/Monitor/MonitorCriteriaInstance.test.ts +49 -0
  104. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationNotificationMode.test.ts +6 -6
  105. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.test.ts +4 -4
  106. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationUtil.test.ts +4 -3
  107. package/Tests/Types/Telemetry/LlmMetricConventions.test.ts +584 -0
  108. package/Tests/UI/Components/AiInvestigationSettingsCard.test.tsx +0 -12
  109. package/Tests/UI/Components/CardModelDetailEdit.test.tsx +1 -17
  110. package/Tests/UI/Components/CodeEditor.test.tsx +474 -10
  111. package/Tests/UI/Components/Detail/YamlField.test.tsx +105 -0
  112. package/Tests/UI/Components/EntityDropdownLabelsBulkAdd.test.tsx +319 -0
  113. package/Tests/UI/Components/Forms/FormFieldYaml.test.tsx +231 -0
  114. package/Tests/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.test.ts +1 -0
  115. package/Tests/UI/Components/Forms/ValidationYAML.test.ts +234 -0
  116. package/Tests/UI/Components/ModelTable/AttributeColumns.test.tsx +573 -0
  117. package/Tests/UI/Components/ModelTable/BaseModelTableAttributeColumns.test.tsx +824 -0
  118. package/Tests/UI/Components/ModelTable/ColumnCustomizationModalAddableColumns.test.tsx +707 -0
  119. package/Tests/UI/Components/SideOver.test.tsx +1 -1
  120. package/Tests/UI/Components/StatusPage/ResourceGridSelection.test.tsx +294 -0
  121. package/Tests/UI/Components/StatusPage/ResourceListSelection.test.tsx +436 -0
  122. package/Tests/UI/Components/TableBulkCsvExport.test.tsx +6 -2
  123. package/Tests/UI/Components/Toggle.test.tsx +25 -0
  124. package/Tests/UI/Components/YamlEditor.test.tsx +847 -0
  125. package/Tests/Utils/NetworkDevice/DeviceReachabilityUtil.test.ts +252 -0
  126. package/Tests/Utils/NetworkDiscovery/DiscoveredHostUtil.test.ts +221 -0
  127. package/Tests/Utils/NetworkDiscovery/ScanNameUtil.test.ts +312 -0
  128. package/Tests/Utils/StatusPage/ResourceExplorer.test.ts +468 -0
  129. package/Tests/Utils/Telemetry/LlmMetricQuery.test.ts +770 -0
  130. package/Types/Code/YamlSyntax.ts +396 -0
  131. package/Types/Exception/ExceptionCode.ts +1 -0
  132. package/Types/Exception/PayloadTooLargeException.ts +8 -0
  133. package/Types/Marketing/Attribution.ts +10 -0
  134. package/Types/Marketing/MarketingEvent.ts +4 -0
  135. package/Types/Monitor/MonitorCriteriaInstance.ts +116 -56
  136. package/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.ts +2 -1
  137. package/Types/SecurityEvent/DetectionFindingConstants.ts +11 -0
  138. package/Types/Telemetry/LlmConventions.ts +255 -0
  139. package/Types/Telemetry/LlmMetricConventions.ts +329 -0
  140. package/UI/Components/AutocompleteTextInput/AutocompleteTextInput.tsx +3 -0
  141. package/UI/Components/BulkUpdate/BulkUpdateForm.tsx +10 -1
  142. package/UI/Components/CodeEditor/CodeEditor.tsx +241 -79
  143. package/UI/Components/CodeEditor/YamlEditor.tsx +369 -0
  144. package/UI/Components/Detail/Detail.tsx +10 -0
  145. package/UI/Components/EntityDropdown/EntityDropdown.tsx +33 -0
  146. package/UI/Components/Forms/Fields/FormField.tsx +31 -0
  147. package/UI/Components/Forms/Types/Field.ts +8 -0
  148. package/UI/Components/Forms/Types/FormFieldSchemaType.ts +1 -0
  149. package/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.ts +2 -0
  150. package/UI/Components/Forms/Validation.ts +46 -0
  151. package/UI/Components/Input/Input.tsx +3 -0
  152. package/UI/Components/ModelTable/AttributeColumns.tsx +321 -0
  153. package/UI/Components/ModelTable/BaseModelTable.tsx +263 -14
  154. package/UI/Components/ModelTable/Column.ts +8 -0
  155. package/UI/Components/ModelTable/ColumnCustomizationModal.tsx +310 -0
  156. package/UI/Components/ModelTable/ColumnPreference.ts +13 -1
  157. package/UI/Components/MonitorTemplateVariables/TemplateVariablesModal.tsx +2 -2
  158. package/UI/Components/SideOver/SideOver.tsx +5 -5
  159. package/UI/Components/StatusPage/ResourceGrid.tsx +82 -2
  160. package/UI/Components/StatusPage/ResourceList.tsx +197 -38
  161. package/UI/Components/Toggle/Toggle.tsx +9 -1
  162. package/UI/Components/Types/FieldType.ts +1 -0
  163. package/Utils/NetworkDevice/DeviceReachabilityUtil.ts +73 -1
  164. package/Utils/NetworkDiscovery/ScanNameUtil.ts +181 -0
  165. package/Utils/StatusPage/ResourceExplorer.ts +258 -0
  166. package/Utils/Telemetry/LlmMetricQuery.ts +287 -0
  167. package/build/dist/Models/AnalyticsModels/Span.js +89 -0
  168. package/build/dist/Models/AnalyticsModels/Span.js.map +1 -1
  169. package/build/dist/Models/DatabaseModels/DetectionRule.js +57 -0
  170. package/build/dist/Models/DatabaseModels/DetectionRule.js.map +1 -1
  171. package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js +27 -7
  172. package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js.map +1 -1
  173. package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js +69 -0
  174. package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
  175. package/build/dist/Models/DatabaseModels/Project.js +76 -0
  176. package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
  177. package/build/dist/Models/DatabaseModels/User.js +76 -0
  178. package/build/dist/Models/DatabaseModels/User.js.map +1 -1
  179. package/build/dist/Server/API/BaseAPI.js +3 -19
  180. package/build/dist/Server/API/BaseAPI.js.map +1 -1
  181. package/build/dist/Server/API/SlackAPI.js +0 -2
  182. package/build/dist/Server/API/SlackAPI.js.map +1 -1
  183. package/build/dist/Server/API/TelemetryAPI.js +17 -0
  184. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  185. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789400000000-AddNameToNetworkDeviceDiscoveryScan.js +21 -0
  186. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789400000000-AddNameToNetworkDeviceDiscoveryScan.js.map +1 -0
  187. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789500000000-AddCampaignUtmFields.js +42 -0
  188. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789500000000-AddCampaignUtmFields.js.map +1 -0
  189. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789512000000-AddDetectionRuleDistinctCountColumns.js +22 -0
  190. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789512000000-AddDetectionRuleDistinctCountColumns.js.map +1 -0
  191. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +6 -0
  192. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  193. package/build/dist/Server/Middleware/GzipRequestBody.js +224 -0
  194. package/build/dist/Server/Middleware/GzipRequestBody.js.map +1 -0
  195. package/build/dist/Server/Middleware/MultipartFormData.js +71 -2
  196. package/build/dist/Server/Middleware/MultipartFormData.js.map +1 -1
  197. package/build/dist/Server/Middleware/SlackAuthorization.js +58 -7
  198. package/build/dist/Server/Middleware/SlackAuthorization.js.map +1 -1
  199. package/build/dist/Server/Services/DetectionRuleService.js +49 -4
  200. package/build/dist/Server/Services/DetectionRuleService.js.map +1 -1
  201. package/build/dist/Server/Services/Index.js +204 -0
  202. package/build/dist/Server/Services/Index.js.map +1 -1
  203. package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js +50 -0
  204. package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js.map +1 -1
  205. package/build/dist/Server/Services/NetworkDeviceService.js +124 -0
  206. package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
  207. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js +68 -13
  208. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js.map +1 -1
  209. package/build/dist/Server/Services/OnCallDutyPolicyFeedService.js +1 -1
  210. package/build/dist/Server/Services/OnCallDutyPolicyFeedService.js.map +1 -1
  211. package/build/dist/Server/Services/ProjectService.js +25 -45
  212. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  213. package/build/dist/Server/Services/SecurityEventService.js +57 -5
  214. package/build/dist/Server/Services/SecurityEventService.js.map +1 -1
  215. package/build/dist/Server/Services/StatusPageResourceService.js +140 -0
  216. package/build/dist/Server/Services/StatusPageResourceService.js.map +1 -1
  217. package/build/dist/Server/Services/TelemetryAttributeService.js +17 -0
  218. package/build/dist/Server/Services/TelemetryAttributeService.js.map +1 -1
  219. package/build/dist/Server/Services/UserService.js +2 -12
  220. package/build/dist/Server/Services/UserService.js.map +1 -1
  221. package/build/dist/Server/Types/Markdown.js +147 -61
  222. package/build/dist/Server/Types/Markdown.js.map +1 -1
  223. package/build/dist/Server/Utils/AI/Toolbox/OnCallTools.js +12 -4
  224. package/build/dist/Server/Utils/AI/Toolbox/OnCallTools.js.map +1 -1
  225. package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js +12 -1
  226. package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js.map +1 -1
  227. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +246 -9
  228. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
  229. package/build/dist/Server/Utils/Attribution.js.map +1 -1
  230. package/build/dist/Server/Utils/Marketing/MarketingEventUtil.js +27 -7
  231. package/build/dist/Server/Utils/Marketing/MarketingEventUtil.js.map +1 -1
  232. package/build/dist/Server/Utils/SecurityEvent/DetectionRuleEvaluator.js +42 -7
  233. package/build/dist/Server/Utils/SecurityEvent/DetectionRuleEvaluator.js.map +1 -1
  234. package/build/dist/Server/Utils/SecurityEvent/Sigma/SigmaClickhouseCompiler.js +18 -0
  235. package/build/dist/Server/Utils/SecurityEvent/Sigma/SigmaClickhouseCompiler.js.map +1 -1
  236. package/build/dist/Server/Utils/StartServer.js +12 -21
  237. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  238. package/build/dist/Server/Utils/Telemetry/LlmCostBudgetEvaluator.js +76 -5
  239. package/build/dist/Server/Utils/Telemetry/LlmCostBudgetEvaluator.js.map +1 -1
  240. package/build/dist/Server/Utils/Telemetry/LlmMetricSpend.js +151 -0
  241. package/build/dist/Server/Utils/Telemetry/LlmMetricSpend.js.map +1 -0
  242. package/build/dist/Server/Utils/Telemetry/LlmSpan.js +24 -1
  243. package/build/dist/Server/Utils/Telemetry/LlmSpan.js.map +1 -1
  244. package/build/dist/Server/Utils/Workspace/Slack/Actions/Auth.js +0 -10
  245. package/build/dist/Server/Utils/Workspace/Slack/Actions/Auth.js.map +1 -1
  246. package/build/dist/Types/Code/YamlSyntax.js +212 -0
  247. package/build/dist/Types/Code/YamlSyntax.js.map +1 -0
  248. package/build/dist/Types/Exception/ExceptionCode.js +1 -0
  249. package/build/dist/Types/Exception/ExceptionCode.js.map +1 -1
  250. package/build/dist/Types/Exception/PayloadTooLargeException.js +8 -0
  251. package/build/dist/Types/Exception/PayloadTooLargeException.js.map +1 -0
  252. package/build/dist/Types/Marketing/Attribution.js +10 -0
  253. package/build/dist/Types/Marketing/Attribution.js.map +1 -1
  254. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +112 -51
  255. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
  256. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js +2 -1
  257. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js.map +1 -1
  258. package/build/dist/Types/SecurityEvent/DetectionFindingConstants.js +9 -0
  259. package/build/dist/Types/SecurityEvent/DetectionFindingConstants.js.map +1 -1
  260. package/build/dist/Types/Telemetry/LlmConventions.js +236 -0
  261. package/build/dist/Types/Telemetry/LlmConventions.js.map +1 -1
  262. package/build/dist/Types/Telemetry/LlmMetricConventions.js +290 -0
  263. package/build/dist/Types/Telemetry/LlmMetricConventions.js.map +1 -0
  264. package/build/dist/UI/Components/AutocompleteTextInput/AutocompleteTextInput.js +1 -1
  265. package/build/dist/UI/Components/AutocompleteTextInput/AutocompleteTextInput.js.map +1 -1
  266. package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js +5 -2
  267. package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js.map +1 -1
  268. package/build/dist/UI/Components/CodeEditor/CodeEditor.js +206 -76
  269. package/build/dist/UI/Components/CodeEditor/CodeEditor.js.map +1 -1
  270. package/build/dist/UI/Components/CodeEditor/YamlEditor.js +201 -0
  271. package/build/dist/UI/Components/CodeEditor/YamlEditor.js.map +1 -0
  272. package/build/dist/UI/Components/Detail/Detail.js +9 -0
  273. package/build/dist/UI/Components/Detail/Detail.js.map +1 -1
  274. package/build/dist/UI/Components/EntityDropdown/EntityDropdown.js +16 -1
  275. package/build/dist/UI/Components/EntityDropdown/EntityDropdown.js.map +1 -1
  276. package/build/dist/UI/Components/Forms/Fields/FormField.js +14 -1
  277. package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
  278. package/build/dist/UI/Components/Forms/Types/Field.js.map +1 -1
  279. package/build/dist/UI/Components/Forms/Types/FormFieldSchemaType.js +1 -0
  280. package/build/dist/UI/Components/Forms/Types/FormFieldSchemaType.js.map +1 -1
  281. package/build/dist/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.js +2 -0
  282. package/build/dist/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.js.map +1 -1
  283. package/build/dist/UI/Components/Forms/Validation.js +27 -0
  284. package/build/dist/UI/Components/Forms/Validation.js.map +1 -1
  285. package/build/dist/UI/Components/Input/Input.js +1 -1
  286. package/build/dist/UI/Components/Input/Input.js.map +1 -1
  287. package/build/dist/UI/Components/ModelTable/AttributeColumns.js +159 -0
  288. package/build/dist/UI/Components/ModelTable/AttributeColumns.js.map +1 -0
  289. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +179 -17
  290. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  291. package/build/dist/UI/Components/ModelTable/ColumnCustomizationModal.js +133 -2
  292. package/build/dist/UI/Components/ModelTable/ColumnCustomizationModal.js.map +1 -1
  293. package/build/dist/UI/Components/ModelTable/ColumnPreference.js +7 -1
  294. package/build/dist/UI/Components/ModelTable/ColumnPreference.js.map +1 -1
  295. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesModal.js +2 -2
  296. package/build/dist/UI/Components/SideOver/SideOver.js +5 -5
  297. package/build/dist/UI/Components/StatusPage/ResourceGrid.js +28 -2
  298. package/build/dist/UI/Components/StatusPage/ResourceGrid.js.map +1 -1
  299. package/build/dist/UI/Components/StatusPage/ResourceList.js +87 -20
  300. package/build/dist/UI/Components/StatusPage/ResourceList.js.map +1 -1
  301. package/build/dist/UI/Components/Toggle/Toggle.js +9 -1
  302. package/build/dist/UI/Components/Toggle/Toggle.js.map +1 -1
  303. package/build/dist/UI/Components/Types/FieldType.js +1 -0
  304. package/build/dist/UI/Components/Types/FieldType.js.map +1 -1
  305. package/build/dist/Utils/NetworkDevice/DeviceReachabilityUtil.js +37 -1
  306. package/build/dist/Utils/NetworkDevice/DeviceReachabilityUtil.js.map +1 -1
  307. package/build/dist/Utils/NetworkDiscovery/ScanNameUtil.js +120 -0
  308. package/build/dist/Utils/NetworkDiscovery/ScanNameUtil.js.map +1 -0
  309. package/build/dist/Utils/StatusPage/ResourceExplorer.js +171 -0
  310. package/build/dist/Utils/StatusPage/ResourceExplorer.js.map +1 -1
  311. package/build/dist/Utils/Telemetry/LlmMetricQuery.js +175 -0
  312. package/build/dist/Utils/Telemetry/LlmMetricQuery.js.map +1 -0
  313. package/jest.config.json +2 -0
  314. package/package.json +1 -1
  315. package/tsconfig.json +2 -1
  316. package/Tests/UI/Components/Toast.test.tsx +0 -197
  317. package/Tests/UI/Components/ToastStacking.test.tsx +0 -198
  318. package/UI/Components/Toast/Toast.tsx +0 -189
  319. package/UI/Components/Toast/ToastInit.tsx +0 -110
  320. package/build/dist/UI/Components/Toast/Toast.js +0 -123
  321. package/build/dist/UI/Components/Toast/Toast.js.map +0 -1
  322. package/build/dist/UI/Components/Toast/ToastInit.js +0 -53
  323. package/build/dist/UI/Components/Toast/ToastInit.js.map +0 -1
@@ -4,6 +4,10 @@ import CreateBy from "../Types/Database/CreateBy";
4
4
  import UpdateBy from "../Types/Database/UpdateBy";
5
5
  import { OnCreate, OnUpdate } from "../Types/Database/Hooks";
6
6
  import BadDataException from "../../Types/Exception/BadDataException";
7
+ import {
8
+ DETECTION_MATCH_COUNT_THRESHOLD_MAX,
9
+ DETECTION_MATCH_COUNT_THRESHOLD_MIN,
10
+ } from "../../Types/SecurityEvent/DetectionFindingConstants";
7
11
  import SigmaRuleParser from "../../Utils/SecurityEvent/Sigma/SigmaRuleParser";
8
12
  import SigmaClickhouseCompiler from "../Utils/SecurityEvent/Sigma/SigmaClickhouseCompiler";
9
13
 
@@ -25,23 +29,69 @@ export class Service extends DatabaseService<Model> {
25
29
  SigmaClickhouseCompiler.compileYaml(ruleYaml);
26
30
  }
27
31
 
28
- private validateEvaluationInterval(interval: number | undefined): void {
29
- if (interval === undefined) {
32
+ // undefined always passes: an omitted field means "keep the default".
33
+ private validateIntegerInRange(data: {
34
+ value: number | undefined;
35
+ min: number;
36
+ max: number;
37
+ message: string;
38
+ }): void {
39
+ if (data.value === undefined) {
30
40
  return;
31
41
  }
32
42
 
33
- if (!Number.isInteger(interval) || interval < 1 || interval > 1440) {
34
- throw new BadDataException(
35
- "Evaluation interval must be a whole number of minutes between 1 and 1440.",
36
- );
43
+ if (
44
+ !Number.isInteger(data.value) ||
45
+ data.value < data.min ||
46
+ data.value > data.max
47
+ ) {
48
+ throw new BadDataException(data.message);
37
49
  }
38
50
  }
39
51
 
52
+ private validateEvaluationInterval(interval: number | undefined): void {
53
+ this.validateIntegerInRange({
54
+ value: interval,
55
+ min: 1,
56
+ max: 1440,
57
+ message:
58
+ "Evaluation interval must be a whole number of minutes between 1 and 1440.",
59
+ });
60
+ }
61
+
62
+ private validateMatchCountThreshold(threshold: number | undefined): void {
63
+ this.validateIntegerInRange({
64
+ value: threshold,
65
+ min: DETECTION_MATCH_COUNT_THRESHOLD_MIN,
66
+ max: DETECTION_MATCH_COUNT_THRESHOLD_MAX,
67
+ message: `Match count threshold must be a whole number between ${DETECTION_MATCH_COUNT_THRESHOLD_MIN} and ${DETECTION_MATCH_COUNT_THRESHOLD_MAX}.`,
68
+ });
69
+ }
70
+
40
71
  protected override async onBeforeCreate(
41
72
  createBy: CreateBy<Model>,
42
73
  ): Promise<OnCreate<Model>> {
43
74
  this.validateSigmaRule(createBy.data.sigmaRuleYaml);
44
75
  this.validateEvaluationInterval(createBy.data.evaluationIntervalInMinutes);
76
+ this.validateMatchCountThreshold(createBy.data.matchCountThreshold);
77
+
78
+ /*
79
+ * groupByField / distinctCountField are looked up verbatim: an
80
+ * unknown name silently becomes an attributes[] lookup that yields
81
+ * '' on every row, and for a distinct-count rule that means it never
82
+ * fires again with no error anywhere. Trimming here kills the whole
83
+ * whitespace-from-a-paste class of that outage; '' is preserved as
84
+ * the documented "feature off" value so clearing the field still
85
+ * works.
86
+ */
87
+ if (createBy.data.groupByField !== undefined) {
88
+ createBy.data.groupByField = createBy.data.groupByField.trim();
89
+ }
90
+
91
+ if (createBy.data.distinctCountField !== undefined) {
92
+ createBy.data.distinctCountField =
93
+ createBy.data.distinctCountField.trim();
94
+ }
45
95
 
46
96
  /*
47
97
  * Default the rule name from the Sigma title so pasting a rule is a
@@ -67,6 +117,23 @@ export class Service extends DatabaseService<Model> {
67
117
  updateBy.data.evaluationIntervalInMinutes as number | undefined,
68
118
  );
69
119
 
120
+ this.validateMatchCountThreshold(
121
+ updateBy.data.matchCountThreshold as number | undefined,
122
+ );
123
+
124
+ // Same trim as onBeforeCreate — see the rationale there.
125
+ if (updateBy.data.groupByField !== undefined) {
126
+ updateBy.data.groupByField = (
127
+ updateBy.data.groupByField as string
128
+ ).trim();
129
+ }
130
+
131
+ if (updateBy.data.distinctCountField !== undefined) {
132
+ updateBy.data.distinctCountField = (
133
+ updateBy.data.distinctCountField as string
134
+ ).trim();
135
+ }
136
+
70
137
  return { updateBy, carryForward: null };
71
138
  }
72
139
  }
@@ -22,8 +22,18 @@ import GreenlockCertificateService from "./GreenlockCertificateService";
22
22
  // Greenlock
23
23
  import GreenlockChallengeService from "./GreenlockChallengeService";
24
24
  import IncidentCustomFieldService from "./IncidentCustomFieldService";
25
+ import IncidentOnCallRuleService from "./IncidentOnCallRuleService";
26
+ import IncidentPrivacyRuleService from "./IncidentPrivacyRuleService";
27
+ import IncidentPostmortemTemplateService from "./IncidentPostmortemTemplateService";
28
+ import IncidentNoteTemplateService from "./IncidentNoteTemplateService";
29
+ import IncidentLabelRuleService from "./IncidentLabelRuleService";
30
+ import IncidentGroupingRuleService from "./IncidentGroupingRuleService";
31
+ import IncidentTemplateService from "./IncidentTemplateService";
32
+ import IncidentTemplateOwnerTeamService from "./IncidentTemplateOwnerTeamService";
33
+ import IncidentTemplateOwnerUserService from "./IncidentTemplateOwnerUserService";
25
34
  import IncidentInternalNoteService from "./IncidentInternalNoteService";
26
35
  import IncidentOwnerTeamService from "./IncidentOwnerTeamService";
36
+ import IncidentOwnerRuleService from "./IncidentOwnerRuleService";
27
37
  import IncidentOwnerUserService from "./IncidentOwnerUserService";
28
38
  import IncidentRoleService from "./IncidentRoleService";
29
39
  import IncidentMemberService from "./IncidentMemberService";
@@ -36,7 +46,15 @@ import IncidentStateTimelineService from "./IncidentStateTimelineService";
36
46
  //Labels.
37
47
  import LabelService from "./LabelService";
38
48
  import KubernetesClusterService from "./KubernetesClusterService";
49
+ import KubernetesClusterOwnerRuleService from "./KubernetesClusterOwnerRuleService";
50
+ import KubernetesClusterOwnerUserService from "./KubernetesClusterOwnerUserService";
51
+ import KubernetesClusterOwnerTeamService from "./KubernetesClusterOwnerTeamService";
52
+ import KubernetesClusterLabelRuleService from "./KubernetesClusterLabelRuleService";
39
53
  import DockerHostService from "./DockerHostService";
54
+ import DockerHostOwnerRuleService from "./DockerHostOwnerRuleService";
55
+ import DockerHostOwnerUserService from "./DockerHostOwnerUserService";
56
+ import DockerHostOwnerTeamService from "./DockerHostOwnerTeamService";
57
+ import DockerHostLabelRuleService from "./DockerHostLabelRuleService";
40
58
  import NetworkDeviceService from "./NetworkDeviceService";
41
59
  import NetworkDeviceOwnerTeamService from "./NetworkDeviceOwnerTeamService";
42
60
  import NetworkDeviceOwnerUserService from "./NetworkDeviceOwnerUserService";
@@ -55,6 +73,10 @@ import NetworkDeviceLinkRuleService from "./NetworkDeviceLinkRuleService";
55
73
  import NetworkTopologySuppressionService from "./NetworkTopologySuppressionService";
56
74
  import NetworkSiteAssignmentRuleService from "./NetworkSiteAssignmentRuleService";
57
75
  import PodmanHostService from "./PodmanHostService";
76
+ import PodmanHostOwnerRuleService from "./PodmanHostOwnerRuleService";
77
+ import PodmanHostOwnerUserService from "./PodmanHostOwnerUserService";
78
+ import PodmanHostOwnerTeamService from "./PodmanHostOwnerTeamService";
79
+ import PodmanHostLabelRuleService from "./PodmanHostLabelRuleService";
58
80
  import ProxmoxClusterService from "./ProxmoxClusterService";
59
81
  import DockerSwarmClusterService from "./DockerSwarmClusterService";
60
82
  import CephClusterService from "./CephClusterService";
@@ -91,15 +113,22 @@ import MetricBaselineService from "./MetricBaselineService";
91
113
  import SpanCountBaselineService from "./SpanCountBaselineService";
92
114
  import LogCountBaselineService from "./LogCountBaselineService";
93
115
  import MonitorCustomFieldService from "./MonitorCustomFieldService";
116
+ import MonitorLabelRuleService from "./MonitorLabelRuleService";
117
+ import MonitorTemplateService from "./MonitorTemplateService";
94
118
  import MonitorGroupOwnerTeamService from "./MonitorGroupOwnerTeamService";
95
119
  import MonitorGroupOwnerUserService from "./MonitorGroupOwnerUserService";
96
120
  import MonitorGroupResourceService from "./MonitorGroupResourceService";
97
121
  import MonitorGroupService from "./MonitorGroupService";
98
122
  import MonitorOwnerTeamService from "./MonitorOwnerTeamService";
123
+ import MonitorOwnerRuleService from "./MonitorOwnerRuleService";
99
124
  import MonitorOwnerUserService from "./MonitorOwnerUserService";
100
125
  import MonitorProbeService from "./MonitorProbeService";
101
126
  import MonitorSecretService from "./MonitorSecretService";
102
127
  import RunbookCredentialService from "./RunbookCredentialService";
128
+ import RunbookOwnerRuleService from "./RunbookOwnerRuleService";
129
+ import RunbookOwnerUserService from "./RunbookOwnerUserService";
130
+ import RunbookOwnerTeamService from "./RunbookOwnerTeamService";
131
+ import RunbookLabelRuleService from "./RunbookLabelRuleService";
103
132
  import RunbookSecretService from "./RunbookSecretService";
104
133
  import AIInsightService from "./AIInsightService";
105
134
 
@@ -110,6 +139,11 @@ import MonitorStatusService from "./MonitorStatusService";
110
139
  import MonitorStatusTimelineService from "./MonitorStatusTimelineService";
111
140
  import NotificationService from "./NotificationService";
112
141
  import OnCallDutyPolicyCustomFieldService from "./OnCallDutyPolicyCustomFieldService";
142
+ import OnCallDutyPolicyOwnerRuleService from "./OnCallDutyPolicyOwnerRuleService";
143
+ import OnCallDutyPolicyOwnerUserService from "./OnCallDutyPolicyOwnerUserService";
144
+ import OnCallDutyPolicyOwnerTeamService from "./OnCallDutyPolicyOwnerTeamService";
145
+ import OnCallDutyPolicyLabelRuleService from "./OnCallDutyPolicyLabelRuleService";
146
+ import OnCallDutyPolicyFeedService from "./OnCallDutyPolicyFeedService";
113
147
  import OnCallDutyPolicyEscalationRuleScheduleService from "./OnCallDutyPolicyEscalationRuleScheduleService";
114
148
  import OnCallDutyPolicyEscalationRuleService from "./OnCallDutyPolicyEscalationRuleService";
115
149
  import OnCallDutyPolicyEscalationRuleTeamService from "./OnCallDutyPolicyEscalationRuleTeamService";
@@ -117,11 +151,17 @@ import OnCallDutyPolicyEscalationRuleUserService from "./OnCallDutyPolicyEscalat
117
151
  import OnCallDutyPolicyExecutionLogService from "./OnCallDutyPolicyExecutionLogService";
118
152
  import OnCallDutyPolicyExecutionLogTimelineService from "./OnCallDutyPolicyExecutionLogTimelineService";
119
153
  import OnCallDutyPolicyScheduleLayerService from "./OnCallDutyPolicyScheduleLayerService";
154
+ import OnCallDutyPolicyScheduleOwnerRuleService from "./OnCallDutyPolicyScheduleOwnerRuleService";
155
+ import OnCallDutyPolicyScheduleOwnerUserService from "./OnCallDutyPolicyScheduleOwnerUserService";
156
+ import OnCallDutyPolicyScheduleOwnerTeamService from "./OnCallDutyPolicyScheduleOwnerTeamService";
157
+ import OnCallDutyPolicyScheduleLabelRuleService from "./OnCallDutyPolicyScheduleLabelRuleService";
120
158
  import OnCallDutyPolicyScheduleLayerUserService from "./OnCallDutyPolicyScheduleLayerUserService";
121
159
  import OnCallDutyPolicyScheduleService from "./OnCallDutyPolicyScheduleService";
122
160
  // On-Call Duty
123
161
  import OnCallDutyPolicyService from "./OnCallDutyPolicyService";
124
162
  import ProbeService from "./ProbeService";
163
+ import ProbeOwnerTeamService from "./ProbeOwnerTeamService";
164
+ import ProbeOwnerUserService from "./ProbeOwnerUserService";
125
165
  import AIAgentService from "./AIAgentService";
126
166
  import AIAgentOwnerUserService from "./AIAgentOwnerUserService";
127
167
  import AIAgentOwnerTeamService from "./AIAgentOwnerTeamService";
@@ -132,6 +172,10 @@ import ProjectUserProfileService from "./ProjectUserProfileService";
132
172
  import ProfileService from "./ProfileService";
133
173
  import ProfileSampleService from "./ProfileSampleService";
134
174
  import RumSessionService from "./RumSessionService";
175
+ import RumApplicationLabelRuleService from "./RumApplicationLabelRuleService";
176
+ import RumApplicationOwnerRuleService from "./RumApplicationOwnerRuleService";
177
+ import RumApplicationOwnerUserService from "./RumApplicationOwnerUserService";
178
+ import RumApplicationOwnerTeamService from "./RumApplicationOwnerTeamService";
135
179
  import RumSessionChunkService from "./RumSessionChunkService";
136
180
  import RumSessionReplayViewService from "./RumSessionReplayViewService";
137
181
  import RumSessionErasureRequestService from "./RumSessionErasureRequestService";
@@ -152,8 +196,11 @@ import RecommendationDismissalService from "./RecommendationDismissalService";
152
196
  import ResellerPlanService from "./ResellerPlanService";
153
197
  import ResellerService from "./ResellerService";
154
198
  import ScheduledMaintenanceCustomFieldService from "./ScheduledMaintenanceCustomFieldService";
199
+ import ScheduledMaintenanceNoteTemplateService from "./ScheduledMaintenanceNoteTemplateService";
200
+ import ScheduledMaintenanceLabelRuleService from "./ScheduledMaintenanceLabelRuleService";
155
201
  import ScheduledMaintenanceInternalNoteService from "./ScheduledMaintenanceInternalNoteService";
156
202
  import ScheduledMaintenanceOwnerTeamService from "./ScheduledMaintenanceOwnerTeamService";
203
+ import ScheduledMaintenanceOwnerRuleService from "./ScheduledMaintenanceOwnerRuleService";
157
204
  import ScheduledMaintenanceOwnerUserService from "./ScheduledMaintenanceOwnerUserService";
158
205
  import ScheduledMaintenancePublicNoteService from "./ScheduledMaintenancePublicNoteService";
159
206
  // ScheduledMaintenances
@@ -161,6 +208,8 @@ import ScheduledMaintenanceService from "./ScheduledMaintenanceService";
161
208
  import ScheduledMaintenanceStateService from "./ScheduledMaintenanceStateService";
162
209
  import ScheduledMaintenanceStateTimelineService from "./ScheduledMaintenanceStateTimelineService";
163
210
  import ServiceOwnerTeamService from "./ServiceOwnerTeamService";
211
+ import ServiceOwnerRuleService from "./ServiceOwnerRuleService";
212
+ import ServiceLabelRuleService from "./ServiceLabelRuleService";
164
213
  import ServiceOwnerUserService from "./ServiceOwnerUserService";
165
214
  import ServiceService from "./ServiceService";
166
215
  import ShortLinkService from "./ShortLinkService";
@@ -172,15 +221,22 @@ import SmsService from "./SmsService";
172
221
  import TelegramService from "./TelegramService";
173
222
  import SpanService from "./SpanService";
174
223
  import StatusPageAnnouncementService from "./StatusPageAnnouncementService";
224
+ import StatusPageLabelRuleService from "./StatusPageLabelRuleService";
175
225
  import StatusPageAnnouncementTemplateService from "./StatusPageAnnouncementTemplateService";
176
226
  import StatusPageCustomFieldService from "./StatusPageCustomFieldService";
177
227
  import DashboardDomainService from "./DashboardDomainService";
228
+ import DashboardOwnerRuleService from "./DashboardOwnerRuleService";
229
+ import DashboardOwnerUserService from "./DashboardOwnerUserService";
230
+ import DashboardOwnerTeamService from "./DashboardOwnerTeamService";
231
+ import DashboardLabelRuleService from "./DashboardLabelRuleService";
232
+ import DashboardService from "./DashboardService";
178
233
  import StatusPageDomainService from "./StatusPageDomainService";
179
234
  import StatusPageFooterLinkService from "./StatusPageFooterLinkService";
180
235
  import StatusPageGroupService from "./StatusPageGroupService";
181
236
  import StatusPageHeaderLinkService from "./StatusPageHeaderLinkService";
182
237
  import StatusPageHistoryChartBarColorRuleService from "./StatusPageHistoryChartBarColorRuleService";
183
238
  import StatusPageOwnerTeamService from "./StatusPageOwnerTeamService";
239
+ import StatusPageOwnerRuleService from "./StatusPageOwnerRuleService";
184
240
  import StatusPageOwnerUserService from "./StatusPageOwnerUserService";
185
241
  import StatusPagePrivateUserService from "./StatusPagePrivateUserService";
186
242
  import StatusPagePrivateUserSessionService from "./StatusPagePrivateUserSessionService";
@@ -218,6 +274,10 @@ import UserTelegramService from "./UserTelegramService";
218
274
  import UserSlackService from "./UserSlackService";
219
275
  import UserMicrosoftTeamsService from "./UserMicrosoftTeamsService";
220
276
  import WorkflowLogService from "./WorkflowLogService";
277
+ import WorkflowOwnerRuleService from "./WorkflowOwnerRuleService";
278
+ import WorkflowOwnerUserService from "./WorkflowOwnerUserService";
279
+ import WorkflowOwnerTeamService from "./WorkflowOwnerTeamService";
280
+ import WorkflowLabelRuleService from "./WorkflowLabelRuleService";
221
281
  // Workflows.
222
282
  import WorkflowService from "./WorkflowService";
223
283
  import WorkflowVariablesService from "./WorkflowVariableService";
@@ -234,11 +294,15 @@ import ScheduledMaintenanceTemplateOwnerUserService from "./ScheduledMaintenance
234
294
 
235
295
  // Alert Services
236
296
  import AlertStateService from "./AlertStateService";
297
+ import AlertOnCallRuleService from "./AlertOnCallRuleService";
298
+ import AlertPrivacyRuleService from "./AlertPrivacyRuleService";
299
+ import AlertLabelRuleService from "./AlertLabelRuleService";
237
300
  import AlertService from "./AlertService";
238
301
  import AlertCustomFieldService from "./AlertCustomFieldService";
239
302
  import AlertStateTimelineService from "./AlertStateTimelineService";
240
303
  import AlertInternalNoteService from "./AlertInternalNoteService";
241
304
  import AlertOwnerTeamService from "./AlertOwnerTeamService";
305
+ import AlertOwnerRuleService from "./AlertOwnerRuleService";
242
306
  import AlertOwnerUserService from "./AlertOwnerUserService";
243
307
  import AlertSeverityService from "./AlertSeverityService";
244
308
  import DetectionRuleService from "./DetectionRuleService";
@@ -247,20 +311,28 @@ import AlertNoteTemplateService from "./AlertNoteTemplateService";
247
311
 
248
312
  // AlertEpisode Services
249
313
  import AlertEpisodeService from "./AlertEpisodeService";
314
+ import AlertEpisodeOnCallRuleService from "./AlertEpisodeOnCallRuleService";
315
+ import AlertEpisodePrivacyRuleService from "./AlertEpisodePrivacyRuleService";
316
+ import AlertEpisodeLabelRuleService from "./AlertEpisodeLabelRuleService";
250
317
  import AlertEpisodeFeedService from "./AlertEpisodeFeedService";
251
318
  import AlertEpisodeInternalNoteService from "./AlertEpisodeInternalNoteService";
252
319
  import AlertEpisodeMemberService from "./AlertEpisodeMemberService";
253
320
  import AlertEpisodeOwnerTeamService from "./AlertEpisodeOwnerTeamService";
321
+ import AlertEpisodeOwnerRuleService from "./AlertEpisodeOwnerRuleService";
254
322
  import AlertEpisodeOwnerUserService from "./AlertEpisodeOwnerUserService";
255
323
  import AlertEpisodeStateTimelineService from "./AlertEpisodeStateTimelineService";
256
324
 
257
325
  // IncidentEpisode Services
258
326
  import IncidentEpisodeService from "./IncidentEpisodeService";
327
+ import IncidentEpisodeOnCallRuleService from "./IncidentEpisodeOnCallRuleService";
328
+ import IncidentEpisodePrivacyRuleService from "./IncidentEpisodePrivacyRuleService";
329
+ import IncidentEpisodeLabelRuleService from "./IncidentEpisodeLabelRuleService";
259
330
  import IncidentEpisodeFeedService from "./IncidentEpisodeFeedService";
260
331
  import IncidentEpisodeInternalNoteService from "./IncidentEpisodeInternalNoteService";
261
332
  import IncidentEpisodeMemberService from "./IncidentEpisodeMemberService";
262
333
  import IncidentEpisodeRoleMemberService from "./IncidentEpisodeRoleMemberService";
263
334
  import IncidentEpisodeOwnerTeamService from "./IncidentEpisodeOwnerTeamService";
335
+ import IncidentEpisodeOwnerRuleService from "./IncidentEpisodeOwnerRuleService";
264
336
  import IncidentEpisodeOwnerUserService from "./IncidentEpisodeOwnerUserService";
265
337
  import IncidentEpisodeStateTimelineService from "./IncidentEpisodeStateTimelineService";
266
338
  import IncidentEpisodePublicNoteService from "./IncidentEpisodePublicNoteService";
@@ -306,9 +378,41 @@ import OnCallDutyPolicyTimeLogService from "./OnCallDutyPolicyTimeLogService";
306
378
  import ProjectSCIMLogService from "./ProjectSCIMLogService";
307
379
  import StatusPageSCIMLogService from "./StatusPageSCIMLogService";
308
380
  import DeletedProjectService from "./DeletedProjectService";
381
+ import CodeRepositoryService from "./CodeRepositoryService";
382
+ import WebhookLogService from "./WebhookLogService";
383
+ import HostLabelRuleService from "./HostLabelRuleService";
384
+ import HostOwnerRuleService from "./HostOwnerRuleService";
385
+ import HostOwnerTeamService from "./HostOwnerTeamService";
386
+ import HostOwnerUserService from "./HostOwnerUserService";
387
+ import IncomingCallPolicyService from "./IncomingCallPolicyService";
388
+ import PushNotificationLogService from "./PushNotificationLogService";
389
+ import RunnerOwnerTeamService from "./RunnerOwnerTeamService";
390
+ import RunnerOwnerUserService from "./RunnerOwnerUserService";
391
+ import CloudResourceLabelRuleService from "./CloudResourceLabelRuleService";
392
+ import CloudResourceOwnerRuleService from "./CloudResourceOwnerRuleService";
393
+ import CloudResourceOwnerTeamService from "./CloudResourceOwnerTeamService";
394
+ import CloudResourceOwnerUserService from "./CloudResourceOwnerUserService";
395
+ import ServerlessFunctionLabelRuleService from "./ServerlessFunctionLabelRuleService";
396
+ import ServerlessFunctionOwnerRuleService from "./ServerlessFunctionOwnerRuleService";
397
+ import ServerlessFunctionOwnerTeamService from "./ServerlessFunctionOwnerTeamService";
398
+ import ServerlessFunctionOwnerUserService from "./ServerlessFunctionOwnerUserService";
399
+ import IncomingCallPolicyEscalationRuleService from "./IncomingCallPolicyEscalationRuleService";
400
+ import IncomingCallPolicyLabelRuleService from "./IncomingCallPolicyLabelRuleService";
401
+ import IncomingCallPolicyOwnerRuleService from "./IncomingCallPolicyOwnerRuleService";
402
+ import IncomingCallPolicyOwnerTeamService from "./IncomingCallPolicyOwnerTeamService";
403
+ import IncomingCallPolicyOwnerUserService from "./IncomingCallPolicyOwnerUserService";
404
+ import IoTFleetLabelRuleService from "./IoTFleetLabelRuleService";
405
+ import IoTFleetOwnerRuleService from "./IoTFleetOwnerRuleService";
406
+ import IoTFleetOwnerTeamService from "./IoTFleetOwnerTeamService";
407
+ import IoTFleetOwnerUserService from "./IoTFleetOwnerUserService";
309
408
 
310
409
  const services: Array<BaseService> = [
311
410
  OnCallDutyPolicyTimeLogService,
411
+ OnCallDutyPolicyOwnerRuleService,
412
+ OnCallDutyPolicyOwnerUserService,
413
+ OnCallDutyPolicyOwnerTeamService,
414
+ OnCallDutyPolicyLabelRuleService,
415
+ OnCallDutyPolicyFeedService,
312
416
  AcmeCertificateService,
313
417
  DeletedProjectService,
314
418
  PromoCodeService,
@@ -345,8 +449,18 @@ const services: Array<BaseService> = [
345
449
  GreenlockChallengeService,
346
450
 
347
451
  IncidentCustomFieldService,
452
+ IncidentOnCallRuleService,
453
+ IncidentPrivacyRuleService,
454
+ IncidentPostmortemTemplateService,
455
+ IncidentNoteTemplateService,
456
+ IncidentLabelRuleService,
457
+ IncidentGroupingRuleService,
458
+ IncidentTemplateService,
459
+ IncidentTemplateOwnerTeamService,
460
+ IncidentTemplateOwnerUserService,
348
461
  IncidentInternalNoteService,
349
462
  IncidentOwnerTeamService,
463
+ IncidentOwnerRuleService,
350
464
  IncidentOwnerUserService,
351
465
  IncidentRoleService,
352
466
  IncidentMemberService,
@@ -359,7 +473,15 @@ const services: Array<BaseService> = [
359
473
 
360
474
  LabelService,
361
475
  KubernetesClusterService,
476
+ KubernetesClusterOwnerRuleService,
477
+ KubernetesClusterOwnerUserService,
478
+ KubernetesClusterOwnerTeamService,
479
+ KubernetesClusterLabelRuleService,
362
480
  DockerHostService,
481
+ DockerHostOwnerRuleService,
482
+ DockerHostOwnerUserService,
483
+ DockerHostOwnerTeamService,
484
+ DockerHostLabelRuleService,
363
485
  NetworkDeviceService,
364
486
  NetworkDeviceOwnerTeamService,
365
487
  NetworkDeviceOwnerUserService,
@@ -378,6 +500,10 @@ const services: Array<BaseService> = [
378
500
  NetworkTopologySuppressionService,
379
501
  NetworkSiteAssignmentRuleService,
380
502
  PodmanHostService,
503
+ PodmanHostOwnerRuleService,
504
+ PodmanHostOwnerUserService,
505
+ PodmanHostOwnerTeamService,
506
+ PodmanHostLabelRuleService,
381
507
  ProxmoxClusterService,
382
508
  DockerSwarmClusterService,
383
509
  CephClusterService,
@@ -401,7 +527,10 @@ const services: Array<BaseService> = [
401
527
 
402
528
  MailService,
403
529
  MonitorCustomFieldService,
530
+ MonitorLabelRuleService,
531
+ MonitorTemplateService,
404
532
  MonitorOwnerTeamService,
533
+ MonitorOwnerRuleService,
405
534
  MonitorOwnerUserService,
406
535
  MonitorProbeService,
407
536
  MonitorService,
@@ -409,6 +538,10 @@ const services: Array<BaseService> = [
409
538
  MonitorStatusTimelineService,
410
539
  MonitorSecretService,
411
540
  RunbookCredentialService,
541
+ RunbookOwnerRuleService,
542
+ RunbookOwnerUserService,
543
+ RunbookOwnerTeamService,
544
+ RunbookLabelRuleService,
412
545
  RunbookSecretService,
413
546
  AIInsightService,
414
547
  MonitorFeedService,
@@ -427,6 +560,8 @@ const services: Array<BaseService> = [
427
560
  ProjectService,
428
561
  ProjectSmtpConfigService,
429
562
  ProbeService,
563
+ ProbeOwnerTeamService,
564
+ ProbeOwnerUserService,
430
565
  AIAgentService,
431
566
  AIAgentOwnerUserService,
432
567
  AIAgentOwnerTeamService,
@@ -439,8 +574,11 @@ const services: Array<BaseService> = [
439
574
  GlobalOidcProjectService,
440
575
 
441
576
  ScheduledMaintenanceCustomFieldService,
577
+ ScheduledMaintenanceNoteTemplateService,
578
+ ScheduledMaintenanceLabelRuleService,
442
579
  ScheduledMaintenanceInternalNoteService,
443
580
  ScheduledMaintenanceOwnerTeamService,
581
+ ScheduledMaintenanceOwnerRuleService,
444
582
  ScheduledMaintenanceOwnerUserService,
445
583
  ScheduledMaintenancePublicNoteService,
446
584
  ScheduledMaintenanceService,
@@ -456,14 +594,21 @@ const services: Array<BaseService> = [
456
594
  TelegramService,
457
595
 
458
596
  StatusPageAnnouncementService,
597
+ StatusPageLabelRuleService,
459
598
  StatusPageAnnouncementTemplateService,
460
599
  StatusPageCustomFieldService,
461
600
  DashboardDomainService,
601
+ DashboardOwnerRuleService,
602
+ DashboardOwnerUserService,
603
+ DashboardOwnerTeamService,
604
+ DashboardLabelRuleService,
605
+ DashboardService,
462
606
  StatusPageDomainService,
463
607
  StatusPageFooterLinkService,
464
608
  StatusPageGroupService,
465
609
  StatusPageHeaderLinkService,
466
610
  StatusPageOwnerTeamService,
611
+ StatusPageOwnerRuleService,
467
612
  StatusPageOwnerUserService,
468
613
  StatusPagePrivateUserService,
469
614
  StatusPagePrivateUserSessionService,
@@ -502,6 +647,10 @@ const services: Array<BaseService> = [
502
647
  UserWebAuthnService,
503
648
 
504
649
  WorkflowLogService,
650
+ WorkflowOwnerRuleService,
651
+ WorkflowOwnerUserService,
652
+ WorkflowOwnerTeamService,
653
+ WorkflowLabelRuleService,
505
654
  WorkflowService,
506
655
  WorkflowVariablesService,
507
656
 
@@ -513,6 +662,10 @@ const services: Array<BaseService> = [
513
662
 
514
663
  // On Call Duty Policy Schedule
515
664
  OnCallDutyPolicyScheduleService,
665
+ OnCallDutyPolicyScheduleOwnerRuleService,
666
+ OnCallDutyPolicyScheduleOwnerUserService,
667
+ OnCallDutyPolicyScheduleOwnerTeamService,
668
+ OnCallDutyPolicyScheduleLabelRuleService,
516
669
  OnCallDutyPolicyScheduleLayerUserService,
517
670
  OnCallDutyPolicyScheduleLayerService,
518
671
  OnCallDutyPolicyEscalationRuleScheduleService,
@@ -522,7 +675,9 @@ const services: Array<BaseService> = [
522
675
  ProjectUserProfileService,
523
676
 
524
677
  ServiceService,
678
+ ServiceLabelRuleService,
525
679
  ServiceOwnerTeamService,
680
+ ServiceOwnerRuleService,
526
681
  ServiceOwnerUserService,
527
682
 
528
683
  TelemetryExceptionService,
@@ -536,11 +691,15 @@ const services: Array<BaseService> = [
536
691
  ScheduledMaintenanceTemplateOwnerUserService,
537
692
 
538
693
  AlertStateService,
694
+ AlertOnCallRuleService,
695
+ AlertPrivacyRuleService,
696
+ AlertLabelRuleService,
539
697
  AlertService,
540
698
  AlertCustomFieldService,
541
699
  AlertStateTimelineService,
542
700
  AlertInternalNoteService,
543
701
  AlertOwnerTeamService,
702
+ AlertOwnerRuleService,
544
703
  AlertOwnerUserService,
545
704
  AlertSeverityService,
546
705
  DetectionRuleService,
@@ -550,20 +709,28 @@ const services: Array<BaseService> = [
550
709
 
551
710
  // AlertEpisode Services
552
711
  AlertEpisodeService,
712
+ AlertEpisodeOnCallRuleService,
713
+ AlertEpisodePrivacyRuleService,
714
+ AlertEpisodeLabelRuleService,
553
715
  AlertEpisodeFeedService,
554
716
  AlertEpisodeInternalNoteService,
555
717
  AlertEpisodeMemberService,
556
718
  AlertEpisodeOwnerTeamService,
719
+ AlertEpisodeOwnerRuleService,
557
720
  AlertEpisodeOwnerUserService,
558
721
  AlertEpisodeStateTimelineService,
559
722
 
560
723
  // IncidentEpisode Services
561
724
  IncidentEpisodeService,
725
+ IncidentEpisodeOnCallRuleService,
726
+ IncidentEpisodePrivacyRuleService,
727
+ IncidentEpisodeLabelRuleService,
562
728
  IncidentEpisodeFeedService,
563
729
  IncidentEpisodeInternalNoteService,
564
730
  IncidentEpisodeMemberService,
565
731
  IncidentEpisodeRoleMemberService,
566
732
  IncidentEpisodeOwnerTeamService,
733
+ IncidentEpisodeOwnerRuleService,
567
734
  IncidentEpisodeOwnerUserService,
568
735
  IncidentEpisodeStateTimelineService,
569
736
  IncidentEpisodePublicNoteService,
@@ -602,8 +769,46 @@ const services: Array<BaseService> = [
602
769
 
603
770
  // Session replay control tables (the recordings themselves are in ClickHouse).
604
771
  RumSessionReplayViewService,
772
+ RumApplicationLabelRuleService,
773
+ RumApplicationOwnerRuleService,
774
+ RumApplicationOwnerUserService,
775
+ RumApplicationOwnerTeamService,
605
776
  RumSessionErasureRequestService,
606
777
  RumSessionPinService,
778
+
779
+ /*
780
+ * Workflow-enabled models whose services had never been registered here,
781
+ * so their components showed up in the editor palette but threw
782
+ * "Component <id> not found" at execution time. Kept together because
783
+ * none of these families has an existing entry to sit next to.
784
+ */
785
+ CloudResourceLabelRuleService,
786
+ CloudResourceOwnerRuleService,
787
+ CloudResourceOwnerTeamService,
788
+ CloudResourceOwnerUserService,
789
+ CodeRepositoryService,
790
+ HostLabelRuleService,
791
+ HostOwnerRuleService,
792
+ HostOwnerTeamService,
793
+ HostOwnerUserService,
794
+ IncomingCallPolicyService,
795
+ IncomingCallPolicyEscalationRuleService,
796
+ IncomingCallPolicyLabelRuleService,
797
+ IncomingCallPolicyOwnerRuleService,
798
+ IncomingCallPolicyOwnerTeamService,
799
+ IncomingCallPolicyOwnerUserService,
800
+ IoTFleetLabelRuleService,
801
+ IoTFleetOwnerRuleService,
802
+ IoTFleetOwnerTeamService,
803
+ IoTFleetOwnerUserService,
804
+ PushNotificationLogService,
805
+ RunnerOwnerTeamService,
806
+ RunnerOwnerUserService,
807
+ ServerlessFunctionLabelRuleService,
808
+ ServerlessFunctionOwnerRuleService,
809
+ ServerlessFunctionOwnerTeamService,
810
+ ServerlessFunctionOwnerUserService,
811
+ WebhookLogService,
607
812
  ];
608
813
 
609
814
  export const AnalyticsServices: Array<
@@ -6,6 +6,7 @@ import UpdateBy from "../Types/Database/UpdateBy";
6
6
  import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
7
7
  import BadDataException from "../../Types/Exception/BadDataException";
8
8
  import ScanTargetUtil from "../../Utils/NetworkDiscovery/ScanTargetUtil";
9
+ import ScanNameUtil from "../../Utils/NetworkDiscovery/ScanNameUtil";
9
10
 
10
11
  export class Service extends DatabaseService<Model> {
11
12
  public constructor() {
@@ -33,6 +34,25 @@ export class Service extends DatabaseService<Model> {
33
34
  ): Promise<OnCreate<Model>> {
34
35
  this.validateScanTarget(createBy.data.cidr);
35
36
 
37
+ /*
38
+ * The name is normalized as well as validated — collapsed onto one line,
39
+ * trimmed, and a blank one dropped entirely — so the column holds either a
40
+ * name or nothing. An empty string stored here would read as a name to
41
+ * every `scan.name ?` in the product and render as a blank line above the
42
+ * scan target. See ScanNameUtil.
43
+ */
44
+ this.validateScanName(createBy.data.name);
45
+
46
+ /*
47
+ * Written through a cast because `exactOptionalPropertyTypes` forbids
48
+ * assigning `undefined` to an optional property — and dropping a blank
49
+ * name is exactly that assignment. Undefined rather than null: a model
50
+ * instance starts with every column undefined, so this leaves the row in
51
+ * the state a scan created without a name would already have been in.
52
+ */
53
+ (createBy.data as unknown as Record<string, unknown>)["name"] =
54
+ ScanNameUtil.normalize(createBy.data.name) ?? undefined;
55
+
36
56
  return { createBy, carryForward: null };
37
57
  }
38
58
 
@@ -54,6 +74,27 @@ export class Service extends DatabaseService<Model> {
54
74
  );
55
75
  }
56
76
 
77
+ /*
78
+ * The name IS user-updatable — renaming a scan is the whole point of
79
+ * letting it be named — so this path is the one the form actually takes,
80
+ * not just a guard against root writers.
81
+ *
82
+ * Cleared with null rather than left as "": the form sends back an empty
83
+ * box as an empty string, and the operator who emptied it meant "this scan
84
+ * has no name", which is what NULL says. `undefined` would not do — the
85
+ * key is present in the update, and an undefined value is a column TypeORM
86
+ * would try to write.
87
+ */
88
+ if (dataKeys.includes("name")) {
89
+ const data: Record<string, unknown> = updateBy.data as Record<
90
+ string,
91
+ unknown
92
+ >;
93
+
94
+ this.validateScanName(data["name"]);
95
+ data["name"] = ScanNameUtil.normalize(data["name"]);
96
+ }
97
+
57
98
  return { updateBy, carryForward: null };
58
99
  }
59
100
 
@@ -75,6 +116,24 @@ export class Service extends DatabaseService<Model> {
75
116
  throw new BadDataException(validationError);
76
117
  }
77
118
  }
119
+
120
+ /*
121
+ * Same contract as validateScanTarget above: the value is passed through
122
+ * untouched, because it arrives straight from the request JSON and may be a
123
+ * number, an object or an array rather than a string. ScanNameUtil type-
124
+ * guards internally and reports a non-string as such.
125
+ *
126
+ * An ABSENT or blank name is not an error — the column is optional, and a
127
+ * scan with no name reads as it always did, by its target.
128
+ */
129
+ private validateScanName(name: unknown): void {
130
+ const validationError: string | null =
131
+ ScanNameUtil.getValidationError(name);
132
+
133
+ if (validationError) {
134
+ throw new BadDataException(validationError);
135
+ }
136
+ }
78
137
  }
79
138
 
80
139
  export default new Service();