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