@oneuptime/common 12.0.30 → 12.0.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (489) hide show
  1. package/Models/AnalyticsModels/SecurityEvent.ts +48 -16
  2. package/Models/AnalyticsModels/ThreatIntelIndicator.ts +10 -5
  3. package/Models/DatabaseModels/AlertSeverity.ts +44 -0
  4. package/Models/DatabaseModels/DetectionRule.ts +16 -5
  5. package/Models/DatabaseModels/GoogleSecOpsConnection.ts +14 -5
  6. package/Models/DatabaseModels/IncidentSeverity.ts +44 -0
  7. package/Models/DatabaseModels/Index.ts +2 -0
  8. package/Models/DatabaseModels/NetworkDevice.ts +113 -3
  9. package/Models/DatabaseModels/NetworkDeviceAutoImportRule.ts +88 -0
  10. package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +22 -0
  11. package/Models/DatabaseModels/NetworkDeviceOidTemplate.ts +499 -0
  12. package/Models/DatabaseModels/ThreatIntelFeed.ts +16 -5
  13. package/Server/API/GlobalConfigAPI.ts +362 -183
  14. package/Server/API/TelemetryAPI.ts +42 -4
  15. package/Server/EnvironmentConfig.ts +112 -0
  16. package/Server/Infrastructure/Postgres/SchemaMigrations/1790500000000-AddNetworkDeviceOidTemplate.ts +59 -0
  17. package/Server/Infrastructure/Postgres/SchemaMigrations/1790600000000-AddAutoImportRuleOidTemplate.ts +25 -0
  18. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +4 -0
  19. package/Server/Middleware/MultipartFormData.ts +118 -32
  20. package/Server/Services/AlertEpisodeLabelRuleEngineService.ts +9 -1
  21. package/Server/Services/AlertEpisodeOnCallRuleEngineService.ts +9 -1
  22. package/Server/Services/AlertEpisodeOwnerRuleEngineService.ts +9 -1
  23. package/Server/Services/AlertEpisodePrivacyRuleEngineService.ts +9 -1
  24. package/Server/Services/AlertGroupingEngineService.ts +9 -1
  25. package/Server/Services/AlertLabelRuleEngineService.ts +9 -1
  26. package/Server/Services/AlertOnCallRuleEngineService.ts +9 -1
  27. package/Server/Services/AlertOwnerRuleEngineService.ts +9 -1
  28. package/Server/Services/AlertPrivacyRuleEngineService.ts +9 -1
  29. package/Server/Services/AlertReminderRuleService.ts +9 -1
  30. package/Server/Services/AutoRemediationRuleEngineService.ts +9 -1
  31. package/Server/Services/CephClusterLabelRuleEngineService.ts +9 -1
  32. package/Server/Services/CephClusterOwnerRuleEngineService.ts +9 -1
  33. package/Server/Services/CloudResourceLabelRuleEngineService.ts +9 -1
  34. package/Server/Services/CloudResourceOwnerRuleEngineService.ts +9 -1
  35. package/Server/Services/DashboardLabelRuleEngineService.ts +9 -1
  36. package/Server/Services/DashboardOwnerRuleEngineService.ts +9 -1
  37. package/Server/Services/DockerHostLabelRuleEngineService.ts +9 -1
  38. package/Server/Services/DockerHostOwnerRuleEngineService.ts +9 -1
  39. package/Server/Services/DockerSwarmClusterLabelRuleEngineService.ts +9 -1
  40. package/Server/Services/DockerSwarmClusterOwnerRuleEngineService.ts +9 -1
  41. package/Server/Services/HostLabelRuleEngineService.ts +9 -1
  42. package/Server/Services/HostOwnerRuleEngineService.ts +9 -1
  43. package/Server/Services/IncidentEpisodeLabelRuleEngineService.ts +9 -1
  44. package/Server/Services/IncidentEpisodeOnCallRuleEngineService.ts +9 -1
  45. package/Server/Services/IncidentEpisodeOwnerRuleEngineService.ts +9 -1
  46. package/Server/Services/IncidentEpisodePrivacyRuleEngineService.ts +9 -1
  47. package/Server/Services/IncidentGroupingEngineService.ts +9 -1
  48. package/Server/Services/IncidentLabelRuleEngineService.ts +9 -1
  49. package/Server/Services/IncidentOnCallRuleEngineService.ts +9 -1
  50. package/Server/Services/IncidentOwnerRuleEngineService.ts +9 -1
  51. package/Server/Services/IncidentPrivacyRuleEngineService.ts +9 -1
  52. package/Server/Services/IncidentReminderRuleService.ts +9 -1
  53. package/Server/Services/IncidentSlaRuleService.ts +9 -1
  54. package/Server/Services/IncomingCallPolicyLabelRuleEngineService.ts +9 -1
  55. package/Server/Services/IncomingCallPolicyOwnerRuleEngineService.ts +9 -1
  56. package/Server/Services/Index.ts +2 -0
  57. package/Server/Services/IoTFleetLabelRuleEngineService.ts +9 -1
  58. package/Server/Services/IoTFleetOwnerRuleEngineService.ts +9 -1
  59. package/Server/Services/KubernetesClusterLabelRuleEngineService.ts +9 -1
  60. package/Server/Services/KubernetesClusterOwnerRuleEngineService.ts +9 -1
  61. package/Server/Services/KubernetesResourceService.ts +5 -1
  62. package/Server/Services/MonitorLabelRuleEngineService.ts +9 -1
  63. package/Server/Services/MonitorOwnerRuleEngineService.ts +9 -1
  64. package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +35 -0
  65. package/Server/Services/NetworkDeviceAutoImportRuleService.ts +96 -0
  66. package/Server/Services/NetworkDeviceLabelRuleEngineService.ts +9 -1
  67. package/Server/Services/NetworkDeviceOidTemplateService.ts +201 -0
  68. package/Server/Services/NetworkDeviceOwnerRuleEngineService.ts +9 -1
  69. package/Server/Services/NetworkDeviceService.ts +209 -1
  70. package/Server/Services/OnCallDutyPolicyLabelRuleEngineService.ts +9 -1
  71. package/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.ts +9 -1
  72. package/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.ts +9 -1
  73. package/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.ts +9 -1
  74. package/Server/Services/PodmanHostLabelRuleEngineService.ts +9 -1
  75. package/Server/Services/PodmanHostOwnerRuleEngineService.ts +9 -1
  76. package/Server/Services/ProxmoxClusterLabelRuleEngineService.ts +9 -1
  77. package/Server/Services/ProxmoxClusterOwnerRuleEngineService.ts +9 -1
  78. package/Server/Services/RumApplicationLabelRuleEngineService.ts +9 -1
  79. package/Server/Services/RumApplicationOwnerRuleEngineService.ts +9 -1
  80. package/Server/Services/RunbookLabelRuleEngineService.ts +9 -1
  81. package/Server/Services/RunbookOwnerRuleEngineService.ts +9 -1
  82. package/Server/Services/RunbookRuleEngineService.ts +9 -1
  83. package/Server/Services/ScheduledMaintenanceLabelRuleEngineService.ts +9 -1
  84. package/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.ts +9 -1
  85. package/Server/Services/ScheduledMaintenanceReminderRuleService.ts +9 -1
  86. package/Server/Services/ServerlessFunctionLabelRuleEngineService.ts +9 -1
  87. package/Server/Services/ServerlessFunctionOwnerRuleEngineService.ts +9 -1
  88. package/Server/Services/ServiceLabelRuleEngineService.ts +9 -1
  89. package/Server/Services/ServiceOwnerRuleEngineService.ts +9 -1
  90. package/Server/Services/StatusPageLabelRuleEngineService.ts +9 -1
  91. package/Server/Services/StatusPageMonitorRuleEngineService.ts +7 -0
  92. package/Server/Services/StatusPageOwnerRuleEngineService.ts +9 -1
  93. package/Server/Services/TelemetrySourceMapService.ts +266 -23
  94. package/Server/Services/UserService.ts +27 -0
  95. package/Server/Services/WorkflowLabelRuleEngineService.ts +9 -1
  96. package/Server/Services/WorkflowOwnerRuleEngineService.ts +9 -1
  97. package/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.ts +186 -0
  98. package/Server/Utils/Monitor/CapturedMetricAttributeUtil.ts +245 -0
  99. package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +21 -2
  100. package/Server/Utils/Monitor/MonitorMetricUtil.ts +55 -21
  101. package/Server/Utils/Monitor/MonitorTemplateUtil.ts +32 -0
  102. package/Server/Utils/Monitor/NetworkDeviceMetricUtil.ts +15 -2
  103. package/Server/Utils/Monitor/NetworkDeviceWalkUtil.ts +18 -1
  104. package/Server/Utils/Monitor/NetworkInventoryUtil.ts +10 -0
  105. package/Server/Utils/Monitor/SeriesResourceLabels.ts +34 -0
  106. package/Server/Utils/Rules/RuleEngineRuleRead.ts +48 -0
  107. package/Server/Utils/Telemetry/ExceptionSanitizer.ts +14 -1
  108. package/Server/Utils/Telemetry/LogExceptionExtractor.ts +14 -2
  109. package/Server/Utils/Telemetry/SourceMapResolver.ts +16 -5
  110. package/Server/Utils/Telemetry/StackTraceParser.ts +399 -0
  111. package/Tests/App/Dashboard/EventOverlayHook.test.tsx +125 -0
  112. package/Tests/App/Dashboard/HeaderImageAssets.test.tsx +93 -0
  113. package/Tests/App/Dashboard/OnCallReadinessSurfaces.test.tsx +3 -3
  114. package/Tests/App/Dashboard/UserElementEmail.test.tsx +12 -4
  115. package/Tests/App/Dashboard/UserEmailCallSites.test.tsx +1 -1
  116. package/Tests/Models/DatabaseModels/DomainRoleTierCoverage.test.ts +14 -0
  117. package/Tests/Models/DatabaseModels/ModelRegistryInvariants.test.ts +469 -0
  118. package/Tests/Models/SecurityDomainAccessControl.test.ts +429 -0
  119. package/Tests/Server/API/GlobalConfigLicense.test.ts +657 -0
  120. package/Tests/Server/API/SecurityEventAttributesAPI.test.ts +84 -6
  121. package/Tests/Server/API/TelemetryResolveStackTraceAPI.test.ts +805 -0
  122. package/Tests/Server/Infrastructure/Postgres/AddOnCallCalendarFeedsMigration.test.ts +32 -7
  123. package/Tests/Server/Middleware/IdentityRateLimit.test.ts +1144 -0
  124. package/Tests/Server/Middleware/MultipartFormData.test.ts +618 -3
  125. package/Tests/Server/Services/MonitorLabelRuleEngineScale.test.ts +520 -0
  126. package/Tests/Server/Services/NetworkDeviceOidTemplateService.test.ts +332 -0
  127. package/Tests/Server/Services/NetworkDeviceOidTemplateWriteGuards.test.ts +409 -0
  128. package/Tests/Server/Services/RuleEngineRuleFetchLimit.test.ts +239 -0
  129. package/Tests/Server/Services/TelemetrySourceMapService.test.ts +1210 -2
  130. package/Tests/Server/Services/UserServiceSeatLimit.test.ts +182 -0
  131. package/Tests/Server/Types/AnalyticsDatabase/SecurityEventModelPermission.test.ts +255 -0
  132. package/Tests/Server/Types/Database/Permissions/ReadBlockPermission.test.ts +212 -0
  133. package/Tests/Server/Types/Database/Permissions/SecurityRoleAccess.test.ts +413 -0
  134. package/Tests/Server/Utils/CodeRepository.test.ts +689 -0
  135. package/Tests/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.test.ts +495 -0
  136. package/Tests/Server/Utils/ExceptionSanitizer.test.ts +77 -0
  137. package/Tests/Server/Utils/Monitor/CapturedMetricAttributeUtil.test.ts +284 -0
  138. package/Tests/Server/Utils/Monitor/MonitorCustomMetricAttributes.test.ts +503 -0
  139. package/Tests/Server/Utils/Monitor/MonitorTemplatePrototypePollution.test.ts +106 -0
  140. package/Tests/Server/Utils/Monitor/NetworkDeviceWalkLogWritePath.test.ts +33 -4
  141. package/Tests/Server/Utils/Monitor/NetworkDeviceWalkUtil.test.ts +14 -4
  142. package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +44 -0
  143. package/Tests/Server/Utils/OpenAPISpec.test.ts +536 -0
  144. package/Tests/Server/Utils/Rules/RuleEngineRuleRead.test.ts +115 -0
  145. package/Tests/Server/Utils/StackTraceParser.test.ts +610 -0
  146. package/Tests/Server/Utils/Telemetry/LogExceptionExtractor.test.ts +0 -0
  147. package/Tests/Server/Utils/Telemetry/SourceMapLimits.test.ts +656 -0
  148. package/Tests/Server/Utils/Telemetry/SourceMapResolver.test.ts +100 -0
  149. package/Tests/Types/Monitor/SnmpMonitor/SnmpOidListUtil.test.ts +454 -0
  150. package/Tests/Types/SecurityRolePermissions.test.ts +193 -0
  151. package/Tests/UI/Components/Charts/AnnotationLayout.test.ts +773 -0
  152. package/Tests/UI/Components/Charts/ChartAnnotationRail.test.tsx +789 -0
  153. package/Tests/UI/Components/Charts/ChartBucketIdentity.test.ts +254 -0
  154. package/Tests/UI/Components/Charts/TimeAnnotation.test.ts +471 -0
  155. package/Tests/UI/Components/EditionLabelLicenseRefresh.test.tsx +405 -0
  156. package/Tests/UI/Components/ErrorMessageRefreshControl.test.tsx +83 -0
  157. package/Tests/UI/Components/MarkdownConverters.test.ts +686 -0
  158. package/Tests/UI/Components/ModelTable/BaseModelTableDeleteAndEmptyStates.test.tsx +341 -0
  159. package/Tests/UI/Components/OrderedStatesList.test.tsx +5 -5
  160. package/Tests/UI/Components/PendingProjectInvitations.test.tsx +1 -1
  161. package/Tests/UI/Components/TableSortAndMobileColumns.test.tsx +195 -0
  162. package/Tests/UI/Components/XAxis.test.ts +270 -5
  163. package/Tests/UI/Components/XAxisDaylightSaving.test.ts +113 -0
  164. package/Tests/UI/Styles/ChartFocusRing.test.ts +153 -0
  165. package/Tests/UI/Styles/ChartFocusRingCoverage.test.tsx +377 -0
  166. package/Tests/UI/Styles/ThemeStylesheet.ts +162 -0
  167. package/Tests/Utils/EnterpriseLicenseSeats.test.ts +507 -0
  168. package/Tests/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.test.ts +951 -1
  169. package/Tests/Utils/NetworkDiscovery/DiscoveredHostUtil.test.ts +238 -0
  170. package/Tests/Utils/NetworkDiscovery/DiscoveryReverseDnsChain.test.ts +1056 -0
  171. package/Tests/Utils/NetworkDiscovery/ReverseDnsNameUtil.test.ts +882 -0
  172. package/Types/Date.ts +39 -0
  173. package/Types/Monitor/SnmpMonitor/SnmpOidListUtil.ts +333 -0
  174. package/Types/Permission.ts +96 -0
  175. package/Types/Rum/SessionReplay.ts +21 -0
  176. package/Types/Telemetry/SourceMap.ts +8 -0
  177. package/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.tsx +176 -0
  178. package/UI/Components/Charts/ChartLibrary/Annotations/AnnotationLayout.ts +745 -0
  179. package/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.tsx +576 -0
  180. package/UI/Components/Charts/ChartLibrary/Annotations/UseChartAnnotations.tsx +204 -0
  181. package/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.tsx +491 -544
  182. package/UI/Components/Charts/ChartLibrary/BarChart/BarChart.tsx +324 -372
  183. package/UI/Components/Charts/ChartLibrary/LineChart/LineChart.tsx +487 -540
  184. package/UI/Components/Charts/ChartLibrary/Types/FormattedReferenceRegion.ts +7 -3
  185. package/UI/Components/Charts/ChartLibrary/Types/FormattedTimeReferenceLine.ts +14 -3
  186. package/UI/Components/Charts/Types/ChartEventKind.ts +13 -0
  187. package/UI/Components/Charts/Types/ReferenceRegionProps.ts +6 -0
  188. package/UI/Components/Charts/Types/TimeReferenceLineProps.ts +20 -3
  189. package/UI/Components/Charts/Utils/TimeAnnotation.ts +69 -35
  190. package/UI/Components/Charts/Utils/XAxis.ts +125 -18
  191. package/UI/Components/EditionLabel/EditionLabel.tsx +280 -26
  192. package/UI/Components/ErrorMessage/ErrorMessage.tsx +21 -10
  193. package/UI/Components/Feed/FeedItem.tsx +4 -5
  194. package/UI/Components/Header/HeaderIconDropdownButton.tsx +1 -2
  195. package/UI/Components/Header/UserProfile/UserProfile.tsx +1 -2
  196. package/UI/Components/Image/Image.tsx +20 -3
  197. package/UI/Components/Markdown.tsx/MarkdownConverters.ts +0 -0
  198. package/UI/Components/MemberRoleAssignment/MemberRoleAssignment.tsx +1 -2
  199. package/UI/Components/ModelTable/BaseModelTable.tsx +150 -24
  200. package/UI/Components/Table/TableHeader.tsx +64 -48
  201. package/UI/Components/Table/TableRow.tsx +13 -3
  202. package/UI/Styles/Theme.css +38 -0
  203. package/Utils/EnterpriseLicense/EnterpriseLicenseSeats.ts +271 -0
  204. package/Utils/NetworkDiscovery/AutoImportRuleMatcher.ts +6 -0
  205. package/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.ts +141 -10
  206. package/Utils/NetworkDiscovery/DiscoveredHostUtil.ts +55 -3
  207. package/Utils/NetworkDiscovery/ReverseDnsNameUtil.ts +151 -0
  208. package/Utils/Rules/RuleEngineLimits.ts +32 -0
  209. package/build/dist/Models/AnalyticsModels/SecurityEvent.js +48 -16
  210. package/build/dist/Models/AnalyticsModels/SecurityEvent.js.map +1 -1
  211. package/build/dist/Models/AnalyticsModels/ThreatIntelIndicator.js +10 -5
  212. package/build/dist/Models/AnalyticsModels/ThreatIntelIndicator.js.map +1 -1
  213. package/build/dist/Models/DatabaseModels/AlertSeverity.js +46 -1
  214. package/build/dist/Models/DatabaseModels/AlertSeverity.js.map +1 -1
  215. package/build/dist/Models/DatabaseModels/DetectionRule.js +16 -5
  216. package/build/dist/Models/DatabaseModels/DetectionRule.js.map +1 -1
  217. package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js +14 -5
  218. package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js.map +1 -1
  219. package/build/dist/Models/DatabaseModels/IncidentSeverity.js +46 -1
  220. package/build/dist/Models/DatabaseModels/IncidentSeverity.js.map +1 -1
  221. package/build/dist/Models/DatabaseModels/Index.js +2 -0
  222. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  223. package/build/dist/Models/DatabaseModels/NetworkDevice.js +115 -3
  224. package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
  225. package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js +88 -0
  226. package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js.map +1 -1
  227. package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
  228. package/build/dist/Models/DatabaseModels/NetworkDeviceOidTemplate.js +519 -0
  229. package/build/dist/Models/DatabaseModels/NetworkDeviceOidTemplate.js.map +1 -0
  230. package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js +16 -5
  231. package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js.map +1 -1
  232. package/build/dist/Server/API/GlobalConfigAPI.js +293 -176
  233. package/build/dist/Server/API/GlobalConfigAPI.js.map +1 -1
  234. package/build/dist/Server/API/TelemetryAPI.js +31 -3
  235. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  236. package/build/dist/Server/EnvironmentConfig.js +83 -0
  237. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  238. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790500000000-AddNetworkDeviceOidTemplate.js +26 -0
  239. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790500000000-AddNetworkDeviceOidTemplate.js.map +1 -0
  240. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790600000000-AddAutoImportRuleOidTemplate.js +14 -0
  241. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790600000000-AddAutoImportRuleOidTemplate.js.map +1 -0
  242. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +4 -0
  243. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  244. package/build/dist/Server/Middleware/MultipartFormData.js +93 -28
  245. package/build/dist/Server/Middleware/MultipartFormData.js.map +1 -1
  246. package/build/dist/Server/Services/AlertEpisodeLabelRuleEngineService.js +8 -1
  247. package/build/dist/Server/Services/AlertEpisodeLabelRuleEngineService.js.map +1 -1
  248. package/build/dist/Server/Services/AlertEpisodeOnCallRuleEngineService.js +8 -1
  249. package/build/dist/Server/Services/AlertEpisodeOnCallRuleEngineService.js.map +1 -1
  250. package/build/dist/Server/Services/AlertEpisodeOwnerRuleEngineService.js +8 -1
  251. package/build/dist/Server/Services/AlertEpisodeOwnerRuleEngineService.js.map +1 -1
  252. package/build/dist/Server/Services/AlertEpisodePrivacyRuleEngineService.js +8 -1
  253. package/build/dist/Server/Services/AlertEpisodePrivacyRuleEngineService.js.map +1 -1
  254. package/build/dist/Server/Services/AlertGroupingEngineService.js +8 -1
  255. package/build/dist/Server/Services/AlertGroupingEngineService.js.map +1 -1
  256. package/build/dist/Server/Services/AlertLabelRuleEngineService.js +8 -1
  257. package/build/dist/Server/Services/AlertLabelRuleEngineService.js.map +1 -1
  258. package/build/dist/Server/Services/AlertOnCallRuleEngineService.js +8 -1
  259. package/build/dist/Server/Services/AlertOnCallRuleEngineService.js.map +1 -1
  260. package/build/dist/Server/Services/AlertOwnerRuleEngineService.js +8 -1
  261. package/build/dist/Server/Services/AlertOwnerRuleEngineService.js.map +1 -1
  262. package/build/dist/Server/Services/AlertPrivacyRuleEngineService.js +8 -1
  263. package/build/dist/Server/Services/AlertPrivacyRuleEngineService.js.map +1 -1
  264. package/build/dist/Server/Services/AlertReminderRuleService.js +8 -1
  265. package/build/dist/Server/Services/AlertReminderRuleService.js.map +1 -1
  266. package/build/dist/Server/Services/AutoRemediationRuleEngineService.js +8 -1
  267. package/build/dist/Server/Services/AutoRemediationRuleEngineService.js.map +1 -1
  268. package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js +8 -1
  269. package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js.map +1 -1
  270. package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js +8 -1
  271. package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js.map +1 -1
  272. package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js +8 -1
  273. package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js.map +1 -1
  274. package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js +8 -1
  275. package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js.map +1 -1
  276. package/build/dist/Server/Services/DashboardLabelRuleEngineService.js +8 -1
  277. package/build/dist/Server/Services/DashboardLabelRuleEngineService.js.map +1 -1
  278. package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js +8 -1
  279. package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js.map +1 -1
  280. package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js +8 -1
  281. package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js.map +1 -1
  282. package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js +8 -1
  283. package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js.map +1 -1
  284. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js +8 -1
  285. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js.map +1 -1
  286. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js +8 -1
  287. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js.map +1 -1
  288. package/build/dist/Server/Services/HostLabelRuleEngineService.js +8 -1
  289. package/build/dist/Server/Services/HostLabelRuleEngineService.js.map +1 -1
  290. package/build/dist/Server/Services/HostOwnerRuleEngineService.js +8 -1
  291. package/build/dist/Server/Services/HostOwnerRuleEngineService.js.map +1 -1
  292. package/build/dist/Server/Services/IncidentEpisodeLabelRuleEngineService.js +8 -1
  293. package/build/dist/Server/Services/IncidentEpisodeLabelRuleEngineService.js.map +1 -1
  294. package/build/dist/Server/Services/IncidentEpisodeOnCallRuleEngineService.js +8 -1
  295. package/build/dist/Server/Services/IncidentEpisodeOnCallRuleEngineService.js.map +1 -1
  296. package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js +8 -1
  297. package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js.map +1 -1
  298. package/build/dist/Server/Services/IncidentEpisodePrivacyRuleEngineService.js +8 -1
  299. package/build/dist/Server/Services/IncidentEpisodePrivacyRuleEngineService.js.map +1 -1
  300. package/build/dist/Server/Services/IncidentGroupingEngineService.js +8 -1
  301. package/build/dist/Server/Services/IncidentGroupingEngineService.js.map +1 -1
  302. package/build/dist/Server/Services/IncidentLabelRuleEngineService.js +8 -1
  303. package/build/dist/Server/Services/IncidentLabelRuleEngineService.js.map +1 -1
  304. package/build/dist/Server/Services/IncidentOnCallRuleEngineService.js +8 -1
  305. package/build/dist/Server/Services/IncidentOnCallRuleEngineService.js.map +1 -1
  306. package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js +8 -1
  307. package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js.map +1 -1
  308. package/build/dist/Server/Services/IncidentPrivacyRuleEngineService.js +8 -1
  309. package/build/dist/Server/Services/IncidentPrivacyRuleEngineService.js.map +1 -1
  310. package/build/dist/Server/Services/IncidentReminderRuleService.js +8 -1
  311. package/build/dist/Server/Services/IncidentReminderRuleService.js.map +1 -1
  312. package/build/dist/Server/Services/IncidentSlaRuleService.js +8 -1
  313. package/build/dist/Server/Services/IncidentSlaRuleService.js.map +1 -1
  314. package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js +8 -1
  315. package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js.map +1 -1
  316. package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js +8 -1
  317. package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js.map +1 -1
  318. package/build/dist/Server/Services/Index.js +2 -0
  319. package/build/dist/Server/Services/Index.js.map +1 -1
  320. package/build/dist/Server/Services/IoTFleetLabelRuleEngineService.js +8 -1
  321. package/build/dist/Server/Services/IoTFleetLabelRuleEngineService.js.map +1 -1
  322. package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js +8 -1
  323. package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js.map +1 -1
  324. package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js +8 -1
  325. package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js.map +1 -1
  326. package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js +8 -1
  327. package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js.map +1 -1
  328. package/build/dist/Server/Services/KubernetesResourceService.js +5 -1
  329. package/build/dist/Server/Services/KubernetesResourceService.js.map +1 -1
  330. package/build/dist/Server/Services/MonitorLabelRuleEngineService.js +8 -1
  331. package/build/dist/Server/Services/MonitorLabelRuleEngineService.js.map +1 -1
  332. package/build/dist/Server/Services/MonitorOwnerRuleEngineService.js +8 -1
  333. package/build/dist/Server/Services/MonitorOwnerRuleEngineService.js.map +1 -1
  334. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +30 -21
  335. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
  336. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js +64 -0
  337. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js.map +1 -1
  338. package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js +8 -1
  339. package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js.map +1 -1
  340. package/build/dist/Server/Services/NetworkDeviceOidTemplateService.js +180 -0
  341. package/build/dist/Server/Services/NetworkDeviceOidTemplateService.js.map +1 -0
  342. package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js +8 -1
  343. package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js.map +1 -1
  344. package/build/dist/Server/Services/NetworkDeviceService.js +154 -1
  345. package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
  346. package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js +8 -1
  347. package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js.map +1 -1
  348. package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js +8 -1
  349. package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js.map +1 -1
  350. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js +8 -1
  351. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js.map +1 -1
  352. package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js +8 -1
  353. package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js.map +1 -1
  354. package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js +8 -1
  355. package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js.map +1 -1
  356. package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js +8 -1
  357. package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js.map +1 -1
  358. package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js +8 -1
  359. package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js.map +1 -1
  360. package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js +8 -1
  361. package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js.map +1 -1
  362. package/build/dist/Server/Services/RumApplicationLabelRuleEngineService.js +8 -1
  363. package/build/dist/Server/Services/RumApplicationLabelRuleEngineService.js.map +1 -1
  364. package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js +8 -1
  365. package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js.map +1 -1
  366. package/build/dist/Server/Services/RunbookLabelRuleEngineService.js +8 -1
  367. package/build/dist/Server/Services/RunbookLabelRuleEngineService.js.map +1 -1
  368. package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js +8 -1
  369. package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js.map +1 -1
  370. package/build/dist/Server/Services/RunbookRuleEngineService.js +8 -1
  371. package/build/dist/Server/Services/RunbookRuleEngineService.js.map +1 -1
  372. package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js +8 -1
  373. package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js.map +1 -1
  374. package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js +8 -1
  375. package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js.map +1 -1
  376. package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js +8 -1
  377. package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js.map +1 -1
  378. package/build/dist/Server/Services/ServerlessFunctionLabelRuleEngineService.js +8 -1
  379. package/build/dist/Server/Services/ServerlessFunctionLabelRuleEngineService.js.map +1 -1
  380. package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js +8 -1
  381. package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js.map +1 -1
  382. package/build/dist/Server/Services/ServiceLabelRuleEngineService.js +8 -1
  383. package/build/dist/Server/Services/ServiceLabelRuleEngineService.js.map +1 -1
  384. package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js +8 -1
  385. package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js.map +1 -1
  386. package/build/dist/Server/Services/StatusPageLabelRuleEngineService.js +8 -1
  387. package/build/dist/Server/Services/StatusPageLabelRuleEngineService.js.map +1 -1
  388. package/build/dist/Server/Services/StatusPageMonitorRuleEngineService.js +6 -0
  389. package/build/dist/Server/Services/StatusPageMonitorRuleEngineService.js.map +1 -1
  390. package/build/dist/Server/Services/StatusPageOwnerRuleEngineService.js +8 -1
  391. package/build/dist/Server/Services/StatusPageOwnerRuleEngineService.js.map +1 -1
  392. package/build/dist/Server/Services/TelemetrySourceMapService.js +213 -19
  393. package/build/dist/Server/Services/TelemetrySourceMapService.js.map +1 -1
  394. package/build/dist/Server/Services/UserService.js +25 -0
  395. package/build/dist/Server/Services/UserService.js.map +1 -1
  396. package/build/dist/Server/Services/WorkflowLabelRuleEngineService.js +8 -1
  397. package/build/dist/Server/Services/WorkflowLabelRuleEngineService.js.map +1 -1
  398. package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js +8 -1
  399. package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js.map +1 -1
  400. package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js +145 -0
  401. package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js.map +1 -0
  402. package/build/dist/Server/Utils/Monitor/CapturedMetricAttributeUtil.js +201 -0
  403. package/build/dist/Server/Utils/Monitor/CapturedMetricAttributeUtil.js.map +1 -0
  404. package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +19 -2
  405. package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js.map +1 -1
  406. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +42 -23
  407. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
  408. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +29 -0
  409. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
  410. package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js +11 -2
  411. package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js.map +1 -1
  412. package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js +16 -1
  413. package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js.map +1 -1
  414. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +10 -0
  415. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
  416. package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js +33 -0
  417. package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js.map +1 -1
  418. package/build/dist/Server/Utils/Rules/RuleEngineRuleRead.js +37 -0
  419. package/build/dist/Server/Utils/Rules/RuleEngineRuleRead.js.map +1 -0
  420. package/build/dist/Server/Utils/Telemetry/ExceptionSanitizer.js +12 -1
  421. package/build/dist/Server/Utils/Telemetry/ExceptionSanitizer.js.map +1 -1
  422. package/build/dist/Server/Utils/Telemetry/LogExceptionExtractor.js +14 -2
  423. package/build/dist/Server/Utils/Telemetry/LogExceptionExtractor.js.map +1 -1
  424. package/build/dist/Server/Utils/Telemetry/SourceMapResolver.js +15 -5
  425. package/build/dist/Server/Utils/Telemetry/SourceMapResolver.js.map +1 -1
  426. package/build/dist/Server/Utils/Telemetry/StackTraceParser.js +307 -0
  427. package/build/dist/Server/Utils/Telemetry/StackTraceParser.js.map +1 -1
  428. package/build/dist/Types/Date.js +27 -0
  429. package/build/dist/Types/Date.js.map +1 -1
  430. package/build/dist/Types/Monitor/SnmpMonitor/SnmpOidListUtil.js +253 -0
  431. package/build/dist/Types/Monitor/SnmpMonitor/SnmpOidListUtil.js.map +1 -0
  432. package/build/dist/Types/Permission.js +86 -0
  433. package/build/dist/Types/Permission.js.map +1 -1
  434. package/build/dist/Types/Rum/SessionReplay.js +19 -0
  435. package/build/dist/Types/Rum/SessionReplay.js.map +1 -1
  436. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.js +83 -0
  437. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.js.map +1 -0
  438. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationLayout.js +531 -0
  439. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationLayout.js.map +1 -0
  440. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.js +264 -0
  441. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.js.map +1 -0
  442. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/UseChartAnnotations.js +122 -0
  443. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/UseChartAnnotations.js.map +1 -0
  444. package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js +213 -233
  445. package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js.map +1 -1
  446. package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js +139 -152
  447. package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js.map +1 -1
  448. package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js +212 -232
  449. package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js.map +1 -1
  450. package/build/dist/UI/Components/Charts/Types/ChartEventKind.js +14 -0
  451. package/build/dist/UI/Components/Charts/Types/ChartEventKind.js.map +1 -0
  452. package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js +57 -28
  453. package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js.map +1 -1
  454. package/build/dist/UI/Components/Charts/Utils/XAxis.js +103 -17
  455. package/build/dist/UI/Components/Charts/Utils/XAxis.js.map +1 -1
  456. package/build/dist/UI/Components/EditionLabel/EditionLabel.js +198 -23
  457. package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
  458. package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js +15 -5
  459. package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js.map +1 -1
  460. package/build/dist/UI/Components/Feed/FeedItem.js +4 -5
  461. package/build/dist/UI/Components/Feed/FeedItem.js.map +1 -1
  462. package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js +1 -2
  463. package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js.map +1 -1
  464. package/build/dist/UI/Components/Header/UserProfile/UserProfile.js.map +1 -1
  465. package/build/dist/UI/Components/Image/Image.js +6 -1
  466. package/build/dist/UI/Components/Image/Image.js.map +1 -1
  467. package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js +0 -0
  468. package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js.map +1 -1
  469. package/build/dist/UI/Components/MemberRoleAssignment/MemberRoleAssignment.js +1 -2
  470. package/build/dist/UI/Components/MemberRoleAssignment/MemberRoleAssignment.js.map +1 -1
  471. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +104 -23
  472. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  473. package/build/dist/UI/Components/Table/TableHeader.js +20 -22
  474. package/build/dist/UI/Components/Table/TableHeader.js.map +1 -1
  475. package/build/dist/UI/Components/Table/TableRow.js +13 -4
  476. package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
  477. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js +153 -0
  478. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js.map +1 -0
  479. package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js.map +1 -1
  480. package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js +127 -7
  481. package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js.map +1 -1
  482. package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js +50 -3
  483. package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js.map +1 -1
  484. package/build/dist/Utils/NetworkDiscovery/ReverseDnsNameUtil.js +132 -0
  485. package/build/dist/Utils/NetworkDiscovery/ReverseDnsNameUtil.js.map +1 -0
  486. package/build/dist/Utils/Rules/RuleEngineLimits.js +31 -0
  487. package/build/dist/Utils/Rules/RuleEngineLimits.js.map +1 -0
  488. package/jest.config.json +1 -0
  489. package/package.json +2 -2
@@ -540,3 +540,103 @@ describe("end to end: raw browser stack trace → parsed frames → resolved fra
540
540
  expect(resolved[1]!.originalLineNumber).toBe(2);
541
541
  });
542
542
  });
543
+
544
+ /*
545
+ * The Firefox/Safari twin of the V8 case above, against the SAME bundle and
546
+ * the same expected original positions. This is the proof the issue asked
547
+ * for: a browser stack that previously parsed to zero frames — and so never
548
+ * reached this resolver at all — now converges on exactly the same resolved
549
+ * output as the Chromium stack for the same defect.
550
+ */
551
+ describe("end to end: raw Firefox / Safari stack trace → parsed frames → resolved frames", () => {
552
+ test("a SpiderMonkey stack resolves to the same source positions as the V8 one", () => {
553
+ const rawStackTrace: string = [
554
+ "onSelect@https://app.example.com/assets/main.abc123.js:1:46",
555
+ "render@https://app.example.com/assets/main.abc123.js:1:21",
556
+ ].join("\n");
557
+
558
+ const parsed: ParsedStackTrace = StackTraceParser.parse(rawStackTrace);
559
+ expect(parsed.frames).toHaveLength(2);
560
+
561
+ const resolved: Array<ResolvedStackFrame> = SourceMapResolver.resolveFrames(
562
+ parsed.frames,
563
+ [FIXTURE_BUNDLE],
564
+ );
565
+
566
+ expect(resolved[0]!.resolved).toBe(true);
567
+ expect(resolved[0]!.originalFileName).toBe("src/greet.ts");
568
+ expect(resolved[0]!.originalLineNumber).toBe(6);
569
+ expect(resolved[0]!.originalFunctionName).toBe("onSelect");
570
+
571
+ expect(resolved[1]!.resolved).toBe(true);
572
+ expect(resolved[1]!.originalLineNumber).toBe(2);
573
+ });
574
+
575
+ test("an anonymous top-level Firefox frame resolves as well", () => {
576
+ const parsed: ParsedStackTrace = StackTraceParser.parse(
577
+ "@https://app.example.com/assets/main.abc123.js:1:46",
578
+ );
579
+
580
+ expect(parsed.frames[0]!.functionName).toBe("<anonymous>");
581
+
582
+ const resolved: Array<ResolvedStackFrame> = SourceMapResolver.resolveFrames(
583
+ parsed.frames,
584
+ [FIXTURE_BUNDLE],
585
+ );
586
+
587
+ expect(resolved[0]!.resolved).toBe(true);
588
+ expect(resolved[0]!.originalLineNumber).toBe(6);
589
+ });
590
+
591
+ test("a Safari [native code] frame passes through unresolved instead of misresolving", () => {
592
+ /*
593
+ * `[native code]` frames carry lineNumber 0, which resolveFrame rejects
594
+ * before it ever looks for a bundle. They must survive in the list — the
595
+ * dashboard overlay discards a length-mismatched response wholesale.
596
+ */
597
+ const parsed: ParsedStackTrace = StackTraceParser.parse(
598
+ [
599
+ "onSelect@https://app.example.com/assets/main.abc123.js:1:46",
600
+ "forEach@[native code]",
601
+ ].join("\n"),
602
+ );
603
+
604
+ const resolved: Array<ResolvedStackFrame> = SourceMapResolver.resolveFrames(
605
+ parsed.frames,
606
+ [FIXTURE_BUNDLE],
607
+ );
608
+
609
+ expect(resolved).toHaveLength(2);
610
+ expect(resolved[0]!.resolved).toBe(true);
611
+ expect(resolved[1]!.resolved).toBe(false);
612
+ expect(resolved[1]!.fileName).toBe("[native code]");
613
+ });
614
+
615
+ test("every fileName the browser parser emits still matches its own bundle", () => {
616
+ /*
617
+ * getMatchScore compares trailing path segments, so a fileName with junk
618
+ * glued to its last segment scores 0 and the frame silently never
619
+ * resolves. Each source below is a shape the parser accepts.
620
+ */
621
+ const sources: Array<string> = [
622
+ "https://app.example.com/assets/main.abc123.js",
623
+ "http://localhost:3000/assets/main.abc123.js",
624
+ "https://user:pw@cdn.example.com/assets/main.abc123.js",
625
+ "https://app.example.com/assets/main.abc123.js?v=2",
626
+ ];
627
+
628
+ for (const source of sources) {
629
+ const parsed: ParsedStackTrace = StackTraceParser.parse(
630
+ `boot@${source}:1:46`,
631
+ );
632
+
633
+ expect(parsed.frames).toHaveLength(1);
634
+ expect(
635
+ SourceMapResolver.getMatchScore(
636
+ parsed.frames[0]!.fileName,
637
+ FIXTURE_BUNDLE.bundlePath,
638
+ ),
639
+ ).toBeGreaterThan(0);
640
+ }
641
+ });
642
+ });
@@ -0,0 +1,454 @@
1
+ import SnmpOid from "../../../../Types/Monitor/SnmpMonitor/SnmpOid";
2
+ import SnmpOidListUtil, {
3
+ MAX_DEVICE_SPECIFIC_OIDS,
4
+ MAX_EFFECTIVE_OIDS_PER_DEVICE,
5
+ MAX_OID_METRIC_SERIES,
6
+ MAX_OID_NAME_LENGTH,
7
+ MAX_OIDS_PER_TEMPLATE,
8
+ } from "../../../../Types/Monitor/SnmpMonitor/SnmpOidListUtil";
9
+ import { describe, expect, it } from "@jest/globals";
10
+
11
+ function oid(value: string, name?: string): SnmpOid {
12
+ return name === undefined
13
+ ? { oid: value }
14
+ : { oid: value, name: name, description: `desc-${name}` };
15
+ }
16
+
17
+ function oidStrings(list: Array<SnmpOid>): Array<string> {
18
+ return list.map((entry: SnmpOid) => {
19
+ return entry.oid;
20
+ });
21
+ }
22
+
23
+ describe("SnmpOidListUtil.normalizeOid", () => {
24
+ it("strips exactly one leading dot", () => {
25
+ expect(SnmpOidListUtil.normalizeOid(".1.3.6.1.2.1.1.3.0")).toBe(
26
+ "1.3.6.1.2.1.1.3.0",
27
+ );
28
+ });
29
+
30
+ it("leaves an already-canonical OID untouched", () => {
31
+ expect(SnmpOidListUtil.normalizeOid("1.3.6.1.2.1.1.3.0")).toBe(
32
+ "1.3.6.1.2.1.1.3.0",
33
+ );
34
+ });
35
+
36
+ it("trims surrounding whitespace", () => {
37
+ expect(SnmpOidListUtil.normalizeOid(" 1.3.6.1 ")).toBe("1.3.6.1");
38
+ });
39
+
40
+ it("returns an empty string for undefined and for blank input", () => {
41
+ expect(SnmpOidListUtil.normalizeOid(undefined)).toBe("");
42
+ expect(SnmpOidListUtil.normalizeOid(" ")).toBe("");
43
+ });
44
+
45
+ /*
46
+ * A second dot is not stripped: "..1.3" is malformed, and quietly turning
47
+ * it into a valid OID would hide a typo rather than surface it.
48
+ */
49
+ it("strips only the first leading dot", () => {
50
+ expect(SnmpOidListUtil.normalizeOid("..1.3.6.1")).toBe(".1.3.6.1");
51
+ expect(SnmpOidListUtil.isValidOid("..1.3.6.1")).toBe(false);
52
+ });
53
+ });
54
+
55
+ describe("SnmpOidListUtil.isValidOid", () => {
56
+ it("accepts dotted numeric OIDs with and without a leading dot", () => {
57
+ expect(SnmpOidListUtil.isValidOid("1.3.6.1.4.1.9.9.109.1.1.1.1.8.1")).toBe(
58
+ true,
59
+ );
60
+ expect(SnmpOidListUtil.isValidOid(".1.3.6.1")).toBe(true);
61
+ });
62
+
63
+ it("rejects symbolic names, empty strings and trailing dots", () => {
64
+ expect(SnmpOidListUtil.isValidOid("sysUpTime.0")).toBe(false);
65
+ expect(SnmpOidListUtil.isValidOid("")).toBe(false);
66
+ expect(SnmpOidListUtil.isValidOid("1.3.6.")).toBe(false);
67
+ expect(SnmpOidListUtil.isValidOid("1")).toBe(false);
68
+ });
69
+ });
70
+
71
+ describe("SnmpOidListUtil.validateOidList", () => {
72
+ const options: { max: number; label: string } = {
73
+ max: MAX_OIDS_PER_TEMPLATE,
74
+ label: "OID Collection Template",
75
+ };
76
+
77
+ it("returns the list with every OID normalized", () => {
78
+ const result: Array<SnmpOid> = SnmpOidListUtil.validateOidList(
79
+ [oid(".1.3.6.1.2.1.1.3.0", "uptime"), oid("1.3.6.1.4.1.9.1", "cisco")],
80
+ options,
81
+ );
82
+
83
+ expect(oidStrings(result)).toEqual([
84
+ "1.3.6.1.2.1.1.3.0",
85
+ "1.3.6.1.4.1.9.1",
86
+ ]);
87
+ expect(result[0]!.name).toBe("uptime");
88
+ expect(result[0]!.description).toBe("desc-uptime");
89
+ });
90
+
91
+ it("accepts an undefined or empty list", () => {
92
+ expect(SnmpOidListUtil.validateOidList(undefined, options)).toEqual([]);
93
+ expect(SnmpOidListUtil.validateOidList([], options)).toEqual([]);
94
+ });
95
+
96
+ /*
97
+ * Blank rows and duplicates are DROPPED, not refused, and that asymmetry is
98
+ * load-bearing. SnmpOidEditor's "Add OID" button persists
99
+ * {oid: "", name: "", description: ""} for a click somebody thought better
100
+ * of, and duplicates exist in data written before any validation did. If
101
+ * either threw, a device carrying one legacy artifact could never be linked
102
+ * to a template until somebody hunted the row down.
103
+ */
104
+ it("drops a blank row instead of refusing the save", () => {
105
+ const result: Array<SnmpOid> = SnmpOidListUtil.validateOidList(
106
+ [
107
+ oid("1.3.6.1.2.1.1.3.0", "uptime"),
108
+ { oid: "", name: "", description: "" },
109
+ ],
110
+ options,
111
+ );
112
+
113
+ expect(oidStrings(result)).toEqual(["1.3.6.1.2.1.1.3.0"]);
114
+ });
115
+
116
+ it("drops a duplicate, keeping the first spelling", () => {
117
+ const result: Array<SnmpOid> = SnmpOidListUtil.validateOidList(
118
+ [oid("1.3.6.1.2.1.1.3.0", "first"), oid(".1.3.6.1.2.1.1.3.0", "second")],
119
+ options,
120
+ );
121
+
122
+ expect(result).toHaveLength(1);
123
+ expect(result[0]!.name).toBe("first");
124
+ });
125
+
126
+ it("rejects a malformed OID and quotes the offending string", () => {
127
+ expect(() => {
128
+ return SnmpOidListUtil.validateOidList([oid("sysUpTime.0")], options);
129
+ }).toThrow(/"sysUpTime.0" is not a numeric OID/);
130
+ });
131
+
132
+ it("rejects a list over the cap and names the count and the limit", () => {
133
+ const tooMany: Array<SnmpOid> = Array.from(
134
+ { length: MAX_OIDS_PER_TEMPLATE + 1 },
135
+ (_unused: unknown, index: number) => {
136
+ return oid(`1.3.6.1.4.1.${index}`);
137
+ },
138
+ );
139
+
140
+ expect(() => {
141
+ return SnmpOidListUtil.validateOidList(tooMany, options);
142
+ }).toThrow(
143
+ new RegExp(
144
+ `${MAX_OIDS_PER_TEMPLATE + 1} OIDs is more than the limit of ${MAX_OIDS_PER_TEMPLATE}`,
145
+ ),
146
+ );
147
+ });
148
+
149
+ it("counts the cap AFTER sanitizing, so blanks cannot push a list over it", () => {
150
+ const atCapPlusBlanks: Array<SnmpOid> = [
151
+ ...Array.from(
152
+ { length: MAX_OIDS_PER_TEMPLATE },
153
+ (_unused: unknown, index: number) => {
154
+ return oid(`1.3.6.1.4.1.${index}`);
155
+ },
156
+ ),
157
+ { oid: "", name: "", description: "" },
158
+ { oid: " " },
159
+ ];
160
+
161
+ expect(
162
+ SnmpOidListUtil.validateOidList(atCapPlusBlanks, options),
163
+ ).toHaveLength(MAX_OIDS_PER_TEMPLATE);
164
+ });
165
+
166
+ it("truncates an over-long name rather than shipping it to every device", () => {
167
+ const result: Array<SnmpOid> = SnmpOidListUtil.validateOidList(
168
+ [oid("1.3.6.1.4.1.9.1", "x".repeat(MAX_OID_NAME_LENGTH + 50))],
169
+ options,
170
+ );
171
+
172
+ expect(result[0]!.name).toHaveLength(MAX_OID_NAME_LENGTH);
173
+ });
174
+
175
+ it("accepts a list exactly at the cap", () => {
176
+ const exactly: Array<SnmpOid> = Array.from(
177
+ { length: MAX_OIDS_PER_TEMPLATE },
178
+ (_unused: unknown, index: number) => {
179
+ return oid(`1.3.6.1.4.1.${index}`);
180
+ },
181
+ );
182
+
183
+ expect(SnmpOidListUtil.validateOidList(exactly, options)).toHaveLength(
184
+ MAX_OIDS_PER_TEMPLATE,
185
+ );
186
+ });
187
+ });
188
+
189
+ describe("SnmpOidListUtil.mergeOidLists", () => {
190
+ it("returns the device list when there is no template", () => {
191
+ const merged: Array<SnmpOid> = SnmpOidListUtil.mergeOidLists(undefined, [
192
+ oid("1.3.6.1.4.1.1"),
193
+ oid("1.3.6.1.4.1.2"),
194
+ ]);
195
+
196
+ expect(oidStrings(merged)).toEqual(["1.3.6.1.4.1.1", "1.3.6.1.4.1.2"]);
197
+ });
198
+
199
+ it("returns the template list when the device has none", () => {
200
+ const merged: Array<SnmpOid> = SnmpOidListUtil.mergeOidLists(
201
+ [oid("1.3.6.1.4.1.1")],
202
+ undefined,
203
+ );
204
+
205
+ expect(oidStrings(merged)).toEqual(["1.3.6.1.4.1.1"]);
206
+ });
207
+
208
+ it("returns an empty list when neither side has anything", () => {
209
+ expect(SnmpOidListUtil.mergeOidLists(undefined, undefined)).toEqual([]);
210
+ });
211
+
212
+ /*
213
+ * Template-first ordering is not cosmetic. resolveEffectiveOids truncates
214
+ * from the END, so the shared items a whole device type depends on have to
215
+ * be the stable prefix — otherwise one device-local addition could push a
216
+ * template OID off the end.
217
+ */
218
+ it("puts template entries first, in template order, then device additions", () => {
219
+ const merged: Array<SnmpOid> = SnmpOidListUtil.mergeOidLists(
220
+ [oid("1.3.6.1.4.1.9.1", "cpu"), oid("1.3.6.1.4.1.9.2", "memory")],
221
+ [oid("1.3.6.1.4.1.99.1", "local-sensor")],
222
+ );
223
+
224
+ expect(oidStrings(merged)).toEqual([
225
+ "1.3.6.1.4.1.9.1",
226
+ "1.3.6.1.4.1.9.2",
227
+ "1.3.6.1.4.1.99.1",
228
+ ]);
229
+ });
230
+
231
+ it("collapses a duplicate to one entry, keeping the device's name at the template's position", () => {
232
+ const merged: Array<SnmpOid> = SnmpOidListUtil.mergeOidLists(
233
+ [
234
+ oid("1.3.6.1.4.1.9.1", "template-cpu"),
235
+ oid("1.3.6.1.4.1.9.2", "template-memory"),
236
+ ],
237
+ [oid("1.3.6.1.4.1.9.1", "device-cpu")],
238
+ );
239
+
240
+ expect(merged).toHaveLength(2);
241
+ // The template's POSITION survives...
242
+ expect(merged[0]!.oid).toBe("1.3.6.1.4.1.9.1");
243
+ // ...and the DEVICE's content wins.
244
+ expect(merged[0]!.name).toBe("device-cpu");
245
+ expect(merged[0]!.description).toBe("desc-device-cpu");
246
+ expect(merged[1]!.name).toBe("template-memory");
247
+ });
248
+
249
+ it("dedupes across normalization, so a leading dot is not a second entry", () => {
250
+ const merged: Array<SnmpOid> = SnmpOidListUtil.mergeOidLists(
251
+ [oid(".1.3.6.1", "template")],
252
+ [oid("1.3.6.1", "device")],
253
+ );
254
+
255
+ expect(merged).toHaveLength(1);
256
+ expect(merged[0]!.oid).toBe("1.3.6.1");
257
+ expect(merged[0]!.name).toBe("device");
258
+ });
259
+
260
+ it("normalizes every surviving entry so criteria can compare with equality", () => {
261
+ const merged: Array<SnmpOid> = SnmpOidListUtil.mergeOidLists(
262
+ [oid(".1.3.6.1.4.1.9.1")],
263
+ [oid(" 1.3.6.1.4.1.9.2 ")],
264
+ );
265
+
266
+ expect(oidStrings(merged)).toEqual(["1.3.6.1.4.1.9.1", "1.3.6.1.4.1.9.2"]);
267
+ });
268
+
269
+ /*
270
+ * Persisted data can predate validation, and one bad row must not stop a
271
+ * device polling the other ninety-nine. Rejection belongs to the write
272
+ * path; the poll path drops.
273
+ */
274
+ it("drops blank and malformed rows instead of throwing", () => {
275
+ const merged: Array<SnmpOid> = SnmpOidListUtil.mergeOidLists(
276
+ [oid(""), oid("1.3.6.1.4.1.9.1", "good")],
277
+ [oid("not.an.oid"), oid("1.3.6.1.4.1.9.2", "also-good")],
278
+ );
279
+
280
+ expect(oidStrings(merged)).toEqual(["1.3.6.1.4.1.9.1", "1.3.6.1.4.1.9.2"]);
281
+ });
282
+
283
+ it("does not mutate either input list", () => {
284
+ const templateOids: Array<SnmpOid> = [oid(".1.3.6.1.4.1.9.1", "cpu")];
285
+ const deviceOids: Array<SnmpOid> = [oid("1.3.6.1.4.1.99.1", "local")];
286
+
287
+ SnmpOidListUtil.mergeOidLists(templateOids, deviceOids);
288
+
289
+ expect(templateOids[0]!.oid).toBe(".1.3.6.1.4.1.9.1");
290
+ expect(deviceOids).toHaveLength(1);
291
+ });
292
+ });
293
+
294
+ describe("SnmpOidListUtil.resolveEffectiveOids", () => {
295
+ it("reports no truncation for a list within the cap", () => {
296
+ const resolution: {
297
+ oids: Array<SnmpOid>;
298
+ truncatedCount: number;
299
+ } = SnmpOidListUtil.resolveEffectiveOids({
300
+ templateOids: [oid("1.3.6.1.4.1.9.1")],
301
+ deviceOids: [oid("1.3.6.1.4.1.99.1")],
302
+ });
303
+
304
+ expect(resolution.truncatedCount).toBe(0);
305
+ expect(resolution.oids).toHaveLength(2);
306
+ });
307
+
308
+ it("truncates to the cap and keeps every template entry", () => {
309
+ const templateOids: Array<SnmpOid> = Array.from(
310
+ { length: MAX_EFFECTIVE_OIDS_PER_DEVICE },
311
+ (_unused: unknown, index: number) => {
312
+ return oid(`1.3.6.1.4.1.9.${index}`, `template-${index}`);
313
+ },
314
+ );
315
+ const deviceOids: Array<SnmpOid> = [
316
+ oid("1.3.6.1.4.1.99.1", "device-extra"),
317
+ ];
318
+
319
+ const resolution: {
320
+ oids: Array<SnmpOid>;
321
+ truncatedCount: number;
322
+ } = SnmpOidListUtil.resolveEffectiveOids({
323
+ templateOids: templateOids,
324
+ deviceOids: deviceOids,
325
+ });
326
+
327
+ expect(resolution.oids).toHaveLength(MAX_EFFECTIVE_OIDS_PER_DEVICE);
328
+ expect(resolution.truncatedCount).toBe(1);
329
+ // The device addition is what got dropped, not a template OID.
330
+ expect(oidStrings(resolution.oids)).not.toContain("1.3.6.1.4.1.99.1");
331
+ expect(resolution.oids[0]!.name).toBe("template-0");
332
+ });
333
+
334
+ it("returns an empty list when nothing is configured on either side", () => {
335
+ expect(
336
+ SnmpOidListUtil.resolveEffectiveOids({
337
+ templateOids: undefined,
338
+ deviceOids: undefined,
339
+ }),
340
+ ).toEqual({ oids: [], truncatedCount: 0 });
341
+ });
342
+ });
343
+
344
+ describe("SnmpOidListUtil.getAlreadyCollectedBy", () => {
345
+ /*
346
+ * The advisory that exists because of issue #3507: the reporter was about
347
+ * to hand-type a hundred per-port OIDs the interface walk already collects.
348
+ */
349
+ it("flags ifInOctets and ifOutOctets", () => {
350
+ expect(
351
+ SnmpOidListUtil.getAlreadyCollectedBy("1.3.6.1.2.1.2.2.1.10.3"),
352
+ ).toContain("inbound bits/second");
353
+ expect(
354
+ SnmpOidListUtil.getAlreadyCollectedBy("1.3.6.1.2.1.2.2.1.16.3"),
355
+ ).toContain("outbound bits/second");
356
+ });
357
+
358
+ it("flags ifOperStatus", () => {
359
+ expect(
360
+ SnmpOidListUtil.getAlreadyCollectedBy(".1.3.6.1.2.1.2.2.1.8.1"),
361
+ ).toContain("up/down");
362
+ });
363
+
364
+ it("flags the 64-bit ifXTable octet counters", () => {
365
+ expect(
366
+ SnmpOidListUtil.getAlreadyCollectedBy("1.3.6.1.2.1.31.1.1.1.6.3"),
367
+ ).toContain("inbound bits/second");
368
+ expect(
369
+ SnmpOidListUtil.getAlreadyCollectedBy("1.3.6.1.2.1.31.1.1.1.10.3"),
370
+ ).toContain("outbound bits/second");
371
+ });
372
+
373
+ /*
374
+ * The half of ifTable the advisory must stay quiet about. These columns
375
+ * ARE parsed by the walk but never become a series a user can chart or
376
+ * alert on — in/out errors collapse into one combined rate, discards are
377
+ * thrown away, and speed and admin status stop at an inventory column. For
378
+ * these, hand-typing the OID is the only thing that works today, so
379
+ * claiming "already collected" would be a lie that costs the operator
380
+ * their data.
381
+ */
382
+ it("stays quiet about ifInErrors and ifOutErrors, which exist only as a combined rate", () => {
383
+ expect(
384
+ SnmpOidListUtil.getAlreadyCollectedBy("1.3.6.1.2.1.2.2.1.14.3"),
385
+ ).toBeUndefined();
386
+ expect(
387
+ SnmpOidListUtil.getAlreadyCollectedBy("1.3.6.1.2.1.2.2.1.20.3"),
388
+ ).toBeUndefined();
389
+ });
390
+
391
+ it("stays quiet about discards, which are parsed and dropped", () => {
392
+ expect(
393
+ SnmpOidListUtil.getAlreadyCollectedBy("1.3.6.1.2.1.2.2.1.13.3"),
394
+ ).toBeUndefined();
395
+ expect(
396
+ SnmpOidListUtil.getAlreadyCollectedBy("1.3.6.1.2.1.2.2.1.19.3"),
397
+ ).toBeUndefined();
398
+ });
399
+
400
+ it("stays quiet about ifSpeed and ifAdminStatus, which stop at an inventory column", () => {
401
+ expect(
402
+ SnmpOidListUtil.getAlreadyCollectedBy("1.3.6.1.2.1.2.2.1.5.3"),
403
+ ).toBeUndefined();
404
+ expect(
405
+ SnmpOidListUtil.getAlreadyCollectedBy("1.3.6.1.2.1.2.2.1.7.3"),
406
+ ).toBeUndefined();
407
+ });
408
+
409
+ /*
410
+ * The system group is offered by the editor's own built-in quick-add list,
411
+ * so warning about it would have the product contradict itself.
412
+ */
413
+ it("stays quiet about the system group, which the editor itself offers", () => {
414
+ expect(
415
+ SnmpOidListUtil.getAlreadyCollectedBy("1.3.6.1.2.1.1.3.0"),
416
+ ).toBeUndefined();
417
+ });
418
+
419
+ it("does not flag ifNumber, which is a scalar outside the walked tables", () => {
420
+ expect(
421
+ SnmpOidListUtil.getAlreadyCollectedBy("1.3.6.1.2.1.2.1.0"),
422
+ ).toBeUndefined();
423
+ });
424
+
425
+ it("does not flag a vendor CPU OID, which is exactly what templates are for", () => {
426
+ expect(
427
+ SnmpOidListUtil.getAlreadyCollectedBy("1.3.6.1.4.1.9.9.109.1.1.1.1.8.1"),
428
+ ).toBeUndefined();
429
+ });
430
+ });
431
+
432
+ describe("SnmpOidListUtil caps", () => {
433
+ /*
434
+ * This equality is the promise the design makes: everything you are
435
+ * allowed to configure is everything that gets charted. Before it, the
436
+ * device had no configuration cap at all and the metric writer silently
437
+ * kept the first 50.
438
+ */
439
+ it("charts every OID a device is allowed to collect", () => {
440
+ expect(MAX_OID_METRIC_SERIES).toBe(MAX_EFFECTIVE_OIDS_PER_DEVICE);
441
+ });
442
+
443
+ /*
444
+ * The property that makes the poll-time truncation unreachable. Without it
445
+ * a full template plus a full device-local list merges past the effective
446
+ * cap, and the entries sliced off are always the operator's own - lost
447
+ * because somebody else grew the shared template.
448
+ */
449
+ it("composes: a full template plus a full device list still fits", () => {
450
+ expect(MAX_OIDS_PER_TEMPLATE + MAX_DEVICE_SPECIFIC_OIDS).toBe(
451
+ MAX_EFFECTIVE_OIDS_PER_DEVICE,
452
+ );
453
+ });
454
+ });