@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
@@ -390,10 +390,10 @@ describe("MonitorRecommendationSeverityMapper", () => {
390
390
  /*
391
391
  * "No map" is the state of every caller that predates this feature, and
392
392
  * it must mean "leave the template's severity alone" rather than throw or
393
- * return a blank id — a criteria instance with a populated incident and
394
- * no severity fails MonitorCriteriaInstance.getValidationError, so the
395
- * whole create would fail at submit with a message about a field the user
396
- * never saw.
393
+ * return a blank id — a criteria instance that creates incidents and has
394
+ * a populated incident with no severity fails
395
+ * MonitorCriteriaInstance.getValidationError, so the whole create would
396
+ * fail at submit with a message about a field the user never saw.
397
397
  */
398
398
  expect(
399
399
  MonitorRecommendationSeverityMapper.resolveSeverityId({
@@ -397,9 +397,10 @@ describe("MonitorRecommendationUtil", () => {
397
397
  it("leaves the template's severity alone when the map has no entry for that severity", () => {
398
398
  /*
399
399
  * A partial map must not blank the severity out. A criteria instance
400
- * with a populated incident and no severity id fails
401
- * MonitorCriteriaInstance.getValidationError, so the whole create would
402
- * fail at submit with a message about a field the user never saw.
400
+ * that creates incidents and has a populated incident with no severity
401
+ * id fails MonitorCriteriaInstance.getValidationError, so the whole
402
+ * create would fail at submit with a message about a field the user
403
+ * never saw.
403
404
  */
404
405
  const monitorStep: MonitorStep =
405
406
  MonitorRecommendationUtil.applyNotificationSettingsToMonitorStep({
@@ -0,0 +1,193 @@
1
+ import {
2
+ LlmCostMetricNames,
3
+ LlmInputTokenTypeValues,
4
+ LlmOutputTokenTypeValues,
5
+ LlmTokenDirection,
6
+ LlmTokenTypeAttributeKeys,
7
+ LlmTokenUsageMetricNames,
8
+ getLlmTokenDirection,
9
+ getLlmTokenTypeValues,
10
+ } from "../../../Types/Telemetry/LlmMetricConventions";
11
+ import { describe, expect, test } from "@jest/globals";
12
+
13
+ describe("LlmMetricConventions", () => {
14
+ describe("metric name lists", () => {
15
+ test("token usage list leads with the OTel semantic convention", () => {
16
+ expect(LlmTokenUsageMetricNames[0]).toBe("gen_ai.client.token.usage");
17
+ });
18
+
19
+ test("cost list leads with the gen_ai-namespaced spelling", () => {
20
+ expect(LlmCostMetricNames[0]).toBe("gen_ai.client.cost");
21
+ });
22
+
23
+ test("token usage list covers the pre-convention spellings", () => {
24
+ expect(LlmTokenUsageMetricNames).toEqual(
25
+ expect.arrayContaining([
26
+ "gen_ai.client.token.usage",
27
+ "gen_ai.client.token.count",
28
+ "llm.token.usage",
29
+ "llm.usage.tokens",
30
+ ]),
31
+ );
32
+ });
33
+
34
+ test("cost list covers the LiteLLM gateway spellings", () => {
35
+ expect(LlmCostMetricNames).toEqual(
36
+ expect.arrayContaining(["litellm_spend_metric", "litellm.cost.total"]),
37
+ );
38
+ });
39
+
40
+ test("no metric name appears in both lists", () => {
41
+ const overlap: Array<string> = LlmTokenUsageMetricNames.filter(
42
+ (name: string) => {
43
+ return LlmCostMetricNames.includes(name);
44
+ },
45
+ );
46
+
47
+ expect(overlap).toEqual([]);
48
+ });
49
+
50
+ test("neither list contains duplicates", () => {
51
+ expect(new Set(LlmTokenUsageMetricNames).size).toBe(
52
+ LlmTokenUsageMetricNames.length,
53
+ );
54
+ expect(new Set(LlmCostMetricNames).size).toBe(LlmCostMetricNames.length);
55
+ });
56
+
57
+ test("every metric name is a non-empty trimmed string", () => {
58
+ for (const name of [...LlmTokenUsageMetricNames, ...LlmCostMetricNames]) {
59
+ expect(typeof name).toBe("string");
60
+ expect(name.length).toBeGreaterThan(0);
61
+ expect(name).toBe(name.trim());
62
+ }
63
+ });
64
+ });
65
+
66
+ describe("token type attribute keys", () => {
67
+ test("leads with the OTel semantic convention key", () => {
68
+ expect(LlmTokenTypeAttributeKeys[0]).toBe("gen_ai.token.type");
69
+ });
70
+
71
+ test("includes the pre-convention llm-namespaced key", () => {
72
+ expect(LlmTokenTypeAttributeKeys).toContain("llm.token.type");
73
+ });
74
+
75
+ test("contains no duplicates", () => {
76
+ expect(new Set(LlmTokenTypeAttributeKeys).size).toBe(
77
+ LlmTokenTypeAttributeKeys.length,
78
+ );
79
+ });
80
+ });
81
+
82
+ describe("token type value lists", () => {
83
+ test("input and output values never overlap", () => {
84
+ const overlap: Array<string> = LlmInputTokenTypeValues.filter(
85
+ (value: string) => {
86
+ return LlmOutputTokenTypeValues.includes(value);
87
+ },
88
+ );
89
+
90
+ expect(overlap).toEqual([]);
91
+ });
92
+
93
+ test("values are lowercase, so the normalizing comparison can match", () => {
94
+ for (const value of [
95
+ ...LlmInputTokenTypeValues,
96
+ ...LlmOutputTokenTypeValues,
97
+ ]) {
98
+ expect(value).toBe(value.toLowerCase());
99
+ }
100
+ });
101
+
102
+ test("cache token kinds are deliberately excluded from both", () => {
103
+ for (const cacheKind of ["cache_read", "cache_creation", "cache_write"]) {
104
+ expect(LlmInputTokenTypeValues).not.toContain(cacheKind);
105
+ expect(LlmOutputTokenTypeValues).not.toContain(cacheKind);
106
+ }
107
+ });
108
+ });
109
+
110
+ describe("getLlmTokenDirection", () => {
111
+ test.each([
112
+ ["input", "input"],
113
+ ["prompt", "input"],
114
+ ["output", "output"],
115
+ ["completion", "output"],
116
+ ])("maps %s to %s", (value: string, expected: string) => {
117
+ expect(getLlmTokenDirection(value)).toBe(expected);
118
+ });
119
+
120
+ test.each([
121
+ ["INPUT", "input"],
122
+ ["Output", "output"],
123
+ [" prompt ", "input"],
124
+ ["\tCOMPLETION\n", "output"],
125
+ ])(
126
+ "normalizes casing and surrounding whitespace: %s",
127
+ (value: string, expected: string) => {
128
+ expect(getLlmTokenDirection(value)).toBe(expected);
129
+ },
130
+ );
131
+
132
+ test.each([
133
+ "cache_read",
134
+ "cache_creation",
135
+ "reasoning",
136
+ "total",
137
+ "unknown",
138
+ ])("returns null for the uncounted token kind %s", (value: string) => {
139
+ expect(getLlmTokenDirection(value)).toBeNull();
140
+ });
141
+
142
+ test.each([
143
+ ["empty string", ""],
144
+ ["whitespace only", " "],
145
+ ])("returns null for %s", (_label: string, value: string) => {
146
+ expect(getLlmTokenDirection(value)).toBeNull();
147
+ });
148
+
149
+ test("returns null for undefined and null", () => {
150
+ expect(getLlmTokenDirection(undefined)).toBeNull();
151
+ expect(getLlmTokenDirection(null)).toBeNull();
152
+ });
153
+
154
+ test("returns null for non-string values without throwing", () => {
155
+ expect(getLlmTokenDirection(42 as unknown as string)).toBeNull();
156
+ expect(getLlmTokenDirection({} as unknown as string)).toBeNull();
157
+ expect(getLlmTokenDirection([] as unknown as string)).toBeNull();
158
+ expect(getLlmTokenDirection(true as unknown as string)).toBeNull();
159
+ });
160
+
161
+ test("every declared input value resolves to input", () => {
162
+ for (const value of LlmInputTokenTypeValues) {
163
+ expect(getLlmTokenDirection(value)).toBe("input");
164
+ }
165
+ });
166
+
167
+ test("every declared output value resolves to output", () => {
168
+ for (const value of LlmOutputTokenTypeValues) {
169
+ expect(getLlmTokenDirection(value)).toBe("output");
170
+ }
171
+ });
172
+ });
173
+
174
+ describe("getLlmTokenTypeValues", () => {
175
+ test("returns the input list for input", () => {
176
+ expect(getLlmTokenTypeValues("input")).toEqual(LlmInputTokenTypeValues);
177
+ });
178
+
179
+ test("returns the output list for output", () => {
180
+ expect(getLlmTokenTypeValues("output")).toEqual(LlmOutputTokenTypeValues);
181
+ });
182
+
183
+ test("round-trips: every value it returns maps back to that direction", () => {
184
+ const directions: Array<LlmTokenDirection> = ["input", "output"];
185
+
186
+ for (const direction of directions) {
187
+ for (const value of getLlmTokenTypeValues(direction)) {
188
+ expect(getLlmTokenDirection(value)).toBe(direction);
189
+ }
190
+ }
191
+ });
192
+ });
193
+ });
@@ -43,18 +43,6 @@ jest.mock("../../../UI/Utils/ModelAPI/ModelAPI", () => {
43
43
  };
44
44
  });
45
45
 
46
- jest.mock("../../../UI/Components/Toast/ToastInit", () => {
47
- return {
48
- __esModule: true,
49
- default: () => {
50
- return null;
51
- },
52
- ShowToastNotification: () => {
53
- return null;
54
- },
55
- };
56
- });
57
-
58
46
  const OWNER_PERMISSIONS: Array<Permission> = [
59
47
  Permission.Public,
60
48
  Permission.User,
@@ -29,7 +29,6 @@ import getJestMockFunction, { MockFunction } from "../../MockType";
29
29
 
30
30
  const getItemMock: MockFunction = getJestMockFunction();
31
31
  const createOrUpdateMock: MockFunction = getJestMockFunction();
32
- const showToastMock: MockFunction = getJestMockFunction();
33
32
 
34
33
  jest.mock("../../../UI/Utils/ModelAPI/ModelAPI", () => {
35
34
  return {
@@ -45,18 +44,6 @@ jest.mock("../../../UI/Utils/ModelAPI/ModelAPI", () => {
45
44
  };
46
45
  });
47
46
 
48
- jest.mock("../../../UI/Components/Toast/ToastInit", () => {
49
- return {
50
- __esModule: true,
51
- default: () => {
52
- return null;
53
- },
54
- ShowToastNotification: (...args: Array<any>) => {
55
- return showToastMock(...args);
56
- },
57
- };
58
- });
59
-
60
47
  const OWNER_PERMISSIONS: Array<Permission> = [
61
48
  Permission.Public,
62
49
  Permission.User,
@@ -171,7 +158,6 @@ describe("CardModelDetail edit modal", () => {
171
158
  beforeEach(() => {
172
159
  getItemMock.mockReset();
173
160
  createOrUpdateMock.mockReset();
174
- showToastMock.mockReset();
175
161
  createOrUpdateMock.mockResolvedValue({ data: {} });
176
162
  });
177
163
 
@@ -283,7 +269,7 @@ describe("CardModelDetail edit modal", () => {
283
269
  expect(submitted.model.shouldAutoEnableProbeOnNewMonitors).toBe(false);
284
270
  });
285
271
 
286
- it("closes the editor without showing a toast after a successful edit", async () => {
272
+ it("closes the editor after a successful edit", async () => {
287
273
  getItemMock.mockResolvedValue(loadedProbe());
288
274
 
289
275
  renderProbeCard();
@@ -307,7 +293,5 @@ describe("CardModelDetail edit modal", () => {
307
293
  },
308
294
  { timeout: WAIT_TIMEOUT },
309
295
  );
310
-
311
- expect(showToastMock).not.toHaveBeenCalled();
312
296
  });
313
297
  });