@oneuptime/common 12.0.23 → 12.0.24

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 (294) hide show
  1. package/Models/DatabaseModels/DetectionRule.ts +55 -0
  2. package/Models/DatabaseModels/NetworkDeviceAutoImportRule.ts +27 -7
  3. package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +67 -0
  4. package/Models/DatabaseModels/Project.ts +68 -0
  5. package/Models/DatabaseModels/User.ts +68 -0
  6. package/Server/API/TelemetryAPI.ts +29 -0
  7. package/Server/Infrastructure/Postgres/SchemaMigrations/1789400000000-AddNameToNetworkDeviceDiscoveryScan.ts +28 -0
  8. package/Server/Infrastructure/Postgres/SchemaMigrations/1789500000000-AddCampaignUtmFields.ts +49 -0
  9. package/Server/Infrastructure/Postgres/SchemaMigrations/1789512000000-AddDetectionRuleDistinctCountColumns.ts +33 -0
  10. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +6 -0
  11. package/Server/Middleware/GzipRequestBody.ts +311 -0
  12. package/Server/Middleware/MultipartFormData.ts +87 -3
  13. package/Server/Services/DetectionRuleService.ts +73 -6
  14. package/Server/Services/Index.ts +205 -0
  15. package/Server/Services/NetworkDeviceDiscoveryScanService.ts +59 -0
  16. package/Server/Services/NetworkDeviceService.ts +148 -0
  17. package/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.ts +65 -0
  18. package/Server/Services/OnCallDutyPolicyFeedService.ts +1 -1
  19. package/Server/Services/ProjectService.ts +29 -19
  20. package/Server/Services/SecurityEventService.ts +90 -13
  21. package/Server/Services/StatusPageResourceService.ts +223 -0
  22. package/Server/Services/TelemetryAttributeService.ts +17 -0
  23. package/Server/Services/UserService.ts +4 -6
  24. package/Server/Types/Markdown.ts +161 -67
  25. package/Server/Utils/AI/Toolbox/OnCallTools.ts +12 -4
  26. package/Server/Utils/AnalyticsDatabase/Statement.ts +13 -1
  27. package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +297 -6
  28. package/Server/Utils/Attribution.ts +4 -0
  29. package/Server/Utils/Marketing/MarketingEventUtil.ts +45 -7
  30. package/Server/Utils/SecurityEvent/DetectionRuleEvaluator.ts +55 -3
  31. package/Server/Utils/SecurityEvent/Sigma/SigmaClickhouseCompiler.ts +21 -0
  32. package/Server/Utils/StartServer.ts +12 -32
  33. package/Server/Utils/Telemetry/LlmCostBudgetEvaluator.ts +101 -4
  34. package/Server/Utils/Telemetry/LlmMetricSpend.ts +130 -0
  35. package/Server/Views/Partials/AnalyticsConsent.ejs +159 -102
  36. package/Server/Views/Partials/Head.ejs +2 -1
  37. package/Tests/App/Dashboard/AdminUserNotificationMethodsPage.test.tsx +776 -38
  38. package/Tests/App/Dashboard/CorrelateFilterBuilder.test.tsx +359 -0
  39. package/Tests/App/Dashboard/CorrelateGraph.test.tsx +865 -0
  40. package/Tests/App/Dashboard/CorrelationGraph.test.ts +346 -0
  41. package/Tests/App/Dashboard/CriteriaFilterConditionDropdown.test.tsx +256 -0
  42. package/Tests/App/Dashboard/CriteriaFilterDefaults.test.ts +738 -0
  43. package/Tests/App/Dashboard/CriteriaFilterMonitorTypeChange.test.ts +1122 -0
  44. package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +283 -0
  45. package/Tests/App/Dashboard/ExternalStatusPageCriteriaFilter.test.ts +407 -0
  46. package/Tests/App/Dashboard/MetricSeriesInvestigateMenu.test.tsx +5 -14
  47. package/Tests/App/Dashboard/MonitorCriteriaActionToggles.test.tsx +426 -0
  48. package/Tests/App/Dashboard/MonitorStepsCriteriaAlignmentWiring.test.tsx +352 -0
  49. package/Tests/App/Dashboard/OnCallLayerCardOverrides.test.tsx +278 -0
  50. package/Tests/App/Dashboard/OnCallLayerShiftPreviewOverrides.test.ts +237 -0
  51. package/Tests/App/Dashboard/OnCallReadinessSurfaces.test.tsx +2 -2
  52. package/Tests/App/Dashboard/OnCallSchedulePreviewOverrides.test.tsx +460 -0
  53. package/Tests/App/Dashboard/SecurityEventAttributeUtil.test.ts +171 -0
  54. package/Tests/App/Dashboard/SecurityEventCorrelation.test.ts +857 -0
  55. package/Tests/App/Dashboard/SecurityEventDetailObservables.test.tsx +194 -0
  56. package/Tests/App/Dashboard/SecurityEventsDetectionRulesPage.test.tsx +124 -0
  57. package/Tests/App/Dashboard/SecurityEventsMonitorStepForm.test.tsx +79 -19
  58. package/Tests/App/Dashboard/SecurityEventsTableColumns.test.tsx +382 -0
  59. package/Tests/App/StatusPage/BulkAddStatusPageMonitors.test.ts +216 -0
  60. package/Tests/App/StatusPage/BulkAddStatusPageMonitorsModal.test.tsx +590 -11
  61. package/Tests/App/StatusPage/StatusPageResourceExplorer.test.tsx +757 -0
  62. package/Tests/Models/DiscoveryScanNameColumn.test.ts +293 -0
  63. package/Tests/Server/API/SecurityEventAttributesAPI.test.ts +564 -0
  64. package/Tests/Server/Infrastructure/Postgres/SchemaMigrationsOrdering.test.ts +120 -4
  65. package/Tests/Server/Middleware/GzipRequestBody.test.ts +725 -0
  66. package/Tests/Server/Middleware/MultipartFormData.test.ts +298 -0
  67. package/Tests/Server/Services/AddDetectionRuleDistinctCountColumnsMigration.test.ts +311 -0
  68. package/Tests/Server/Services/DetectionRuleService.test.ts +134 -2
  69. package/Tests/Server/Services/DiscoveryScanClaimHookFreeSafety.test.ts +7 -1
  70. package/Tests/Server/Services/FeedRetentionConsistency.test.ts +131 -0
  71. package/Tests/Server/Services/NetworkDeviceDiscoveryScanService.test.ts +194 -0
  72. package/Tests/Server/Services/NetworkDeviceMonitorStatusStamp.test.ts +800 -0
  73. package/Tests/Server/Services/OnCallScheduleAttachRosterRefresh.test.ts +244 -0
  74. package/Tests/Server/Services/SecurityEventService.test.ts +376 -0
  75. package/Tests/Server/Services/StatusPageResourceDuplicates.test.ts +703 -0
  76. package/Tests/Server/Services/TelemetryAttributeServiceSecurityEvent.test.ts +256 -0
  77. package/Tests/Server/Types/Workflow/Components/ComponentRegistryParity.test.ts +417 -0
  78. package/Tests/Server/Utils/AnalyticsDatabase/StatementGeneratorWhereOperators.test.ts +677 -0
  79. package/Tests/Server/Utils/Marketing/MarketingEventUtil.test.ts +43 -0
  80. package/Tests/Server/Utils/Monitor/Criteria/ProfileMonitorCriteria.test.ts +15 -11
  81. package/Tests/Server/Utils/SecurityEvent/DetectionRuleEvaluator.test.ts +369 -8
  82. package/Tests/Server/Utils/SecurityEvent/SigmaClickhouseCompiler.test.ts +35 -0
  83. package/Tests/Server/Utils/Telemetry/LlmCostBudgetEvaluator.test.ts +368 -4
  84. package/Tests/Server/Utils/Telemetry/LlmMetricSpend.test.ts +245 -0
  85. package/Tests/Server/Views/AnalyticsConsentPartial.test.ts +48 -5
  86. package/Tests/Types/Code/YamlSyntax.test.ts +396 -0
  87. package/Tests/Types/Monitor/MetricAndProfileDefaultCriteria.test.ts +957 -0
  88. package/Tests/Types/Monitor/MonitorCriteriaActionValidation.test.ts +598 -0
  89. package/Tests/Types/Monitor/MonitorCriteriaInstance.test.ts +49 -0
  90. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationNotificationMode.test.ts +6 -6
  91. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.test.ts +4 -4
  92. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationUtil.test.ts +4 -3
  93. package/Tests/Types/Telemetry/LlmMetricConventions.test.ts +193 -0
  94. package/Tests/UI/Components/AiInvestigationSettingsCard.test.tsx +0 -12
  95. package/Tests/UI/Components/CardModelDetailEdit.test.tsx +1 -17
  96. package/Tests/UI/Components/CodeEditor.test.tsx +474 -10
  97. package/Tests/UI/Components/Detail/YamlField.test.tsx +105 -0
  98. package/Tests/UI/Components/EntityDropdownLabelsBulkAdd.test.tsx +319 -0
  99. package/Tests/UI/Components/Forms/FormFieldYaml.test.tsx +231 -0
  100. package/Tests/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.test.ts +1 -0
  101. package/Tests/UI/Components/Forms/ValidationYAML.test.ts +234 -0
  102. package/Tests/UI/Components/ModelTable/AttributeColumns.test.tsx +573 -0
  103. package/Tests/UI/Components/ModelTable/BaseModelTableAttributeColumns.test.tsx +824 -0
  104. package/Tests/UI/Components/ModelTable/ColumnCustomizationModalAddableColumns.test.tsx +707 -0
  105. package/Tests/UI/Components/SideOver.test.tsx +1 -1
  106. package/Tests/UI/Components/StatusPage/ResourceGridSelection.test.tsx +294 -0
  107. package/Tests/UI/Components/StatusPage/ResourceListSelection.test.tsx +436 -0
  108. package/Tests/UI/Components/TableBulkCsvExport.test.tsx +6 -2
  109. package/Tests/UI/Components/Toggle.test.tsx +25 -0
  110. package/Tests/UI/Components/YamlEditor.test.tsx +847 -0
  111. package/Tests/Utils/NetworkDevice/DeviceReachabilityUtil.test.ts +252 -0
  112. package/Tests/Utils/NetworkDiscovery/DiscoveredHostUtil.test.ts +221 -0
  113. package/Tests/Utils/NetworkDiscovery/ScanNameUtil.test.ts +312 -0
  114. package/Tests/Utils/StatusPage/ResourceExplorer.test.ts +468 -0
  115. package/Tests/Utils/Telemetry/LlmMetricQuery.test.ts +472 -0
  116. package/Types/Code/YamlSyntax.ts +396 -0
  117. package/Types/Exception/ExceptionCode.ts +1 -0
  118. package/Types/Exception/PayloadTooLargeException.ts +8 -0
  119. package/Types/Marketing/Attribution.ts +10 -0
  120. package/Types/Marketing/MarketingEvent.ts +4 -0
  121. package/Types/Monitor/MonitorCriteriaInstance.ts +116 -56
  122. package/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.ts +2 -1
  123. package/Types/SecurityEvent/DetectionFindingConstants.ts +11 -0
  124. package/Types/Telemetry/LlmMetricConventions.ts +124 -0
  125. package/UI/Components/AutocompleteTextInput/AutocompleteTextInput.tsx +3 -0
  126. package/UI/Components/BulkUpdate/BulkUpdateForm.tsx +10 -1
  127. package/UI/Components/CodeEditor/CodeEditor.tsx +241 -79
  128. package/UI/Components/CodeEditor/YamlEditor.tsx +369 -0
  129. package/UI/Components/Detail/Detail.tsx +10 -0
  130. package/UI/Components/EntityDropdown/EntityDropdown.tsx +33 -0
  131. package/UI/Components/Forms/Fields/FormField.tsx +31 -0
  132. package/UI/Components/Forms/Types/Field.ts +8 -0
  133. package/UI/Components/Forms/Types/FormFieldSchemaType.ts +1 -0
  134. package/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.ts +2 -0
  135. package/UI/Components/Forms/Validation.ts +46 -0
  136. package/UI/Components/Input/Input.tsx +3 -0
  137. package/UI/Components/ModelTable/AttributeColumns.tsx +321 -0
  138. package/UI/Components/ModelTable/BaseModelTable.tsx +263 -14
  139. package/UI/Components/ModelTable/Column.ts +8 -0
  140. package/UI/Components/ModelTable/ColumnCustomizationModal.tsx +310 -0
  141. package/UI/Components/ModelTable/ColumnPreference.ts +13 -1
  142. package/UI/Components/MonitorTemplateVariables/TemplateVariablesModal.tsx +2 -2
  143. package/UI/Components/SideOver/SideOver.tsx +5 -5
  144. package/UI/Components/StatusPage/ResourceGrid.tsx +82 -2
  145. package/UI/Components/StatusPage/ResourceList.tsx +197 -38
  146. package/UI/Components/Toggle/Toggle.tsx +9 -1
  147. package/UI/Components/Types/FieldType.ts +1 -0
  148. package/Utils/NetworkDevice/DeviceReachabilityUtil.ts +73 -1
  149. package/Utils/NetworkDiscovery/ScanNameUtil.ts +181 -0
  150. package/Utils/StatusPage/ResourceExplorer.ts +258 -0
  151. package/Utils/Telemetry/LlmMetricQuery.ts +204 -0
  152. package/build/dist/Models/DatabaseModels/DetectionRule.js +57 -0
  153. package/build/dist/Models/DatabaseModels/DetectionRule.js.map +1 -1
  154. package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js +27 -7
  155. package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js.map +1 -1
  156. package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js +69 -0
  157. package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
  158. package/build/dist/Models/DatabaseModels/Project.js +76 -0
  159. package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
  160. package/build/dist/Models/DatabaseModels/User.js +76 -0
  161. package/build/dist/Models/DatabaseModels/User.js.map +1 -1
  162. package/build/dist/Server/API/TelemetryAPI.js +17 -0
  163. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  164. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789400000000-AddNameToNetworkDeviceDiscoveryScan.js +21 -0
  165. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789400000000-AddNameToNetworkDeviceDiscoveryScan.js.map +1 -0
  166. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789500000000-AddCampaignUtmFields.js +42 -0
  167. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789500000000-AddCampaignUtmFields.js.map +1 -0
  168. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789512000000-AddDetectionRuleDistinctCountColumns.js +22 -0
  169. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789512000000-AddDetectionRuleDistinctCountColumns.js.map +1 -0
  170. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +6 -0
  171. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  172. package/build/dist/Server/Middleware/GzipRequestBody.js +224 -0
  173. package/build/dist/Server/Middleware/GzipRequestBody.js.map +1 -0
  174. package/build/dist/Server/Middleware/MultipartFormData.js +71 -2
  175. package/build/dist/Server/Middleware/MultipartFormData.js.map +1 -1
  176. package/build/dist/Server/Services/DetectionRuleService.js +49 -4
  177. package/build/dist/Server/Services/DetectionRuleService.js.map +1 -1
  178. package/build/dist/Server/Services/Index.js +204 -0
  179. package/build/dist/Server/Services/Index.js.map +1 -1
  180. package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js +50 -0
  181. package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js.map +1 -1
  182. package/build/dist/Server/Services/NetworkDeviceService.js +124 -0
  183. package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
  184. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js +68 -13
  185. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js.map +1 -1
  186. package/build/dist/Server/Services/OnCallDutyPolicyFeedService.js +1 -1
  187. package/build/dist/Server/Services/OnCallDutyPolicyFeedService.js.map +1 -1
  188. package/build/dist/Server/Services/ProjectService.js +25 -45
  189. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  190. package/build/dist/Server/Services/SecurityEventService.js +57 -5
  191. package/build/dist/Server/Services/SecurityEventService.js.map +1 -1
  192. package/build/dist/Server/Services/StatusPageResourceService.js +140 -0
  193. package/build/dist/Server/Services/StatusPageResourceService.js.map +1 -1
  194. package/build/dist/Server/Services/TelemetryAttributeService.js +17 -0
  195. package/build/dist/Server/Services/TelemetryAttributeService.js.map +1 -1
  196. package/build/dist/Server/Services/UserService.js +2 -12
  197. package/build/dist/Server/Services/UserService.js.map +1 -1
  198. package/build/dist/Server/Types/Markdown.js +147 -61
  199. package/build/dist/Server/Types/Markdown.js.map +1 -1
  200. package/build/dist/Server/Utils/AI/Toolbox/OnCallTools.js +12 -4
  201. package/build/dist/Server/Utils/AI/Toolbox/OnCallTools.js.map +1 -1
  202. package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js +12 -1
  203. package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js.map +1 -1
  204. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +246 -9
  205. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
  206. package/build/dist/Server/Utils/Attribution.js.map +1 -1
  207. package/build/dist/Server/Utils/Marketing/MarketingEventUtil.js +27 -7
  208. package/build/dist/Server/Utils/Marketing/MarketingEventUtil.js.map +1 -1
  209. package/build/dist/Server/Utils/SecurityEvent/DetectionRuleEvaluator.js +42 -7
  210. package/build/dist/Server/Utils/SecurityEvent/DetectionRuleEvaluator.js.map +1 -1
  211. package/build/dist/Server/Utils/SecurityEvent/Sigma/SigmaClickhouseCompiler.js +18 -0
  212. package/build/dist/Server/Utils/SecurityEvent/Sigma/SigmaClickhouseCompiler.js.map +1 -1
  213. package/build/dist/Server/Utils/StartServer.js +12 -21
  214. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  215. package/build/dist/Server/Utils/Telemetry/LlmCostBudgetEvaluator.js +76 -5
  216. package/build/dist/Server/Utils/Telemetry/LlmCostBudgetEvaluator.js.map +1 -1
  217. package/build/dist/Server/Utils/Telemetry/LlmMetricSpend.js +102 -0
  218. package/build/dist/Server/Utils/Telemetry/LlmMetricSpend.js.map +1 -0
  219. package/build/dist/Types/Code/YamlSyntax.js +212 -0
  220. package/build/dist/Types/Code/YamlSyntax.js.map +1 -0
  221. package/build/dist/Types/Exception/ExceptionCode.js +1 -0
  222. package/build/dist/Types/Exception/ExceptionCode.js.map +1 -1
  223. package/build/dist/Types/Exception/PayloadTooLargeException.js +8 -0
  224. package/build/dist/Types/Exception/PayloadTooLargeException.js.map +1 -0
  225. package/build/dist/Types/Marketing/Attribution.js +10 -0
  226. package/build/dist/Types/Marketing/Attribution.js.map +1 -1
  227. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +112 -51
  228. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
  229. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js +2 -1
  230. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js.map +1 -1
  231. package/build/dist/Types/SecurityEvent/DetectionFindingConstants.js +9 -0
  232. package/build/dist/Types/SecurityEvent/DetectionFindingConstants.js.map +1 -1
  233. package/build/dist/Types/Telemetry/LlmMetricConventions.js +98 -0
  234. package/build/dist/Types/Telemetry/LlmMetricConventions.js.map +1 -0
  235. package/build/dist/UI/Components/AutocompleteTextInput/AutocompleteTextInput.js +1 -1
  236. package/build/dist/UI/Components/AutocompleteTextInput/AutocompleteTextInput.js.map +1 -1
  237. package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js +5 -2
  238. package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js.map +1 -1
  239. package/build/dist/UI/Components/CodeEditor/CodeEditor.js +206 -76
  240. package/build/dist/UI/Components/CodeEditor/CodeEditor.js.map +1 -1
  241. package/build/dist/UI/Components/CodeEditor/YamlEditor.js +201 -0
  242. package/build/dist/UI/Components/CodeEditor/YamlEditor.js.map +1 -0
  243. package/build/dist/UI/Components/Detail/Detail.js +9 -0
  244. package/build/dist/UI/Components/Detail/Detail.js.map +1 -1
  245. package/build/dist/UI/Components/EntityDropdown/EntityDropdown.js +16 -1
  246. package/build/dist/UI/Components/EntityDropdown/EntityDropdown.js.map +1 -1
  247. package/build/dist/UI/Components/Forms/Fields/FormField.js +14 -1
  248. package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
  249. package/build/dist/UI/Components/Forms/Types/Field.js.map +1 -1
  250. package/build/dist/UI/Components/Forms/Types/FormFieldSchemaType.js +1 -0
  251. package/build/dist/UI/Components/Forms/Types/FormFieldSchemaType.js.map +1 -1
  252. package/build/dist/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.js +2 -0
  253. package/build/dist/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.js.map +1 -1
  254. package/build/dist/UI/Components/Forms/Validation.js +27 -0
  255. package/build/dist/UI/Components/Forms/Validation.js.map +1 -1
  256. package/build/dist/UI/Components/Input/Input.js +1 -1
  257. package/build/dist/UI/Components/Input/Input.js.map +1 -1
  258. package/build/dist/UI/Components/ModelTable/AttributeColumns.js +159 -0
  259. package/build/dist/UI/Components/ModelTable/AttributeColumns.js.map +1 -0
  260. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +179 -17
  261. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  262. package/build/dist/UI/Components/ModelTable/ColumnCustomizationModal.js +133 -2
  263. package/build/dist/UI/Components/ModelTable/ColumnCustomizationModal.js.map +1 -1
  264. package/build/dist/UI/Components/ModelTable/ColumnPreference.js +7 -1
  265. package/build/dist/UI/Components/ModelTable/ColumnPreference.js.map +1 -1
  266. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesModal.js +2 -2
  267. package/build/dist/UI/Components/SideOver/SideOver.js +5 -5
  268. package/build/dist/UI/Components/StatusPage/ResourceGrid.js +28 -2
  269. package/build/dist/UI/Components/StatusPage/ResourceGrid.js.map +1 -1
  270. package/build/dist/UI/Components/StatusPage/ResourceList.js +87 -20
  271. package/build/dist/UI/Components/StatusPage/ResourceList.js.map +1 -1
  272. package/build/dist/UI/Components/Toggle/Toggle.js +9 -1
  273. package/build/dist/UI/Components/Toggle/Toggle.js.map +1 -1
  274. package/build/dist/UI/Components/Types/FieldType.js +1 -0
  275. package/build/dist/UI/Components/Types/FieldType.js.map +1 -1
  276. package/build/dist/Utils/NetworkDevice/DeviceReachabilityUtil.js +37 -1
  277. package/build/dist/Utils/NetworkDevice/DeviceReachabilityUtil.js.map +1 -1
  278. package/build/dist/Utils/NetworkDiscovery/ScanNameUtil.js +120 -0
  279. package/build/dist/Utils/NetworkDiscovery/ScanNameUtil.js.map +1 -0
  280. package/build/dist/Utils/StatusPage/ResourceExplorer.js +171 -0
  281. package/build/dist/Utils/StatusPage/ResourceExplorer.js.map +1 -1
  282. package/build/dist/Utils/Telemetry/LlmMetricQuery.js +119 -0
  283. package/build/dist/Utils/Telemetry/LlmMetricQuery.js.map +1 -0
  284. package/jest.config.json +2 -0
  285. package/package.json +1 -1
  286. package/tsconfig.json +2 -1
  287. package/Tests/UI/Components/Toast.test.tsx +0 -197
  288. package/Tests/UI/Components/ToastStacking.test.tsx +0 -198
  289. package/UI/Components/Toast/Toast.tsx +0 -189
  290. package/UI/Components/Toast/ToastInit.tsx +0 -110
  291. package/build/dist/UI/Components/Toast/Toast.js +0 -123
  292. package/build/dist/UI/Components/Toast/Toast.js.map +0 -1
  293. package/build/dist/UI/Components/Toast/ToastInit.js +0 -53
  294. package/build/dist/UI/Components/Toast/ToastInit.js.map +0 -1
@@ -253,6 +253,61 @@ export default class DetectionRule extends BaseModel {
253
253
  })
254
254
  public groupByField?: string = undefined;
255
255
 
256
+ /*
257
+ * The correlation pair: distinctCountField switches what the threshold
258
+ * counts (unique field values instead of raw events — the difference
259
+ * between brute-force and one user retyping a password), and
260
+ * matchCountThreshold holds the rule back until a group reaches N in
261
+ * one evaluation window. Threshold 1 preserves fire-on-any-match, so
262
+ * every rule saved before these columns existed behaves unchanged.
263
+ */
264
+ @ColumnAccessControl({
265
+ create: createPermissions,
266
+ read: readPermissions,
267
+ update: updatePermissions,
268
+ })
269
+ @TableColumn({
270
+ title: "Distinct Count Field",
271
+ required: false,
272
+ type: TableColumnType.ShortText,
273
+ canReadOnRelationQuery: true,
274
+ description:
275
+ "Optional security-event field (e.g. principalUser, principalIp) whose distinct values are counted instead of raw matching events. The match count threshold then applies to that distinct count. Empty values are not counted. Names that are not typed event columns are looked up in the event's attributes map.",
276
+ })
277
+ @Column({
278
+ nullable: true,
279
+ type: ColumnType.ShortText,
280
+ length: ColumnLength.ShortText,
281
+ })
282
+ public distinctCountField?: string = undefined;
283
+
284
+ @ColumnAccessControl({
285
+ create: createPermissions,
286
+ read: readPermissions,
287
+ update: updatePermissions,
288
+ })
289
+ @TableColumn({
290
+ title: "Match Count Threshold",
291
+ required: true,
292
+ type: TableColumnType.Number,
293
+ canReadOnRelationQuery: true,
294
+ description:
295
+ "Fire only when a group's count — distinct values when a distinct count field is set, matching events otherwise — reaches this number within one evaluation window. 1 fires on any match.",
296
+ defaultValue: 1,
297
+ /*
298
+ * Same reason as shouldCreateIncident: without this,
299
+ * checkRequiredFields 400s every create payload written before the
300
+ * column existed, and the DB DEFAULT 1 can never apply.
301
+ */
302
+ isDefaultValueColumn: true,
303
+ })
304
+ @Column({
305
+ type: ColumnType.Number,
306
+ nullable: false,
307
+ default: 1,
308
+ })
309
+ public matchCountThreshold?: number = undefined;
310
+
256
311
  @ColumnAccessControl({
257
312
  create: createPermissions,
258
313
  read: readPermissions,
@@ -78,6 +78,17 @@ import { Column, Entity, Index, JoinColumn, ManyToOne } from "typeorm";
78
78
  tableDescription:
79
79
  "Automatically import matching hosts from network device discovery scan results as Network Devices, with no manual review step",
80
80
  })
81
+ /*
82
+ * The index and foreign-key names below are written out rather than left to
83
+ * TypeORM's generated hashes, because this table's migration
84
+ * (1789100000000-AddNetworkDeviceAutoImportRule) was hand-written and created
85
+ * them with readable names. TypeORM compares constraint NAMES when it diffs a
86
+ * database against these entities, so an entity that does not spell them out
87
+ * reports the whole table as schema drift on every run of the Postgres Schema
88
+ * Drift check — which is what it did until these were added. Naming them here
89
+ * keeps the readable names and costs no migration; the alternative was an
90
+ * ALTER that renamed seven objects on every installation to hashes.
91
+ */
81
92
  export default class NetworkDeviceAutoImportRule extends BaseModel {
82
93
  @ColumnAccessControl({
83
94
  create: [
@@ -112,7 +123,10 @@ export default class NetworkDeviceAutoImportRule extends BaseModel {
112
123
  orphanedRowAction: "nullify",
113
124
  },
114
125
  )
115
- @JoinColumn({ name: "projectId" })
126
+ @JoinColumn({
127
+ name: "projectId",
128
+ foreignKeyConstraintName: "FK_nd_auto_import_rule_projectId",
129
+ })
116
130
  public project?: Project = undefined;
117
131
 
118
132
  @ColumnAccessControl({
@@ -130,7 +144,7 @@ export default class NetworkDeviceAutoImportRule extends BaseModel {
130
144
  ],
131
145
  update: [],
132
146
  })
133
- @Index()
147
+ @Index("IDX_network_device_auto_import_rule_projectId")
134
148
  @TableColumn({
135
149
  type: TableColumnType.ObjectID,
136
150
  required: true,
@@ -164,7 +178,7 @@ export default class NetworkDeviceAutoImportRule extends BaseModel {
164
178
  Permission.EditNetworkDeviceAutoImportRule,
165
179
  ],
166
180
  })
167
- @Index()
181
+ @Index("IDX_network_device_auto_import_rule_name")
168
182
  @TableColumn({
169
183
  required: true,
170
184
  type: TableColumnType.ShortText,
@@ -230,7 +244,7 @@ export default class NetworkDeviceAutoImportRule extends BaseModel {
230
244
  Permission.EditNetworkDeviceAutoImportRule,
231
245
  ],
232
246
  })
233
- @Index()
247
+ @Index("IDX_network_device_auto_import_rule_isEnabled")
234
248
  @TableColumn({
235
249
  required: true,
236
250
  type: TableColumnType.Boolean,
@@ -434,7 +448,7 @@ export default class NetworkDeviceAutoImportRule extends BaseModel {
434
448
  Permission.EditNetworkDeviceAutoImportRule,
435
449
  ],
436
450
  })
437
- @Index()
451
+ @Index("IDX_network_device_auto_import_rule_isExclusion")
438
452
  @TableColumn({
439
453
  required: true,
440
454
  type: TableColumnType.Boolean,
@@ -485,7 +499,10 @@ export default class NetworkDeviceAutoImportRule extends BaseModel {
485
499
  orphanedRowAction: "nullify",
486
500
  },
487
501
  )
488
- @JoinColumn({ name: "createdByUserId" })
502
+ @JoinColumn({
503
+ name: "createdByUserId",
504
+ foreignKeyConstraintName: "FK_nd_auto_import_rule_createdByUserId",
505
+ })
489
506
  public createdByUser?: User = undefined;
490
507
 
491
508
  @ColumnAccessControl({
@@ -541,7 +558,10 @@ export default class NetworkDeviceAutoImportRule extends BaseModel {
541
558
  orphanedRowAction: "nullify",
542
559
  },
543
560
  )
544
- @JoinColumn({ name: "deletedByUserId" })
561
+ @JoinColumn({
562
+ name: "deletedByUserId",
563
+ foreignKeyConstraintName: "FK_nd_auto_import_rule_deletedByUserId",
564
+ })
545
565
  public deletedByUser?: User = undefined;
546
566
 
547
567
  @ColumnAccessControl({
@@ -250,6 +250,73 @@ export default class NetworkDeviceDiscoveryScan extends BaseModel {
250
250
  })
251
251
  public probeId?: ObjectID = undefined;
252
252
 
253
+ @ColumnAccessControl({
254
+ create: [
255
+ Permission.ProjectOwner,
256
+ Permission.ProjectAdmin,
257
+ Permission.ProjectMember,
258
+ Permission.SettingsAdmin,
259
+ Permission.SettingsMember,
260
+ Permission.CreateNetworkDeviceDiscoveryScan,
261
+ ],
262
+ read: [
263
+ Permission.ProjectOwner,
264
+ Permission.ProjectAdmin,
265
+ Permission.ProjectMember,
266
+ Permission.Viewer,
267
+ Permission.SettingsAdmin,
268
+ Permission.SettingsMember,
269
+ Permission.SettingsViewer,
270
+ Permission.ReadNetworkDeviceDiscoveryScan,
271
+ ],
272
+ /*
273
+ * Updatable, unlike everything that describes the sweep itself: changing
274
+ * the target or the credentials of a scan mid-flight would mean the stored
275
+ * row no longer described the sweep that ran, so those grant no update at
276
+ * all. (The recurrence pair is updatable too — it describes the NEXT run
277
+ * rather than the one that happened.)
278
+ *
279
+ * A name describes nothing but itself, and the whole point of it is to be
280
+ * fixable after the fact: a scan mislabelled "Region 1100" is worse than
281
+ * an unnamed one, and deleting a scan to rename it would throw away its
282
+ * results.
283
+ */
284
+ update: [
285
+ Permission.ProjectOwner,
286
+ Permission.ProjectAdmin,
287
+ Permission.ProjectMember,
288
+ Permission.SettingsAdmin,
289
+ Permission.SettingsMember,
290
+ Permission.EditNetworkDeviceDiscoveryScan,
291
+ ],
292
+ })
293
+ /*
294
+ * What this scan is FOR, in the operator's own words — "Router Discovery —
295
+ * Region 1100", "Switch Discovery — WB Units". Optional, not unique, and
296
+ * never used to look a scan up: it exists so the Discovery Scans list can be
297
+ * read at a glance instead of by matching octet ranges against a subnet plan
298
+ * kept somewhere else (OneUptime issue #3391).
299
+ *
300
+ * Nullable, and every scan created before this column existed is null — so
301
+ * every surface that renders it falls back to the scan target. See
302
+ * Common/Utils/NetworkDiscovery/ScanNameUtil.
303
+ */
304
+ @TableColumn({
305
+ required: false,
306
+ type: TableColumnType.ShortText,
307
+ canReadOnRelationQuery: true,
308
+ title: "Name",
309
+ description:
310
+ "Optional name for this scan, so it can be told apart from other scans at a glance. Falls back to the scan target when empty.",
311
+ example: "Router Discovery - Region 1100",
312
+ })
313
+ @Column({
314
+ nullable: true,
315
+ type: ColumnType.ShortText,
316
+ length: ColumnLength.ShortText,
317
+ })
318
+ public name?: string = undefined;
319
+
253
320
  @ColumnAccessControl({
254
321
  create: [
255
322
  Permission.ProjectOwner,
@@ -2576,6 +2576,74 @@ export default class Project extends TenantModel {
2576
2576
  })
2577
2577
  public utmContent?: string = undefined;
2578
2578
 
2579
+ @ColumnAccessControl({
2580
+ create: [Permission.User],
2581
+ read: [],
2582
+ update: [],
2583
+ })
2584
+ @TableColumn({
2585
+ type: TableColumnType.LongText,
2586
+ hideColumnInDocumentation: true,
2587
+ })
2588
+ @Column({
2589
+ type: ColumnType.LongText,
2590
+ length: ColumnLength.LongText,
2591
+ nullable: true,
2592
+ unique: false,
2593
+ })
2594
+ public utmId?: string = undefined;
2595
+
2596
+ @ColumnAccessControl({
2597
+ create: [Permission.User],
2598
+ read: [],
2599
+ update: [],
2600
+ })
2601
+ @TableColumn({
2602
+ type: TableColumnType.LongText,
2603
+ hideColumnInDocumentation: true,
2604
+ })
2605
+ @Column({
2606
+ type: ColumnType.LongText,
2607
+ length: ColumnLength.LongText,
2608
+ nullable: true,
2609
+ unique: false,
2610
+ })
2611
+ public utmSourcePlatform?: string = undefined;
2612
+
2613
+ @ColumnAccessControl({
2614
+ create: [Permission.User],
2615
+ read: [],
2616
+ update: [],
2617
+ })
2618
+ @TableColumn({
2619
+ type: TableColumnType.LongText,
2620
+ hideColumnInDocumentation: true,
2621
+ })
2622
+ @Column({
2623
+ type: ColumnType.LongText,
2624
+ length: ColumnLength.LongText,
2625
+ nullable: true,
2626
+ unique: false,
2627
+ })
2628
+ public utmCreativeFormat?: string = undefined;
2629
+
2630
+ @ColumnAccessControl({
2631
+ create: [Permission.User],
2632
+ read: [],
2633
+ update: [],
2634
+ })
2635
+ @TableColumn({
2636
+ type: TableColumnType.LongText,
2637
+ hideColumnInDocumentation: true,
2638
+ })
2639
+ @Column({
2640
+ type: ColumnType.LongText,
2641
+ length: ColumnLength.LongText,
2642
+ nullable: true,
2643
+ unique: false,
2644
+ })
2645
+ public utmMarketingTactic?: string = undefined;
2646
+
2579
2647
  @ColumnAccessControl({
2580
2648
  create: [Permission.User],
2581
2649
  read: [],
@@ -634,6 +634,74 @@ class User extends UserModel {
634
634
  })
635
635
  public utmContent?: string = undefined;
636
636
 
637
+ @ColumnAccessControl({
638
+ create: [Permission.Public],
639
+ read: [],
640
+ update: [],
641
+ })
642
+ @TableColumn({
643
+ type: TableColumnType.LongText,
644
+ hideColumnInDocumentation: true,
645
+ })
646
+ @Column({
647
+ type: ColumnType.LongText,
648
+ length: ColumnLength.LongText,
649
+ nullable: true,
650
+ unique: false,
651
+ })
652
+ public utmId?: string = undefined;
653
+
654
+ @ColumnAccessControl({
655
+ create: [Permission.Public],
656
+ read: [],
657
+ update: [],
658
+ })
659
+ @TableColumn({
660
+ type: TableColumnType.LongText,
661
+ hideColumnInDocumentation: true,
662
+ })
663
+ @Column({
664
+ type: ColumnType.LongText,
665
+ length: ColumnLength.LongText,
666
+ nullable: true,
667
+ unique: false,
668
+ })
669
+ public utmSourcePlatform?: string = undefined;
670
+
671
+ @ColumnAccessControl({
672
+ create: [Permission.Public],
673
+ read: [],
674
+ update: [],
675
+ })
676
+ @TableColumn({
677
+ type: TableColumnType.LongText,
678
+ hideColumnInDocumentation: true,
679
+ })
680
+ @Column({
681
+ type: ColumnType.LongText,
682
+ length: ColumnLength.LongText,
683
+ nullable: true,
684
+ unique: false,
685
+ })
686
+ public utmCreativeFormat?: string = undefined;
687
+
688
+ @ColumnAccessControl({
689
+ create: [Permission.Public],
690
+ read: [],
691
+ update: [],
692
+ })
693
+ @TableColumn({
694
+ type: TableColumnType.LongText,
695
+ hideColumnInDocumentation: true,
696
+ })
697
+ @Column({
698
+ type: ColumnType.LongText,
699
+ length: ColumnLength.LongText,
700
+ nullable: true,
701
+ unique: false,
702
+ })
703
+ public utmMarketingTactic?: string = undefined;
704
+
637
705
  @ColumnAccessControl({
638
706
  create: [Permission.Public],
639
707
  read: [],
@@ -204,6 +204,13 @@ const requireExceptionReadAccess: Array<RequestHandler> =
204
204
  const requireProfileReadAccess: Array<RequestHandler> =
205
205
  createTelemetryReadAccessGuard(Permission.ReadTelemetryServiceProfiles);
206
206
 
207
+ /*
208
+ * Mirrors the read access control declared on the SecurityEvent analytics
209
+ * model.
210
+ */
211
+ const requireSecurityEventReadAccess: Array<RequestHandler> =
212
+ createTelemetryReadAccessGuard(Permission.ReadSecurityEvent);
213
+
207
214
  router.post(
208
215
  "/telemetry/metrics/get-attributes",
209
216
  ...requireMetricReadAccess,
@@ -268,6 +275,28 @@ router.post(
268
275
  },
269
276
  );
270
277
 
278
+ /*
279
+ * Security events flatten their whole source payload into `attributes`, so
280
+ * these are what backs the "add an attribute column" picker on the security
281
+ * events table — the keys differ per event class and per source, so there is
282
+ * no fixed list the UI could ship.
283
+ */
284
+ router.post(
285
+ "/telemetry/security-events/get-attributes",
286
+ ...requireSecurityEventReadAccess,
287
+ async (req: ExpressRequest, res: ExpressResponse, next: NextFunction) => {
288
+ return getAttributes(req, res, next, TelemetryType.SecurityEvent);
289
+ },
290
+ );
291
+
292
+ router.post(
293
+ "/telemetry/security-events/get-attribute-values",
294
+ ...requireSecurityEventReadAccess,
295
+ async (req: ExpressRequest, res: ExpressResponse, next: NextFunction) => {
296
+ return getAttributeValues(req, res, next, TelemetryType.SecurityEvent);
297
+ },
298
+ );
299
+
271
300
  type GetAttributesFunction = (
272
301
  req: ExpressRequest,
273
302
  res: ExpressResponse,
@@ -0,0 +1,28 @@
1
+ import { MigrationInterface, QueryRunner } from "typeorm";
2
+
3
+ /*
4
+ * An optional operator-supplied name on a discovery scan (issue #3391), so the
5
+ * Discovery Scans list can be read by purpose — "Router Discovery — Region
6
+ * 1100" — instead of only by the raw address range it sweeps.
7
+ *
8
+ * Nullable with no default and no backfill: every scan that already exists
9
+ * stays unnamed, and every surface that renders the name falls back to the
10
+ * scan target exactly as it did before this column existed.
11
+ */
12
+ export class AddNameToNetworkDeviceDiscoveryScan1789400000000
13
+ implements MigrationInterface
14
+ {
15
+ public name: string = "AddNameToNetworkDeviceDiscoveryScan1789400000000";
16
+
17
+ public async up(queryRunner: QueryRunner): Promise<void> {
18
+ await queryRunner.query(
19
+ `ALTER TABLE "NetworkDeviceDiscoveryScan" ADD "name" character varying(100)`,
20
+ );
21
+ }
22
+
23
+ public async down(queryRunner: QueryRunner): Promise<void> {
24
+ await queryRunner.query(
25
+ `ALTER TABLE "NetworkDeviceDiscoveryScan" DROP COLUMN "name"`,
26
+ );
27
+ }
28
+ }
@@ -0,0 +1,49 @@
1
+ import { MigrationInterface, QueryRunner } from "typeorm";
2
+
3
+ /*
4
+ * GA4's second tier of campaign parameters, on the two tables that already
5
+ * carry the first five.
6
+ *
7
+ * `utm_id`, `utm_source_platform`, `utm_creative_format` and
8
+ * `utm_marketing_tactic` arrive on the landing URL from Google Ads auto-tagging
9
+ * and the GA4 URL builder. Until now the browser captured them nowhere and the
10
+ * signup door dropped them, so a campaign that distinguished its creatives
11
+ * only by `utm_creative_format` was reportable as one undifferentiated
12
+ * campaign.
13
+ *
14
+ * Nullable with no default, matching utmSource..utmContent beside them: an
15
+ * existing row has no campaign to backfill, and NULL says "not known" rather
16
+ * than claiming an empty campaign.
17
+ */
18
+ export class AddCampaignUtmFields1789500000000 implements MigrationInterface {
19
+ public name: string = "AddCampaignUtmFields1789500000000";
20
+
21
+ private static readonly columns: Array<string> = [
22
+ "utmId",
23
+ "utmSourcePlatform",
24
+ "utmCreativeFormat",
25
+ "utmMarketingTactic",
26
+ ];
27
+
28
+ private static readonly tables: Array<string> = ["User", "Project"];
29
+
30
+ public async up(queryRunner: QueryRunner): Promise<void> {
31
+ for (const table of AddCampaignUtmFields1789500000000.tables) {
32
+ for (const column of AddCampaignUtmFields1789500000000.columns) {
33
+ await queryRunner.query(
34
+ `ALTER TABLE "${table}" ADD "${column}" character varying(500)`,
35
+ );
36
+ }
37
+ }
38
+ }
39
+
40
+ public async down(queryRunner: QueryRunner): Promise<void> {
41
+ for (const table of AddCampaignUtmFields1789500000000.tables) {
42
+ for (const column of AddCampaignUtmFields1789500000000.columns) {
43
+ await queryRunner.query(
44
+ `ALTER TABLE "${table}" DROP COLUMN "${column}"`,
45
+ );
46
+ }
47
+ }
48
+ }
49
+ }
@@ -0,0 +1,33 @@
1
+ import { MigrationInterface, QueryRunner } from "typeorm";
2
+
3
+ /*
4
+ * Detection rules gain correlation semantics (issue #3398):
5
+ * distinctCountField switches what a rule counts — unique values of a
6
+ * field (distinct usernames, distinct source IPs) instead of raw matching
7
+ * events — and matchCountThreshold holds a rule back until a group
8
+ * reaches N in one evaluation window. Threshold defaults to 1 so every
9
+ * existing rule keeps its fire-on-any-match behavior.
10
+ */
11
+ export class AddDetectionRuleDistinctCountColumns1789512000000
12
+ implements MigrationInterface
13
+ {
14
+ public name: string = "AddDetectionRuleDistinctCountColumns1789512000000";
15
+
16
+ public async up(queryRunner: QueryRunner): Promise<void> {
17
+ await queryRunner.query(
18
+ `ALTER TABLE "DetectionRule" ADD "distinctCountField" character varying(100)`,
19
+ );
20
+ await queryRunner.query(
21
+ `ALTER TABLE "DetectionRule" ADD "matchCountThreshold" integer NOT NULL DEFAULT '1'`,
22
+ );
23
+ }
24
+
25
+ public async down(queryRunner: QueryRunner): Promise<void> {
26
+ await queryRunner.query(
27
+ `ALTER TABLE "DetectionRule" DROP COLUMN "matchCountThreshold"`,
28
+ );
29
+ await queryRunner.query(
30
+ `ALTER TABLE "DetectionRule" DROP COLUMN "distinctCountField"`,
31
+ );
32
+ }
33
+ }
@@ -546,7 +546,10 @@ import { AddUserSlackAndMicrosoftTeams1789000000000 } from "./1789000000000-AddU
546
546
  import { AddNetworkDeviceAutoImportRule1789100000000 } from "./1789100000000-AddNetworkDeviceAutoImportRule";
547
547
  import { AddSysObjectIdPatternToAutoImportRule1789200000000 } from "./1789200000000-AddSysObjectIdPatternToAutoImportRule";
548
548
  import { AddAutoApplyVendorHealthTemplate1789300000000 } from "./1789300000000-AddAutoApplyVendorHealthTemplate";
549
+ import { AddCampaignUtmFields1789500000000 } from "./1789500000000-AddCampaignUtmFields";
549
550
  import { AddUserTwoFactorBackupCode1789100000000 } from "./1789100000000-AddUserTwoFactorBackupCode";
551
+ import { AddNameToNetworkDeviceDiscoveryScan1789400000000 } from "./1789400000000-AddNameToNetworkDeviceDiscoveryScan";
552
+ import { AddDetectionRuleDistinctCountColumns1789512000000 } from "./1789512000000-AddDetectionRuleDistinctCountColumns";
550
553
  import { MigrationName1787142779538 } from "./1787142779538-MigrationName";
551
554
  import { MigrationName1787156982416 } from "./1787156982416-MigrationName";
552
555
 
@@ -1102,4 +1105,7 @@ export default [
1102
1105
  AddSysObjectIdPatternToAutoImportRule1789200000000,
1103
1106
  AddAutoApplyVendorHealthTemplate1789300000000,
1104
1107
  AddUserTwoFactorBackupCode1789100000000,
1108
+ AddNameToNetworkDeviceDiscoveryScan1789400000000,
1109
+ AddCampaignUtmFields1789500000000,
1110
+ AddDetectionRuleDistinctCountColumns1789512000000,
1105
1111
  ];