@oneuptime/common 12.0.32 → 12.0.34

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 (1191) hide show
  1. package/Models/AnalyticsModels/RumSession.ts +117 -1
  2. package/Models/AnalyticsModels/RumSessionChunk.ts +13 -0
  3. package/Models/AnalyticsModels/Span.ts +14 -0
  4. package/Models/DatabaseModels/AlertCustomField.ts +77 -3
  5. package/Models/DatabaseModels/ApiKeyPermission.ts +3 -27
  6. package/Models/DatabaseModels/EnterpriseLicense.ts +56 -0
  7. package/Models/DatabaseModels/IncidentCustomField.ts +77 -3
  8. package/Models/DatabaseModels/Index.ts +10 -0
  9. package/Models/DatabaseModels/InventoryItemCustomField.ts +77 -3
  10. package/Models/DatabaseModels/Monitor.ts +76 -0
  11. package/Models/DatabaseModels/MonitorCustomField.ts +77 -3
  12. package/Models/DatabaseModels/NetworkAlertPolicy.ts +690 -0
  13. package/Models/DatabaseModels/NetworkDevice.ts +176 -1
  14. package/Models/DatabaseModels/NetworkSite.ts +201 -2
  15. package/Models/DatabaseModels/NetworkSiteType.ts +102 -3
  16. package/Models/DatabaseModels/NetworkSnmpCredentialProfile.ts +841 -0
  17. package/Models/DatabaseModels/OnCallDutyPolicyCustomField.ts +77 -3
  18. package/Models/DatabaseModels/RumApplication.ts +6 -6
  19. package/Models/DatabaseModels/ScheduledMaintenanceCustomField.ts +77 -3
  20. package/Models/DatabaseModels/StatusPageCustomField.ts +77 -3
  21. package/Models/DatabaseModels/TeamCustomField.ts +77 -3
  22. package/Models/DatabaseModels/TeamMember.ts +0 -9
  23. package/Models/DatabaseModels/TeamMemberCustomField.ts +77 -3
  24. package/Models/DatabaseModels/TeamPermission.ts +3 -24
  25. package/Models/DatabaseModels/TelemetryException.ts +119 -0
  26. package/Models/DatabaseModels/TelemetryIngestionKey.ts +260 -0
  27. package/Models/DatabaseModels/UserNotificationEmailRollupBatch.ts +334 -0
  28. package/Models/DatabaseModels/UserNotificationEmailRollupItem.ts +370 -0
  29. package/Models/DatabaseModels/UserNotificationEmailRollupSetting.ts +282 -0
  30. package/Models/DatabaseModels/UserTelegram.ts +0 -4
  31. package/Scripts/benchmark-fanin-capacity.js +181 -0
  32. package/Server/API/EnterpriseLicenseAPI.ts +391 -64
  33. package/Server/API/LlmProviderAPI.ts +137 -22
  34. package/Server/API/TelemetryAPI.ts +1284 -164
  35. package/Server/API/UserNotificationSettingAPI.ts +55 -0
  36. package/Server/API/UserTelegramAPI.ts +48 -4
  37. package/Server/EnvironmentConfig.ts +49 -2
  38. package/Server/Infrastructure/Postgres/SchemaMigrations/1790700000000-AddNetworkSiteTypeParentHierarchy.ts +55 -0
  39. package/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddEnterpriseLicenseUsageProvenance.ts +31 -0
  40. package/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddTelemetryExceptionErrorClass.ts +124 -0
  41. package/Server/Infrastructure/Postgres/SchemaMigrations/1791000000000-AddUserNotificationEmailRollup.ts +132 -0
  42. package/Server/Infrastructure/Postgres/SchemaMigrations/1791100000000-AddUserNotificationEmailRollupSetting.ts +79 -0
  43. package/Server/Infrastructure/Postgres/SchemaMigrations/1791200000000-AddNetworkSnmpCredentialProfilesAndAlertPolicies.ts +191 -0
  44. package/Server/Infrastructure/Postgres/SchemaMigrations/1791300000000-AddTelemetryIngestionKeyType.ts +91 -0
  45. package/Server/Infrastructure/Postgres/SchemaMigrations/1791400000000-SessionReplayRecordEverySessionByDefault.ts +67 -0
  46. package/Server/Infrastructure/Postgres/SchemaMigrations/1791500000000-WidenCustomFieldDropdownOptions.ts +139 -0
  47. package/Server/Infrastructure/Postgres/SchemaMigrations/1791600000000-AddCustomFieldValueMapping.ts +121 -0
  48. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +20 -0
  49. package/Server/Infrastructure/QueueWorker.ts +59 -23
  50. package/Server/Infrastructure/Semaphore.ts +2 -0
  51. package/Server/Middleware/BearerTokenAuthorization.ts +12 -0
  52. package/Server/Middleware/ProjectAuthorization.ts +11 -0
  53. package/Server/Middleware/SCIMAuthorization.ts +12 -0
  54. package/Server/Middleware/TelemetryIngest.ts +464 -7
  55. package/Server/Services/AIBillingService.ts +101 -27
  56. package/Server/Services/AccessTokenService.ts +1 -0
  57. package/Server/Services/AlertCustomFieldService.ts +98 -0
  58. package/Server/Services/AlertService.ts +37 -0
  59. package/Server/Services/ApiKeyPermissionService.ts +461 -29
  60. package/Server/Services/CustomFieldMappingService.ts +879 -0
  61. package/Server/Services/EnterpriseLicenseInstanceService.ts +197 -0
  62. package/Server/Services/EnterpriseLicenseService.ts +55 -0
  63. package/Server/Services/GlobalConfigService.ts +194 -0
  64. package/Server/Services/IncidentCustomFieldService.ts +98 -0
  65. package/Server/Services/IncidentService.ts +35 -0
  66. package/Server/Services/Index.ts +10 -0
  67. package/Server/Services/MetricService.ts +194 -0
  68. package/Server/Services/MonitorService.ts +175 -21
  69. package/Server/Services/MonitorStatusTimelineService.ts +150 -8
  70. package/Server/Services/MonitorTemplateService.ts +217 -1
  71. package/Server/Services/NetworkAlertPolicyEngineService.ts +2159 -0
  72. package/Server/Services/NetworkAlertPolicyService.ts +944 -0
  73. package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +87 -35
  74. package/Server/Services/NetworkDeviceAutoImportRuleService.ts +60 -15
  75. package/Server/Services/NetworkDeviceService.ts +1032 -73
  76. package/Server/Services/NetworkSiteService.ts +1502 -129
  77. package/Server/Services/NetworkSiteTypeService.ts +1216 -0
  78. package/Server/Services/NetworkSnmpCredentialProfileService.ts +238 -0
  79. package/Server/Services/NotificationService.ts +118 -28
  80. package/Server/Services/ProjectService.ts +127 -48
  81. package/Server/Services/RoutineEmailSettingsService.ts +73 -0
  82. package/Server/Services/RumSessionReplayViewService.ts +104 -24
  83. package/Server/Services/ScheduledMaintenanceCustomFieldService.ts +98 -0
  84. package/Server/Services/ScheduledMaintenanceService.ts +32 -0
  85. package/Server/Services/StatusPagePrivateUserService.ts +103 -3
  86. package/Server/Services/TeamMemberService.ts +78 -0
  87. package/Server/Services/TeamPermissionService.ts +235 -3
  88. package/Server/Services/TelemetryIngestionKeyService.ts +722 -19
  89. package/Server/Services/UserNotificationEmailRollupBatchService.ts +78 -0
  90. package/Server/Services/UserNotificationEmailRollupItemService.ts +79 -0
  91. package/Server/Services/UserNotificationEmailRollupSettingService.ts +113 -0
  92. package/Server/Services/UserNotificationSettingService.ts +90 -25
  93. package/Server/Services/UserService.ts +95 -0
  94. package/Server/Services/UserTelegramService.ts +326 -5
  95. package/Server/Types/Database/QueryHelper.ts +4 -2
  96. package/Server/Utils/AI/Chat/ObservabilityChatPrompt.ts +14 -3
  97. package/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.ts +10 -0
  98. package/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.ts +10 -0
  99. package/Server/Utils/AI/SRE/Insights/InsightTriageRunner.ts +62 -1
  100. package/Server/Utils/AI/Toolbox/AlertTools.ts +15 -1
  101. package/Server/Utils/APIKey/AccessPermission.ts +5 -2
  102. package/Server/Utils/Billing/BillingFailureNoticeThrottle.ts +80 -0
  103. package/Server/Utils/CustomField/CustomFieldDefinitionMappingHooks.ts +54 -0
  104. package/Server/Utils/CustomField/CustomFieldMappingRegistry.ts +415 -0
  105. package/Server/Utils/CustomField/CustomFieldMappingValidator.ts +335 -0
  106. package/Server/Utils/DataSource/EgressGuard.ts +177 -8
  107. package/Server/Utils/DataSource/HttpFetch.ts +9 -2
  108. package/Server/Utils/EmailRollup/EmailRollupConstants.ts +131 -0
  109. package/Server/Utils/EmailRollup/EmailRollupFlushRunner.ts +925 -0
  110. package/Server/Utils/EmailRollup/EmailRollupRenderer.ts +781 -0
  111. package/Server/Utils/EmailRollup/EmailRollupWriter.ts +368 -0
  112. package/Server/Utils/FrontendEnvironment.ts +40 -0
  113. package/Server/Utils/LLM/LLMService.ts +78 -0
  114. package/Server/Utils/LogRedaction.ts +28 -0
  115. package/Server/Utils/Logger.ts +90 -1
  116. package/Server/Utils/Monitor/Criteria/CompareCriteria.ts +338 -77
  117. package/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.ts +190 -0
  118. package/Server/Utils/Monitor/Criteria/EvaluateOverTime.ts +9 -2
  119. package/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.ts +30 -4
  120. package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +61 -1
  121. package/Server/Utils/Monitor/MonitorAlert.ts +29 -6
  122. package/Server/Utils/Monitor/MonitorCriteriaDataExtractor.ts +14 -0
  123. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +159 -15
  124. package/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.ts +255 -4
  125. package/Server/Utils/Monitor/MonitorIncident.ts +22 -6
  126. package/Server/Utils/Monitor/MonitorMetricUtil.ts +41 -0
  127. package/Server/Utils/Monitor/MonitorTemplateUtil.ts +72 -0
  128. package/Server/Utils/Monitor/NetworkDeviceHydrationUtil.ts +499 -19
  129. package/Server/Utils/Monitor/NetworkDeviceMetricUtil.ts +66 -10
  130. package/Server/Utils/Monitor/NetworkDeviceWalkUtil.ts +238 -44
  131. package/Server/Utils/Monitor/NetworkInventoryUtil.ts +146 -39
  132. package/Server/Utils/Monitor/SeriesContextEnricher.ts +304 -0
  133. package/Server/Utils/NetworkDevice/DeviceHealthAggregation.ts +31 -18
  134. package/Server/Utils/NetworkSite/NetworkSiteHierarchyLock.ts +213 -0
  135. package/Server/Utils/OutboundUserAgent.ts +152 -0
  136. package/Server/Utils/SSRFProtection.ts +217 -10
  137. package/Server/Utils/SessionReplay/SessionReplayGateCache.ts +239 -138
  138. package/Server/Utils/SessionReplay/SessionReplayHealthCounters.ts +305 -0
  139. package/Server/Utils/SessionReplay/SessionReplayReadService.ts +1430 -289
  140. package/Server/Utils/StartServer.ts +53 -36
  141. package/Server/Utils/TelegramVerificationToken.ts +185 -0
  142. package/Server/Utils/Telemetry/CaptureSpan.ts +32 -8
  143. package/Server/Utils/Telemetry/ErrorClassResolver.ts +120 -0
  144. package/Server/Utils/Telemetry/PinServiceName.ts +197 -0
  145. package/Server/Utils/Telemetry/SpanUtil.ts +33 -0
  146. package/Server/Utils/Telemetry/TelemetryFanInWriter.ts +38 -16
  147. package/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.ts +92 -0
  148. package/Server/Utils/Telemetry/TelemetryIngestionKeyRateLimiter.ts +217 -0
  149. package/Server/Utils/Telemetry.ts +198 -51
  150. package/Server/Utils/VM/VMAPI.ts +1 -0
  151. package/Server/Utils/VM/VMRunner.ts +975 -95
  152. package/Server/Views/Partials/SensitiveUrlToken.ejs +140 -0
  153. package/Tests/App/AdminDashboard/AdminHeaderSmallScreens.test.tsx +202 -0
  154. package/Tests/App/Dashboard/AddNeighborToMonitoringModal.test.tsx +134 -33
  155. package/Tests/App/Dashboard/AskAiSuggestedPrompts.test.ts +279 -0
  156. package/Tests/App/Dashboard/DashboardEditPermissions.test.tsx +517 -0
  157. package/Tests/App/Dashboard/DashboardHeaderSmallScreens.test.tsx +404 -0
  158. package/Tests/App/Dashboard/DashboardVariablesDiscard.test.tsx +26 -0
  159. package/Tests/App/Dashboard/DeviceStatusHero.test.tsx +588 -0
  160. package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +486 -9
  161. package/Tests/App/Dashboard/MonitorCreateFromMonitorBackedDevice.test.tsx +632 -0
  162. package/Tests/App/Dashboard/MonitorRecommendationCreateProgress.test.tsx +682 -0
  163. package/Tests/App/Dashboard/MonitorTypePicker.test.tsx +4 -2
  164. package/Tests/App/Dashboard/NetworkDeviceCreateFormMonitorBinding.test.tsx +676 -0
  165. package/Tests/App/Dashboard/NetworkDeviceCreateFormPingMonitor.test.tsx +791 -0
  166. package/Tests/App/Dashboard/NetworkDeviceCreateFormProbeAndSnmp.test.tsx +833 -0
  167. package/Tests/App/Dashboard/NetworkDeviceCriteriaFilter.test.ts +161 -0
  168. package/Tests/App/Dashboard/NetworkDeviceSettingsMonitoringSection.test.tsx +458 -0
  169. package/Tests/App/Dashboard/NetworkSideMenu.test.tsx +41 -5
  170. package/Tests/App/Dashboard/NotificationEmailPreferences.test.tsx +399 -0
  171. package/Tests/App/Dashboard/PingMonitorProvisioning.test.ts +368 -0
  172. package/Tests/App/Dashboard/RecommendationCard.test.tsx +796 -0
  173. package/Tests/App/Dashboard/RecommendationToolbar.test.tsx +519 -0
  174. package/Tests/App/Dashboard/RecommendationsList.test.tsx +661 -0
  175. package/Tests/App/Dashboard/UseBulkCreatePingMonitors.test.tsx +899 -0
  176. package/Tests/App/Dashboard/UseBulkSnmpCredentialProfileActions.test.tsx +732 -0
  177. package/Tests/App/SensitiveUrlTokenBootstrap.test.ts +256 -0
  178. package/Tests/App/StatusPage/StatusPageIndexPageRobotsMeta.test.ts +11 -1
  179. package/Tests/App/StatusPage/StatusPageLastUpdated.test.tsx +263 -0
  180. package/Tests/App/StatusPage/StatusPageLoginCodeBootstrap.test.ts +9 -4
  181. package/Tests/App/StatusPage/StatusPageOverviewLiveAndSearch.test.tsx +753 -0
  182. package/Tests/App/StatusPage/StatusPageResourceSearchBox.test.tsx +224 -0
  183. package/Tests/Models/AnalyticsModels/RumSessionReplayColumns.test.ts +262 -0
  184. package/Tests/Models/CustomFieldMappingColumns.test.ts +166 -0
  185. package/Tests/Models/DatabaseModels/SessionReplayModels.test.ts +20 -6
  186. package/Tests/Models/NetworkSiteHierarchy.test.ts +41 -4
  187. package/Tests/ResponsiveVisibility.test.ts +115 -0
  188. package/Tests/ResponsiveVisibility.ts +183 -0
  189. package/Tests/Server/API/EnterpriseLicenseReportUserCount.test.ts +951 -7
  190. package/Tests/Server/API/LlmProviderConnectionTest.test.ts +522 -0
  191. package/Tests/Server/API/SessionReplayAPI.test.ts +1940 -216
  192. package/Tests/Server/API/UserNotificationSettingAPI.test.ts +186 -0
  193. package/Tests/Server/API/UserTelegramAPISecurity.test.ts +231 -0
  194. package/Tests/Server/EnvironmentConfigFrontendSecurity.test.ts +234 -0
  195. package/Tests/Server/Infrastructure/Postgres/CustomFieldValueMappingMigration.test.ts +202 -0
  196. package/Tests/Server/Infrastructure/Postgres/InventoryItemArchiveMigration.test.ts +41 -0
  197. package/Tests/Server/Infrastructure/Postgres/NetworkSnmpCredentialProfilesAndAlertPoliciesMigration.test.ts +854 -0
  198. package/Tests/Server/Infrastructure/Postgres/SchemaMigrationsOrdering.test.ts +18 -0
  199. package/Tests/Server/Infrastructure/Postgres/SessionReplayRecordEverySessionByDefaultMigration.test.ts +169 -0
  200. package/Tests/Server/Infrastructure/Postgres/UserNotificationEmailRollupTableMigration.test.ts +535 -0
  201. package/Tests/Server/Infrastructure/QueueWorkerTimeout.test.ts +210 -0
  202. package/Tests/Server/Infrastructure/TelemetryExporterDeploymentConfig.test.ts +130 -0
  203. package/Tests/Server/Middleware/ProjectAuthorizationApiKeyMiddleware.test.ts +4 -1
  204. package/Tests/Server/Middleware/TelemetryIngestBrowserKey.test.ts +1163 -0
  205. package/Tests/Server/Middleware/TelemetryIngestTokenLog.test.ts +5 -3
  206. package/Tests/Server/Services/AIChatPrivacyPin.test.ts +560 -0
  207. package/Tests/Server/Services/AddTelemetryIngestionKeyTypeMigration.test.ts +555 -0
  208. package/Tests/Server/Services/ApiKeyPermissionSecurity.test.ts +678 -0
  209. package/Tests/Server/Services/ApiKeyPermissionService.test.ts +276 -28
  210. package/Tests/Server/Services/BillingRechargeOwnerEmailGuards.test.ts +783 -0
  211. package/Tests/Server/Services/CustomFieldDropdownOptionsColumnWidth.test.ts +431 -0
  212. package/Tests/Server/Services/CustomFieldMappingService.test.ts +850 -0
  213. package/Tests/Server/Services/DiscoveryScanClaimHookFreeSafety.test.ts +32 -0
  214. package/Tests/Server/Services/EnterpriseLicenseInstanceServiceDeletionUsage.test.ts +707 -0
  215. package/Tests/Server/Services/EnterpriseLicenseServiceUsageAggregationLock.test.ts +329 -0
  216. package/Tests/Server/Services/GlobalConfigService.test.ts +414 -1
  217. package/Tests/Server/Services/MetricRawEntityKeyPrune.test.ts +592 -0
  218. package/Tests/Server/Services/MonitorServiceDeleteNetworkDeviceCleanup.test.ts +294 -0
  219. package/Tests/Server/Services/MonitorStatusBridgeProbePath.test.ts +802 -0
  220. package/Tests/Server/Services/MonitorStatusTimelineService.test.ts +72 -2
  221. package/Tests/Server/Services/NetworkAlertPolicyEngineHooks.test.ts +752 -0
  222. package/Tests/Server/Services/NetworkAlertPolicyEngineService.test.ts +1849 -0
  223. package/Tests/Server/Services/NetworkAlertPolicyModel.test.ts +1793 -0
  224. package/Tests/Server/Services/NetworkDeviceAutoImportRuleEngineService.test.ts +273 -5
  225. package/Tests/Server/Services/NetworkDeviceAutoImportRuleService.test.ts +97 -12
  226. package/Tests/Server/Services/NetworkDeviceAutoMonitorLifecycle.test.ts +148 -3
  227. package/Tests/Server/Services/NetworkDeviceMonitorBindingUpdateGuard.test.ts +514 -0
  228. package/Tests/Server/Services/NetworkDeviceMonitorStatusStamp.test.ts +447 -58
  229. package/Tests/Server/Services/NetworkDeviceMonitoringMethodTransition.test.ts +739 -0
  230. package/Tests/Server/Services/NetworkDevicePollingTenancy.test.ts +501 -0
  231. package/Tests/Server/Services/NetworkDeviceSiteDefaultProbe.test.ts +432 -0
  232. package/Tests/Server/Services/NetworkSiteMonitoringDefaults.test.ts +498 -0
  233. package/Tests/Server/Services/NetworkSiteRollupPolicyAndMaintenance.test.ts +337 -55
  234. package/Tests/Server/Services/NetworkSiteService.test.ts +1868 -131
  235. package/Tests/Server/Services/NetworkSiteTypeService.test.ts +1109 -0
  236. package/Tests/Server/Services/NetworkSnmpCredentialProfileModel.test.ts +926 -0
  237. package/Tests/Server/Services/NetworkSnmpCredentialProfileService.test.ts +796 -0
  238. package/Tests/Server/Services/ProjectServiceNetworkSiteTypeDefaults.test.ts +214 -0
  239. package/Tests/Server/Services/RoutineEmailSettingsPostgres.test.ts +329 -0
  240. package/Tests/Server/Services/RumSessionReplayViewService.test.ts +267 -0
  241. package/Tests/Server/Services/StatusPagePrivateUserEmailChangePasswordResetExpiry.test.ts +269 -0
  242. package/Tests/Server/Services/TeamMemberAutoAcceptInvitation.test.ts +9 -0
  243. package/Tests/Server/Services/TeamMemberInviteRegistrationToken.test.ts +9 -0
  244. package/Tests/Server/Services/TeamPrivilegeEscalation.test.ts +834 -0
  245. package/Tests/Server/Services/TelemetryIngestionKeyPolicyResolution.test.ts +814 -0
  246. package/Tests/Server/Services/TelemetryIngestionKeyValidation.test.ts +998 -0
  247. package/Tests/Server/Services/UserEmailChangePasswordResetExpiry.test.ts +472 -0
  248. package/Tests/Server/Services/UserNotificationEmailRollupModels.test.ts +569 -0
  249. package/Tests/Server/Services/UserNotificationEmailRollupSettingModel.test.ts +314 -0
  250. package/Tests/Server/Services/UserNotificationEmailRollupSettingService.test.ts +409 -0
  251. package/Tests/Server/Services/UserNotificationSettingRollupRouting.test.ts +997 -0
  252. package/Tests/Server/Services/UserNotificationSettingWorkspaceChannels.test.ts +110 -1
  253. package/Tests/Server/Services/UserTelegramVerificationSecurity.test.ts +688 -0
  254. package/Tests/Server/Types/Database/Permissions/DashboardAccessPermission.test.ts +321 -0
  255. package/Tests/Server/Types/Database/QueryHelperOperators.test.ts +17 -0
  256. package/Tests/Server/Utils/AI/AlertMonitorFilters.test.ts +124 -0
  257. package/Tests/Server/Utils/AI/Insights/InsightTriageRunner.test.ts +208 -0
  258. package/Tests/Server/Utils/AI/LLMServiceToolCalling.test.ts +235 -0
  259. package/Tests/Server/Utils/AI/ObservabilityChatPrompt.test.ts +253 -0
  260. package/Tests/Server/Utils/AI/SRE/Insights/FixRouting.test.ts +497 -0
  261. package/Tests/Server/Utils/AI/Toolbox/Serializer.test.ts +383 -0
  262. package/Tests/Server/Utils/APIKey/AccessPermission.test.ts +7 -3
  263. package/Tests/Server/Utils/AnalyticsDatabase/ClusterConfig.test.ts +315 -0
  264. package/Tests/Server/Utils/Captcha.test.ts +422 -0
  265. package/Tests/Server/Utils/CustomField/CustomFieldMappingValidator.test.ts +437 -0
  266. package/Tests/Server/Utils/DataSource/EgressGuard.test.ts +300 -11
  267. package/Tests/Server/Utils/DataSource/HttpFetch.test.ts +96 -2
  268. package/Tests/Server/Utils/Database/MigrationFailureLog.test.ts +466 -0
  269. package/Tests/Server/Utils/EmailRollup/EmailRollupBurstWindow.test.ts +83 -0
  270. package/Tests/Server/Utils/EmailRollup/EmailRollupFlushRunnerBehaviour.test.ts +1096 -0
  271. package/Tests/Server/Utils/EmailRollup/EmailRollupFlushRunnerClaim.test.ts +466 -0
  272. package/Tests/Server/Utils/EmailRollup/EmailRollupFlushRunnerPreferences.test.ts +362 -0
  273. package/Tests/Server/Utils/EmailRollup/EmailRollupRenderer.test.ts +1428 -0
  274. package/Tests/Server/Utils/EmailRollup/EmailRollupTestHarness.ts +828 -0
  275. package/Tests/Server/Utils/EmailRollup/EmailRollupWriter.test.ts +864 -0
  276. package/Tests/Server/Utils/FrontendEnvironment.test.ts +190 -0
  277. package/Tests/Server/Utils/LogRedaction.test.ts +26 -0
  278. package/Tests/Server/Utils/LoggerCredentialLeak.test.ts +23 -9
  279. package/Tests/Server/Utils/LoggerFaultDemotion.test.ts +346 -0
  280. package/Tests/Server/Utils/Monitor/Criteria/CompareCriteriaAggregation.test.ts +584 -0
  281. package/Tests/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.test.ts +633 -0
  282. package/Tests/Server/Utils/Monitor/Criteria/IncomingRequestHeaderCriteria.test.ts +236 -0
  283. package/Tests/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.test.ts +196 -0
  284. package/Tests/Server/Utils/Monitor/DatabaseMetricWrite.test.ts +367 -0
  285. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluator.test.ts +437 -0
  286. package/Tests/Server/Utils/Monitor/MonitorCriteriaObservationBuilderUnits.test.ts +100 -0
  287. package/Tests/Server/Utils/Monitor/MonitorStepResourceIdentity.test.ts +5 -0
  288. package/Tests/Server/Utils/Monitor/MonitorTemplateUtilSeriesContext.test.ts +176 -0
  289. package/Tests/Server/Utils/Monitor/NetworkDeviceHydrationUtil.test.ts +512 -31
  290. package/Tests/Server/Utils/Monitor/NetworkDeviceMetricUtil.test.ts +252 -0
  291. package/Tests/Server/Utils/Monitor/NetworkDeviceWalkUtil.test.ts +479 -42
  292. package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +351 -5
  293. package/Tests/Server/Utils/Monitor/SeriesContextEnricher.test.ts +356 -0
  294. package/Tests/Server/Utils/NetworkDevice/DeviceHealthAggregation.test.ts +136 -12
  295. package/Tests/Server/Utils/NetworkSite/NetworkSiteHierarchyLock.test.ts +306 -0
  296. package/Tests/Server/Utils/OutboundUserAgent.test.ts +266 -0
  297. package/Tests/Server/Utils/SSRFProtectionCloudServiceAddresses.test.ts +595 -0
  298. package/Tests/Server/Utils/SecurityEvent/ThreatIntel/TaxiiClientUserAgent.test.ts +141 -0
  299. package/Tests/Server/Utils/SessionReplay/SessionReplayGateCachePolicy.test.ts +198 -1
  300. package/Tests/Server/Utils/SessionReplay/SessionReplayHealthCounters.test.ts +453 -0
  301. package/Tests/Server/Utils/SessionReplay/SessionReplayReadServiceQueries.test.ts +1378 -0
  302. package/Tests/Server/Utils/SessionReplayOriginAllowListRefactor.test.ts +420 -0
  303. package/Tests/Server/Utils/TelegramVerificationToken.test.ts +253 -0
  304. package/Tests/Server/Utils/Telemetry/ErrorClassResolver.test.ts +298 -0
  305. package/Tests/Server/Utils/Telemetry/PinServiceName.test.ts +666 -0
  306. package/Tests/Server/Utils/Telemetry/TelemetryFanInWriterCapacity.test.ts +458 -0
  307. package/Tests/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.test.ts +424 -0
  308. package/Tests/Server/Utils/Telemetry/TelemetryIngestionKeyRateLimiter.test.ts +528 -0
  309. package/Tests/Server/Utils/Telemetry.test.ts +456 -66
  310. package/Tests/Server/Utils/TelemetryExporterEnvironment.test.ts +56 -0
  311. package/Tests/Server/Utils/VM/VMRunnerHostBridgeLatency.test.ts +74 -0
  312. package/Tests/Server/Utils/VM/VMRunnerPrivateNetworkWiring.test.ts +100 -7
  313. package/Tests/Server/Utils/VM/VMRunnerSsrf.test.ts +1176 -6
  314. package/Tests/Types/CustomField/CustomFieldMappingCatalog.test.ts +220 -0
  315. package/Tests/Types/CustomField/CustomFieldValueMapping.test.ts +348 -0
  316. package/Tests/Types/JSONFunctions.test.ts +260 -0
  317. package/Tests/Types/Monitor/CephAlertTemplates.test.ts +422 -53
  318. package/Tests/Types/Monitor/DatabaseMetricCatalog.test.ts +388 -0
  319. package/Tests/Types/Monitor/DockerAlertTemplates.test.ts +495 -15
  320. package/Tests/Types/Monitor/DockerSwarmAlertTemplates.test.ts +191 -45
  321. package/Tests/Types/Monitor/HostAlertTemplates.test.ts +370 -42
  322. package/Tests/Types/Monitor/IotAlertTemplates.test.ts +375 -20
  323. package/Tests/Types/Monitor/KubernetesAlertTemplates.test.ts +636 -42
  324. package/Tests/Types/Monitor/KubernetesMetricCatalog.test.ts +189 -0
  325. package/Tests/Types/Monitor/KubernetesTemplateGroupByKeys.test.ts +95 -14
  326. package/Tests/Types/Monitor/MonitorStepDatabaseMonitor.test.ts +243 -0
  327. package/Tests/Types/Monitor/MonitorStepDefaultTelemetryConfig.test.ts +1 -0
  328. package/Tests/Types/Monitor/MonitorType.test.ts +1 -0
  329. package/Tests/Types/Monitor/MonitorTypeKeywords.test.ts +16 -7
  330. package/Tests/Types/Monitor/NetworkDeviceAlertPack.test.ts +60 -0
  331. package/Tests/Types/Monitor/PodmanAlertTemplates.test.ts +190 -21
  332. package/Tests/Types/Monitor/ProxmoxAlertTemplates.test.ts +352 -22
  333. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationAlertDebuggability.test.ts +363 -0
  334. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationNotificationMode.test.ts +93 -18
  335. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.test.ts +259 -0
  336. package/Tests/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.test.ts +476 -0
  337. package/Tests/Types/Monitor/RumAlertTemplates.test.ts +136 -0
  338. package/Tests/Types/Monitor/SeriesContext/SeriesDebugHints.test.ts +661 -0
  339. package/Tests/Types/Monitor/SeriesContext/SeriesLabelDisplay.test.ts +507 -0
  340. package/Tests/Types/Monitor/ServiceAlertTemplates.test.ts +270 -0
  341. package/Tests/Types/Monitor/TemplateGroupByKeys.test.ts +38 -10
  342. package/Tests/Types/Monitor/Utils/RecommendationCriteriaAssertions.ts +102 -0
  343. package/Tests/Types/NetworkDevice/NetworkAlertPolicyScope.test.ts +655 -0
  344. package/Tests/Types/NetworkDevice/NetworkDeviceMonitoringMethod.test.ts +115 -26
  345. package/Tests/Types/NetworkSite/DefaultNetworkSiteType.test.ts +39 -0
  346. package/Tests/Types/NotificationSetting/NotificationEmailRollupPolicy.test.ts +299 -0
  347. package/Tests/Types/NotificationSetting/RoutineEmailEvents.test.ts +47 -0
  348. package/Tests/Types/Rum/SessionReplayApiContracts.test.ts +608 -0
  349. package/Tests/Types/Rum/SessionReplayCustomEvents.test.ts +434 -0
  350. package/Tests/Types/Telemetry/ErrorClass.test.ts +483 -0
  351. package/Tests/Types/WebsiteRequest.test.ts +285 -3
  352. package/Tests/UI/Components/BasicRadioButtons.test.tsx +336 -0
  353. package/Tests/UI/Components/Charts/ChartBucketIdentity.test.ts +16 -3
  354. package/Tests/UI/Components/Charts/ChartTrailingBucketGap.test.ts +691 -0
  355. package/Tests/UI/Components/ComponentsModal.test.tsx +12 -4
  356. package/Tests/UI/Components/ComponentsModalUsability.test.tsx +518 -0
  357. package/Tests/UI/Components/CustomFields/CustomFieldsDetailMapping.test.tsx +324 -0
  358. package/Tests/UI/Components/CustomFields/MapFromCustomFieldInput.test.tsx +176 -0
  359. package/Tests/UI/Components/Graphs/DayUptimeGraph.test.tsx +484 -0
  360. package/Tests/UI/Components/HeaderRightRail.test.tsx +157 -0
  361. package/Tests/UI/Components/IconDropdownItem.test.tsx +102 -0
  362. package/Tests/UI/Components/JSONTablePrototypePollution.test.tsx +117 -0
  363. package/Tests/UI/Components/KeyboardShortcutsModal.test.tsx +214 -0
  364. package/Tests/UI/Components/ModelTable/ModelTableWrapContent.test.tsx +561 -0
  365. package/Tests/UI/Components/MonitorGraphs/UptimeBarDayModal.test.tsx +302 -0
  366. package/Tests/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.test.ts +43 -12
  367. package/Tests/UI/Components/ProgressBar.test.tsx +38 -2
  368. package/Tests/UI/Components/ShortcutDialogGuard.test.tsx +74 -0
  369. package/Tests/UI/Components/SideMenuItem.test.tsx +226 -4
  370. package/Tests/UI/Components/SideMenuSection.test.tsx +310 -0
  371. package/Tests/UI/Components/SideOverSubmitState.test.tsx +335 -0
  372. package/Tests/UI/Components/StatusPage/ResourceGroupSectionAutoExpand.test.tsx +248 -0
  373. package/Tests/UI/Components/TableCellWrapping.test.tsx +625 -0
  374. package/Tests/UI/Components/TableLoadingStates.test.tsx +205 -0
  375. package/Tests/UI/Components/Workflow/NodePlacement.test.ts +148 -0
  376. package/Tests/UI/Components/Workflow/Workflow.test.tsx +981 -0
  377. package/Tests/UI/ConfigBrowserTelemetry.test.ts +70 -0
  378. package/Tests/UI/Rum/ChunkLoader.test.ts +1036 -2
  379. package/Tests/UI/Rum/FidelityNotices.test.ts +187 -0
  380. package/Tests/UI/Rum/InactivityMap.test.ts +341 -0
  381. package/Tests/UI/Rum/PrivacySummaryCard.test.tsx +259 -0
  382. package/Tests/UI/Rum/RecordingHealthCard.test.tsx +855 -0
  383. package/Tests/UI/Rum/RecordingHealthStrip.test.tsx +594 -0
  384. package/Tests/UI/Rum/ReplayCard.test.tsx +451 -0
  385. package/Tests/UI/Rum/ReplayCorrelationPanel.test.tsx +536 -0
  386. package/Tests/UI/Rum/ReplayEngine.test.ts +2503 -0
  387. package/Tests/UI/Rum/ReplayEngineTypes.test.ts +171 -0
  388. package/Tests/UI/Rum/ReplayHeader.test.tsx +711 -0
  389. package/Tests/UI/Rum/ReplayLink.test.tsx +119 -0
  390. package/Tests/UI/Rum/ReplayPinControl.test.tsx +408 -0
  391. package/Tests/UI/Rum/ReplayPlaybackIntent.test.ts +152 -0
  392. package/Tests/UI/Rum/ReplayRail.test.tsx +1296 -0
  393. package/Tests/UI/Rum/ReplayRailDetail.test.tsx +900 -0
  394. package/Tests/UI/Rum/ReplayScrubber.test.tsx +763 -147
  395. package/Tests/UI/Rum/ReplaySignalTypes.test.ts +189 -0
  396. package/Tests/UI/Rum/ReplaySignals.test.ts +1579 -0
  397. package/Tests/UI/Rum/ReplayStage.test.tsx +396 -473
  398. package/Tests/UI/Rum/ReplayStageOverlays.test.tsx +918 -0
  399. package/Tests/UI/Rum/ReplayTimeline.test.tsx +696 -0
  400. package/Tests/UI/Rum/SessionReplayEmptyState.test.tsx +499 -0
  401. package/Tests/UI/Rum/SessionReplaySearchBar.test.tsx +346 -0
  402. package/Tests/UI/Rum/SessionReplaySetupGuide.test.tsx +545 -0
  403. package/Tests/UI/Rum/SessionReplayTable.test.tsx +991 -0
  404. package/Tests/UI/Rum/TargetedCapturePanel.test.tsx +254 -0
  405. package/Tests/UI/Telemetry/BrowserExporterIsolation.test.ts +71 -0
  406. package/Tests/UI/Utils/GlobalKeyboardShortcut.test.ts +344 -0
  407. package/Tests/UI/Utils/PageScrollLock.test.tsx +377 -0
  408. package/Tests/UI/Utils/PermissionGate.test.ts +78 -0
  409. package/Tests/UI/Utils/SensitiveUrlToken.test.ts +140 -0
  410. package/Tests/Utils/API.test.ts +308 -0
  411. package/Tests/Utils/EnterpriseLicenseSeats.test.ts +69 -0
  412. package/Tests/Utils/EnterpriseLicenseSync.test.ts +7 -1
  413. package/Tests/Utils/EnterpriseLicenseUsage.test.ts +433 -2
  414. package/Tests/Utils/HTTPResponseBodyReader.test.ts +323 -0
  415. package/Tests/Utils/Monitor/MonitorMetricType.test.ts +280 -1
  416. package/Tests/Utils/Monitor/MonitorSummarySnapshotUtil.test.ts +1 -0
  417. package/Tests/Utils/Monitor/NetworkTopologyUtil.test.ts +38 -0
  418. package/Tests/Utils/NetworkDevice/DeviceHealthStateUtil.test.ts +284 -23
  419. package/Tests/Utils/NetworkDevice/DeviceReachabilityUtil.test.ts +177 -0
  420. package/Tests/Utils/NetworkDevice/MonitoringMethodThreadedClassifiers.test.ts +992 -0
  421. package/Tests/Utils/NetworkDevice/NetworkAlertPolicyBootstrapUtil.test.ts +427 -0
  422. package/Tests/Utils/NetworkDevice/ReachabilityStampConsistency.test.ts +185 -0
  423. package/Tests/Utils/NetworkDevice/SnmpCredentialUtil.test.ts +268 -0
  424. package/Tests/Utils/NetworkDiscovery/AutoImportRuleMatcher.test.ts +55 -5
  425. package/Tests/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.test.ts +98 -21
  426. package/Tests/Utils/NetworkDiscovery/DiscoveryImportEligibility.test.ts +98 -20
  427. package/Tests/Utils/NetworkDiscovery/DiscoveryReverseDnsChain.test.ts +8 -7
  428. package/Tests/Utils/NetworkDiscovery/DiscoveryScanStatus.test.ts +117 -0
  429. package/Tests/Utils/NetworkDiscovery/PingMonitorBuilderForAddress.test.ts +274 -0
  430. package/Tests/Utils/NetworkSite/SiteStatusRollupUtil.test.ts +230 -51
  431. package/Tests/Utils/NetworkSite/TypeHierarchyUtil.test.ts +209 -0
  432. package/Tests/Utils/Rum/ChunkMath.test.ts +83 -0
  433. package/Tests/Utils/Rum/SessionReplayHealthDiagnosis.test.ts +993 -0
  434. package/Tests/Utils/Rum/SessionReplayStringMap.test.ts +245 -0
  435. package/Tests/Utils/StatusPage/ResourceSearch.test.ts +631 -0
  436. package/Tests/Utils/Telemetry/CaptureSpanExportGating.test.ts +145 -0
  437. package/Tests/Utils/Telemetry/OriginAllowList.test.ts +633 -0
  438. package/Tests/Utils/Uptime/DayUptimeGraphUtil.test.ts +461 -0
  439. package/Tests/Utils/ValueFormatter.test.ts +148 -0
  440. package/Types/AI/ExceptionAIClassification.ts +10 -24
  441. package/Types/CustomField/CustomFieldMappingCatalog.ts +161 -0
  442. package/Types/CustomField/CustomFieldMappingSourceResource.ts +19 -0
  443. package/Types/CustomField/CustomFieldValueMapping.ts +288 -0
  444. package/Types/Email/EmailTemplateType.ts +2 -0
  445. package/Types/EnterpriseLicense/EnterpriseLicenseInstanceSummary.ts +5 -0
  446. package/Types/EnterpriseLicense/EnterpriseLicenseUsageSnapshot.ts +13 -0
  447. package/Types/EnterpriseLicense/EnterpriseLicenseUserCountSource.ts +6 -0
  448. package/Types/Exception/ApiException.ts +10 -0
  449. package/Types/Exception/BadDataException.ts +11 -0
  450. package/Types/Exception/BadRequestException.ts +11 -0
  451. package/Types/Exception/Exception.ts +65 -0
  452. package/Types/Exception/ForbiddenException.ts +10 -0
  453. package/Types/Exception/NotAuthenticatedException.ts +10 -0
  454. package/Types/Exception/NotAuthorizedException.ts +10 -0
  455. package/Types/Exception/NotFoundException.ts +11 -0
  456. package/Types/Exception/PayloadTooLargeException.ts +11 -0
  457. package/Types/Exception/PaymentRequiredException.ts +10 -0
  458. package/Types/Exception/ServiceUnavailableException.ts +10 -0
  459. package/Types/Exception/SsoAuthorizationException.ts +10 -0
  460. package/Types/Exception/TenantNotFoundException.ts +11 -0
  461. package/Types/Exception/TimeoutException.ts +10 -0
  462. package/Types/Exception/TooManyRequestsException.ts +10 -0
  463. package/Types/Exception/UnableToReachServer.ts +10 -0
  464. package/Types/Exception/WebsiteRequestException.ts +10 -0
  465. package/Types/Icon/IconProp.ts +1 -0
  466. package/Types/JSONFunctions.ts +189 -43
  467. package/Types/Monitor/CephAlertTemplates.ts +157 -195
  468. package/Types/Monitor/CriteriaFilter.ts +60 -2
  469. package/Types/Monitor/DatabaseMetricCatalog.ts +693 -0
  470. package/Types/Monitor/DatabaseMonitor/DatabaseMonitorResponse.ts +83 -0
  471. package/Types/Monitor/DockerAlertTemplates.ts +338 -128
  472. package/Types/Monitor/DockerSwarmAlertTemplates.ts +95 -112
  473. package/Types/Monitor/HostAlertTemplates.ts +302 -130
  474. package/Types/Monitor/IotAlertTemplates.ts +112 -104
  475. package/Types/Monitor/KubernetesAlertTemplates.ts +415 -224
  476. package/Types/Monitor/KubernetesMetricCatalog.ts +23 -19
  477. package/Types/Monitor/MonitorCriteriaInstance.ts +76 -0
  478. package/Types/Monitor/MonitorMetricType.ts +71 -0
  479. package/Types/Monitor/MonitorStep.ts +76 -0
  480. package/Types/Monitor/MonitorStepDatabaseMonitor.ts +171 -0
  481. package/Types/Monitor/MonitorStepSqlMonitor.ts +2 -20
  482. package/Types/Monitor/MonitorType.ts +47 -1
  483. package/Types/Monitor/PodmanAlertTemplates.ts +116 -163
  484. package/Types/Monitor/ProxmoxAlertTemplates.ts +217 -99
  485. package/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.ts +98 -6
  486. package/Types/Monitor/Recommendation/MonitorRecommendationUtil.ts +44 -7
  487. package/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.ts +383 -0
  488. package/Types/Monitor/RumAlertTemplates.ts +46 -7
  489. package/Types/Monitor/SeriesContext/SeriesDebugHints.ts +596 -0
  490. package/Types/Monitor/SeriesContext/SeriesLabelDisplay.ts +554 -0
  491. package/Types/Monitor/ServiceAlertTemplates.ts +98 -11
  492. package/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.ts +22 -1
  493. package/Types/Monitor/SqlConnectionConfig.ts +31 -0
  494. package/Types/Monitor/UptimeHistoryLabels.ts +56 -0
  495. package/Types/NetworkDevice/NetworkAlertPolicyScope.ts +343 -0
  496. package/Types/NetworkDevice/NetworkDeviceMonitoringMethod.ts +42 -22
  497. package/Types/NetworkSite/DefaultNetworkSiteTypeHierarchy.ts +30 -0
  498. package/Types/NotificationSetting/NotificationEmailRollupCategory.ts +255 -0
  499. package/Types/NotificationSetting/NotificationEmailRollupPolicy.ts +104 -0
  500. package/Types/NotificationSetting/RoutineEmailEvents.ts +30 -0
  501. package/Types/Permission.ts +90 -0
  502. package/Types/Probe/ProbeMonitorResponse.ts +16 -0
  503. package/Types/Rum/SessionReplay.ts +209 -0
  504. package/Types/Rum/SessionReplayApi.ts +722 -0
  505. package/Types/Rum/SessionReplayCaptureTrigger.ts +21 -12
  506. package/Types/Rum/SessionReplayConsentMode.ts +11 -7
  507. package/Types/Rum/SessionReplayCustomEvents.ts +549 -0
  508. package/Types/Rum/SessionReplayHealth.ts +238 -0
  509. package/Types/Telemetry/ErrorClass.ts +274 -0
  510. package/Types/Telemetry/TelemetryIngestSurface.ts +95 -0
  511. package/Types/Telemetry/TelemetryIngestionKeyPolicy.ts +75 -0
  512. package/Types/Telemetry/TelemetryIngestionKeyType.ts +29 -0
  513. package/Types/Telemetry/UnitOfWork.ts +59 -0
  514. package/Types/WebsiteRequest.ts +85 -3
  515. package/UI/Components/Charts/Area/AreaChart.tsx +13 -2
  516. package/UI/Components/Charts/Bar/BarChart.tsx +6 -2
  517. package/UI/Components/Charts/Line/LineChart.tsx +13 -2
  518. package/UI/Components/Charts/Types/XAxis/XAxis.ts +29 -0
  519. package/UI/Components/Charts/Utils/DataPoint.ts +22 -3
  520. package/UI/Components/Charts/Utils/TimeAnnotation.ts +76 -9
  521. package/UI/Components/Charts/Utils/XAxis.ts +217 -0
  522. package/UI/Components/CommandPalette/CommandPalette.tsx +2 -8
  523. package/UI/Components/CustomFields/CustomFieldsDetail.tsx +143 -25
  524. package/UI/Components/CustomFields/MapFromCustomFieldInput.tsx +216 -0
  525. package/UI/Components/EditionLabel/EditionLabel.tsx +4 -0
  526. package/UI/Components/Graphs/DayUptimeGraph.tsx +173 -8
  527. package/UI/Components/Graphs/UptimeBarTooltip.tsx +22 -278
  528. package/UI/Components/Graphs/UptimeDaySummary.tsx +327 -0
  529. package/UI/Components/Header/Header.tsx +25 -9
  530. package/UI/Components/Header/IconDropdown/IconDropdownItem.tsx +10 -1
  531. package/UI/Components/Header/IconDropdown/IconDropdownMenu.tsx +6 -1
  532. package/UI/Components/Header/ProjectPicker/ProjectPicker.tsx +6 -1
  533. package/UI/Components/HeaderAlert/NotificationBell/NotificationBellDropdown.tsx +6 -1
  534. package/UI/Components/Icon/Icon.tsx +11 -0
  535. package/UI/Components/JSONTable/JSONTable.tsx +2 -2
  536. package/UI/Components/KeyboardShortcut/KeyboardShortcutsModal.tsx +125 -0
  537. package/UI/Components/KeyboardShortcut/Screenshots/README.md +19 -0
  538. package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-command-palette.png +0 -0
  539. package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-dialog-dark.png +0 -0
  540. package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-dialog.png +0 -0
  541. package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-help-menu.png +0 -0
  542. package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-narrow.png +0 -0
  543. package/UI/Components/Modal/Modal.tsx +2 -8
  544. package/UI/Components/ModelTable/Column.ts +15 -0
  545. package/UI/Components/Monitor/SeriesDebugCommandsViewer.tsx +64 -0
  546. package/UI/Components/Monitor/SeriesLabelsViewer.tsx +93 -0
  547. package/UI/Components/MonitorGraphs/Uptime.tsx +14 -2
  548. package/UI/Components/MonitorGraphs/UptimeBarDayModal.tsx +63 -10
  549. package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +88 -0
  550. package/UI/Components/ProgressBar/ProgressBar.tsx +12 -1
  551. package/UI/Components/RadioButtons/BasicRadioButtons.tsx +37 -7
  552. package/UI/Components/SideMenu/SideMenu.tsx +123 -5
  553. package/UI/Components/SideMenu/SideMenuItem.tsx +76 -84
  554. package/UI/Components/SideMenu/SideMenuSection.tsx +55 -23
  555. package/UI/Components/SideOver/SideOver.tsx +21 -20
  556. package/UI/Components/StatusPage/ResourceGroupSection.tsx +40 -0
  557. package/UI/Components/Table/CellClassName.ts +81 -0
  558. package/UI/Components/Table/TableRow.tsx +20 -14
  559. package/UI/Components/Table/TableSkeletonRows.tsx +9 -9
  560. package/UI/Components/Table/Types/Column.ts +36 -0
  561. package/UI/Components/Tooltip/Tooltip.tsx +11 -1
  562. package/UI/Components/Workflow/ComponentsModal.tsx +60 -39
  563. package/UI/Components/Workflow/NodePlacement.ts +57 -0
  564. package/UI/Components/Workflow/Workflow.tsx +47 -18
  565. package/UI/Config.ts +15 -33
  566. package/UI/Utils/GlobalKeyboardShortcut.ts +208 -0
  567. package/UI/Utils/PageScrollLock.ts +79 -3
  568. package/UI/Utils/PermissionGate.ts +61 -0
  569. package/UI/Utils/SensitiveUrlToken.ts +112 -0
  570. package/UI/Utils/Telemetry/BrowserTelemetryConfig.ts +28 -0
  571. package/UI/Utils/Telemetry/Telemetry.ts +10 -8
  572. package/UI/Utils/TestLLMProvider.ts +11 -0
  573. package/Utils/API.ts +129 -3
  574. package/Utils/EnterpriseLicense/EnterpriseLicenseSeats.ts +16 -0
  575. package/Utils/EnterpriseLicense/EnterpriseLicenseUsage.ts +191 -11
  576. package/Utils/HTTPResponseBodyReader.ts +221 -0
  577. package/Utils/Monitor/MonitorMetricType.ts +153 -1
  578. package/Utils/Monitor/NetworkTopologyUtil.ts +23 -3
  579. package/Utils/NetworkDevice/DeviceHealthStateUtil.ts +65 -14
  580. package/Utils/NetworkDevice/DeviceReachabilityUtil.ts +43 -14
  581. package/Utils/NetworkDevice/NetworkAlertPolicyBootstrapUtil.ts +247 -0
  582. package/Utils/NetworkDevice/SnmpCredentialUtil.ts +68 -0
  583. package/Utils/NetworkDiscovery/AutoImportRuleMatcher.ts +15 -7
  584. package/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.ts +52 -17
  585. package/Utils/NetworkDiscovery/DiscoveryImportEligibility.ts +55 -23
  586. package/Utils/NetworkDiscovery/DiscoveryScanStatus.ts +77 -0
  587. package/Utils/NetworkDiscovery/PingMonitorBuilder.ts +115 -13
  588. package/Utils/NetworkSite/SiteStatusRollupUtil.ts +66 -20
  589. package/Utils/NetworkSite/TypeHierarchyUtil.ts +313 -0
  590. package/Utils/Rum/ChunkMath.ts +106 -0
  591. package/Utils/Rum/SessionReplayHealth.ts +732 -0
  592. package/Utils/Rum/SessionReplayStringMap.ts +226 -0
  593. package/Utils/Schema/ModelSchema.ts +1 -0
  594. package/Utils/StatusPage/ResourceSearch.ts +290 -0
  595. package/Utils/Telemetry/OriginAllowList.ts +355 -0
  596. package/Utils/Uptime/DayUptimeGraphUtil.ts +205 -0
  597. package/Utils/ValueFormatter.ts +35 -1
  598. package/build/dist/Models/AnalyticsModels/RumSession.js +102 -19
  599. package/build/dist/Models/AnalyticsModels/RumSession.js.map +1 -1
  600. package/build/dist/Models/AnalyticsModels/RumSessionChunk.js +11 -9
  601. package/build/dist/Models/AnalyticsModels/RumSessionChunk.js.map +1 -1
  602. package/build/dist/Models/AnalyticsModels/Span.js +14 -0
  603. package/build/dist/Models/AnalyticsModels/Span.js.map +1 -1
  604. package/build/dist/Models/DatabaseModels/AlertCustomField.js +79 -3
  605. package/build/dist/Models/DatabaseModels/AlertCustomField.js.map +1 -1
  606. package/build/dist/Models/DatabaseModels/ApiKeyPermission.js +3 -27
  607. package/build/dist/Models/DatabaseModels/ApiKeyPermission.js.map +1 -1
  608. package/build/dist/Models/DatabaseModels/EnterpriseLicense.js +59 -0
  609. package/build/dist/Models/DatabaseModels/EnterpriseLicense.js.map +1 -1
  610. package/build/dist/Models/DatabaseModels/IncidentCustomField.js +79 -3
  611. package/build/dist/Models/DatabaseModels/IncidentCustomField.js.map +1 -1
  612. package/build/dist/Models/DatabaseModels/Index.js +10 -0
  613. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  614. package/build/dist/Models/DatabaseModels/InventoryItemCustomField.js +79 -3
  615. package/build/dist/Models/DatabaseModels/InventoryItemCustomField.js.map +1 -1
  616. package/build/dist/Models/DatabaseModels/Monitor.js +75 -0
  617. package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
  618. package/build/dist/Models/DatabaseModels/MonitorCustomField.js +79 -3
  619. package/build/dist/Models/DatabaseModels/MonitorCustomField.js.map +1 -1
  620. package/build/dist/Models/DatabaseModels/NetworkAlertPolicy.js +713 -0
  621. package/build/dist/Models/DatabaseModels/NetworkAlertPolicy.js.map +1 -0
  622. package/build/dist/Models/DatabaseModels/NetworkDevice.js +180 -1
  623. package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
  624. package/build/dist/Models/DatabaseModels/NetworkSite.js +200 -2
  625. package/build/dist/Models/DatabaseModels/NetworkSite.js.map +1 -1
  626. package/build/dist/Models/DatabaseModels/NetworkSiteType.js +102 -3
  627. package/build/dist/Models/DatabaseModels/NetworkSiteType.js.map +1 -1
  628. package/build/dist/Models/DatabaseModels/NetworkSnmpCredentialProfile.js +878 -0
  629. package/build/dist/Models/DatabaseModels/NetworkSnmpCredentialProfile.js.map +1 -0
  630. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyCustomField.js +79 -3
  631. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyCustomField.js.map +1 -1
  632. package/build/dist/Models/DatabaseModels/RumApplication.js +6 -6
  633. package/build/dist/Models/DatabaseModels/RumApplication.js.map +1 -1
  634. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceCustomField.js +79 -3
  635. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceCustomField.js.map +1 -1
  636. package/build/dist/Models/DatabaseModels/StatusPageCustomField.js +79 -3
  637. package/build/dist/Models/DatabaseModels/StatusPageCustomField.js.map +1 -1
  638. package/build/dist/Models/DatabaseModels/TeamCustomField.js +79 -3
  639. package/build/dist/Models/DatabaseModels/TeamCustomField.js.map +1 -1
  640. package/build/dist/Models/DatabaseModels/TeamMember.js +0 -9
  641. package/build/dist/Models/DatabaseModels/TeamMember.js.map +1 -1
  642. package/build/dist/Models/DatabaseModels/TeamMemberCustomField.js +79 -3
  643. package/build/dist/Models/DatabaseModels/TeamMemberCustomField.js.map +1 -1
  644. package/build/dist/Models/DatabaseModels/TeamPermission.js +3 -24
  645. package/build/dist/Models/DatabaseModels/TeamPermission.js.map +1 -1
  646. package/build/dist/Models/DatabaseModels/TelemetryException.js +123 -0
  647. package/build/dist/Models/DatabaseModels/TelemetryException.js.map +1 -1
  648. package/build/dist/Models/DatabaseModels/TelemetryIngestionKey.js +267 -0
  649. package/build/dist/Models/DatabaseModels/TelemetryIngestionKey.js.map +1 -1
  650. package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupBatch.js +363 -0
  651. package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupBatch.js.map +1 -0
  652. package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupItem.js +402 -0
  653. package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupItem.js.map +1 -0
  654. package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupSetting.js +296 -0
  655. package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupSetting.js.map +1 -0
  656. package/build/dist/Models/DatabaseModels/UserTelegram.js +0 -4
  657. package/build/dist/Models/DatabaseModels/UserTelegram.js.map +1 -1
  658. package/build/dist/Server/API/EnterpriseLicenseAPI.js +273 -60
  659. package/build/dist/Server/API/EnterpriseLicenseAPI.js.map +1 -1
  660. package/build/dist/Server/API/LlmProviderAPI.js +108 -13
  661. package/build/dist/Server/API/LlmProviderAPI.js.map +1 -1
  662. package/build/dist/Server/API/TelemetryAPI.js +769 -109
  663. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  664. package/build/dist/Server/API/UserNotificationSettingAPI.js +35 -0
  665. package/build/dist/Server/API/UserNotificationSettingAPI.js.map +1 -0
  666. package/build/dist/Server/API/UserTelegramAPI.js +28 -6
  667. package/build/dist/Server/API/UserTelegramAPI.js.map +1 -1
  668. package/build/dist/Server/EnvironmentConfig.js +41 -2
  669. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  670. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790700000000-AddNetworkSiteTypeParentHierarchy.js +24 -0
  671. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790700000000-AddNetworkSiteTypeParentHierarchy.js.map +1 -0
  672. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddEnterpriseLicenseUsageProvenance.js +16 -0
  673. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddEnterpriseLicenseUsageProvenance.js.map +1 -0
  674. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddTelemetryExceptionErrorClass.js +111 -0
  675. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddTelemetryExceptionErrorClass.js.map +1 -0
  676. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791000000000-AddUserNotificationEmailRollup.js +77 -0
  677. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791000000000-AddUserNotificationEmailRollup.js.map +1 -0
  678. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791100000000-AddUserNotificationEmailRollupSetting.js +50 -0
  679. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791100000000-AddUserNotificationEmailRollupSetting.js.map +1 -0
  680. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791200000000-AddNetworkSnmpCredentialProfilesAndAlertPolicies.js +83 -0
  681. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791200000000-AddNetworkSnmpCredentialProfilesAndAlertPolicies.js.map +1 -0
  682. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791300000000-AddTelemetryIngestionKeyType.js +60 -0
  683. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791300000000-AddTelemetryIngestionKeyType.js.map +1 -0
  684. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791400000000-SessionReplayRecordEverySessionByDefault.js +53 -0
  685. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791400000000-SessionReplayRecordEverySessionByDefault.js.map +1 -0
  686. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791500000000-WidenCustomFieldDropdownOptions.js +82 -0
  687. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791500000000-WidenCustomFieldDropdownOptions.js.map +1 -0
  688. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791600000000-AddCustomFieldValueMapping.js +46 -0
  689. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791600000000-AddCustomFieldValueMapping.js.map +1 -0
  690. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +20 -0
  691. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  692. package/build/dist/Server/Infrastructure/QueueWorker.js +52 -12
  693. package/build/dist/Server/Infrastructure/QueueWorker.js.map +1 -1
  694. package/build/dist/Server/Infrastructure/Semaphore.js +1 -0
  695. package/build/dist/Server/Infrastructure/Semaphore.js.map +1 -1
  696. package/build/dist/Server/Middleware/BearerTokenAuthorization.js +12 -0
  697. package/build/dist/Server/Middleware/BearerTokenAuthorization.js.map +1 -1
  698. package/build/dist/Server/Middleware/ProjectAuthorization.js +11 -0
  699. package/build/dist/Server/Middleware/ProjectAuthorization.js.map +1 -1
  700. package/build/dist/Server/Middleware/SCIMAuthorization.js +12 -0
  701. package/build/dist/Server/Middleware/SCIMAuthorization.js.map +1 -1
  702. package/build/dist/Server/Middleware/TelemetryIngest.js +326 -8
  703. package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
  704. package/build/dist/Server/Services/AIBillingService.js +70 -16
  705. package/build/dist/Server/Services/AIBillingService.js.map +1 -1
  706. package/build/dist/Server/Services/AccessTokenService.js +1 -0
  707. package/build/dist/Server/Services/AccessTokenService.js.map +1 -1
  708. package/build/dist/Server/Services/AlertCustomFieldService.js +93 -0
  709. package/build/dist/Server/Services/AlertCustomFieldService.js.map +1 -1
  710. package/build/dist/Server/Services/AlertService.js +34 -0
  711. package/build/dist/Server/Services/AlertService.js.map +1 -1
  712. package/build/dist/Server/Services/ApiKeyPermissionService.js +331 -28
  713. package/build/dist/Server/Services/ApiKeyPermissionService.js.map +1 -1
  714. package/build/dist/Server/Services/CustomFieldMappingService.js +614 -0
  715. package/build/dist/Server/Services/CustomFieldMappingService.js.map +1 -0
  716. package/build/dist/Server/Services/EnterpriseLicenseInstanceService.js +167 -0
  717. package/build/dist/Server/Services/EnterpriseLicenseInstanceService.js.map +1 -1
  718. package/build/dist/Server/Services/EnterpriseLicenseService.js +39 -0
  719. package/build/dist/Server/Services/EnterpriseLicenseService.js.map +1 -1
  720. package/build/dist/Server/Services/GlobalConfigService.js +133 -0
  721. package/build/dist/Server/Services/GlobalConfigService.js.map +1 -1
  722. package/build/dist/Server/Services/IncidentCustomFieldService.js +93 -0
  723. package/build/dist/Server/Services/IncidentCustomFieldService.js.map +1 -1
  724. package/build/dist/Server/Services/IncidentService.js +32 -0
  725. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  726. package/build/dist/Server/Services/Index.js +10 -0
  727. package/build/dist/Server/Services/Index.js.map +1 -1
  728. package/build/dist/Server/Services/MetricService.js +163 -0
  729. package/build/dist/Server/Services/MetricService.js.map +1 -1
  730. package/build/dist/Server/Services/MonitorService.js +148 -21
  731. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  732. package/build/dist/Server/Services/MonitorStatusTimelineService.js +127 -8
  733. package/build/dist/Server/Services/MonitorStatusTimelineService.js.map +1 -1
  734. package/build/dist/Server/Services/MonitorTemplateService.js +162 -0
  735. package/build/dist/Server/Services/MonitorTemplateService.js.map +1 -1
  736. package/build/dist/Server/Services/NetworkAlertPolicyEngineService.js +1683 -0
  737. package/build/dist/Server/Services/NetworkAlertPolicyEngineService.js.map +1 -0
  738. package/build/dist/Server/Services/NetworkAlertPolicyService.js +732 -0
  739. package/build/dist/Server/Services/NetworkAlertPolicyService.js.map +1 -0
  740. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +89 -36
  741. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
  742. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js +54 -11
  743. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js.map +1 -1
  744. package/build/dist/Server/Services/NetworkDeviceService.js +841 -70
  745. package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
  746. package/build/dist/Server/Services/NetworkSiteService.js +1145 -107
  747. package/build/dist/Server/Services/NetworkSiteService.js.map +1 -1
  748. package/build/dist/Server/Services/NetworkSiteTypeService.js +863 -0
  749. package/build/dist/Server/Services/NetworkSiteTypeService.js.map +1 -1
  750. package/build/dist/Server/Services/NetworkSnmpCredentialProfileService.js +217 -0
  751. package/build/dist/Server/Services/NetworkSnmpCredentialProfileService.js.map +1 -0
  752. package/build/dist/Server/Services/NotificationService.js +80 -17
  753. package/build/dist/Server/Services/NotificationService.js.map +1 -1
  754. package/build/dist/Server/Services/ProjectService.js +88 -30
  755. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  756. package/build/dist/Server/Services/RoutineEmailSettingsService.js +69 -0
  757. package/build/dist/Server/Services/RoutineEmailSettingsService.js.map +1 -0
  758. package/build/dist/Server/Services/RumSessionReplayViewService.js +86 -24
  759. package/build/dist/Server/Services/RumSessionReplayViewService.js.map +1 -1
  760. package/build/dist/Server/Services/ScheduledMaintenanceCustomFieldService.js +93 -0
  761. package/build/dist/Server/Services/ScheduledMaintenanceCustomFieldService.js.map +1 -1
  762. package/build/dist/Server/Services/ScheduledMaintenanceService.js +29 -0
  763. package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
  764. package/build/dist/Server/Services/StatusPagePrivateUserService.js +92 -2
  765. package/build/dist/Server/Services/StatusPagePrivateUserService.js.map +1 -1
  766. package/build/dist/Server/Services/TeamMemberService.js +62 -2
  767. package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
  768. package/build/dist/Server/Services/TeamPermissionService.js +166 -3
  769. package/build/dist/Server/Services/TeamPermissionService.js.map +1 -1
  770. package/build/dist/Server/Services/TelemetryIngestionKeyService.js +562 -18
  771. package/build/dist/Server/Services/TelemetryIngestionKeyService.js.map +1 -1
  772. package/build/dist/Server/Services/UserNotificationEmailRollupBatchService.js +76 -0
  773. package/build/dist/Server/Services/UserNotificationEmailRollupBatchService.js.map +1 -0
  774. package/build/dist/Server/Services/UserNotificationEmailRollupItemService.js +77 -0
  775. package/build/dist/Server/Services/UserNotificationEmailRollupItemService.js.map +1 -0
  776. package/build/dist/Server/Services/UserNotificationEmailRollupSettingService.js +111 -0
  777. package/build/dist/Server/Services/UserNotificationEmailRollupSettingService.js.map +1 -0
  778. package/build/dist/Server/Services/UserNotificationSettingService.js +66 -20
  779. package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
  780. package/build/dist/Server/Services/UserService.js +90 -0
  781. package/build/dist/Server/Services/UserService.js.map +1 -1
  782. package/build/dist/Server/Services/UserTelegramService.js +257 -4
  783. package/build/dist/Server/Services/UserTelegramService.js.map +1 -1
  784. package/build/dist/Server/Types/Database/QueryHelper.js +1 -1
  785. package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
  786. package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js +14 -3
  787. package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js.map +1 -1
  788. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js +10 -0
  789. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js.map +1 -1
  790. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js +10 -0
  791. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js.map +1 -1
  792. package/build/dist/Server/Utils/AI/SRE/Insights/InsightTriageRunner.js +54 -1
  793. package/build/dist/Server/Utils/AI/SRE/Insights/InsightTriageRunner.js.map +1 -1
  794. package/build/dist/Server/Utils/AI/Toolbox/AlertTools.js +18 -4
  795. package/build/dist/Server/Utils/AI/Toolbox/AlertTools.js.map +1 -1
  796. package/build/dist/Server/Utils/APIKey/AccessPermission.js +2 -2
  797. package/build/dist/Server/Utils/APIKey/AccessPermission.js.map +1 -1
  798. package/build/dist/Server/Utils/Billing/BillingFailureNoticeThrottle.js +59 -0
  799. package/build/dist/Server/Utils/Billing/BillingFailureNoticeThrottle.js.map +1 -0
  800. package/build/dist/Server/Utils/CustomField/CustomFieldDefinitionMappingHooks.js +27 -0
  801. package/build/dist/Server/Utils/CustomField/CustomFieldDefinitionMappingHooks.js.map +1 -0
  802. package/build/dist/Server/Utils/CustomField/CustomFieldMappingRegistry.js +226 -0
  803. package/build/dist/Server/Utils/CustomField/CustomFieldMappingRegistry.js.map +1 -0
  804. package/build/dist/Server/Utils/CustomField/CustomFieldMappingValidator.js +189 -0
  805. package/build/dist/Server/Utils/CustomField/CustomFieldMappingValidator.js.map +1 -0
  806. package/build/dist/Server/Utils/DataSource/EgressGuard.js +121 -7
  807. package/build/dist/Server/Utils/DataSource/EgressGuard.js.map +1 -1
  808. package/build/dist/Server/Utils/DataSource/HttpFetch.js +2 -1
  809. package/build/dist/Server/Utils/DataSource/HttpFetch.js.map +1 -1
  810. package/build/dist/Server/Utils/EmailRollup/EmailRollupConstants.js +124 -0
  811. package/build/dist/Server/Utils/EmailRollup/EmailRollupConstants.js.map +1 -0
  812. package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js +733 -0
  813. package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js.map +1 -0
  814. package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js +497 -0
  815. package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js.map +1 -0
  816. package/build/dist/Server/Utils/EmailRollup/EmailRollupWriter.js +257 -0
  817. package/build/dist/Server/Utils/EmailRollup/EmailRollupWriter.js.map +1 -0
  818. package/build/dist/Server/Utils/FrontendEnvironment.js +33 -0
  819. package/build/dist/Server/Utils/FrontendEnvironment.js.map +1 -0
  820. package/build/dist/Server/Utils/LLM/LLMService.js +64 -1
  821. package/build/dist/Server/Utils/LLM/LLMService.js.map +1 -1
  822. package/build/dist/Server/Utils/LogRedaction.js +28 -0
  823. package/build/dist/Server/Utils/LogRedaction.js.map +1 -1
  824. package/build/dist/Server/Utils/Logger.js +73 -1
  825. package/build/dist/Server/Utils/Logger.js.map +1 -1
  826. package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js +287 -68
  827. package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js.map +1 -1
  828. package/build/dist/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.js +141 -0
  829. package/build/dist/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.js.map +1 -0
  830. package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js +8 -1
  831. package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js.map +1 -1
  832. package/build/dist/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.js +20 -4
  833. package/build/dist/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.js.map +1 -1
  834. package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +51 -1
  835. package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js.map +1 -1
  836. package/build/dist/Server/Utils/Monitor/MonitorAlert.js +29 -6
  837. package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
  838. package/build/dist/Server/Utils/Monitor/MonitorCriteriaDataExtractor.js +7 -0
  839. package/build/dist/Server/Utils/Monitor/MonitorCriteriaDataExtractor.js.map +1 -1
  840. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +125 -13
  841. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  842. package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js +158 -6
  843. package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js.map +1 -1
  844. package/build/dist/Server/Utils/Monitor/MonitorIncident.js +22 -6
  845. package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
  846. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +33 -0
  847. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
  848. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +54 -0
  849. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
  850. package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js +330 -21
  851. package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js.map +1 -1
  852. package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js +55 -10
  853. package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js.map +1 -1
  854. package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js +178 -49
  855. package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js.map +1 -1
  856. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +119 -29
  857. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
  858. package/build/dist/Server/Utils/Monitor/SeriesContextEnricher.js +237 -0
  859. package/build/dist/Server/Utils/Monitor/SeriesContextEnricher.js.map +1 -0
  860. package/build/dist/Server/Utils/NetworkDevice/DeviceHealthAggregation.js +30 -17
  861. package/build/dist/Server/Utils/NetworkDevice/DeviceHealthAggregation.js.map +1 -1
  862. package/build/dist/Server/Utils/NetworkSite/NetworkSiteHierarchyLock.js +158 -0
  863. package/build/dist/Server/Utils/NetworkSite/NetworkSiteHierarchyLock.js.map +1 -0
  864. package/build/dist/Server/Utils/OutboundUserAgent.js +123 -0
  865. package/build/dist/Server/Utils/OutboundUserAgent.js.map +1 -0
  866. package/build/dist/Server/Utils/SSRFProtection.js +136 -9
  867. package/build/dist/Server/Utils/SSRFProtection.js.map +1 -1
  868. package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCache.js +174 -89
  869. package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCache.js.map +1 -1
  870. package/build/dist/Server/Utils/SessionReplay/SessionReplayHealthCounters.js +223 -0
  871. package/build/dist/Server/Utils/SessionReplay/SessionReplayHealthCounters.js.map +1 -0
  872. package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js +945 -164
  873. package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js.map +1 -1
  874. package/build/dist/Server/Utils/StartServer.js +41 -28
  875. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  876. package/build/dist/Server/Utils/TelegramVerificationToken.js +129 -0
  877. package/build/dist/Server/Utils/TelegramVerificationToken.js.map +1 -0
  878. package/build/dist/Server/Utils/Telemetry/CaptureSpan.js +28 -8
  879. package/build/dist/Server/Utils/Telemetry/CaptureSpan.js.map +1 -1
  880. package/build/dist/Server/Utils/Telemetry/ErrorClassResolver.js +95 -0
  881. package/build/dist/Server/Utils/Telemetry/ErrorClassResolver.js.map +1 -0
  882. package/build/dist/Server/Utils/Telemetry/PinServiceName.js +163 -0
  883. package/build/dist/Server/Utils/Telemetry/PinServiceName.js.map +1 -0
  884. package/build/dist/Server/Utils/Telemetry/SpanUtil.js +29 -0
  885. package/build/dist/Server/Utils/Telemetry/SpanUtil.js.map +1 -1
  886. package/build/dist/Server/Utils/Telemetry/TelemetryFanInWriter.js +28 -15
  887. package/build/dist/Server/Utils/Telemetry/TelemetryFanInWriter.js.map +1 -1
  888. package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.js +64 -0
  889. package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.js.map +1 -0
  890. package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyRateLimiter.js +171 -0
  891. package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyRateLimiter.js.map +1 -0
  892. package/build/dist/Server/Utils/Telemetry.js +162 -46
  893. package/build/dist/Server/Utils/Telemetry.js.map +1 -1
  894. package/build/dist/Server/Utils/VM/VMAPI.js.map +1 -1
  895. package/build/dist/Server/Utils/VM/VMRunner.js +780 -69
  896. package/build/dist/Server/Utils/VM/VMRunner.js.map +1 -1
  897. package/build/dist/Types/AI/ExceptionAIClassification.js +10 -24
  898. package/build/dist/Types/AI/ExceptionAIClassification.js.map +1 -1
  899. package/build/dist/Types/CustomField/CustomFieldMappingCatalog.js +60 -0
  900. package/build/dist/Types/CustomField/CustomFieldMappingCatalog.js.map +1 -0
  901. package/build/dist/Types/CustomField/CustomFieldMappingSourceResource.js +20 -0
  902. package/build/dist/Types/CustomField/CustomFieldMappingSourceResource.js.map +1 -0
  903. package/build/dist/Types/CustomField/CustomFieldValueMapping.js +141 -0
  904. package/build/dist/Types/CustomField/CustomFieldValueMapping.js.map +1 -0
  905. package/build/dist/Types/Email/EmailTemplateType.js +1 -0
  906. package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
  907. package/build/dist/Types/EnterpriseLicense/EnterpriseLicenseUsageSnapshot.js +2 -0
  908. package/build/dist/Types/EnterpriseLicense/EnterpriseLicenseUsageSnapshot.js.map +1 -0
  909. package/build/dist/Types/EnterpriseLicense/EnterpriseLicenseUserCountSource.js +7 -0
  910. package/build/dist/Types/EnterpriseLicense/EnterpriseLicenseUserCountSource.js.map +1 -0
  911. package/build/dist/Types/Exception/ApiException.js +9 -0
  912. package/build/dist/Types/Exception/ApiException.js.map +1 -1
  913. package/build/dist/Types/Exception/BadDataException.js +10 -0
  914. package/build/dist/Types/Exception/BadDataException.js.map +1 -1
  915. package/build/dist/Types/Exception/BadRequestException.js +10 -0
  916. package/build/dist/Types/Exception/BadRequestException.js.map +1 -1
  917. package/build/dist/Types/Exception/Exception.js +56 -0
  918. package/build/dist/Types/Exception/Exception.js.map +1 -1
  919. package/build/dist/Types/Exception/ForbiddenException.js +9 -0
  920. package/build/dist/Types/Exception/ForbiddenException.js.map +1 -1
  921. package/build/dist/Types/Exception/NotAuthenticatedException.js +9 -0
  922. package/build/dist/Types/Exception/NotAuthenticatedException.js.map +1 -1
  923. package/build/dist/Types/Exception/NotAuthorizedException.js +9 -0
  924. package/build/dist/Types/Exception/NotAuthorizedException.js.map +1 -1
  925. package/build/dist/Types/Exception/NotFoundException.js +10 -0
  926. package/build/dist/Types/Exception/NotFoundException.js.map +1 -1
  927. package/build/dist/Types/Exception/PayloadTooLargeException.js +10 -0
  928. package/build/dist/Types/Exception/PayloadTooLargeException.js.map +1 -1
  929. package/build/dist/Types/Exception/PaymentRequiredException.js +9 -0
  930. package/build/dist/Types/Exception/PaymentRequiredException.js.map +1 -1
  931. package/build/dist/Types/Exception/ServiceUnavailableException.js +9 -0
  932. package/build/dist/Types/Exception/ServiceUnavailableException.js.map +1 -1
  933. package/build/dist/Types/Exception/SsoAuthorizationException.js +9 -0
  934. package/build/dist/Types/Exception/SsoAuthorizationException.js.map +1 -1
  935. package/build/dist/Types/Exception/TenantNotFoundException.js +10 -0
  936. package/build/dist/Types/Exception/TenantNotFoundException.js.map +1 -1
  937. package/build/dist/Types/Exception/TimeoutException.js +9 -0
  938. package/build/dist/Types/Exception/TimeoutException.js.map +1 -1
  939. package/build/dist/Types/Exception/TooManyRequestsException.js +9 -0
  940. package/build/dist/Types/Exception/TooManyRequestsException.js.map +1 -1
  941. package/build/dist/Types/Exception/UnableToReachServer.js +9 -0
  942. package/build/dist/Types/Exception/UnableToReachServer.js.map +1 -1
  943. package/build/dist/Types/Exception/WebsiteRequestException.js +9 -0
  944. package/build/dist/Types/Exception/WebsiteRequestException.js.map +1 -1
  945. package/build/dist/Types/Icon/IconProp.js +1 -0
  946. package/build/dist/Types/Icon/IconProp.js.map +1 -1
  947. package/build/dist/Types/JSONFunctions.js +118 -37
  948. package/build/dist/Types/JSONFunctions.js.map +1 -1
  949. package/build/dist/Types/Monitor/CephAlertTemplates.js +130 -171
  950. package/build/dist/Types/Monitor/CephAlertTemplates.js.map +1 -1
  951. package/build/dist/Types/Monitor/CriteriaFilter.js +45 -2
  952. package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
  953. package/build/dist/Types/Monitor/DatabaseMetricCatalog.js +594 -0
  954. package/build/dist/Types/Monitor/DatabaseMetricCatalog.js.map +1 -0
  955. package/build/dist/Types/Monitor/DatabaseMonitor/DatabaseMonitorResponse.js +21 -0
  956. package/build/dist/Types/Monitor/DatabaseMonitor/DatabaseMonitorResponse.js.map +1 -0
  957. package/build/dist/Types/Monitor/DockerAlertTemplates.js +286 -121
  958. package/build/dist/Types/Monitor/DockerAlertTemplates.js.map +1 -1
  959. package/build/dist/Types/Monitor/DockerSwarmAlertTemplates.js +84 -105
  960. package/build/dist/Types/Monitor/DockerSwarmAlertTemplates.js.map +1 -1
  961. package/build/dist/Types/Monitor/HostAlertTemplates.js +250 -122
  962. package/build/dist/Types/Monitor/HostAlertTemplates.js.map +1 -1
  963. package/build/dist/Types/Monitor/IotAlertTemplates.js +81 -81
  964. package/build/dist/Types/Monitor/IotAlertTemplates.js.map +1 -1
  965. package/build/dist/Types/Monitor/KubernetesAlertTemplates.js +375 -215
  966. package/build/dist/Types/Monitor/KubernetesAlertTemplates.js.map +1 -1
  967. package/build/dist/Types/Monitor/KubernetesMetricCatalog.js +19 -19
  968. package/build/dist/Types/Monitor/KubernetesMetricCatalog.js.map +1 -1
  969. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +70 -0
  970. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
  971. package/build/dist/Types/Monitor/MonitorMetricType.js +61 -0
  972. package/build/dist/Types/Monitor/MonitorMetricType.js.map +1 -1
  973. package/build/dist/Types/Monitor/MonitorStep.js +54 -0
  974. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  975. package/build/dist/Types/Monitor/MonitorStepDatabaseMonitor.js +122 -0
  976. package/build/dist/Types/Monitor/MonitorStepDatabaseMonitor.js.map +1 -0
  977. package/build/dist/Types/Monitor/MonitorStepSqlMonitor.js.map +1 -1
  978. package/build/dist/Types/Monitor/MonitorType.js +45 -1
  979. package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
  980. package/build/dist/Types/Monitor/PodmanAlertTemplates.js +104 -153
  981. package/build/dist/Types/Monitor/PodmanAlertTemplates.js.map +1 -1
  982. package/build/dist/Types/Monitor/ProxmoxAlertTemplates.js +156 -91
  983. package/build/dist/Types/Monitor/ProxmoxAlertTemplates.js.map +1 -1
  984. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js +67 -6
  985. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js.map +1 -1
  986. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js +38 -7
  987. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js.map +1 -1
  988. package/build/dist/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.js +261 -0
  989. package/build/dist/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.js.map +1 -0
  990. package/build/dist/Types/Monitor/RumAlertTemplates.js +46 -7
  991. package/build/dist/Types/Monitor/RumAlertTemplates.js.map +1 -1
  992. package/build/dist/Types/Monitor/SeriesContext/SeriesDebugHints.js +422 -0
  993. package/build/dist/Types/Monitor/SeriesContext/SeriesDebugHints.js.map +1 -0
  994. package/build/dist/Types/Monitor/SeriesContext/SeriesLabelDisplay.js +441 -0
  995. package/build/dist/Types/Monitor/SeriesContext/SeriesLabelDisplay.js.map +1 -0
  996. package/build/dist/Types/Monitor/ServiceAlertTemplates.js +79 -15
  997. package/build/dist/Types/Monitor/ServiceAlertTemplates.js.map +1 -1
  998. package/build/dist/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.js +21 -1
  999. package/build/dist/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.js.map +1 -1
  1000. package/build/dist/Types/Monitor/SqlConnectionConfig.js +2 -0
  1001. package/build/dist/Types/Monitor/SqlConnectionConfig.js.map +1 -0
  1002. package/build/dist/Types/Monitor/UptimeHistoryLabels.js +17 -0
  1003. package/build/dist/Types/Monitor/UptimeHistoryLabels.js.map +1 -0
  1004. package/build/dist/Types/NetworkDevice/NetworkAlertPolicyScope.js +172 -0
  1005. package/build/dist/Types/NetworkDevice/NetworkAlertPolicyScope.js.map +1 -0
  1006. package/build/dist/Types/NetworkDevice/NetworkDeviceMonitoringMethod.js +40 -22
  1007. package/build/dist/Types/NetworkDevice/NetworkDeviceMonitoringMethod.js.map +1 -1
  1008. package/build/dist/Types/NetworkSite/DefaultNetworkSiteTypeHierarchy.js +26 -0
  1009. package/build/dist/Types/NetworkSite/DefaultNetworkSiteTypeHierarchy.js.map +1 -0
  1010. package/build/dist/Types/NotificationSetting/NotificationEmailRollupCategory.js +186 -0
  1011. package/build/dist/Types/NotificationSetting/NotificationEmailRollupCategory.js.map +1 -0
  1012. package/build/dist/Types/NotificationSetting/NotificationEmailRollupPolicy.js +87 -0
  1013. package/build/dist/Types/NotificationSetting/NotificationEmailRollupPolicy.js.map +1 -0
  1014. package/build/dist/Types/NotificationSetting/RoutineEmailEvents.js +29 -0
  1015. package/build/dist/Types/NotificationSetting/RoutineEmailEvents.js.map +1 -0
  1016. package/build/dist/Types/Permission.js +80 -0
  1017. package/build/dist/Types/Permission.js.map +1 -1
  1018. package/build/dist/Types/Rum/SessionReplay.js +117 -0
  1019. package/build/dist/Types/Rum/SessionReplay.js.map +1 -1
  1020. package/build/dist/Types/Rum/SessionReplayApi.js +181 -0
  1021. package/build/dist/Types/Rum/SessionReplayApi.js.map +1 -0
  1022. package/build/dist/Types/Rum/SessionReplayCaptureTrigger.js +21 -12
  1023. package/build/dist/Types/Rum/SessionReplayCaptureTrigger.js.map +1 -1
  1024. package/build/dist/Types/Rum/SessionReplayConsentMode.js +11 -7
  1025. package/build/dist/Types/Rum/SessionReplayConsentMode.js.map +1 -1
  1026. package/build/dist/Types/Rum/SessionReplayCustomEvents.js +172 -0
  1027. package/build/dist/Types/Rum/SessionReplayCustomEvents.js.map +1 -0
  1028. package/build/dist/Types/Rum/SessionReplayHealth.js +37 -0
  1029. package/build/dist/Types/Rum/SessionReplayHealth.js.map +1 -0
  1030. package/build/dist/Types/Telemetry/ErrorClass.js +216 -0
  1031. package/build/dist/Types/Telemetry/ErrorClass.js.map +1 -0
  1032. package/build/dist/Types/Telemetry/TelemetryIngestSurface.js +85 -0
  1033. package/build/dist/Types/Telemetry/TelemetryIngestSurface.js.map +1 -0
  1034. package/build/dist/Types/Telemetry/TelemetryIngestionKeyPolicy.js +15 -0
  1035. package/build/dist/Types/Telemetry/TelemetryIngestionKeyPolicy.js.map +1 -0
  1036. package/build/dist/Types/Telemetry/TelemetryIngestionKeyType.js +30 -0
  1037. package/build/dist/Types/Telemetry/TelemetryIngestionKeyType.js.map +1 -0
  1038. package/build/dist/Types/Telemetry/UnitOfWork.js +59 -0
  1039. package/build/dist/Types/Telemetry/UnitOfWork.js.map +1 -0
  1040. package/build/dist/Types/WebsiteRequest.js +55 -3
  1041. package/build/dist/Types/WebsiteRequest.js.map +1 -1
  1042. package/build/dist/UI/Components/Charts/Area/AreaChart.js +13 -2
  1043. package/build/dist/UI/Components/Charts/Area/AreaChart.js.map +1 -1
  1044. package/build/dist/UI/Components/Charts/Bar/BarChart.js +6 -2
  1045. package/build/dist/UI/Components/Charts/Bar/BarChart.js.map +1 -1
  1046. package/build/dist/UI/Components/Charts/Line/LineChart.js +13 -2
  1047. package/build/dist/UI/Components/Charts/Line/LineChart.js.map +1 -1
  1048. package/build/dist/UI/Components/Charts/Types/XAxis/XAxis.js.map +1 -1
  1049. package/build/dist/UI/Components/Charts/Utils/DataPoint.js +15 -3
  1050. package/build/dist/UI/Components/Charts/Utils/DataPoint.js.map +1 -1
  1051. package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js +40 -9
  1052. package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js.map +1 -1
  1053. package/build/dist/UI/Components/Charts/Utils/XAxis.js +186 -0
  1054. package/build/dist/UI/Components/Charts/Utils/XAxis.js.map +1 -1
  1055. package/build/dist/UI/Components/CommandPalette/CommandPalette.js +2 -7
  1056. package/build/dist/UI/Components/CommandPalette/CommandPalette.js.map +1 -1
  1057. package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js +80 -6
  1058. package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js.map +1 -1
  1059. package/build/dist/UI/Components/CustomFields/MapFromCustomFieldInput.js +118 -0
  1060. package/build/dist/UI/Components/CustomFields/MapFromCustomFieldInput.js.map +1 -0
  1061. package/build/dist/UI/Components/EditionLabel/EditionLabel.js +3 -0
  1062. package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
  1063. package/build/dist/UI/Components/Graphs/DayUptimeGraph.js +112 -7
  1064. package/build/dist/UI/Components/Graphs/DayUptimeGraph.js.map +1 -1
  1065. package/build/dist/UI/Components/Graphs/UptimeBarTooltip.js +5 -162
  1066. package/build/dist/UI/Components/Graphs/UptimeBarTooltip.js.map +1 -1
  1067. package/build/dist/UI/Components/Graphs/UptimeDaySummary.js +181 -0
  1068. package/build/dist/UI/Components/Graphs/UptimeDaySummary.js.map +1 -0
  1069. package/build/dist/UI/Components/Header/Header.js +2 -3
  1070. package/build/dist/UI/Components/Header/Header.js.map +1 -1
  1071. package/build/dist/UI/Components/Header/IconDropdown/IconDropdownItem.js +2 -1
  1072. package/build/dist/UI/Components/Header/IconDropdown/IconDropdownItem.js.map +1 -1
  1073. package/build/dist/UI/Components/Header/IconDropdown/IconDropdownMenu.js +7 -1
  1074. package/build/dist/UI/Components/Header/IconDropdown/IconDropdownMenu.js.map +1 -1
  1075. package/build/dist/UI/Components/Header/ProjectPicker/ProjectPicker.js +7 -1
  1076. package/build/dist/UI/Components/Header/ProjectPicker/ProjectPicker.js.map +1 -1
  1077. package/build/dist/UI/Components/HeaderAlert/NotificationBell/NotificationBellDropdown.js +7 -1
  1078. package/build/dist/UI/Components/HeaderAlert/NotificationBell/NotificationBellDropdown.js.map +1 -1
  1079. package/build/dist/UI/Components/Icon/Icon.js +5 -0
  1080. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  1081. package/build/dist/UI/Components/JSONTable/JSONTable.js +2 -2
  1082. package/build/dist/UI/Components/JSONTable/JSONTable.js.map +1 -1
  1083. package/build/dist/UI/Components/KeyboardShortcut/KeyboardShortcutsModal.js +35 -0
  1084. package/build/dist/UI/Components/KeyboardShortcut/KeyboardShortcutsModal.js.map +1 -0
  1085. package/build/dist/UI/Components/Modal/Modal.js +2 -7
  1086. package/build/dist/UI/Components/Modal/Modal.js.map +1 -1
  1087. package/build/dist/UI/Components/Monitor/SeriesDebugCommandsViewer.js +34 -0
  1088. package/build/dist/UI/Components/Monitor/SeriesDebugCommandsViewer.js.map +1 -0
  1089. package/build/dist/UI/Components/Monitor/SeriesLabelsViewer.js +49 -0
  1090. package/build/dist/UI/Components/Monitor/SeriesLabelsViewer.js.map +1 -0
  1091. package/build/dist/UI/Components/MonitorGraphs/Uptime.js +1 -1
  1092. package/build/dist/UI/Components/MonitorGraphs/Uptime.js.map +1 -1
  1093. package/build/dist/UI/Components/MonitorGraphs/UptimeBarDayModal.js +32 -6
  1094. package/build/dist/UI/Components/MonitorGraphs/UptimeBarDayModal.js.map +1 -1
  1095. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +77 -0
  1096. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
  1097. package/build/dist/UI/Components/ProgressBar/ProgressBar.js +12 -1
  1098. package/build/dist/UI/Components/ProgressBar/ProgressBar.js.map +1 -1
  1099. package/build/dist/UI/Components/RadioButtons/BasicRadioButtons.js +6 -6
  1100. package/build/dist/UI/Components/RadioButtons/BasicRadioButtons.js.map +1 -1
  1101. package/build/dist/UI/Components/SideMenu/SideMenu.js +67 -5
  1102. package/build/dist/UI/Components/SideMenu/SideMenu.js.map +1 -1
  1103. package/build/dist/UI/Components/SideMenu/SideMenuItem.js +49 -53
  1104. package/build/dist/UI/Components/SideMenu/SideMenuItem.js.map +1 -1
  1105. package/build/dist/UI/Components/SideMenu/SideMenuSection.js +25 -7
  1106. package/build/dist/UI/Components/SideMenu/SideMenuSection.js.map +1 -1
  1107. package/build/dist/UI/Components/SideOver/SideOver.js +5 -20
  1108. package/build/dist/UI/Components/SideOver/SideOver.js.map +1 -1
  1109. package/build/dist/UI/Components/StatusPage/ResourceGroupSection.js +22 -1
  1110. package/build/dist/UI/Components/StatusPage/ResourceGroupSection.js.map +1 -1
  1111. package/build/dist/UI/Components/Table/CellClassName.js +55 -0
  1112. package/build/dist/UI/Components/Table/CellClassName.js.map +1 -0
  1113. package/build/dist/UI/Components/Table/TableRow.js +16 -13
  1114. package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
  1115. package/build/dist/UI/Components/Table/TableSkeletonRows.js +9 -8
  1116. package/build/dist/UI/Components/Table/TableSkeletonRows.js.map +1 -1
  1117. package/build/dist/UI/Components/Tooltip/Tooltip.js +25 -1
  1118. package/build/dist/UI/Components/Tooltip/Tooltip.js.map +1 -1
  1119. package/build/dist/UI/Components/Workflow/ComponentsModal.js +47 -30
  1120. package/build/dist/UI/Components/Workflow/ComponentsModal.js.map +1 -1
  1121. package/build/dist/UI/Components/Workflow/NodePlacement.js +37 -0
  1122. package/build/dist/UI/Components/Workflow/NodePlacement.js.map +1 -0
  1123. package/build/dist/UI/Components/Workflow/Workflow.js +35 -18
  1124. package/build/dist/UI/Components/Workflow/Workflow.js.map +1 -1
  1125. package/build/dist/UI/Config.js +10 -20
  1126. package/build/dist/UI/Config.js.map +1 -1
  1127. package/build/dist/UI/Utils/GlobalKeyboardShortcut.js +138 -0
  1128. package/build/dist/UI/Utils/GlobalKeyboardShortcut.js.map +1 -0
  1129. package/build/dist/UI/Utils/PageScrollLock.js +31 -3
  1130. package/build/dist/UI/Utils/PageScrollLock.js.map +1 -1
  1131. package/build/dist/UI/Utils/PermissionGate.js +42 -1
  1132. package/build/dist/UI/Utils/PermissionGate.js.map +1 -1
  1133. package/build/dist/UI/Utils/SensitiveUrlToken.js +97 -0
  1134. package/build/dist/UI/Utils/SensitiveUrlToken.js.map +1 -0
  1135. package/build/dist/UI/Utils/Telemetry/BrowserTelemetryConfig.js +14 -0
  1136. package/build/dist/UI/Utils/Telemetry/BrowserTelemetryConfig.js.map +1 -0
  1137. package/build/dist/UI/Utils/Telemetry/Telemetry.js +7 -5
  1138. package/build/dist/UI/Utils/Telemetry/Telemetry.js.map +1 -1
  1139. package/build/dist/UI/Utils/TestLLMProvider.js +4 -5
  1140. package/build/dist/UI/Utils/TestLLMProvider.js.map +1 -1
  1141. package/build/dist/Utils/API.js +67 -5
  1142. package/build/dist/Utils/API.js.map +1 -1
  1143. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js +15 -0
  1144. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js.map +1 -1
  1145. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js +111 -9
  1146. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js.map +1 -1
  1147. package/build/dist/Utils/HTTPResponseBodyReader.js +157 -0
  1148. package/build/dist/Utils/HTTPResponseBodyReader.js.map +1 -0
  1149. package/build/dist/Utils/Monitor/MonitorMetricType.js +109 -1
  1150. package/build/dist/Utils/Monitor/MonitorMetricType.js.map +1 -1
  1151. package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +8 -3
  1152. package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
  1153. package/build/dist/Utils/NetworkDevice/DeviceHealthStateUtil.js +27 -7
  1154. package/build/dist/Utils/NetworkDevice/DeviceHealthStateUtil.js.map +1 -1
  1155. package/build/dist/Utils/NetworkDevice/DeviceReachabilityUtil.js +7 -5
  1156. package/build/dist/Utils/NetworkDevice/DeviceReachabilityUtil.js.map +1 -1
  1157. package/build/dist/Utils/NetworkDevice/NetworkAlertPolicyBootstrapUtil.js +180 -0
  1158. package/build/dist/Utils/NetworkDevice/NetworkAlertPolicyBootstrapUtil.js.map +1 -0
  1159. package/build/dist/Utils/NetworkDevice/SnmpCredentialUtil.js +12 -0
  1160. package/build/dist/Utils/NetworkDevice/SnmpCredentialUtil.js.map +1 -0
  1161. package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js +15 -5
  1162. package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js.map +1 -1
  1163. package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js +44 -15
  1164. package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js.map +1 -1
  1165. package/build/dist/Utils/NetworkDiscovery/DiscoveryImportEligibility.js +52 -23
  1166. package/build/dist/Utils/NetworkDiscovery/DiscoveryImportEligibility.js.map +1 -1
  1167. package/build/dist/Utils/NetworkDiscovery/DiscoveryScanStatus.js +69 -0
  1168. package/build/dist/Utils/NetworkDiscovery/DiscoveryScanStatus.js.map +1 -0
  1169. package/build/dist/Utils/NetworkDiscovery/PingMonitorBuilder.js +85 -13
  1170. package/build/dist/Utils/NetworkDiscovery/PingMonitorBuilder.js.map +1 -1
  1171. package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js +30 -15
  1172. package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js.map +1 -1
  1173. package/build/dist/Utils/NetworkSite/TypeHierarchyUtil.js +191 -0
  1174. package/build/dist/Utils/NetworkSite/TypeHierarchyUtil.js.map +1 -0
  1175. package/build/dist/Utils/Rum/ChunkMath.js +76 -0
  1176. package/build/dist/Utils/Rum/ChunkMath.js.map +1 -1
  1177. package/build/dist/Utils/Rum/SessionReplayHealth.js +534 -0
  1178. package/build/dist/Utils/Rum/SessionReplayHealth.js.map +1 -0
  1179. package/build/dist/Utils/Rum/SessionReplayStringMap.js +165 -0
  1180. package/build/dist/Utils/Rum/SessionReplayStringMap.js.map +1 -0
  1181. package/build/dist/Utils/Schema/ModelSchema.js +1 -0
  1182. package/build/dist/Utils/Schema/ModelSchema.js.map +1 -1
  1183. package/build/dist/Utils/StatusPage/ResourceSearch.js +200 -0
  1184. package/build/dist/Utils/StatusPage/ResourceSearch.js.map +1 -0
  1185. package/build/dist/Utils/Telemetry/OriginAllowList.js +299 -0
  1186. package/build/dist/Utils/Telemetry/OriginAllowList.js.map +1 -0
  1187. package/build/dist/Utils/Uptime/DayUptimeGraphUtil.js +147 -0
  1188. package/build/dist/Utils/Uptime/DayUptimeGraphUtil.js.map +1 -0
  1189. package/build/dist/Utils/ValueFormatter.js +32 -1
  1190. package/build/dist/Utils/ValueFormatter.js.map +1 -1
  1191. package/package.json +2 -2
@@ -1,13 +1,28 @@
1
1
  import CapturedMetric from "../../../Types/Monitor/CustomCodeMonitor/CapturedMetric";
2
2
  import ReturnResult from "../../../Types/IsolatedVM/ReturnResult";
3
3
  import { JSONObject } from "../../../Types/JSON";
4
- import axios, { AxiosResponse } from "axios";
4
+ import HTTPResponseBodyReader, {
5
+ HTTPResponseBodyBudget,
6
+ } from "../../../Utils/HTTPResponseBodyReader";
7
+ import axios, { AxiosError, AxiosResponse } from "axios";
5
8
  import crypto from "crypto";
6
9
  import http from "http";
7
10
  import https from "https";
8
11
  import ivm from "isolated-vm";
9
- import CaptureSpan from "../Telemetry/CaptureSpan";
12
+ import DataSourceEgressGuard, {
13
+ EgressLookupFunction,
14
+ } from "../DataSource/EgressGuard";
10
15
  import SSRFProtection from "../SSRFProtection";
16
+ import CaptureSpan from "../Telemetry/CaptureSpan";
17
+
18
+ /*
19
+ * How often to wake Node's event loop while sandboxed code is running. See
20
+ * the comment on hostBridgeTicker in runCodeInSandbox: the isolate's host
21
+ * bridges only advance on an event-loop turn, and a loop with nothing else
22
+ * pending sleeps until its next timer. 5ms is small against any real host
23
+ * operation and costs one empty callback per tick.
24
+ */
25
+ const HOST_BRIDGE_TICK_MS: number = 5;
11
26
 
12
27
  export default class VMRunner {
13
28
  /*
@@ -22,37 +37,53 @@ export default class VMRunner {
22
37
  */
23
38
  private static resolveEffectiveRequestUrl(data: {
24
39
  method: string;
25
- url: string;
40
+ url?: string | undefined;
26
41
  config?: JSONObject | undefined;
27
42
  }): string {
28
- const baseUrl: string =
29
- typeof data.config?.["baseURL"] === "string"
30
- ? (data.config["baseURL"] as string)
31
- : "";
32
-
33
- let target: string = data.url || "";
34
-
35
- if (data.method === "request" || !target) {
36
- const configUrl: unknown = data.config?.["url"];
37
- target = typeof configUrl === "string" ? configUrl : target;
38
- }
39
-
40
- let absolute: string = target;
41
-
42
- const absoluteUrlRegex: RegExp = /^https?:\/\//i;
43
-
44
- if (!absoluteUrlRegex.test(absolute)) {
45
- if (!baseUrl) {
43
+ const baseUrl: unknown = data.config?.["baseURL"];
44
+ const requestedUrl: unknown =
45
+ data.method === "request" ? data.config?.["url"] : data.url;
46
+ const allowAbsoluteUrls: unknown = data.config?.["allowAbsoluteUrls"];
47
+ const axiosAbsoluteUrlPattern: RegExp = new RegExp(
48
+ "^([a-z][a-z\\d+\\-.]*:)?//",
49
+ "i",
50
+ );
51
+ const httpUrlPattern: RegExp = new RegExp("^https?://", "i");
52
+
53
+ /*
54
+ * Mirror Axios's buildFullPath/isAbsoluteURL decision exactly before the
55
+ * SSRF guard sees the target. In particular, protocol-relative URLs and
56
+ * every RFC 3986 scheme count as absolute to Axios, while
57
+ * allowAbsoluteUrls:false deliberately combines even an absolute URL with
58
+ * baseURL. Direct-method positional URLs remain authoritative when they
59
+ * are the empty string; config.url must not silently replace them.
60
+ */
61
+ const isAxiosAbsoluteUrl: boolean =
62
+ typeof requestedUrl === "string" &&
63
+ axiosAbsoluteUrlPattern.test(requestedUrl);
64
+ let effectiveUrl: unknown = requestedUrl;
65
+
66
+ if (baseUrl && (!isAxiosAbsoluteUrl || allowAbsoluteUrls === false)) {
67
+ if (typeof baseUrl !== "string") {
46
68
  throw new Error("Request URL must be an absolute http or https URL.");
47
69
  }
48
- absolute = `${baseUrl.replace(/\/+$/, "")}/${absolute.replace(/^\/+/, "")}`;
70
+
71
+ effectiveUrl = requestedUrl
72
+ ? `${baseUrl.replace(/\/?\/$/, "")}/${String(requestedUrl).replace(
73
+ /^\/+/,
74
+ "",
75
+ )}`
76
+ : baseUrl;
49
77
  }
50
78
 
51
- if (!absoluteUrlRegex.test(absolute)) {
79
+ if (
80
+ typeof effectiveUrl !== "string" ||
81
+ !httpUrlPattern.test(effectiveUrl)
82
+ ) {
52
83
  throw new Error("Request URL must be an absolute http or https URL.");
53
84
  }
54
85
 
55
- return absolute;
86
+ return effectiveUrl;
56
87
  }
57
88
 
58
89
  @CaptureSpan()
@@ -71,6 +102,15 @@ export default class VMRunner {
71
102
  * strict policy, which is what a caller that says nothing should get.
72
103
  */
73
104
  allowPrivateNetworkRequests?: boolean | undefined;
105
+ /*
106
+ * A trusted caller's already-resolved egress policy. This is separate
107
+ * from eligibility above because the workflow caller uses the API
108
+ * server's webhook configuration, while the Probe has already resolved
109
+ * its own local setting. When supplied, it is authoritative and the API
110
+ * server's webhook policy is not consulted. Absent leaves the workflow
111
+ * caller's webhook behavior unchanged.
112
+ */
113
+ privateNetworkAccessIsAllowed?: boolean | undefined;
74
114
  /*
75
115
  * Overrides the sentence a private-tier refusal appends, telling the
76
116
  * operator which setting would permit it. Whoever runs this sandbox
@@ -88,7 +128,17 @@ export default class VMRunner {
88
128
  const MAX_LOG_MESSAGES: number = 1000;
89
129
  const MAX_LOG_BYTES: number = 1_000_000;
90
130
  const MAX_SCRIPT_ERROR_MESSAGE_LENGTH: number = 10_000;
131
+ const MAX_HTTP_RESPONSE_BYTES: number = 10 * 1024 * 1024;
132
+ const MAX_HTTP_REQUEST_BYTES: number = 10 * 1024 * 1024;
133
+ const MAX_HTTP_CONFIG_BYTES: number = 256 * 1024;
134
+ const MAX_HTTP_URL_BYTES: number = 16 * 1024;
135
+ const MAX_BASE64_RESPONSE_SOURCE_BYTES: number = Math.floor(
136
+ ((MAX_HTTP_RESPONSE_BYTES - 64 * 1024) * 3) / 4,
137
+ );
91
138
  let logBytes: number = 0;
139
+ let serializedHttpRequestBytes: number = 0;
140
+ const httpResponseBodyBudget: HTTPResponseBodyBudget =
141
+ new HTTPResponseBodyBudget(MAX_HTTP_RESPONSE_BYTES);
92
142
 
93
143
  const pendingHostTimeouts: Set<ReturnType<typeof global.setTimeout>> =
94
144
  new Set<ReturnType<typeof global.setTimeout>>();
@@ -342,13 +392,13 @@ export default class VMRunner {
342
392
  const executeAxiosRequest: (
343
393
  signal: AbortSignal,
344
394
  method: string,
345
- url: string,
395
+ url?: string,
346
396
  arg1?: string,
347
397
  arg2?: string,
348
398
  ) => Promise<string> = async (
349
399
  signal: AbortSignal,
350
400
  method: string,
351
- url: string,
401
+ url?: string,
352
402
  arg1?: string,
353
403
  arg2?: string,
354
404
  ): Promise<string> => {
@@ -367,32 +417,82 @@ export default class VMRunner {
367
417
  ? (JSON.parse(configStr) as JSONObject)
368
418
  : undefined;
369
419
 
370
- // Reconstruct real http/https Agents from serialized markers
371
- if (config) {
372
- const httpsAgentConfig: JSONObject | undefined = config[
373
- "httpsAgent"
374
- ] as JSONObject | undefined;
420
+ if (method === "request" && config) {
421
+ const requestBody: unknown = config["data"];
422
+ const configWithoutBody: JSONObject = { ...config };
423
+ delete configWithoutBody["data"];
375
424
 
376
425
  if (
377
- httpsAgentConfig &&
378
- httpsAgentConfig["__agentType"] === "__https_agent__"
426
+ Buffer.byteLength(JSON.stringify(requestBody) || "", "utf8") >
427
+ MAX_HTTP_REQUEST_BYTES
379
428
  ) {
380
- config["httpsAgent"] = new https.Agent(
381
- httpsAgentConfig["options"] as https.AgentOptions,
382
- ) as unknown as JSONObject;
429
+ throw new Error("HTTP request body exceeded the allowed size.");
430
+ }
431
+
432
+ if (
433
+ Buffer.byteLength(JSON.stringify(configWithoutBody), "utf8") >
434
+ MAX_HTTP_CONFIG_BYTES
435
+ ) {
436
+ throw new Error("HTTP request config exceeded the allowed size.");
437
+ }
438
+ }
439
+
440
+ let suppliedHttpsAgentOptions: https.AgentOptions = {};
441
+
442
+ const pickAgentOptions: (
443
+ source: JSONObject | undefined,
444
+ allowedKeys: Array<string>,
445
+ ) => Record<string, unknown> = (
446
+ source: JSONObject | undefined,
447
+ allowedKeys: Array<string>,
448
+ ): Record<string, unknown> => {
449
+ const picked: Record<string, unknown> = {};
450
+ if (!source) {
451
+ return picked;
383
452
  }
384
453
 
385
- const httpAgentConfig: JSONObject | undefined = config[
386
- "httpAgent"
454
+ for (const key of allowedKeys) {
455
+ if (source[key] !== undefined) {
456
+ picked[key] = source[key];
457
+ }
458
+ }
459
+
460
+ return picked;
461
+ };
462
+
463
+ /*
464
+ * Preserve only TLS semantics from a serialized HTTPS Agent. Network
465
+ * and pooling options are intentionally discarded: host/port/path and
466
+ * custom socket hooks can steer around the validated URL, while a
467
+ * per-request keep-alive agent would leave an idle socket behind.
468
+ */
469
+ if (config) {
470
+ const httpsAgentConfig: JSONObject | undefined = config[
471
+ "httpsAgent"
387
472
  ] as JSONObject | undefined;
388
473
 
389
474
  if (
390
- httpAgentConfig &&
391
- httpAgentConfig["__agentType"] === "__http_agent__"
475
+ httpsAgentConfig &&
476
+ httpsAgentConfig["__agentType"] === "__https_agent__"
392
477
  ) {
393
- config["httpAgent"] = new http.Agent(
394
- httpAgentConfig["options"] as http.AgentOptions,
395
- ) as unknown as JSONObject;
478
+ suppliedHttpsAgentOptions = pickAgentOptions(
479
+ httpsAgentConfig["options"] as JSONObject | undefined,
480
+ [
481
+ "rejectUnauthorized",
482
+ "ca",
483
+ "cert",
484
+ "key",
485
+ "pfx",
486
+ "passphrase",
487
+ "ciphers",
488
+ "minVersion",
489
+ "maxVersion",
490
+ "secureProtocol",
491
+ "honorCipherOrder",
492
+ "ALPNProtocols",
493
+ "servername",
494
+ ],
495
+ ) as https.AgentOptions;
396
496
  }
397
497
  }
398
498
 
@@ -435,9 +535,12 @@ export default class VMRunner {
435
535
  config,
436
536
  });
437
537
 
438
- await SSRFProtection.validateWebhookTargetIsSafe(effectiveUrl, {
538
+ const validatedTarget: Awaited<
539
+ ReturnType<typeof SSRFProtection.validateAndResolveWebhookTarget>
540
+ > = await SSRFProtection.validateAndResolveWebhookTarget(effectiveUrl, {
439
541
  allowPrivateNetworkTargets:
440
542
  options.allowPrivateNetworkRequests === true,
543
+ privateNetworkAccessIsAllowed: options.privateNetworkAccessIsAllowed,
441
544
  /*
442
545
  * "Webhook URL" is wrong here in both directions: sandboxed code
443
546
  * requests whatever it likes, and one of this runner's two callers
@@ -446,23 +549,103 @@ export default class VMRunner {
446
549
  targetLabel: "Request URL",
447
550
  privateNetworkHint: options.privateNetworkHint,
448
551
  });
552
+ const canonicalUrl: string = validatedTarget.url.toString();
553
+ const pinnedLookup: EgressLookupFunction =
554
+ DataSourceEgressGuard.createPinnedLookup(validatedTarget.addresses);
449
555
 
450
556
  /*
451
- * The URL that was just validated has to be the URL that gets
452
- * dialled. Each of these would otherwise steer the connection
557
+ * The canonical URL that was just validated has to be the URL that
558
+ * gets dialled. Each of these would otherwise steer the connection
453
559
  * somewhere else entirely, past the check above:
454
- * proxy - sends the request to an arbitrary host:port
560
+ * proxy - sends the request to an arbitrary host:port; setting
561
+ * it false also disables Axios's environment proxies
455
562
  * socketPath - connects to a unix socket (/var/run/docker.sock)
456
563
  * transport / adapter - replaces the transport wholesale
564
+ * HTTP/2 - uses Axios's shared session pool instead of these agents
565
+ * lookup - takes precedence over the pinned Agent lookup
566
+ * baseURL / config.url / allowAbsoluteUrls - reinterpret the URL
457
567
  * and a redirect would let a validated public host nominate an
458
- * internal one on the second hop.
568
+ * internal one on the second hop. The pinned lookup closes the DNS
569
+ * rebinding window between policy validation and socket creation.
459
570
  */
460
- const safeConfig: JSONObject = config || {};
461
- delete safeConfig["proxy"];
571
+ const safeConfig: JSONObject = { ...(config || {}) };
462
572
  delete safeConfig["socketPath"];
463
573
  delete safeConfig["transport"];
464
574
  delete safeConfig["adapter"];
575
+ delete safeConfig["http2Options"];
576
+ delete safeConfig["lookup"];
577
+ delete safeConfig["baseURL"];
578
+ delete safeConfig["url"];
579
+ delete safeConfig["allowAbsoluteUrls"];
580
+ safeConfig["proxy"] = false;
465
581
  safeConfig["maxRedirects"] = 0;
582
+ safeConfig["httpVersion"] = 1;
583
+
584
+ const getEffectiveByteLimit: (
585
+ configuredLimit: unknown,
586
+ securityLimit: number,
587
+ ) => number = (
588
+ configuredLimit: unknown,
589
+ securityLimit: number,
590
+ ): number => {
591
+ if (
592
+ typeof configuredLimit === "number" &&
593
+ Number.isFinite(configuredLimit) &&
594
+ configuredLimit >= 0
595
+ ) {
596
+ return Math.min(Math.floor(configuredLimit), securityLimit);
597
+ }
598
+
599
+ return securityLimit;
600
+ };
601
+ const effectiveMaxContentLength: number = getEffectiveByteLimit(
602
+ config?.["maxContentLength"],
603
+ MAX_HTTP_RESPONSE_BYTES,
604
+ );
605
+ const effectiveMaxBodyLength: number = getEffectiveByteLimit(
606
+ config?.["maxBodyLength"],
607
+ MAX_HTTP_REQUEST_BYTES,
608
+ );
609
+ /*
610
+ * The reader below is the sole response cap so every crossed byte is
611
+ * charged to the execution-wide budget before a rejection.
612
+ */
613
+ safeConfig["maxContentLength"] = -1;
614
+ safeConfig["maxBodyLength"] = effectiveMaxBodyLength;
615
+ const requestedResponseType: string | undefined =
616
+ typeof safeConfig["responseType"] === "string"
617
+ ? (safeConfig["responseType"] as string)
618
+ : undefined;
619
+ const requestedResponseEncoding: string | undefined =
620
+ typeof safeConfig["responseEncoding"] === "string"
621
+ ? (safeConfig["responseEncoding"] as string)
622
+ : undefined;
623
+ const transitionalConfig: JSONObject | undefined =
624
+ safeConfig["transitional"] &&
625
+ typeof safeConfig["transitional"] === "object"
626
+ ? (safeConfig["transitional"] as JSONObject)
627
+ : undefined;
628
+ const forcedJsonParsing: boolean =
629
+ typeof transitionalConfig?.["forcedJSONParsing"] === "boolean"
630
+ ? (transitionalConfig["forcedJSONParsing"] as boolean)
631
+ : true;
632
+ const silentJsonParsing: boolean =
633
+ typeof transitionalConfig?.["silentJSONParsing"] === "boolean"
634
+ ? (transitionalConfig["silentJSONParsing"] as boolean)
635
+ : true;
636
+ const shouldParseResponseAsJson: boolean =
637
+ requestedResponseType === "json" ||
638
+ (forcedJsonParsing && !requestedResponseType);
639
+ const strictJsonParsing: boolean =
640
+ requestedResponseType === "json" && !silentJsonParsing;
641
+ safeConfig["responseType"] = "stream";
642
+ safeConfig["httpAgent"] = new http.Agent({
643
+ lookup: pinnedLookup as never,
644
+ }) as unknown as JSONObject;
645
+ safeConfig["httpsAgent"] = new https.Agent({
646
+ ...suppliedHttpsAgentOptions,
647
+ lookup: pinnedLookup as never,
648
+ }) as unknown as JSONObject;
466
649
  Object.defineProperty(safeConfig, "signal", {
467
650
  value: signal,
468
651
  enumerable: true,
@@ -470,51 +653,258 @@ export default class VMRunner {
470
653
  });
471
654
  config = safeConfig;
472
655
 
656
+ interface NormalizedResponseData {
657
+ data: string;
658
+ encoding:
659
+ | "base64-arraybuffer"
660
+ | "base64-json-or-text"
661
+ | "base64-text";
662
+ }
663
+
664
+ const responseDataEncoding:
665
+ | "base64-arraybuffer"
666
+ | "base64-json-or-text"
667
+ | "base64-text" =
668
+ requestedResponseType === "arraybuffer"
669
+ ? "base64-arraybuffer"
670
+ : shouldParseResponseAsJson
671
+ ? "base64-json-or-text"
672
+ : "base64-text";
673
+
674
+ const serializedResponseConfig: Record<string, unknown> = {
675
+ method:
676
+ method === "request"
677
+ ? String(safeConfig["method"] || "get").toLowerCase()
678
+ : method,
679
+ url: canonicalUrl,
680
+ maxContentLength: effectiveMaxContentLength,
681
+ maxBodyLength: effectiveMaxBodyLength,
682
+ };
683
+ if (requestedResponseType !== undefined) {
684
+ serializedResponseConfig["responseType"] = requestedResponseType;
685
+ }
686
+ if (requestedResponseEncoding !== undefined) {
687
+ serializedResponseConfig["responseEncoding"] =
688
+ requestedResponseEncoding;
689
+ }
690
+
691
+ const encodeResponseBody: (body: Buffer) => NormalizedResponseData = (
692
+ body: Buffer,
693
+ ): NormalizedResponseData => {
694
+ if (body.length > MAX_BASE64_RESPONSE_SOURCE_BYTES) {
695
+ throw new Error(
696
+ "Remote response exceeded the allowed serialized size.",
697
+ );
698
+ }
699
+
700
+ return {
701
+ data: body.toString("base64"),
702
+ encoding: responseDataEncoding,
703
+ };
704
+ };
705
+
706
+ type ResponseBodyReadAxiosError = AxiosError & {
707
+ __oneuptimeResponseBodyReadFailed: true;
708
+ };
709
+
710
+ const wrapResponseBodyReadError: (
711
+ error: unknown,
712
+ response: AxiosResponse,
713
+ ) => ResponseBodyReadAxiosError = (
714
+ error: unknown,
715
+ response: AxiosResponse,
716
+ ): ResponseBodyReadAxiosError => {
717
+ const wrappedError: AxiosError = AxiosError.from(
718
+ error,
719
+ AxiosError.ERR_BAD_RESPONSE,
720
+ response.config,
721
+ response.request,
722
+ response,
723
+ { __oneuptimeResponseBodyReadFailed: true },
724
+ );
725
+
726
+ /*
727
+ * Axios's streamed maxContentLength wrapper can throw an AxiosError
728
+ * before attaching its response. Restore the association here so
729
+ * interceptors and catch handlers retain status, headers, config,
730
+ * and request context just as they do for buffered responses.
731
+ */
732
+ wrappedError.response = response;
733
+ wrappedError.config = response.config;
734
+ wrappedError.request = response.request;
735
+
736
+ return wrappedError as ResponseBodyReadAxiosError;
737
+ };
738
+
739
+ const normalizeResponseData: (
740
+ response: AxiosResponse,
741
+ ) => Promise<NormalizedResponseData> = async (
742
+ response: AxiosResponse,
743
+ ): Promise<NormalizedResponseData> => {
744
+ const responseData: unknown = response.data;
745
+ const isStream: boolean = Boolean(
746
+ responseData &&
747
+ typeof responseData === "object" &&
748
+ typeof (responseData as Partial<AsyncIterable<unknown>>)[
749
+ Symbol.asyncIterator
750
+ ] === "function",
751
+ );
752
+
753
+ if (!isStream) {
754
+ /*
755
+ * Test adapters can return an already-decoded value. Convert that
756
+ * value back to bounded bytes so every path uses the same base64
757
+ * bridge and none can trigger host-side JSON escaping or Buffer's
758
+ * decimal-array serialization.
759
+ */
760
+ let body: Buffer;
761
+
762
+ if (Buffer.isBuffer(responseData)) {
763
+ body = responseData;
764
+ } else if (ArrayBuffer.isView(responseData)) {
765
+ body = Buffer.from(
766
+ responseData.buffer,
767
+ responseData.byteOffset,
768
+ responseData.byteLength,
769
+ );
770
+ } else if (responseData instanceof ArrayBuffer) {
771
+ body = Buffer.from(responseData);
772
+ } else {
773
+ const serialized: string =
774
+ typeof responseData === "string"
775
+ ? responseData
776
+ : JSON.stringify(responseData ?? "");
777
+ body = Buffer.from(serialized, "utf8");
778
+ }
779
+
780
+ try {
781
+ httpResponseBodyBudget.consume(body.length);
782
+ return encodeResponseBody(body);
783
+ } catch (error: unknown) {
784
+ throw wrapResponseBodyReadError(error, response);
785
+ }
786
+ }
787
+
788
+ let body: Buffer;
789
+ try {
790
+ body = await HTTPResponseBodyReader.read(responseData, {
791
+ budget: httpResponseBodyBudget,
792
+ statusCode: response.status,
793
+ headers: response.headers,
794
+ limitRedirectResponseBody: false,
795
+ isHeadResponse:
796
+ method === "head" ||
797
+ (method === "request" &&
798
+ String(safeConfig["method"] || "").toLowerCase() === "head"),
799
+ maximumResponseBytes: effectiveMaxContentLength,
800
+ });
801
+ } catch (error: unknown) {
802
+ throw wrapResponseBodyReadError(error, response);
803
+ }
804
+
805
+ /*
806
+ * Never put raw bytes or decoded attacker text directly into the
807
+ * host-side JSON envelope. Buffer.toJSON creates a decimal array,
808
+ * while JSON escaping can turn one control byte into six characters;
809
+ * either form multiplies memory outside the isolate. Base64 has a
810
+ * fixed 4/3 expansion. The reserved 64 KiB covers status/headers and
811
+ * wrapper fields, keeping the complete bridge string under 10 MiB.
812
+ * Decoding and best-effort JSON parsing happen inside the isolate's
813
+ * 128 MiB memory limit.
814
+ */
815
+ try {
816
+ return encodeResponseBody(body);
817
+ } catch (error: unknown) {
818
+ throw wrapResponseBodyReadError(error, response);
819
+ }
820
+ };
821
+
822
+ const serializeResponseEnvelope: (
823
+ metadata: Record<string, unknown>,
824
+ responseData: NormalizedResponseData,
825
+ ) => string = (
826
+ metadata: Record<string, unknown>,
827
+ responseData: NormalizedResponseData,
828
+ ): string => {
829
+ /*
830
+ * Keep the attacker-controlled body outside the JSON metadata.
831
+ * Parsing a JSON object that contains a near-limit base64 string
832
+ * otherwise allocates a second full copy inside the isolate. A JSON
833
+ * line followed by base64 is unambiguous because JSON escapes any
834
+ * newline found in metadata values.
835
+ */
836
+ const envelope: string = `${JSON.stringify({
837
+ ...metadata,
838
+ __oneuptimeDataEncoding: responseData.encoding,
839
+ __oneuptimeResponseEncoding: requestedResponseEncoding,
840
+ __oneuptimeShouldParseJson: shouldParseResponseAsJson,
841
+ __oneuptimeStrictJsonParsing: strictJsonParsing,
842
+ __oneuptimeConfig: serializedResponseConfig,
843
+ __oneuptimeHasRequest: true,
844
+ })}\n${responseData.data}`;
845
+
846
+ if (Buffer.byteLength(envelope, "utf8") > MAX_HTTP_RESPONSE_BYTES) {
847
+ throw new Error(
848
+ "Remote response exceeded the allowed serialized size.",
849
+ );
850
+ }
851
+
852
+ return envelope;
853
+ };
854
+
473
855
  try {
474
856
  let response: AxiosResponse;
475
857
 
476
858
  switch (method) {
477
859
  case "get":
478
- response = await axios.get(url, config);
860
+ response = await axios.get(canonicalUrl, config);
479
861
  break;
480
862
  case "head":
481
- response = await axios.head(url, config);
863
+ response = await axios.head(canonicalUrl, config);
482
864
  break;
483
865
  case "options":
484
- response = await axios.options(url, config);
866
+ response = await axios.options(canonicalUrl, config);
485
867
  break;
486
868
  case "post":
487
- response = await axios.post(url, body, config);
869
+ response = await axios.post(canonicalUrl, body, config);
488
870
  break;
489
871
  case "put":
490
- response = await axios.put(url, body, config);
872
+ response = await axios.put(canonicalUrl, body, config);
491
873
  break;
492
874
  case "patch":
493
- response = await axios.patch(url, body, config);
875
+ response = await axios.patch(canonicalUrl, body, config);
494
876
  break;
495
877
  case "delete":
496
- response = await axios.delete(url, config);
878
+ response = await axios.delete(canonicalUrl, config);
497
879
  break;
498
- case "request":
880
+ case "request": {
881
+ config["url"] = canonicalUrl;
499
882
  response = await axios.request(
500
883
  config as Parameters<typeof axios.request>[0],
501
884
  );
502
885
  break;
886
+ }
503
887
  default:
504
888
  throw new Error(`Unsupported HTTP method: ${method}`);
505
889
  }
506
890
 
891
+ const normalizedResponseData: NormalizedResponseData =
892
+ await normalizeResponseData(response);
893
+
507
894
  /*
508
895
  * Convert AxiosHeaders to a plain object before serializing.
509
896
  * JSON.stringify calls AxiosHeaders.toJSON(key) with a truthy key,
510
897
  * which makes it join array headers (like set-cookie) with commas.
511
898
  * This produces invalid Cookie headers when user code forwards them.
512
899
  */
513
- return JSON.stringify({
514
- status: response.status,
515
- headers: toPlainHeaders(response.headers),
516
- data: response.data,
517
- });
900
+ return serializeResponseEnvelope(
901
+ {
902
+ status: response.status,
903
+ statusText: response.statusText,
904
+ headers: toPlainHeaders(response.headers),
905
+ },
906
+ normalizedResponseData,
907
+ );
518
908
  } catch (err: unknown) {
519
909
  /*
520
910
  * If this is an axios error with a response (4xx, 5xx, etc.),
@@ -525,21 +915,47 @@ export default class VMRunner {
525
915
  isAxiosError?: boolean;
526
916
  response?: AxiosResponse<any, any, Record<string, unknown>>;
527
917
  message?: string;
918
+ code?: string;
919
+ name?: string;
920
+ __oneuptimeResponseBodyReadFailed?: boolean;
528
921
  } = err as {
529
922
  isAxiosError?: boolean;
530
923
  response?: AxiosResponse;
531
924
  message?: string;
925
+ code?: string;
926
+ name?: string;
927
+ __oneuptimeResponseBodyReadFailed?: boolean;
532
928
  };
533
929
 
534
930
  if (axiosErr.isAxiosError && axiosErr.response) {
535
- return JSON.stringify({
536
- __isAxiosError: true,
537
- message: axiosErr.message || "Request failed",
538
- status: axiosErr.response.status,
539
- statusText: axiosErr.response.statusText,
540
- headers: toPlainHeaders(axiosErr.response.headers),
541
- data: axiosErr.response.data,
542
- });
931
+ let errorForEnvelope: typeof axiosErr = axiosErr;
932
+ let normalizedResponseData: NormalizedResponseData;
933
+
934
+ if (axiosErr.__oneuptimeResponseBodyReadFailed) {
935
+ normalizedResponseData = encodeResponseBody(Buffer.alloc(0));
936
+ } else {
937
+ try {
938
+ normalizedResponseData = await normalizeResponseData(
939
+ axiosErr.response,
940
+ );
941
+ } catch (responseReadError: unknown) {
942
+ errorForEnvelope = responseReadError as typeof axiosErr;
943
+ normalizedResponseData = encodeResponseBody(Buffer.alloc(0));
944
+ }
945
+ }
946
+
947
+ return serializeResponseEnvelope(
948
+ {
949
+ __isAxiosError: true,
950
+ message: errorForEnvelope.message || "Request failed",
951
+ code: errorForEnvelope.code,
952
+ name: errorForEnvelope.name,
953
+ status: axiosErr.response.status,
954
+ statusText: axiosErr.response.statusText,
955
+ headers: toPlainHeaders(axiosErr.response.headers),
956
+ },
957
+ normalizedResponseData,
958
+ );
543
959
  }
544
960
 
545
961
  throw err;
@@ -547,9 +963,14 @@ export default class VMRunner {
547
963
  };
548
964
 
549
965
  const axiosStartCallback: ivm.Callback<
550
- (method: string, url: string, arg1?: string, arg2?: string) => string
966
+ (method: string, url?: string, arg1?: string, arg2?: string) => string
551
967
  > = new ivm.Callback(
552
- (method: string, url: string, arg1?: string, arg2?: string): string => {
968
+ (
969
+ method: string,
970
+ url?: string,
971
+ arg1?: string,
972
+ arg2?: string,
973
+ ): string => {
553
974
  const operationId: string = String(++nextAxiosOperationId);
554
975
 
555
976
  if (!acceptingHostOperations) {
@@ -564,6 +985,58 @@ export default class VMRunner {
564
985
  return operationId;
565
986
  }
566
987
 
988
+ try {
989
+ const urlBytes: number = Buffer.byteLength(url || "", "utf8");
990
+ const arg1Bytes: number = Buffer.byteLength(arg1 || "", "utf8");
991
+ const arg2Bytes: number = Buffer.byteLength(arg2 || "", "utf8");
992
+ const hasBody: boolean = ["post", "put", "patch"].includes(method);
993
+
994
+ if (urlBytes > MAX_HTTP_URL_BYTES) {
995
+ throw new Error("HTTP request URL exceeded the allowed size.");
996
+ }
997
+
998
+ if (hasBody) {
999
+ if (arg1Bytes > MAX_HTTP_REQUEST_BYTES) {
1000
+ throw new Error("HTTP request body exceeded the allowed size.");
1001
+ }
1002
+ if (arg2Bytes > MAX_HTTP_CONFIG_BYTES) {
1003
+ throw new Error(
1004
+ "HTTP request config exceeded the allowed size.",
1005
+ );
1006
+ }
1007
+ } else if (method === "request") {
1008
+ if (arg1Bytes > MAX_HTTP_REQUEST_BYTES + MAX_HTTP_CONFIG_BYTES) {
1009
+ throw new Error("HTTP request data exceeded the allowed size.");
1010
+ }
1011
+ } else if (arg1Bytes > MAX_HTTP_CONFIG_BYTES) {
1012
+ throw new Error("HTTP request config exceeded the allowed size.");
1013
+ }
1014
+
1015
+ const operationBytes: number = urlBytes + arg1Bytes + arg2Bytes;
1016
+ if (
1017
+ serializedHttpRequestBytes + operationBytes >
1018
+ MAX_HTTP_REQUEST_BYTES
1019
+ ) {
1020
+ throw new Error(
1021
+ "Sandbox HTTP requests exceeded the allowed cumulative request size.",
1022
+ );
1023
+ }
1024
+
1025
+ /*
1026
+ * This budget is deliberately never replenished. Keeping a
1027
+ * per-execution total prevents many individually legal requests
1028
+ * from retaining close to the full limit while DNS or sockets are
1029
+ * pending outside the isolate's memory limit.
1030
+ */
1031
+ serializedHttpRequestBytes += operationBytes;
1032
+ } catch (error: unknown) {
1033
+ pendingAxiosOperations.set(operationId, {
1034
+ status: "rejected",
1035
+ errorMessage: sanitizeScriptError(error).message,
1036
+ });
1037
+ return operationId;
1038
+ }
1039
+
567
1040
  pendingAxiosOperations.set(operationId, { status: "pending" });
568
1041
  const abortController: AbortController = new AbortController();
569
1042
  pendingAxiosControllers.add(abortController);
@@ -608,17 +1081,26 @@ export default class VMRunner {
608
1081
  pendingAxiosOperations.get(operationId);
609
1082
 
610
1083
  if (!operation) {
611
- return JSON.stringify({
612
- status: "rejected",
613
- errorMessage: "HTTP request result is unavailable",
614
- });
1084
+ return `E${JSON.stringify("HTTP request result is unavailable")}`;
615
1085
  }
616
1086
 
617
- if (operation.status !== "pending") {
618
- pendingAxiosOperations.delete(operationId);
1087
+ if (operation.status === "pending") {
1088
+ return "P";
619
1089
  }
620
1090
 
621
- return JSON.stringify(operation);
1091
+ pendingAxiosOperations.delete(operationId);
1092
+
1093
+ if (operation.status === "rejected") {
1094
+ return `E${JSON.stringify(operation.errorMessage)}`;
1095
+ }
1096
+
1097
+ /*
1098
+ * The fulfilled value is already a bounded JSON envelope. Prefix
1099
+ * it instead of embedding it in another JSON document; otherwise
1100
+ * a response near the byte limit is copied and escaped a second
1101
+ * time while crossing into the isolate.
1102
+ */
1103
+ return `F${operation.value}`;
622
1104
  },
623
1105
  { async: true },
624
1106
  );
@@ -633,23 +1115,71 @@ export default class VMRunner {
633
1115
  delete globalThis.__oneuptimeHostAxiosStartCallback;
634
1116
  delete globalThis.__oneuptimeHostAxiosPollCallback;
635
1117
  const axiosPollWaitArray = new Int32Array(new SharedArrayBuffer(4));
1118
+ let serializedRequestCharacters = 0;
1119
+
1120
+ function assertSerializedRequestLength(method, url, arg1, arg2) {
1121
+ const urlCharacters = typeof url === 'string' ? url.length : 0;
1122
+ const arg1Characters = typeof arg1 === 'string' ? arg1.length : 0;
1123
+ const arg2Characters = typeof arg2 === 'string' ? arg2.length : 0;
1124
+ const hasBody = ['post', 'put', 'patch'].includes(method);
1125
+
1126
+ if (urlCharacters > ${MAX_HTTP_URL_BYTES}) {
1127
+ throw new Error('HTTP request URL exceeded the allowed size.');
1128
+ }
1129
+ if (hasBody && arg1Characters > ${MAX_HTTP_REQUEST_BYTES}) {
1130
+ throw new Error('HTTP request body exceeded the allowed size.');
1131
+ }
1132
+ if (hasBody && arg2Characters > ${MAX_HTTP_CONFIG_BYTES}) {
1133
+ throw new Error('HTTP request config exceeded the allowed size.');
1134
+ }
1135
+ if (
1136
+ method === 'request' &&
1137
+ arg1Characters > ${MAX_HTTP_REQUEST_BYTES + MAX_HTTP_CONFIG_BYTES}
1138
+ ) {
1139
+ throw new Error('HTTP request data exceeded the allowed size.');
1140
+ }
1141
+ if (
1142
+ !hasBody &&
1143
+ method !== 'request' &&
1144
+ arg1Characters > ${MAX_HTTP_CONFIG_BYTES}
1145
+ ) {
1146
+ throw new Error('HTTP request config exceeded the allowed size.');
1147
+ }
1148
+
1149
+ const operationCharacters =
1150
+ urlCharacters + arg1Characters + arg2Characters;
1151
+ if (
1152
+ serializedRequestCharacters + operationCharacters >
1153
+ ${MAX_HTTP_REQUEST_BYTES}
1154
+ ) {
1155
+ throw new Error(
1156
+ 'Sandbox HTTP requests exceeded the allowed cumulative request size.'
1157
+ );
1158
+ }
1159
+ serializedRequestCharacters += operationCharacters;
1160
+ }
636
1161
 
637
1162
  async function hostAxios(method, url, arg1, arg2) {
1163
+ assertSerializedRequestLength(method, url, arg1, arg2);
638
1164
  const operationId = await hostAxiosStart(method, url, arg1, arg2);
639
1165
 
640
1166
  while (true) {
641
- const operation = JSON.parse(await hostAxiosPoll(operationId));
1167
+ const operation = await hostAxiosPoll(operationId);
642
1168
 
643
- if (operation.status === 'pending') {
1169
+ if (operation === 'P') {
644
1170
  Atomics.wait(axiosPollWaitArray, 0, 0, 1);
645
1171
  continue;
646
1172
  }
647
1173
 
648
- if (operation.status === 'rejected') {
649
- throw new Error(operation.errorMessage);
1174
+ if (operation[0] === 'E') {
1175
+ throw new Error(JSON.parse(operation.slice(1)));
1176
+ }
1177
+
1178
+ if (operation[0] !== 'F') {
1179
+ throw new Error('HTTP request result is invalid');
650
1180
  }
651
1181
 
652
- return operation.value;
1182
+ return operation.slice(1);
653
1183
  }
654
1184
  }
655
1185
 
@@ -684,20 +1214,330 @@ export default class VMRunner {
684
1214
  }
685
1215
  }
686
1216
 
1217
+ const base64Alphabet =
1218
+ 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
1219
+ const base64Lookup = new Int16Array(128);
1220
+ base64Lookup.fill(-1);
1221
+ for (let index = 0; index < base64Alphabet.length; index += 1) {
1222
+ base64Lookup[base64Alphabet.charCodeAt(index)] = index;
1223
+ }
1224
+
1225
+ function decodeBase64(encoded) {
1226
+ const padding = encoded.endsWith('==')
1227
+ ? 2
1228
+ : encoded.endsWith('=')
1229
+ ? 1
1230
+ : 0;
1231
+ const decoded = new Uint8Array((encoded.length / 4) * 3 - padding);
1232
+ let outputIndex = 0;
1233
+
1234
+ for (let index = 0; index < encoded.length; index += 4) {
1235
+ const first = base64Lookup[encoded.charCodeAt(index)];
1236
+ const second = base64Lookup[encoded.charCodeAt(index + 1)];
1237
+ const third = encoded[index + 2] === '='
1238
+ ? 0
1239
+ : base64Lookup[encoded.charCodeAt(index + 2)];
1240
+ const fourth = encoded[index + 3] === '='
1241
+ ? 0
1242
+ : base64Lookup[encoded.charCodeAt(index + 3)];
1243
+ const combined =
1244
+ (first << 18) | (second << 12) | (third << 6) | fourth;
1245
+
1246
+ if (outputIndex < decoded.length) {
1247
+ decoded[outputIndex++] = (combined >> 16) & 0xff;
1248
+ }
1249
+ if (outputIndex < decoded.length) {
1250
+ decoded[outputIndex++] = (combined >> 8) & 0xff;
1251
+ }
1252
+ if (outputIndex < decoded.length) {
1253
+ decoded[outputIndex++] = combined & 0xff;
1254
+ }
1255
+ }
1256
+
1257
+ return decoded;
1258
+ }
1259
+
1260
+ function decodeUtf8(bytes) {
1261
+ const chunks = [];
1262
+ const codeUnits = new Uint16Array(8192);
1263
+ let codeUnitCount = 0;
1264
+
1265
+ function flushCodeUnits() {
1266
+ if (codeUnitCount === 0) return;
1267
+ chunks.push(
1268
+ String.fromCharCode.apply(
1269
+ null,
1270
+ codeUnits.subarray(0, codeUnitCount)
1271
+ )
1272
+ );
1273
+ codeUnitCount = 0;
1274
+ }
1275
+
1276
+ function appendCodePoint(codePoint) {
1277
+ if (codeUnitCount >= codeUnits.length - 1) {
1278
+ flushCodeUnits();
1279
+ }
1280
+
1281
+ if (codePoint <= 0xffff) {
1282
+ codeUnits[codeUnitCount++] = codePoint;
1283
+ } else {
1284
+ const adjusted = codePoint - 0x10000;
1285
+ codeUnits[codeUnitCount++] = 0xd800 + (adjusted >> 10);
1286
+ codeUnits[codeUnitCount++] = 0xdc00 + (adjusted & 0x3ff);
1287
+ }
1288
+ }
1289
+
1290
+ for (let index = 0; index < bytes.length;) {
1291
+ const first = bytes[index];
1292
+ let codePoint = 0xfffd;
1293
+ let width = 1;
1294
+
1295
+ if (first <= 0x7f) {
1296
+ codePoint = first;
1297
+ } else if (
1298
+ first >= 0xc2 &&
1299
+ first <= 0xdf &&
1300
+ index + 1 < bytes.length &&
1301
+ (bytes[index + 1] & 0xc0) === 0x80
1302
+ ) {
1303
+ codePoint = ((first & 0x1f) << 6) | (bytes[index + 1] & 0x3f);
1304
+ width = 2;
1305
+ } else if (
1306
+ first >= 0xe0 &&
1307
+ first <= 0xef &&
1308
+ index + 2 < bytes.length &&
1309
+ (bytes[index + 1] & 0xc0) === 0x80 &&
1310
+ (bytes[index + 2] & 0xc0) === 0x80 &&
1311
+ !(first === 0xe0 && bytes[index + 1] < 0xa0) &&
1312
+ !(first === 0xed && bytes[index + 1] >= 0xa0)
1313
+ ) {
1314
+ codePoint =
1315
+ ((first & 0x0f) << 12) |
1316
+ ((bytes[index + 1] & 0x3f) << 6) |
1317
+ (bytes[index + 2] & 0x3f);
1318
+ width = 3;
1319
+ } else if (
1320
+ first >= 0xf0 &&
1321
+ first <= 0xf4 &&
1322
+ index + 3 < bytes.length &&
1323
+ (bytes[index + 1] & 0xc0) === 0x80 &&
1324
+ (bytes[index + 2] & 0xc0) === 0x80 &&
1325
+ (bytes[index + 3] & 0xc0) === 0x80 &&
1326
+ !(first === 0xf0 && bytes[index + 1] < 0x90) &&
1327
+ !(first === 0xf4 && bytes[index + 1] >= 0x90)
1328
+ ) {
1329
+ codePoint =
1330
+ ((first & 0x07) << 18) |
1331
+ ((bytes[index + 1] & 0x3f) << 12) |
1332
+ ((bytes[index + 2] & 0x3f) << 6) |
1333
+ (bytes[index + 3] & 0x3f);
1334
+ width = 4;
1335
+ }
1336
+
1337
+ appendCodePoint(codePoint);
1338
+ index += width;
1339
+ }
1340
+
1341
+ flushCodeUnits();
1342
+ return chunks.join('');
1343
+ }
1344
+
1345
+ function decodeSingleByte(bytes, asciiOnly) {
1346
+ const chunks = [];
1347
+ const codeUnits = new Uint16Array(8192);
1348
+
1349
+ for (let offset = 0; offset < bytes.length; offset += 8192) {
1350
+ const chunkLength = Math.min(8192, bytes.length - offset);
1351
+ for (let index = 0; index < chunkLength; index += 1) {
1352
+ codeUnits[index] = asciiOnly
1353
+ ? bytes[offset + index] & 0x7f
1354
+ : bytes[offset + index];
1355
+ }
1356
+ chunks.push(
1357
+ String.fromCharCode.apply(
1358
+ null,
1359
+ codeUnits.subarray(0, chunkLength)
1360
+ )
1361
+ );
1362
+ }
1363
+
1364
+ return chunks.join('');
1365
+ }
1366
+
1367
+ function decodeUtf16Le(bytes) {
1368
+ const chunks = [];
1369
+ const codeUnits = new Uint16Array(8192);
1370
+ const codeUnitLength = Math.floor(bytes.length / 2);
1371
+
1372
+ for (let offset = 0; offset < codeUnitLength; offset += 8192) {
1373
+ const chunkLength = Math.min(8192, codeUnitLength - offset);
1374
+ for (let index = 0; index < chunkLength; index += 1) {
1375
+ const byteOffset = (offset + index) * 2;
1376
+ codeUnits[index] =
1377
+ bytes[byteOffset] | (bytes[byteOffset + 1] << 8);
1378
+ }
1379
+ chunks.push(
1380
+ String.fromCharCode.apply(
1381
+ null,
1382
+ codeUnits.subarray(0, chunkLength)
1383
+ )
1384
+ );
1385
+ }
1386
+
1387
+ return chunks.join('');
1388
+ }
1389
+
1390
+ function encodeHex(bytes) {
1391
+ const alphabet = '0123456789abcdef';
1392
+ const chunks = [];
1393
+
1394
+ for (let offset = 0; offset < bytes.length; offset += 4096) {
1395
+ const end = Math.min(offset + 4096, bytes.length);
1396
+ let chunk = '';
1397
+ for (let index = offset; index < end; index += 1) {
1398
+ const value = bytes[index];
1399
+ chunk += alphabet[value >> 4] + alphabet[value & 15];
1400
+ }
1401
+ chunks.push(chunk);
1402
+ }
1403
+
1404
+ return chunks.join('');
1405
+ }
1406
+
1407
+ function decodeResponseText(encoded, bytes, responseEncoding) {
1408
+ const normalizedEncoding = responseEncoding
1409
+ ? String(responseEncoding).toLowerCase()
1410
+ : 'utf8';
1411
+
1412
+ switch (normalizedEncoding) {
1413
+ case 'utf8':
1414
+ case 'utf-8':
1415
+ return decodeUtf8(bytes);
1416
+ case 'latin1':
1417
+ case 'binary':
1418
+ return decodeSingleByte(bytes, false);
1419
+ case 'ascii':
1420
+ return decodeSingleByte(bytes, true);
1421
+ case 'utf16le':
1422
+ case 'utf-16le':
1423
+ case 'ucs2':
1424
+ case 'ucs-2':
1425
+ return decodeUtf16Le(bytes);
1426
+ case 'base64':
1427
+ return encoded;
1428
+ case 'base64url':
1429
+ return encoded
1430
+ .split('+').join('-')
1431
+ .split('/').join('_')
1432
+ .replace(/=+$/, '');
1433
+ case 'hex':
1434
+ return encodeHex(bytes);
1435
+ default:
1436
+ throw new TypeError(
1437
+ 'Unknown encoding: ' + responseEncoding
1438
+ );
1439
+ }
1440
+ }
1441
+
687
1442
  function parseAxiosResult(r) {
688
- const parsed = JSON.parse(r);
689
- if (parsed && parsed.__isAxiosError) {
690
- const err = new Error(parsed.message);
691
- err.response = {
692
- status: parsed.status,
693
- statusText: parsed.statusText,
694
- headers: parsed.headers,
695
- data: parsed.data,
696
- };
1443
+ const metadataEnd = r.indexOf('\\n');
1444
+ if (metadataEnd < 0) {
1445
+ throw new Error('HTTP response envelope is invalid');
1446
+ }
1447
+
1448
+ const parsed = JSON.parse(r.slice(0, metadataEnd));
1449
+ const dataEncoding = parsed.__oneuptimeDataEncoding;
1450
+ const responseEncoding = parsed.__oneuptimeResponseEncoding;
1451
+ const shouldParseJson = parsed.__oneuptimeShouldParseJson === true;
1452
+ const strictJsonParsing =
1453
+ parsed.__oneuptimeStrictJsonParsing === true;
1454
+ const responseConfig = parsed.__oneuptimeConfig || {};
1455
+ const hasRequest = parsed.__oneuptimeHasRequest === true;
1456
+ const isAxiosError = parsed.__isAxiosError === true;
1457
+ const errorMessage = parsed.message || 'Request failed';
1458
+ const errorCode = parsed.code;
1459
+ const errorName = parsed.name;
1460
+ const opaqueRequest = hasRequest
1461
+ ? Object.freeze({ __oneuptimeOpaqueRequest: true })
1462
+ : undefined;
1463
+
1464
+ delete parsed.__oneuptimeDataEncoding;
1465
+ delete parsed.__oneuptimeResponseEncoding;
1466
+ delete parsed.__oneuptimeShouldParseJson;
1467
+ delete parsed.__oneuptimeStrictJsonParsing;
1468
+ delete parsed.__oneuptimeConfig;
1469
+ delete parsed.__oneuptimeHasRequest;
1470
+ delete parsed.__isAxiosError;
1471
+ delete parsed.message;
1472
+ delete parsed.code;
1473
+ delete parsed.name;
1474
+
1475
+ parsed.config = responseConfig;
1476
+ if (opaqueRequest) parsed.request = opaqueRequest;
1477
+
1478
+ function createAxiosError(message, code, name) {
1479
+ const err = new Error(message);
1480
+ err.name = name || 'AxiosError';
1481
+ err.code = code;
1482
+ err.config = responseConfig;
1483
+ err.request = opaqueRequest;
1484
+ err.response = parsed;
697
1485
  err.isAxiosError = true;
698
1486
  err.status = parsed.status;
699
- throw err;
1487
+ return err;
1488
+ }
1489
+
1490
+ try {
1491
+ const encoded = r.slice(metadataEnd + 1);
1492
+ const decoded = decodeBase64(encoded);
1493
+
1494
+ if (dataEncoding === 'base64-arraybuffer') {
1495
+ parsed.data = decoded;
1496
+ } else {
1497
+ let text = decodeResponseText(
1498
+ encoded,
1499
+ decoded,
1500
+ responseEncoding
1501
+ );
1502
+
1503
+ if (
1504
+ (!responseEncoding || responseEncoding === 'utf8') &&
1505
+ text.charCodeAt(0) === 0xfeff
1506
+ ) {
1507
+ text = text.slice(1);
1508
+ }
1509
+
1510
+ parsed.data = text;
1511
+
1512
+ if (shouldParseJson && text) {
1513
+ try {
1514
+ parsed.data = JSON.parse(text);
1515
+ } catch (error) {
1516
+ if (strictJsonParsing) {
1517
+ throw createAxiosError(
1518
+ error.message,
1519
+ 'ERR_BAD_RESPONSE',
1520
+ error.name
1521
+ );
1522
+ }
1523
+ }
1524
+ }
1525
+ }
1526
+ } catch (error) {
1527
+ if (error && error.isAxiosError) throw error;
1528
+ throw createAxiosError(
1529
+ error && error.message
1530
+ ? error.message
1531
+ : 'Response could not be decoded',
1532
+ error && error.code,
1533
+ error && error.name
1534
+ );
700
1535
  }
1536
+
1537
+ if (isAxiosError) {
1538
+ throw createAxiosError(errorMessage, errorCode, errorName);
1539
+ }
1540
+
701
1541
  return parsed;
702
1542
  }
703
1543
 
@@ -710,6 +1550,13 @@ export default class VMRunner {
710
1550
  if (defaults.headers && overrides.headers) {
711
1551
  merged.headers = Object.assign({}, defaults.headers, overrides.headers);
712
1552
  }
1553
+ if (defaults.transitional && overrides.transitional) {
1554
+ merged.transitional = Object.assign(
1555
+ {},
1556
+ defaults.transitional,
1557
+ overrides.transitional
1558
+ );
1559
+ }
713
1560
  return merged;
714
1561
  }
715
1562
 
@@ -774,6 +1621,9 @@ export default class VMRunner {
774
1621
  const r = await hostAxios('delete', url, merged ? JSON.stringify(merged) : undefined);
775
1622
  return parseAxiosResult(r);
776
1623
  };
1624
+ instance.isAxiosError = (payload) => {
1625
+ return Boolean(payload && payload.isAxiosError === true);
1626
+ };
777
1627
  instance.create = (instanceDefaults) => {
778
1628
  if (instanceDefaults) assertNoFunctions(instanceDefaults, 'defaults');
779
1629
  const combinedDefaults = mergeConfig(instanceDefaults);
@@ -1002,6 +1852,34 @@ export default class VMRunner {
1002
1852
  let result: unknown;
1003
1853
  let scriptError: Error | undefined;
1004
1854
 
1855
+ /*
1856
+ * Keep Node's event loop turning for as long as sandboxed code is
1857
+ * running.
1858
+ *
1859
+ * Every host bridge the sandbox has - axios, sleep, the log sink - is an
1860
+ * isolated-vm async callback: the isolate posts a call onto THIS thread,
1861
+ * this thread answers it, and the isolate resumes. Each of those hops
1862
+ * only makes progress when the event loop takes a turn, and a loop with
1863
+ * nothing else to do parks until its next TIMER rather than spinning. On
1864
+ * an otherwise idle process the nearest timer is usually the overall
1865
+ * timeout armed just below, so a single `await sleep(0)` - or a request
1866
+ * the SSRF guard refuses synchronously, in microseconds - came back
1867
+ * 20 seconds later as "Script execution timed out". Under Jest the
1868
+ * nearest timer was whatever the runner happened to have queued, which
1869
+ * is why the same test took 100ms on one run and 900ms on the next, and
1870
+ * why the VMRunner suites failed on CI while passing locally.
1871
+ *
1872
+ * A no-op ticker gives the loop a reason to wake. It runs only while a
1873
+ * script is in flight and is cleared before this method returns.
1874
+ */
1875
+ const hostBridgeTicker: ReturnType<typeof global.setInterval> =
1876
+ global.setInterval((): void => {
1877
+ /*
1878
+ * Intentionally empty: existing only so libuv wakes on a known
1879
+ * cadence instead of sleeping until some unrelated timer.
1880
+ */
1881
+ }, HOST_BRIDGE_TICK_MS);
1882
+
1005
1883
  try {
1006
1884
  // Run with overall timeout covering both CPU and I/O wait.
1007
1885
  const resultPromise: Promise<unknown> = context.eval(wrappedCode, {
@@ -1027,6 +1905,8 @@ export default class VMRunner {
1027
1905
  result = await Promise.race([resultPromise, overallTimeout]);
1028
1906
  } catch (error: unknown) {
1029
1907
  scriptError = sanitizeScriptError(error);
1908
+ } finally {
1909
+ global.clearInterval(hostBridgeTicker);
1030
1910
  }
1031
1911
 
1032
1912
  // Parse the JSON string returned from inside the isolate