@oneuptime/common 12.0.22 → 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 (345) hide show
  1. package/Models/DatabaseModels/DetectionRule.ts +55 -0
  2. package/Models/DatabaseModels/Index.ts +2 -0
  3. package/Models/DatabaseModels/NetworkDevice.ts +44 -0
  4. package/Models/DatabaseModels/NetworkDeviceAutoImportRule.ts +584 -0
  5. package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +105 -0
  6. package/Models/DatabaseModels/Project.ts +68 -0
  7. package/Models/DatabaseModels/User.ts +68 -0
  8. package/Server/API/TelemetryAPI.ts +29 -0
  9. package/Server/Infrastructure/Postgres/SchemaMigrations/1789100000000-AddNetworkDeviceAutoImportRule.ts +60 -0
  10. package/Server/Infrastructure/Postgres/SchemaMigrations/1789200000000-AddSysObjectIdPatternToAutoImportRule.ts +26 -0
  11. package/Server/Infrastructure/Postgres/SchemaMigrations/1789300000000-AddAutoApplyVendorHealthTemplate.ts +26 -0
  12. package/Server/Infrastructure/Postgres/SchemaMigrations/1789400000000-AddNameToNetworkDeviceDiscoveryScan.ts +28 -0
  13. package/Server/Infrastructure/Postgres/SchemaMigrations/1789500000000-AddCampaignUtmFields.ts +49 -0
  14. package/Server/Infrastructure/Postgres/SchemaMigrations/1789512000000-AddDetectionRuleDistinctCountColumns.ts +33 -0
  15. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +12 -0
  16. package/Server/Middleware/GzipRequestBody.ts +311 -0
  17. package/Server/Middleware/MultipartFormData.ts +87 -3
  18. package/Server/Services/DetectionRuleService.ts +73 -6
  19. package/Server/Services/Index.ts +207 -0
  20. package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +917 -0
  21. package/Server/Services/NetworkDeviceAutoImportRuleService.ts +181 -0
  22. package/Server/Services/NetworkDeviceDiscoveryScanService.ts +59 -0
  23. package/Server/Services/NetworkDeviceService.ts +148 -0
  24. package/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.ts +65 -0
  25. package/Server/Services/OnCallDutyPolicyFeedService.ts +1 -1
  26. package/Server/Services/ProjectService.ts +29 -19
  27. package/Server/Services/SecurityEventService.ts +90 -13
  28. package/Server/Services/StatusPageResourceService.ts +223 -0
  29. package/Server/Services/TelemetryAttributeService.ts +17 -0
  30. package/Server/Services/UserService.ts +4 -6
  31. package/Server/Types/Markdown.ts +161 -67
  32. package/Server/Utils/AI/Toolbox/OnCallTools.ts +12 -4
  33. package/Server/Utils/AnalyticsDatabase/Statement.ts +13 -1
  34. package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +297 -6
  35. package/Server/Utils/Attribution.ts +4 -0
  36. package/Server/Utils/Marketing/MarketingEventUtil.ts +45 -7
  37. package/Server/Utils/Monitor/NetworkInventoryUtil.ts +39 -1
  38. package/Server/Utils/SecurityEvent/DetectionRuleEvaluator.ts +55 -3
  39. package/Server/Utils/SecurityEvent/Sigma/SigmaClickhouseCompiler.ts +21 -0
  40. package/Server/Utils/StartServer.ts +12 -32
  41. package/Server/Utils/Telemetry/LlmCostBudgetEvaluator.ts +101 -4
  42. package/Server/Utils/Telemetry/LlmMetricSpend.ts +130 -0
  43. package/Server/Views/Partials/AnalyticsConsent.ejs +159 -102
  44. package/Server/Views/Partials/Head.ejs +2 -1
  45. package/Tests/App/Dashboard/AdminUserNotificationMethodsPage.test.tsx +776 -38
  46. package/Tests/App/Dashboard/CorrelateFilterBuilder.test.tsx +359 -0
  47. package/Tests/App/Dashboard/CorrelateGraph.test.tsx +865 -0
  48. package/Tests/App/Dashboard/CorrelationGraph.test.ts +346 -0
  49. package/Tests/App/Dashboard/CriteriaFilterConditionDropdown.test.tsx +256 -0
  50. package/Tests/App/Dashboard/CriteriaFilterDefaults.test.ts +738 -0
  51. package/Tests/App/Dashboard/CriteriaFilterMonitorTypeChange.test.ts +1122 -0
  52. package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +283 -0
  53. package/Tests/App/Dashboard/ExternalStatusPageCriteriaFilter.test.ts +407 -0
  54. package/Tests/App/Dashboard/MetricSeriesInvestigateMenu.test.tsx +5 -14
  55. package/Tests/App/Dashboard/MonitorCriteriaActionToggles.test.tsx +426 -0
  56. package/Tests/App/Dashboard/MonitorStepsCriteriaAlignmentWiring.test.tsx +352 -0
  57. package/Tests/App/Dashboard/OnCallLayerCardOverrides.test.tsx +278 -0
  58. package/Tests/App/Dashboard/OnCallLayerShiftPreviewOverrides.test.ts +237 -0
  59. package/Tests/App/Dashboard/OnCallReadinessSurfaces.test.tsx +2 -2
  60. package/Tests/App/Dashboard/OnCallSchedulePreviewOverrides.test.tsx +460 -0
  61. package/Tests/App/Dashboard/SecurityEventAttributeUtil.test.ts +171 -0
  62. package/Tests/App/Dashboard/SecurityEventCorrelation.test.ts +857 -0
  63. package/Tests/App/Dashboard/SecurityEventDetailObservables.test.tsx +194 -0
  64. package/Tests/App/Dashboard/SecurityEventsDetectionRulesPage.test.tsx +124 -0
  65. package/Tests/App/Dashboard/SecurityEventsMonitorStepForm.test.tsx +79 -19
  66. package/Tests/App/Dashboard/SecurityEventsTableColumns.test.tsx +382 -0
  67. package/Tests/App/StatusPage/BulkAddStatusPageMonitors.test.ts +216 -0
  68. package/Tests/App/StatusPage/BulkAddStatusPageMonitorsModal.test.tsx +590 -11
  69. package/Tests/App/StatusPage/StatusPageResourceExplorer.test.tsx +757 -0
  70. package/Tests/Models/DiscoveryScanNameColumn.test.ts +293 -0
  71. package/Tests/Server/API/SecurityEventAttributesAPI.test.ts +564 -0
  72. package/Tests/Server/Infrastructure/Postgres/SchemaMigrationsOrdering.test.ts +120 -4
  73. package/Tests/Server/Middleware/GzipRequestBody.test.ts +725 -0
  74. package/Tests/Server/Middleware/MultipartFormData.test.ts +298 -0
  75. package/Tests/Server/Services/AddDetectionRuleDistinctCountColumnsMigration.test.ts +311 -0
  76. package/Tests/Server/Services/AutoImportScanCredentialSelect.test.ts +205 -0
  77. package/Tests/Server/Services/DetectionRuleService.test.ts +134 -2
  78. package/Tests/Server/Services/DiscoveryScanClaimHookFreeSafety.test.ts +7 -1
  79. package/Tests/Server/Services/FeedRetentionConsistency.test.ts +131 -0
  80. package/Tests/Server/Services/NetworkDeviceAutoImportRuleEngineService.test.ts +933 -0
  81. package/Tests/Server/Services/NetworkDeviceDiscoveryScanService.test.ts +194 -0
  82. package/Tests/Server/Services/NetworkDeviceMonitorStatusStamp.test.ts +800 -0
  83. package/Tests/Server/Services/OnCallScheduleAttachRosterRefresh.test.ts +244 -0
  84. package/Tests/Server/Services/SecurityEventService.test.ts +376 -0
  85. package/Tests/Server/Services/StatusPageResourceDuplicates.test.ts +703 -0
  86. package/Tests/Server/Services/TelemetryAttributeServiceSecurityEvent.test.ts +256 -0
  87. package/Tests/Server/Types/Workflow/Components/ComponentRegistryParity.test.ts +417 -0
  88. package/Tests/Server/Utils/AnalyticsDatabase/StatementGeneratorWhereOperators.test.ts +677 -0
  89. package/Tests/Server/Utils/Marketing/MarketingEventUtil.test.ts +43 -0
  90. package/Tests/Server/Utils/Monitor/Criteria/ProfileMonitorCriteria.test.ts +15 -11
  91. package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +97 -1
  92. package/Tests/Server/Utils/SecurityEvent/DetectionRuleEvaluator.test.ts +369 -8
  93. package/Tests/Server/Utils/SecurityEvent/SigmaClickhouseCompiler.test.ts +35 -0
  94. package/Tests/Server/Utils/Telemetry/LlmCostBudgetEvaluator.test.ts +368 -4
  95. package/Tests/Server/Utils/Telemetry/LlmMetricSpend.test.ts +245 -0
  96. package/Tests/Server/Views/AnalyticsConsentPartial.test.ts +48 -5
  97. package/Tests/Types/Code/YamlSyntax.test.ts +396 -0
  98. package/Tests/Types/Monitor/MetricAndProfileDefaultCriteria.test.ts +957 -0
  99. package/Tests/Types/Monitor/MonitorCriteriaActionValidation.test.ts +598 -0
  100. package/Tests/Types/Monitor/MonitorCriteriaInstance.test.ts +49 -0
  101. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationNotificationMode.test.ts +6 -6
  102. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.test.ts +4 -4
  103. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationUtil.test.ts +4 -3
  104. package/Tests/Types/Telemetry/LlmMetricConventions.test.ts +193 -0
  105. package/Tests/UI/Components/AiInvestigationSettingsCard.test.tsx +0 -12
  106. package/Tests/UI/Components/CardModelDetailEdit.test.tsx +1 -17
  107. package/Tests/UI/Components/CodeEditor.test.tsx +474 -10
  108. package/Tests/UI/Components/Detail/YamlField.test.tsx +105 -0
  109. package/Tests/UI/Components/EntityDropdownLabelsBulkAdd.test.tsx +319 -0
  110. package/Tests/UI/Components/Forms/FormFieldYaml.test.tsx +231 -0
  111. package/Tests/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.test.ts +1 -0
  112. package/Tests/UI/Components/Forms/ValidationYAML.test.ts +234 -0
  113. package/Tests/UI/Components/ModelTable/AttributeColumns.test.tsx +573 -0
  114. package/Tests/UI/Components/ModelTable/BaseModelTableAttributeColumns.test.tsx +824 -0
  115. package/Tests/UI/Components/ModelTable/ColumnCustomizationModalAddableColumns.test.tsx +707 -0
  116. package/Tests/UI/Components/SideOver.test.tsx +1 -1
  117. package/Tests/UI/Components/StatusPage/ResourceGridSelection.test.tsx +294 -0
  118. package/Tests/UI/Components/StatusPage/ResourceListSelection.test.tsx +436 -0
  119. package/Tests/UI/Components/TableBulkCsvExport.test.tsx +6 -2
  120. package/Tests/UI/Components/Toggle.test.tsx +25 -0
  121. package/Tests/UI/Components/YamlEditor.test.tsx +847 -0
  122. package/Tests/Utils/NetworkDevice/DeviceReachabilityUtil.test.ts +252 -0
  123. package/Tests/Utils/NetworkDiscovery/AutoImportRuleMatcher.test.ts +516 -0
  124. package/Tests/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.test.ts +272 -0
  125. package/Tests/Utils/NetworkDiscovery/DiscoveredHostUtil.test.ts +221 -0
  126. package/Tests/Utils/NetworkDiscovery/ScanNameUtil.test.ts +312 -0
  127. package/Tests/Utils/NetworkDiscovery/ScanTargetUtil.test.ts +164 -0
  128. package/Tests/Utils/StatusPage/ResourceExplorer.test.ts +468 -0
  129. package/Tests/Utils/Telemetry/LlmMetricQuery.test.ts +472 -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/NetworkAutomation/RuleRunResult.ts +84 -0
  138. package/Types/Permission.ts +47 -0
  139. package/Types/SecurityEvent/DetectionFindingConstants.ts +11 -0
  140. package/Types/Telemetry/LlmMetricConventions.ts +124 -0
  141. package/UI/Components/AutocompleteTextInput/AutocompleteTextInput.tsx +3 -0
  142. package/UI/Components/BulkUpdate/BulkUpdateForm.tsx +10 -1
  143. package/UI/Components/CodeEditor/CodeEditor.tsx +241 -79
  144. package/UI/Components/CodeEditor/YamlEditor.tsx +369 -0
  145. package/UI/Components/Detail/Detail.tsx +10 -0
  146. package/UI/Components/EntityDropdown/EntityDropdown.tsx +33 -0
  147. package/UI/Components/Forms/Fields/FormField.tsx +31 -0
  148. package/UI/Components/Forms/Types/Field.ts +8 -0
  149. package/UI/Components/Forms/Types/FormFieldSchemaType.ts +1 -0
  150. package/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.ts +2 -0
  151. package/UI/Components/Forms/Validation.ts +46 -0
  152. package/UI/Components/Input/Input.tsx +3 -0
  153. package/UI/Components/ModelTable/AttributeColumns.tsx +321 -0
  154. package/UI/Components/ModelTable/BaseModelTable.tsx +263 -14
  155. package/UI/Components/ModelTable/Column.ts +8 -0
  156. package/UI/Components/ModelTable/ColumnCustomizationModal.tsx +310 -0
  157. package/UI/Components/ModelTable/ColumnPreference.ts +13 -1
  158. package/UI/Components/MonitorTemplateVariables/TemplateVariablesModal.tsx +2 -2
  159. package/UI/Components/SideOver/SideOver.tsx +5 -5
  160. package/UI/Components/StatusPage/ResourceGrid.tsx +82 -2
  161. package/UI/Components/StatusPage/ResourceList.tsx +197 -38
  162. package/UI/Components/Toggle/Toggle.tsx +9 -1
  163. package/UI/Components/Types/FieldType.ts +1 -0
  164. package/Utils/NetworkDevice/DeviceReachabilityUtil.ts +73 -1
  165. package/Utils/NetworkDiscovery/AutoImportRuleMatcher.ts +257 -0
  166. package/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.ts +183 -0
  167. package/Utils/NetworkDiscovery/DiscoveredHostUtil.ts +95 -0
  168. package/Utils/NetworkDiscovery/DiscoveryImportEligibility.ts +66 -0
  169. package/Utils/NetworkDiscovery/ScanNameUtil.ts +181 -0
  170. package/Utils/NetworkDiscovery/ScanTargetUtil.ts +82 -0
  171. package/Utils/StatusPage/ResourceExplorer.ts +258 -0
  172. package/Utils/Telemetry/LlmMetricQuery.ts +204 -0
  173. package/build/dist/Models/DatabaseModels/DetectionRule.js +57 -0
  174. package/build/dist/Models/DatabaseModels/DetectionRule.js.map +1 -1
  175. package/build/dist/Models/DatabaseModels/Index.js +2 -0
  176. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  177. package/build/dist/Models/DatabaseModels/NetworkDevice.js +45 -0
  178. package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
  179. package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js +609 -0
  180. package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js.map +1 -0
  181. package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js +97 -0
  182. package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
  183. package/build/dist/Models/DatabaseModels/Project.js +76 -0
  184. package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
  185. package/build/dist/Models/DatabaseModels/User.js +76 -0
  186. package/build/dist/Models/DatabaseModels/User.js.map +1 -1
  187. package/build/dist/Server/API/TelemetryAPI.js +17 -0
  188. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  189. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789100000000-AddNetworkDeviceAutoImportRule.js +35 -0
  190. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789100000000-AddNetworkDeviceAutoImportRule.js.map +1 -0
  191. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789200000000-AddSysObjectIdPatternToAutoImportRule.js +19 -0
  192. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789200000000-AddSysObjectIdPatternToAutoImportRule.js.map +1 -0
  193. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789300000000-AddAutoApplyVendorHealthTemplate.js +19 -0
  194. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789300000000-AddAutoApplyVendorHealthTemplate.js.map +1 -0
  195. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789400000000-AddNameToNetworkDeviceDiscoveryScan.js +21 -0
  196. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789400000000-AddNameToNetworkDeviceDiscoveryScan.js.map +1 -0
  197. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789500000000-AddCampaignUtmFields.js +42 -0
  198. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789500000000-AddCampaignUtmFields.js.map +1 -0
  199. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789512000000-AddDetectionRuleDistinctCountColumns.js +22 -0
  200. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789512000000-AddDetectionRuleDistinctCountColumns.js.map +1 -0
  201. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +12 -0
  202. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  203. package/build/dist/Server/Middleware/GzipRequestBody.js +224 -0
  204. package/build/dist/Server/Middleware/GzipRequestBody.js.map +1 -0
  205. package/build/dist/Server/Middleware/MultipartFormData.js +71 -2
  206. package/build/dist/Server/Middleware/MultipartFormData.js.map +1 -1
  207. package/build/dist/Server/Services/DetectionRuleService.js +49 -4
  208. package/build/dist/Server/Services/DetectionRuleService.js.map +1 -1
  209. package/build/dist/Server/Services/Index.js +206 -0
  210. package/build/dist/Server/Services/Index.js.map +1 -1
  211. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +711 -0
  212. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -0
  213. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js +155 -0
  214. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js.map +1 -0
  215. package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js +50 -0
  216. package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js.map +1 -1
  217. package/build/dist/Server/Services/NetworkDeviceService.js +124 -0
  218. package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
  219. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js +68 -13
  220. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js.map +1 -1
  221. package/build/dist/Server/Services/OnCallDutyPolicyFeedService.js +1 -1
  222. package/build/dist/Server/Services/OnCallDutyPolicyFeedService.js.map +1 -1
  223. package/build/dist/Server/Services/ProjectService.js +25 -45
  224. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  225. package/build/dist/Server/Services/SecurityEventService.js +57 -5
  226. package/build/dist/Server/Services/SecurityEventService.js.map +1 -1
  227. package/build/dist/Server/Services/StatusPageResourceService.js +140 -0
  228. package/build/dist/Server/Services/StatusPageResourceService.js.map +1 -1
  229. package/build/dist/Server/Services/TelemetryAttributeService.js +17 -0
  230. package/build/dist/Server/Services/TelemetryAttributeService.js.map +1 -1
  231. package/build/dist/Server/Services/UserService.js +2 -12
  232. package/build/dist/Server/Services/UserService.js.map +1 -1
  233. package/build/dist/Server/Types/Markdown.js +147 -61
  234. package/build/dist/Server/Types/Markdown.js.map +1 -1
  235. package/build/dist/Server/Utils/AI/Toolbox/OnCallTools.js +12 -4
  236. package/build/dist/Server/Utils/AI/Toolbox/OnCallTools.js.map +1 -1
  237. package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js +12 -1
  238. package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js.map +1 -1
  239. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +246 -9
  240. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
  241. package/build/dist/Server/Utils/Attribution.js.map +1 -1
  242. package/build/dist/Server/Utils/Marketing/MarketingEventUtil.js +27 -7
  243. package/build/dist/Server/Utils/Marketing/MarketingEventUtil.js.map +1 -1
  244. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +26 -0
  245. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
  246. package/build/dist/Server/Utils/SecurityEvent/DetectionRuleEvaluator.js +42 -7
  247. package/build/dist/Server/Utils/SecurityEvent/DetectionRuleEvaluator.js.map +1 -1
  248. package/build/dist/Server/Utils/SecurityEvent/Sigma/SigmaClickhouseCompiler.js +18 -0
  249. package/build/dist/Server/Utils/SecurityEvent/Sigma/SigmaClickhouseCompiler.js.map +1 -1
  250. package/build/dist/Server/Utils/StartServer.js +12 -21
  251. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  252. package/build/dist/Server/Utils/Telemetry/LlmCostBudgetEvaluator.js +76 -5
  253. package/build/dist/Server/Utils/Telemetry/LlmCostBudgetEvaluator.js.map +1 -1
  254. package/build/dist/Server/Utils/Telemetry/LlmMetricSpend.js +102 -0
  255. package/build/dist/Server/Utils/Telemetry/LlmMetricSpend.js.map +1 -0
  256. package/build/dist/Types/Code/YamlSyntax.js +212 -0
  257. package/build/dist/Types/Code/YamlSyntax.js.map +1 -0
  258. package/build/dist/Types/Exception/ExceptionCode.js +1 -0
  259. package/build/dist/Types/Exception/ExceptionCode.js.map +1 -1
  260. package/build/dist/Types/Exception/PayloadTooLargeException.js +8 -0
  261. package/build/dist/Types/Exception/PayloadTooLargeException.js.map +1 -0
  262. package/build/dist/Types/Marketing/Attribution.js +10 -0
  263. package/build/dist/Types/Marketing/Attribution.js.map +1 -1
  264. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +112 -51
  265. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
  266. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js +2 -1
  267. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js.map +1 -1
  268. package/build/dist/Types/NetworkAutomation/RuleRunResult.js +24 -0
  269. package/build/dist/Types/NetworkAutomation/RuleRunResult.js.map +1 -1
  270. package/build/dist/Types/Permission.js +41 -0
  271. package/build/dist/Types/Permission.js.map +1 -1
  272. package/build/dist/Types/SecurityEvent/DetectionFindingConstants.js +9 -0
  273. package/build/dist/Types/SecurityEvent/DetectionFindingConstants.js.map +1 -1
  274. package/build/dist/Types/Telemetry/LlmMetricConventions.js +98 -0
  275. package/build/dist/Types/Telemetry/LlmMetricConventions.js.map +1 -0
  276. package/build/dist/UI/Components/AutocompleteTextInput/AutocompleteTextInput.js +1 -1
  277. package/build/dist/UI/Components/AutocompleteTextInput/AutocompleteTextInput.js.map +1 -1
  278. package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js +5 -2
  279. package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js.map +1 -1
  280. package/build/dist/UI/Components/CodeEditor/CodeEditor.js +206 -76
  281. package/build/dist/UI/Components/CodeEditor/CodeEditor.js.map +1 -1
  282. package/build/dist/UI/Components/CodeEditor/YamlEditor.js +201 -0
  283. package/build/dist/UI/Components/CodeEditor/YamlEditor.js.map +1 -0
  284. package/build/dist/UI/Components/Detail/Detail.js +9 -0
  285. package/build/dist/UI/Components/Detail/Detail.js.map +1 -1
  286. package/build/dist/UI/Components/EntityDropdown/EntityDropdown.js +16 -1
  287. package/build/dist/UI/Components/EntityDropdown/EntityDropdown.js.map +1 -1
  288. package/build/dist/UI/Components/Forms/Fields/FormField.js +14 -1
  289. package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
  290. package/build/dist/UI/Components/Forms/Types/Field.js.map +1 -1
  291. package/build/dist/UI/Components/Forms/Types/FormFieldSchemaType.js +1 -0
  292. package/build/dist/UI/Components/Forms/Types/FormFieldSchemaType.js.map +1 -1
  293. package/build/dist/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.js +2 -0
  294. package/build/dist/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.js.map +1 -1
  295. package/build/dist/UI/Components/Forms/Validation.js +27 -0
  296. package/build/dist/UI/Components/Forms/Validation.js.map +1 -1
  297. package/build/dist/UI/Components/Input/Input.js +1 -1
  298. package/build/dist/UI/Components/Input/Input.js.map +1 -1
  299. package/build/dist/UI/Components/ModelTable/AttributeColumns.js +159 -0
  300. package/build/dist/UI/Components/ModelTable/AttributeColumns.js.map +1 -0
  301. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +179 -17
  302. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  303. package/build/dist/UI/Components/ModelTable/ColumnCustomizationModal.js +133 -2
  304. package/build/dist/UI/Components/ModelTable/ColumnCustomizationModal.js.map +1 -1
  305. package/build/dist/UI/Components/ModelTable/ColumnPreference.js +7 -1
  306. package/build/dist/UI/Components/ModelTable/ColumnPreference.js.map +1 -1
  307. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesModal.js +2 -2
  308. package/build/dist/UI/Components/SideOver/SideOver.js +5 -5
  309. package/build/dist/UI/Components/StatusPage/ResourceGrid.js +28 -2
  310. package/build/dist/UI/Components/StatusPage/ResourceGrid.js.map +1 -1
  311. package/build/dist/UI/Components/StatusPage/ResourceList.js +87 -20
  312. package/build/dist/UI/Components/StatusPage/ResourceList.js.map +1 -1
  313. package/build/dist/UI/Components/Toggle/Toggle.js +9 -1
  314. package/build/dist/UI/Components/Toggle/Toggle.js.map +1 -1
  315. package/build/dist/UI/Components/Types/FieldType.js +1 -0
  316. package/build/dist/UI/Components/Types/FieldType.js.map +1 -1
  317. package/build/dist/Utils/NetworkDevice/DeviceReachabilityUtil.js +37 -1
  318. package/build/dist/Utils/NetworkDevice/DeviceReachabilityUtil.js.map +1 -1
  319. package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js +149 -0
  320. package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js.map +1 -0
  321. package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js +121 -0
  322. package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js.map +1 -0
  323. package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js +75 -0
  324. package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js.map +1 -0
  325. package/build/dist/Utils/NetworkDiscovery/DiscoveryImportEligibility.js +59 -0
  326. package/build/dist/Utils/NetworkDiscovery/DiscoveryImportEligibility.js.map +1 -0
  327. package/build/dist/Utils/NetworkDiscovery/ScanNameUtil.js +120 -0
  328. package/build/dist/Utils/NetworkDiscovery/ScanNameUtil.js.map +1 -0
  329. package/build/dist/Utils/NetworkDiscovery/ScanTargetUtil.js +60 -0
  330. package/build/dist/Utils/NetworkDiscovery/ScanTargetUtil.js.map +1 -1
  331. package/build/dist/Utils/StatusPage/ResourceExplorer.js +171 -0
  332. package/build/dist/Utils/StatusPage/ResourceExplorer.js.map +1 -1
  333. package/build/dist/Utils/Telemetry/LlmMetricQuery.js +119 -0
  334. package/build/dist/Utils/Telemetry/LlmMetricQuery.js.map +1 -0
  335. package/jest.config.json +2 -0
  336. package/package.json +1 -1
  337. package/tsconfig.json +2 -1
  338. package/Tests/UI/Components/Toast.test.tsx +0 -197
  339. package/Tests/UI/Components/ToastStacking.test.tsx +0 -198
  340. package/UI/Components/Toast/Toast.tsx +0 -189
  341. package/UI/Components/Toast/ToastInit.tsx +0 -110
  342. package/build/dist/UI/Components/Toast/Toast.js +0 -123
  343. package/build/dist/UI/Components/Toast/Toast.js.map +0 -1
  344. package/build/dist/UI/Components/Toast/ToastInit.js +0 -53
  345. 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,
@@ -11,6 +11,7 @@ import NetworkDeviceOwnerTeam from "./NetworkDeviceOwnerTeam";
11
11
  import NetworkDeviceOwnerUser from "./NetworkDeviceOwnerUser";
12
12
  import NetworkDeviceOwnerRule from "./NetworkDeviceOwnerRule";
13
13
  import NetworkDeviceLabelRule from "./NetworkDeviceLabelRule";
14
+ import NetworkDeviceAutoImportRule from "./NetworkDeviceAutoImportRule";
14
15
  import NetworkDeviceDiscoveryScan from "./NetworkDeviceDiscoveryScan";
15
16
  import NetworkInterface from "./NetworkInterface";
16
17
  import NetworkSite from "./NetworkSite";
@@ -843,6 +844,7 @@ const AllModelTypes: Array<{
843
844
  NetworkDeviceOwnerUser,
844
845
  NetworkDeviceOwnerRule,
845
846
  NetworkDeviceLabelRule,
847
+ NetworkDeviceAutoImportRule,
846
848
  NetworkDeviceDiscoveryScan,
847
849
  NetworkInterface,
848
850
  NetworkSite,
@@ -1420,6 +1420,50 @@ export default class NetworkDevice extends BaseModel {
1420
1420
  })
1421
1421
  public snmpOids?: Array<SnmpOid> = undefined;
1422
1422
 
1423
+ @ColumnAccessControl({
1424
+ create: [
1425
+ Permission.ProjectOwner,
1426
+ Permission.ProjectAdmin,
1427
+ Permission.ProjectMember,
1428
+ Permission.SettingsAdmin,
1429
+ Permission.SettingsMember,
1430
+ Permission.CreateNetworkDevice,
1431
+ ],
1432
+ read: [
1433
+ Permission.ProjectOwner,
1434
+ Permission.ProjectAdmin,
1435
+ Permission.ProjectMember,
1436
+ Permission.Viewer,
1437
+ Permission.SettingsAdmin,
1438
+ Permission.SettingsMember,
1439
+ Permission.SettingsViewer,
1440
+ Permission.ReadNetworkDevice,
1441
+ ],
1442
+ update: [
1443
+ Permission.ProjectOwner,
1444
+ Permission.ProjectAdmin,
1445
+ Permission.ProjectMember,
1446
+ Permission.SettingsAdmin,
1447
+ Permission.SettingsMember,
1448
+ Permission.EditNetworkDevice,
1449
+ ],
1450
+ })
1451
+ @TableColumn({
1452
+ type: TableColumnType.Boolean,
1453
+ required: true,
1454
+ title: "Auto-Apply Vendor Health Template",
1455
+ description:
1456
+ "When the device's vendor is fingerprinted from its SNMP sysObjectID and no Health OIDs are configured yet, apply the matching vendor health template automatically on the next poll. Off by default for hand-made devices — the vendor template banner stays the manual path; auto-imported devices enable it so the zero-touch pipeline ends with health metrics, not an empty OID list.",
1457
+ defaultValue: false,
1458
+ isDefaultValueColumn: true,
1459
+ })
1460
+ @Column({
1461
+ type: ColumnType.Boolean,
1462
+ nullable: false,
1463
+ default: false,
1464
+ })
1465
+ public autoApplyVendorHealthTemplate?: boolean = undefined;
1466
+
1423
1467
  @ColumnAccessControl({
1424
1468
  create: [],
1425
1469
  read: [
@@ -0,0 +1,584 @@
1
+ import Project from "./Project";
2
+ import User from "./User";
3
+ import BaseModel from "./DatabaseBaseModel/DatabaseBaseModel";
4
+ import Route from "../../Types/API/Route";
5
+ import ColumnAccessControl from "../../Types/Database/AccessControl/ColumnAccessControl";
6
+ import TableAccessControl from "../../Types/Database/AccessControl/TableAccessControl";
7
+ import ColumnLength from "../../Types/Database/ColumnLength";
8
+ import ColumnType from "../../Types/Database/ColumnType";
9
+ import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
10
+ import EnableDocumentation from "../../Types/Database/EnableDocumentation";
11
+ import EnableWorkflow from "../../Types/Database/EnableWorkflow";
12
+ import TableColumn from "../../Types/Database/TableColumn";
13
+ import TableColumnType from "../../Types/Database/TableColumnType";
14
+ import TableMetadata from "../../Types/Database/TableMetadata";
15
+ import TenantColumn from "../../Types/Database/TenantColumn";
16
+ import IconProp from "../../Types/Icon/IconProp";
17
+ import ObjectID from "../../Types/ObjectID";
18
+ import Permission from "../../Types/Permission";
19
+ import { Column, Entity, Index, JoinColumn, ManyToOne } from "typeorm";
20
+
21
+ /*
22
+ * A rule that turns discovery scan results into Network Devices with no
23
+ * manual "Review Results -> Import" step — the OneUptime shape of Zabbix's
24
+ * autoregistration actions (issue #3378).
25
+ *
26
+ * The rule is deliberately a pure CREATION GATE: conditions decide WHICH
27
+ * discovered hosts import, and the import itself goes through the same
28
+ * builder as the manual dialog. Everything downstream of creation — site
29
+ * assignment, owners, labels — already fires automatically from
30
+ * NetworkDeviceService.onCreateSuccess through the existing
31
+ * NetworkSiteAssignmentRule / NetworkDeviceOwnerRule / NetworkDeviceLabelRule
32
+ * engines, so this model carries no operation columns to fight them with.
33
+ *
34
+ * Conditions on one rule are ANDed; OR is more rules. An exclusion rule
35
+ * (isExclusion) vetoes matching import rules — "never auto-import X".
36
+ */
37
+ @EnableDocumentation()
38
+ @TenantColumn("projectId")
39
+ @TableAccessControl({
40
+ create: [
41
+ Permission.ProjectOwner,
42
+ Permission.ProjectAdmin,
43
+ Permission.CreateNetworkDeviceAutoImportRule,
44
+ ],
45
+ read: [
46
+ Permission.ProjectOwner,
47
+ Permission.ProjectAdmin,
48
+ Permission.ProjectMember,
49
+ Permission.Viewer,
50
+ Permission.ReadNetworkDeviceAutoImportRule,
51
+ ],
52
+ delete: [
53
+ Permission.ProjectOwner,
54
+ Permission.ProjectAdmin,
55
+ Permission.DeleteNetworkDeviceAutoImportRule,
56
+ ],
57
+ update: [
58
+ Permission.ProjectOwner,
59
+ Permission.ProjectAdmin,
60
+ Permission.EditNetworkDeviceAutoImportRule,
61
+ ],
62
+ })
63
+ @CrudApiEndpoint(new Route("/network-device-auto-import-rule"))
64
+ @Entity({
65
+ name: "NetworkDeviceAutoImportRule",
66
+ })
67
+ @EnableWorkflow({
68
+ create: true,
69
+ delete: true,
70
+ update: true,
71
+ read: true,
72
+ })
73
+ @TableMetadata({
74
+ tableName: "NetworkDeviceAutoImportRule",
75
+ singularName: "Network Device Auto Import Rule",
76
+ pluralName: "Network Device Auto Import Rules",
77
+ icon: IconProp.Automation,
78
+ tableDescription:
79
+ "Automatically import matching hosts from network device discovery scan results as Network Devices, with no manual review step",
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
+ */
92
+ export default class NetworkDeviceAutoImportRule extends BaseModel {
93
+ @ColumnAccessControl({
94
+ create: [
95
+ Permission.ProjectOwner,
96
+ Permission.ProjectAdmin,
97
+ Permission.CreateNetworkDeviceAutoImportRule,
98
+ ],
99
+ read: [
100
+ Permission.ProjectOwner,
101
+ Permission.ProjectAdmin,
102
+ Permission.ProjectMember,
103
+ Permission.Viewer,
104
+ Permission.ReadNetworkDeviceAutoImportRule,
105
+ ],
106
+ update: [],
107
+ })
108
+ @TableColumn({
109
+ manyToOneRelationColumn: "projectId",
110
+ type: TableColumnType.Entity,
111
+ modelType: Project,
112
+ title: "Project",
113
+ description: "Relation to Project Resource in which this object belongs",
114
+ })
115
+ @ManyToOne(
116
+ () => {
117
+ return Project;
118
+ },
119
+ {
120
+ eager: false,
121
+ nullable: true,
122
+ onDelete: "CASCADE",
123
+ orphanedRowAction: "nullify",
124
+ },
125
+ )
126
+ @JoinColumn({
127
+ name: "projectId",
128
+ foreignKeyConstraintName: "FK_nd_auto_import_rule_projectId",
129
+ })
130
+ public project?: Project = undefined;
131
+
132
+ @ColumnAccessControl({
133
+ create: [
134
+ Permission.ProjectOwner,
135
+ Permission.ProjectAdmin,
136
+ Permission.CreateNetworkDeviceAutoImportRule,
137
+ ],
138
+ read: [
139
+ Permission.ProjectOwner,
140
+ Permission.ProjectAdmin,
141
+ Permission.ProjectMember,
142
+ Permission.Viewer,
143
+ Permission.ReadNetworkDeviceAutoImportRule,
144
+ ],
145
+ update: [],
146
+ })
147
+ @Index("IDX_network_device_auto_import_rule_projectId")
148
+ @TableColumn({
149
+ type: TableColumnType.ObjectID,
150
+ required: true,
151
+ canReadOnRelationQuery: true,
152
+ title: "Project ID",
153
+ description: "ID of your OneUptime Project in which this object belongs",
154
+ })
155
+ @Column({
156
+ type: ColumnType.ObjectID,
157
+ nullable: false,
158
+ transformer: ObjectID.getDatabaseTransformer(),
159
+ })
160
+ public projectId?: ObjectID = undefined;
161
+
162
+ @ColumnAccessControl({
163
+ create: [
164
+ Permission.ProjectOwner,
165
+ Permission.ProjectAdmin,
166
+ Permission.CreateNetworkDeviceAutoImportRule,
167
+ ],
168
+ read: [
169
+ Permission.ProjectOwner,
170
+ Permission.ProjectAdmin,
171
+ Permission.ProjectMember,
172
+ Permission.Viewer,
173
+ Permission.ReadNetworkDeviceAutoImportRule,
174
+ ],
175
+ update: [
176
+ Permission.ProjectOwner,
177
+ Permission.ProjectAdmin,
178
+ Permission.EditNetworkDeviceAutoImportRule,
179
+ ],
180
+ })
181
+ @Index("IDX_network_device_auto_import_rule_name")
182
+ @TableColumn({
183
+ required: true,
184
+ type: TableColumnType.ShortText,
185
+ canReadOnRelationQuery: true,
186
+ title: "Name",
187
+ description: "Name of this network device auto import rule",
188
+ })
189
+ @Column({
190
+ nullable: false,
191
+ type: ColumnType.ShortText,
192
+ length: ColumnLength.ShortText,
193
+ })
194
+ public name?: string = undefined;
195
+
196
+ @ColumnAccessControl({
197
+ create: [
198
+ Permission.ProjectOwner,
199
+ Permission.ProjectAdmin,
200
+ Permission.CreateNetworkDeviceAutoImportRule,
201
+ ],
202
+ read: [
203
+ Permission.ProjectOwner,
204
+ Permission.ProjectAdmin,
205
+ Permission.ProjectMember,
206
+ Permission.Viewer,
207
+ Permission.ReadNetworkDeviceAutoImportRule,
208
+ ],
209
+ update: [
210
+ Permission.ProjectOwner,
211
+ Permission.ProjectAdmin,
212
+ Permission.EditNetworkDeviceAutoImportRule,
213
+ ],
214
+ })
215
+ @TableColumn({
216
+ required: false,
217
+ type: TableColumnType.LongText,
218
+ title: "Description",
219
+ description: "Description of this network device auto import rule",
220
+ })
221
+ @Column({
222
+ nullable: true,
223
+ type: ColumnType.LongText,
224
+ length: ColumnLength.LongText,
225
+ })
226
+ public description?: string = undefined;
227
+
228
+ @ColumnAccessControl({
229
+ create: [
230
+ Permission.ProjectOwner,
231
+ Permission.ProjectAdmin,
232
+ Permission.CreateNetworkDeviceAutoImportRule,
233
+ ],
234
+ read: [
235
+ Permission.ProjectOwner,
236
+ Permission.ProjectAdmin,
237
+ Permission.ProjectMember,
238
+ Permission.Viewer,
239
+ Permission.ReadNetworkDeviceAutoImportRule,
240
+ ],
241
+ update: [
242
+ Permission.ProjectOwner,
243
+ Permission.ProjectAdmin,
244
+ Permission.EditNetworkDeviceAutoImportRule,
245
+ ],
246
+ })
247
+ @Index("IDX_network_device_auto_import_rule_isEnabled")
248
+ @TableColumn({
249
+ required: true,
250
+ type: TableColumnType.Boolean,
251
+ title: "Is Enabled",
252
+ description: "Whether this rule is enabled",
253
+ defaultValue: true,
254
+ isDefaultValueColumn: true,
255
+ })
256
+ @Column({
257
+ type: ColumnType.Boolean,
258
+ nullable: false,
259
+ default: true,
260
+ })
261
+ public isEnabled?: boolean = undefined;
262
+
263
+ // Match Criteria
264
+
265
+ @ColumnAccessControl({
266
+ create: [
267
+ Permission.ProjectOwner,
268
+ Permission.ProjectAdmin,
269
+ Permission.CreateNetworkDeviceAutoImportRule,
270
+ ],
271
+ read: [
272
+ Permission.ProjectOwner,
273
+ Permission.ProjectAdmin,
274
+ Permission.ProjectMember,
275
+ Permission.Viewer,
276
+ Permission.ReadNetworkDeviceAutoImportRule,
277
+ ],
278
+ update: [
279
+ Permission.ProjectOwner,
280
+ Permission.ProjectAdmin,
281
+ Permission.EditNetworkDeviceAutoImportRule,
282
+ ],
283
+ })
284
+ @TableColumn({
285
+ required: false,
286
+ type: TableColumnType.ShortText,
287
+ title: "Host IP Is In",
288
+ description:
289
+ "Only trigger for discovered hosts whose IP is inside this CIDR (192.168.1.0/24) or octet range (10.16-22.0-255.51-66) — the same notations a scan target takes. Leave empty to match any address.",
290
+ })
291
+ @Column({
292
+ nullable: true,
293
+ type: ColumnType.ShortText,
294
+ length: ColumnLength.ShortText,
295
+ })
296
+ public ipMatchTarget?: string = undefined;
297
+
298
+ @ColumnAccessControl({
299
+ create: [
300
+ Permission.ProjectOwner,
301
+ Permission.ProjectAdmin,
302
+ Permission.CreateNetworkDeviceAutoImportRule,
303
+ ],
304
+ read: [
305
+ Permission.ProjectOwner,
306
+ Permission.ProjectAdmin,
307
+ Permission.ProjectMember,
308
+ Permission.Viewer,
309
+ Permission.ReadNetworkDeviceAutoImportRule,
310
+ ],
311
+ update: [
312
+ Permission.ProjectOwner,
313
+ Permission.ProjectAdmin,
314
+ Permission.EditNetworkDeviceAutoImportRule,
315
+ ],
316
+ })
317
+ @TableColumn({
318
+ required: false,
319
+ type: TableColumnType.LongText,
320
+ title: "System Name Pattern",
321
+ description:
322
+ "Regex or * wildcard pattern (case-insensitive) matched against the discovered host's SNMP sysName. Leave empty to match any name.",
323
+ })
324
+ @Column({
325
+ type: ColumnType.LongText,
326
+ nullable: true,
327
+ length: ColumnLength.LongText,
328
+ })
329
+ public sysNamePattern?: string = undefined;
330
+
331
+ @ColumnAccessControl({
332
+ create: [
333
+ Permission.ProjectOwner,
334
+ Permission.ProjectAdmin,
335
+ Permission.CreateNetworkDeviceAutoImportRule,
336
+ ],
337
+ read: [
338
+ Permission.ProjectOwner,
339
+ Permission.ProjectAdmin,
340
+ Permission.ProjectMember,
341
+ Permission.Viewer,
342
+ Permission.ReadNetworkDeviceAutoImportRule,
343
+ ],
344
+ update: [
345
+ Permission.ProjectOwner,
346
+ Permission.ProjectAdmin,
347
+ Permission.EditNetworkDeviceAutoImportRule,
348
+ ],
349
+ })
350
+ @TableColumn({
351
+ required: false,
352
+ type: TableColumnType.LongText,
353
+ title: "System Description Pattern",
354
+ description:
355
+ "Regex or * wildcard pattern (case-insensitive) matched against the discovered host's SNMP sysDescr. Leave empty to match any description.",
356
+ })
357
+ @Column({
358
+ type: ColumnType.LongText,
359
+ nullable: true,
360
+ length: ColumnLength.LongText,
361
+ })
362
+ public sysDescrPattern?: string = undefined;
363
+
364
+ @ColumnAccessControl({
365
+ create: [
366
+ Permission.ProjectOwner,
367
+ Permission.ProjectAdmin,
368
+ Permission.CreateNetworkDeviceAutoImportRule,
369
+ ],
370
+ read: [
371
+ Permission.ProjectOwner,
372
+ Permission.ProjectAdmin,
373
+ Permission.ProjectMember,
374
+ Permission.Viewer,
375
+ Permission.ReadNetworkDeviceAutoImportRule,
376
+ ],
377
+ update: [
378
+ Permission.ProjectOwner,
379
+ Permission.ProjectAdmin,
380
+ Permission.EditNetworkDeviceAutoImportRule,
381
+ ],
382
+ })
383
+ @TableColumn({
384
+ required: false,
385
+ type: TableColumnType.LongText,
386
+ title: "System Object ID Pattern",
387
+ description:
388
+ "An OID prefix (1.3.6.1.4.1.9) or a '*' wildcard OID pattern with literal dots (1.3.6.1.4.1.9.* for Cisco) matched against the discovered host's SNMP sysObjectID — the vendor's registered enterprise OID. Not regex: dots match dots, so 1.3.6.1.4.1.9.* can never match enterprise 94. Leave empty to match any vendor. Only hosts reported by probes new enough to carry sysObjectID can match.",
389
+ })
390
+ @Column({
391
+ type: ColumnType.LongText,
392
+ nullable: true,
393
+ length: ColumnLength.LongText,
394
+ })
395
+ public sysObjectIdPattern?: string = undefined;
396
+
397
+ @ColumnAccessControl({
398
+ create: [
399
+ Permission.ProjectOwner,
400
+ Permission.ProjectAdmin,
401
+ Permission.CreateNetworkDeviceAutoImportRule,
402
+ ],
403
+ read: [
404
+ Permission.ProjectOwner,
405
+ Permission.ProjectAdmin,
406
+ Permission.ProjectMember,
407
+ Permission.Viewer,
408
+ Permission.ReadNetworkDeviceAutoImportRule,
409
+ ],
410
+ update: [
411
+ Permission.ProjectOwner,
412
+ Permission.ProjectAdmin,
413
+ Permission.EditNetworkDeviceAutoImportRule,
414
+ ],
415
+ })
416
+ @TableColumn({
417
+ required: true,
418
+ type: TableColumnType.Boolean,
419
+ title: "Include Ping-Only Hosts",
420
+ description:
421
+ "Also import hosts that answered ping but not SNMP. Off by default: a wrong SNMP credential makes every host on a subnet report as ping-only, and this rule would then import all of them as half-identified devices.",
422
+ defaultValue: false,
423
+ isDefaultValueColumn: true,
424
+ })
425
+ @Column({
426
+ type: ColumnType.Boolean,
427
+ nullable: false,
428
+ default: false,
429
+ })
430
+ public includePingOnlyHosts?: boolean = undefined;
431
+
432
+ @ColumnAccessControl({
433
+ create: [
434
+ Permission.ProjectOwner,
435
+ Permission.ProjectAdmin,
436
+ Permission.CreateNetworkDeviceAutoImportRule,
437
+ ],
438
+ read: [
439
+ Permission.ProjectOwner,
440
+ Permission.ProjectAdmin,
441
+ Permission.ProjectMember,
442
+ Permission.Viewer,
443
+ Permission.ReadNetworkDeviceAutoImportRule,
444
+ ],
445
+ update: [
446
+ Permission.ProjectOwner,
447
+ Permission.ProjectAdmin,
448
+ Permission.EditNetworkDeviceAutoImportRule,
449
+ ],
450
+ })
451
+ @Index("IDX_network_device_auto_import_rule_isExclusion")
452
+ @TableColumn({
453
+ required: true,
454
+ type: TableColumnType.Boolean,
455
+ title: "Is Exclusion Rule",
456
+ description:
457
+ "Invert this rule: matching hosts are NEVER auto-imported, even when another rule matches them. Use it to carve printers, phones, or other unwanted hosts out of a broader rule.",
458
+ defaultValue: false,
459
+ isDefaultValueColumn: true,
460
+ })
461
+ @Column({
462
+ type: ColumnType.Boolean,
463
+ nullable: false,
464
+ default: false,
465
+ })
466
+ public isExclusion?: boolean = undefined;
467
+
468
+ @ColumnAccessControl({
469
+ create: [
470
+ Permission.ProjectOwner,
471
+ Permission.ProjectAdmin,
472
+ Permission.CreateNetworkDeviceAutoImportRule,
473
+ ],
474
+ read: [
475
+ Permission.ProjectOwner,
476
+ Permission.ProjectAdmin,
477
+ Permission.ProjectMember,
478
+ Permission.Viewer,
479
+ Permission.ReadNetworkDeviceAutoImportRule,
480
+ ],
481
+ update: [],
482
+ })
483
+ @TableColumn({
484
+ manyToOneRelationColumn: "createdByUserId",
485
+ type: TableColumnType.Entity,
486
+ modelType: User,
487
+ title: "Created by User",
488
+ description:
489
+ "Relation to User who created this object (if this object was created by a User)",
490
+ })
491
+ @ManyToOne(
492
+ () => {
493
+ return User;
494
+ },
495
+ {
496
+ eager: false,
497
+ nullable: true,
498
+ onDelete: "SET NULL",
499
+ orphanedRowAction: "nullify",
500
+ },
501
+ )
502
+ @JoinColumn({
503
+ name: "createdByUserId",
504
+ foreignKeyConstraintName: "FK_nd_auto_import_rule_createdByUserId",
505
+ })
506
+ public createdByUser?: User = undefined;
507
+
508
+ @ColumnAccessControl({
509
+ create: [
510
+ Permission.ProjectOwner,
511
+ Permission.ProjectAdmin,
512
+ Permission.CreateNetworkDeviceAutoImportRule,
513
+ ],
514
+ read: [
515
+ Permission.ProjectOwner,
516
+ Permission.ProjectAdmin,
517
+ Permission.ProjectMember,
518
+ Permission.Viewer,
519
+ Permission.ReadNetworkDeviceAutoImportRule,
520
+ ],
521
+ update: [],
522
+ })
523
+ @TableColumn({
524
+ type: TableColumnType.ObjectID,
525
+ title: "Created by User ID",
526
+ description:
527
+ "User ID who created this object (if this object was created by a User)",
528
+ })
529
+ @Column({
530
+ type: ColumnType.ObjectID,
531
+ nullable: true,
532
+ transformer: ObjectID.getDatabaseTransformer(),
533
+ })
534
+ public createdByUserId?: ObjectID = undefined;
535
+
536
+ @ColumnAccessControl({
537
+ create: [],
538
+ read: [],
539
+ update: [],
540
+ })
541
+ @TableColumn({
542
+ manyToOneRelationColumn: "deletedByUserId",
543
+ type: TableColumnType.Entity,
544
+ title: "Deleted by User",
545
+ modelType: User,
546
+ description:
547
+ "Relation to User who deleted this object (if this object was deleted by a User)",
548
+ })
549
+ @ManyToOne(
550
+ () => {
551
+ return User;
552
+ },
553
+ {
554
+ cascade: false,
555
+ eager: false,
556
+ nullable: true,
557
+ onDelete: "SET NULL",
558
+ orphanedRowAction: "nullify",
559
+ },
560
+ )
561
+ @JoinColumn({
562
+ name: "deletedByUserId",
563
+ foreignKeyConstraintName: "FK_nd_auto_import_rule_deletedByUserId",
564
+ })
565
+ public deletedByUser?: User = undefined;
566
+
567
+ @ColumnAccessControl({
568
+ create: [],
569
+ read: [],
570
+ update: [],
571
+ })
572
+ @TableColumn({
573
+ type: TableColumnType.ObjectID,
574
+ title: "Deleted by User ID",
575
+ description:
576
+ "User ID who deleted this object (if this object was deleted by a User)",
577
+ })
578
+ @Column({
579
+ type: ColumnType.ObjectID,
580
+ nullable: true,
581
+ transformer: ObjectID.getDatabaseTransformer(),
582
+ })
583
+ public deletedByUserId?: ObjectID = undefined;
584
+ }