@oneuptime/common 12.0.33 → 13.0.0
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/DatabaseModels/AlertCustomField.ts +77 -3
- package/Models/DatabaseModels/ApiKeyPermission.ts +3 -27
- package/Models/DatabaseModels/GlobalConfig.ts +12 -12
- package/Models/DatabaseModels/IncidentCustomField.ts +77 -3
- package/Models/DatabaseModels/InventoryItem.ts +44 -1
- package/Models/DatabaseModels/InventoryItemCustomField.ts +77 -3
- package/Models/DatabaseModels/MonitorCustomField.ts +77 -3
- package/Models/DatabaseModels/NetworkDevice.ts +126 -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/TelemetryIngestionKey.ts +260 -0
- package/Models/DatabaseModels/UserTelegram.ts +0 -4
- package/Scripts/benchmark-fanin-capacity.js +181 -0
- 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 +82 -18
- 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/1791700000000-AddMacAddressToNetworkDevice.ts +25 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +10 -0
- package/Server/Infrastructure/QueueWorker.ts +20 -14
- package/Server/Infrastructure/Redis.ts +8 -8
- package/Server/Infrastructure/Semaphore.ts +2 -0
- package/Server/Infrastructure/Status.ts +10 -4
- package/Server/Middleware/TelemetryIngest.ts +453 -7
- 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/DatabaseService.ts +65 -13
- package/Server/Services/GlobalConfigService.ts +194 -0
- package/Server/Services/IncidentCustomFieldService.ts +98 -0
- package/Server/Services/IncidentService.ts +35 -0
- package/Server/Services/InventoryItemService.ts +31 -1
- package/Server/Services/MetricService.ts +194 -0
- package/Server/Services/MonitorService.ts +32 -0
- package/Server/Services/MonitorTemplateService.ts +140 -19
- package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +427 -66
- package/Server/Services/NetworkDeviceDiscoveryScanService.ts +87 -2
- package/Server/Services/NetworkDeviceService.ts +69 -0
- package/Server/Services/ProjectService.ts +22 -0
- 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/TeamMemberService.ts +78 -0
- package/Server/Services/TeamPermissionService.ts +235 -3
- package/Server/Services/TelemetryIngestionKeyService.ts +722 -19
- package/Server/Services/UserNotificationRuleService.ts +76 -25
- package/Server/Services/UserNotificationSettingService.ts +34 -6
- package/Server/Services/UserTelegramService.ts +326 -5
- package/Server/Types/Database/Permissions/ReadPermission.ts +45 -5
- package/Server/Types/Database/QueryHelper.ts +2 -0
- package/Server/Types/Database/QueryUtil.ts +56 -0
- package/Server/Types/Markdown.ts +93 -1
- package/Server/Utils/APIKey/AccessPermission.ts +5 -2
- 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/Dashboard/PublicDashboardResourceListPolicy.ts +82 -17
- package/Server/Utils/DataSource/EgressGuard.ts +177 -8
- package/Server/Utils/EmailRollup/EmailRollupConstants.ts +38 -5
- package/Server/Utils/EmailRollup/EmailRollupFlushRunner.ts +67 -5
- package/Server/Utils/EmailRollup/EmailRollupRenderer.ts +2 -2
- package/Server/Utils/FrontendEnvironment.ts +40 -0
- package/Server/Utils/LogRedaction.ts +20 -0
- package/Server/Utils/Logger.ts +11 -0
- package/Server/Utils/Monitor/Criteria/CompareCriteria.ts +394 -86
- package/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.ts +30 -4
- package/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.ts +31 -5
- package/Server/Utils/Monitor/MonitorAlert.ts +29 -6
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +312 -52
- package/Server/Utils/Monitor/MonitorCriteriaExpectationBuilder.ts +82 -9
- package/Server/Utils/Monitor/MonitorCriteriaMessageBuilder.ts +16 -7
- package/Server/Utils/Monitor/MonitorCriteriaMessageFormatter.ts +29 -17
- package/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.ts +107 -48
- package/Server/Utils/Monitor/MonitorIncident.ts +22 -6
- package/Server/Utils/Monitor/MonitorTemplateUtil.ts +29 -0
- package/Server/Utils/Monitor/NetworkDeviceMacLearningUtil.ts +158 -0
- package/Server/Utils/Monitor/NetworkInventoryUtil.ts +27 -0
- package/Server/Utils/Monitor/SeriesContextEnricher.ts +304 -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 +2 -17
- package/Server/Utils/TelegramVerificationToken.ts +185 -0
- package/Server/Utils/Telemetry/EntityRegistry.ts +11 -1
- package/Server/Utils/Telemetry/PinServiceName.ts +197 -0
- package/Server/Utils/Telemetry/TelemetryEntity.ts +83 -9
- 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/VM/VMAPI.ts +1 -0
- package/Server/Utils/VM/VMRunner.ts +975 -95
- package/Tests/App/AdminDashboard/AdminHeaderSmallScreens.test.tsx +202 -0
- package/Tests/App/Dashboard/AddNeighborToMonitoringModal.test.tsx +32 -0
- package/Tests/App/Dashboard/AdoptedDeviceDrawer.test.tsx +374 -0
- package/Tests/App/Dashboard/DashboardHeaderSmallScreens.test.tsx +404 -0
- package/Tests/App/Dashboard/DashboardLabelVariables.test.tsx +580 -0
- package/Tests/App/Dashboard/DashboardMonitorLabelVariable.test.tsx +438 -0
- package/Tests/App/Dashboard/DashboardVariableAllContract.test.tsx +5 -2
- package/Tests/App/Dashboard/DeviceAttachmentCard.test.tsx +273 -0
- package/Tests/App/Dashboard/DiscoveryReviewInventoryRefresh.test.tsx +505 -0
- package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +468 -0
- package/Tests/App/Dashboard/EntityDetailPanel.test.tsx +163 -0
- package/Tests/App/Dashboard/InfrastructureExplorer.test.tsx +401 -0
- package/Tests/App/Dashboard/InfrastructureGraph.test.tsx +232 -0
- package/Tests/App/Dashboard/InventoryItems.test.tsx +201 -0
- package/Tests/App/Dashboard/InventoryTypeAndStatusFacets.test.tsx +798 -0
- package/Tests/App/Dashboard/NetworkTopologyLiveView.test.tsx +320 -0
- package/Tests/App/Dashboard/NetworkTopologyToolbar.test.tsx +275 -0
- package/Tests/App/Dashboard/OnCallCalendarFeedEmptyState.test.tsx +975 -0
- package/Tests/App/Dashboard/OnCallCalendarFeedPlanGate.test.tsx +63 -0
- package/Tests/App/Dashboard/ServiceMapGraph.test.tsx +626 -0
- package/Tests/App/Dashboard/TopologyDataLoading.test.tsx +348 -0
- package/Tests/App/Dashboard/TopologyPageNavigation.test.tsx +331 -0
- package/Tests/App/Dashboard/UserSettingsEmailPreferences.test.tsx +603 -0
- package/Tests/App/Dashboard/UserSettingsNotificationSettings.test.tsx +324 -0
- package/Tests/App/PublicDashboard/DashboardVariableSelector.test.tsx +13 -4
- package/Tests/App/StatusPage/StatusPageLastUpdated.test.tsx +263 -0
- package/Tests/App/StatusPage/StatusPageOidcOrigin.test.tsx +223 -0
- 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/InventoryItemStatus.test.ts +147 -0
- package/Tests/Models/NetworkDeviceMacAddressColumn.test.ts +294 -0
- package/Tests/ResponsiveVisibility.test.ts +115 -0
- package/Tests/ResponsiveVisibility.ts +183 -0
- package/Tests/Server/API/DashboardPublicResourceListAPI.test.ts +129 -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/EnvironmentConfigValkey.test.ts +227 -0
- package/Tests/Server/Infrastructure/Postgres/AddMacAddressToNetworkDeviceMigration.test.ts +365 -0
- package/Tests/Server/Infrastructure/Postgres/CustomFieldValueMappingMigration.test.ts +241 -0
- package/Tests/Server/Infrastructure/Postgres/InventoryItemArchiveMigration.test.ts +41 -0
- package/Tests/Server/Infrastructure/Postgres/SessionReplayRecordEverySessionByDefaultMigration.test.ts +169 -0
- package/Tests/Server/Infrastructure/QueueWorkerTimeout.test.ts +210 -0
- package/Tests/Server/Infrastructure/TelemetryExporterDeploymentConfig.test.ts +130 -0
- package/Tests/Server/Infrastructure/ValkeyDeploymentConfig.test.ts +265 -0
- package/Tests/Server/Middleware/HttpMetricsMiddleware.test.ts +382 -0
- package/Tests/Server/Middleware/ProjectAuthorizationApiKeyMiddleware.test.ts +4 -1
- package/Tests/Server/Middleware/SCIMAuthorization.test.ts +525 -0
- package/Tests/Server/Middleware/TelemetryIngestBrowserKey.test.ts +1163 -0
- package/Tests/Server/Middleware/TelemetryIngestTokenLog.test.ts +5 -3
- 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/CustomFieldDropdownOptionsColumnWidth.test.ts +431 -0
- package/Tests/Server/Services/CustomFieldMappingService.test.ts +850 -0
- package/Tests/Server/Services/DatabaseServiceAggregateBy.test.ts +291 -56
- package/Tests/Server/Services/DatabaseServiceSortTiebreaker.test.ts +151 -0
- package/Tests/Server/Services/DiscoveryScanClaimHookFreeSafety.test.ts +32 -0
- package/Tests/Server/Services/GlobalConfigService.test.ts +414 -1
- package/Tests/Server/Services/InventoryItemManualCreate.test.ts +105 -0
- package/Tests/Server/Services/InventoryItemPromotionGate.test.ts +178 -0
- package/Tests/Server/Services/MetricRawEntityKeyPrune.test.ts +592 -0
- package/Tests/Server/Services/MonitorTemplateServiceCustomFieldSync.test.ts +502 -0
- package/Tests/Server/Services/NetworkDeviceAutoImportRuleEngineService.test.ts +1351 -74
- package/Tests/Server/Services/NetworkDeviceDiscoveryScanRegistration.test.ts +520 -0
- package/Tests/Server/Services/NetworkDeviceMacAddressNormalization.test.ts +572 -0
- package/Tests/Server/Services/RoutineEmailSettingsPostgres.test.ts +329 -0
- package/Tests/Server/Services/RumSessionReplayViewService.test.ts +267 -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/UserNotificationSettingRollupRouting.test.ts +141 -0
- package/Tests/Server/Services/UserNotificationSettingWorkspaceChannels.test.ts +18 -10
- package/Tests/Server/Services/UserTelegramVerificationSecurity.test.ts +688 -0
- package/Tests/Server/Types/Database/InventoryStatusPostgres.test.ts +368 -0
- package/Tests/Server/Types/Database/Permissions/ReadBlockPermission.test.ts +261 -14
- package/Tests/Server/Types/Database/QueryUtilIncludesAnyOfGroups.test.ts +169 -0
- package/Tests/Server/Types/Database/QueryUtilIncludesAnyOfGroupsPostgres.test.ts +297 -0
- package/Tests/Server/Types/Markdown.test.ts +194 -1
- package/Tests/Server/Types/Workflow/Components/IncomingWebhookUtils.test.ts +279 -0
- package/Tests/Server/Types/Workflow/Components/TextToJson.test.ts +212 -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/CustomField/CustomFieldMappingRegistry.test.ts +436 -0
- package/Tests/Server/Utils/CustomField/CustomFieldMappingValidator.test.ts +437 -0
- package/Tests/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.test.ts +214 -0
- package/Tests/Server/Utils/DataSource/EgressGuard.test.ts +300 -11
- package/Tests/Server/Utils/EmailRollup/EmailRollupBurstWindow.test.ts +83 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupFlushRunnerBehaviour.test.ts +2 -2
- package/Tests/Server/Utils/EmailRollup/EmailRollupFlushRunnerPreferences.test.ts +362 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupRenderer.test.ts +10 -3
- package/Tests/Server/Utils/EmailRollup/EmailRollupTestHarness.ts +77 -1
- package/Tests/Server/Utils/EventLoop.test.ts +359 -0
- package/Tests/Server/Utils/FrontendEnvironment.test.ts +190 -0
- package/Tests/Server/Utils/JsonWebToken.test.ts +30 -0
- package/Tests/Server/Utils/LogRedaction.test.ts +26 -0
- package/Tests/Server/Utils/LoggerCredentialLeak.test.ts +23 -9
- package/Tests/Server/Utils/Monitor/Criteria/CompareCriteria.test.ts +242 -0
- package/Tests/Server/Utils/Monitor/Criteria/CompareCriteriaAggregation.test.ts +590 -0
- package/Tests/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.test.ts +29 -0
- package/Tests/Server/Utils/Monitor/Criteria/IncomingRequestHeaderCriteria.test.ts +236 -0
- package/Tests/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.test.ts +30 -6
- package/Tests/Server/Utils/Monitor/Criteria/MetricMonitorCriteriaAnomalyUnits.test.ts +246 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEmailEvalLogAgreement.test.ts +280 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluator.test.ts +659 -8
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorMetricUnits.test.ts +570 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaExpectationBuilderUnits.test.ts +30 -5
- package/Tests/Server/Utils/Monitor/MonitorCriteriaMessageBuilderUnits.test.ts +68 -21
- package/Tests/Server/Utils/Monitor/MonitorCriteriaObservationBuilderUnits.test.ts +36 -19
- package/Tests/Server/Utils/Monitor/MonitorTemplateUtilSeriesContext.test.ts +176 -0
- package/Tests/Server/Utils/Monitor/NetworkDeviceMacLearningUtil.test.ts +573 -0
- package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +317 -0
- package/Tests/Server/Utils/Monitor/SeriesContextEnricher.test.ts +356 -0
- package/Tests/Server/Utils/SSRFProtectionCloudServiceAddresses.test.ts +595 -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/ContextSpanProcessor.test.ts +281 -0
- package/Tests/Server/Utils/Telemetry/InventoryDuplicateIdentity.test.ts +316 -0
- package/Tests/Server/Utils/Telemetry/PinServiceName.test.ts +666 -0
- package/Tests/Server/Utils/Telemetry/TelemetryEntity.test.ts +111 -8
- 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/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/Database/IncludesAnyOfGroups.test.ts +106 -0
- package/Tests/Types/JSONFunctions.test.ts +300 -0
- package/Tests/Types/Monitor/CephAlertTemplates.test.ts +422 -53
- 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/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/NetworkAutomation/AutoImportRunMerge.test.ts +235 -0
- package/Tests/Types/NetworkAutomation/RuleRunResult.test.ts +66 -0
- package/Tests/Types/NetworkAutomation/RuleRunResultDescribe.test.ts +309 -1
- 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/InventoryLiveness.test.ts +99 -0
- package/Tests/Types/WebsiteRequest.test.ts +285 -3
- 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/CustomFieldsDetail.test.tsx +160 -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 +28 -12
- package/Tests/UI/Components/ShortcutDialogGuard.test.tsx +74 -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/ReactRouterSingletonBuild.test.ts +133 -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 +719 -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/ReplayPlayerChrome.test.tsx +514 -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/ReplayTimeFormat.test.ts +94 -0
- package/Tests/UI/Rum/ReplayTimeline.test.tsx +696 -0
- package/Tests/UI/Rum/ReplayUi.test.tsx +559 -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/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +5 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +1 -0
- package/Tests/UI/Utils/GlobalKeyboardShortcut.test.ts +344 -0
- package/Tests/Utils/API.test.ts +308 -0
- package/Tests/Utils/Dashboard/Components/DashboardMonitorListComponent.test.ts +11 -1
- package/Tests/Utils/Dashboard/LabelVariable.test.ts +257 -0
- package/Tests/Utils/Dashboard/VariableUrlState.test.ts +144 -14
- package/Tests/Utils/HTTPResponseBodyReader.test.ts +323 -0
- package/Tests/Utils/MetricUnitUtil.test.ts +81 -0
- package/Tests/Utils/Monitor/DeviceMacLearningUtil.test.ts +497 -0
- package/Tests/Utils/Monitor/MetricValueFormatter.test.ts +546 -0
- package/Tests/Utils/Monitor/MonitorTemplateCustomFieldUtil.test.ts +218 -0
- package/Tests/Utils/Monitor/NetworkTopologyEndpointAdoption.test.ts +1755 -0
- package/Tests/Utils/NetworkAutomation/AutoImportRunChain.test.ts +320 -0
- package/Tests/Utils/NetworkDiscovery/DiscoveryScanStatus.test.ts +117 -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/OriginAllowList.test.ts +633 -0
- package/Tests/Utils/Uptime/DayUptimeGraphUtil.test.ts +461 -0
- package/Tests/Utils/ValueFormatter.test.ts +148 -0
- package/Types/BaseDatabase/IncludesAnyOfGroups.ts +77 -0
- package/Types/CustomField/CustomFieldMappingCatalog.ts +161 -0
- package/Types/CustomField/CustomFieldMappingSourceResource.ts +19 -0
- package/Types/CustomField/CustomFieldValueMapping.ts +288 -0
- package/Types/Dashboard/DashboardComponents/ComponentArgument.ts +1 -0
- package/Types/Dashboard/DashboardComponents/DashboardMonitorListComponent.ts +1 -0
- package/Types/Dashboard/DashboardVariable.ts +8 -0
- package/Types/Icon/IconProp.ts +1 -0
- package/Types/JSON.ts +4 -0
- package/Types/JSONFunctions.ts +205 -43
- package/Types/Monitor/CephAlertTemplates.ts +157 -195
- 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/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/NetworkTopology.ts +13 -0
- package/Types/Monitor/UptimeHistoryLabels.ts +56 -0
- package/Types/NetworkAutomation/RuleRunResult.ts +402 -13
- package/Types/NotificationSetting/RoutineEmailEvents.ts +30 -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/SerializableObjectDictionary.ts +4 -0
- package/Types/Telemetry/InventoryLiveness.ts +56 -0
- package/Types/Telemetry/TelemetryIngestSurface.ts +95 -0
- package/Types/Telemetry/TelemetryIngestionKeyPolicy.ts +75 -0
- package/Types/Telemetry/TelemetryIngestionKeyType.ts +29 -0
- package/Types/WebsiteRequest.ts +85 -3
- package/UI/Components/CSVFileUpload/CSVFileUpload.tsx +9 -2
- 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/CustomFields/CustomFieldsDetail.tsx +189 -46
- package/UI/Components/CustomFields/MapFromCustomFieldInput.tsx +216 -0
- package/UI/Components/Dashboard/DashboardVariableControl.tsx +285 -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/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 +44 -0
- 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/Telemetry/BrowserTelemetryConfig.ts +28 -0
- package/UI/Utils/Telemetry/Telemetry.ts +10 -8
- package/UI/esbuild-config.js +6 -0
- package/Utils/API.ts +129 -3
- package/Utils/Dashboard/Components/DashboardMonitorListComponent.ts +12 -1
- package/Utils/Dashboard/LabelVariable.ts +152 -0
- package/Utils/Dashboard/VariableUrlState.ts +27 -5
- package/Utils/HTTPResponseBodyReader.ts +221 -0
- package/Utils/MetricUnitUtil.ts +34 -0
- package/Utils/Monitor/DeviceMacLearningUtil.ts +177 -0
- package/Utils/Monitor/MetricValueFormatter.ts +342 -0
- package/Utils/Monitor/MonitorTemplateCustomFieldUtil.ts +124 -0
- package/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.ts +7 -2
- package/Utils/Monitor/NetworkTopologyUtil.ts +693 -0
- package/Utils/NetworkAutomation/AutoImportRunChain.ts +138 -0
- package/Utils/NetworkDiscovery/DiscoveryScanStatus.ts +77 -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/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/GlobalConfig.js +12 -12
- package/build/dist/Models/DatabaseModels/GlobalConfig.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/InventoryItem.js +34 -1
- package/build/dist/Models/DatabaseModels/InventoryItem.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/MonitorCustomField.js +79 -3
- package/build/dist/Models/DatabaseModels/MonitorCustomField.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDevice.js +128 -0
- package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
- 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/TelemetryIngestionKey.js +267 -0
- package/build/dist/Models/DatabaseModels/TelemetryIngestionKey.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserTelegram.js +0 -4
- package/build/dist/Models/DatabaseModels/UserTelegram.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 +73 -14
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- 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/1791700000000-AddMacAddressToNetworkDevice.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791700000000-AddMacAddressToNetworkDevice.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +10 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Infrastructure/QueueWorker.js +19 -7
- package/build/dist/Server/Infrastructure/QueueWorker.js.map +1 -1
- package/build/dist/Server/Infrastructure/Redis.js +8 -8
- package/build/dist/Server/Infrastructure/Redis.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/Infrastructure/Status.js +10 -4
- package/build/dist/Server/Infrastructure/Status.js.map +1 -1
- package/build/dist/Server/Middleware/TelemetryIngest.js +315 -8
- package/build/dist/Server/Middleware/TelemetryIngest.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/DatabaseService.js +58 -13
- package/build/dist/Server/Services/DatabaseService.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/InventoryItemService.js +28 -1
- package/build/dist/Server/Services/InventoryItemService.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 +29 -0
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/MonitorTemplateService.js +116 -17
- package/build/dist/Server/Services/MonitorTemplateService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +349 -64
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js +65 -0
- package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceService.js +54 -0
- package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +22 -0
- 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/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/UserNotificationRuleService.js +60 -25
- package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationSettingService.js +26 -6
- package/build/dist/Server/Services/UserNotificationSettingService.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/Permissions/ReadPermission.js +29 -4
- package/build/dist/Server/Types/Database/Permissions/ReadPermission.js.map +1 -1
- package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
- package/build/dist/Server/Types/Database/QueryUtil.js +36 -0
- package/build/dist/Server/Types/Database/QueryUtil.js.map +1 -1
- package/build/dist/Server/Types/Markdown.js +75 -0
- package/build/dist/Server/Types/Markdown.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/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/Dashboard/PublicDashboardResourceListPolicy.js +53 -18
- package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js.map +1 -1
- 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/EmailRollup/EmailRollupConstants.js +38 -5
- package/build/dist/Server/Utils/EmailRollup/EmailRollupConstants.js.map +1 -1
- package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js +54 -3
- package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js.map +1 -1
- package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js +2 -2
- package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js.map +1 -1
- package/build/dist/Server/Utils/FrontendEnvironment.js +33 -0
- package/build/dist/Server/Utils/FrontendEnvironment.js.map +1 -0
- package/build/dist/Server/Utils/LogRedaction.js +20 -0
- package/build/dist/Server/Utils/LogRedaction.js.map +1 -1
- package/build/dist/Server/Utils/Logger.js +10 -0
- package/build/dist/Server/Utils/Logger.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js +323 -81
- package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.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/MetricMonitorCriteria.js +29 -5
- package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.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/MonitorCriteriaEvaluator.js +254 -48
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaExpectationBuilder.js +58 -9
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaExpectationBuilder.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaMessageBuilder.js +9 -3
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaMessageBuilder.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaMessageFormatter.js +26 -12
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaMessageFormatter.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js +74 -33
- 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/MonitorTemplateUtil.js +22 -0
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceMacLearningUtil.js +114 -0
- package/build/dist/Server/Utils/Monitor/NetworkDeviceMacLearningUtil.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +25 -0
- 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/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 +3 -14
- 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/EntityRegistry.js +9 -1
- package/build/dist/Server/Utils/Telemetry/EntityRegistry.js.map +1 -1
- 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/TelemetryEntity.js +70 -13
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.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/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/BaseDatabase/IncludesAnyOfGroups.js +54 -0
- package/build/dist/Types/BaseDatabase/IncludesAnyOfGroups.js.map +1 -0
- 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/Dashboard/DashboardComponents/ComponentArgument.js +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardVariable.js +1 -0
- package/build/dist/Types/Dashboard/DashboardVariable.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/JSON.js +1 -0
- package/build/dist/Types/JSON.js.map +1 -1
- package/build/dist/Types/JSONFunctions.js +131 -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/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/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/UptimeHistoryLabels.js +17 -0
- package/build/dist/Types/Monitor/UptimeHistoryLabels.js.map +1 -0
- package/build/dist/Types/NetworkAutomation/RuleRunResult.js +291 -6
- package/build/dist/Types/NetworkAutomation/RuleRunResult.js.map +1 -1
- package/build/dist/Types/NotificationSetting/RoutineEmailEvents.js +29 -0
- package/build/dist/Types/NotificationSetting/RoutineEmailEvents.js.map +1 -0
- 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/SerializableObjectDictionary.js +4 -0
- package/build/dist/Types/SerializableObjectDictionary.js.map +1 -1
- package/build/dist/Types/Telemetry/InventoryLiveness.js +37 -0
- package/build/dist/Types/Telemetry/InventoryLiveness.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/WebsiteRequest.js +55 -3
- package/build/dist/Types/WebsiteRequest.js.map +1 -1
- package/build/dist/UI/Components/CSVFileUpload/CSVFileUpload.js +7 -0
- package/build/dist/UI/Components/CSVFileUpload/CSVFileUpload.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/CustomFields/CustomFieldsDetail.js +89 -8
- 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/Dashboard/DashboardVariableControl.js +137 -0
- package/build/dist/UI/Components/Dashboard/DashboardVariableControl.js.map +1 -0
- 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/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 +38 -0
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.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/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/Utils/API.js +67 -5
- package/build/dist/Utils/API.js.map +1 -1
- package/build/dist/Utils/Dashboard/Components/DashboardMonitorListComponent.js +9 -1
- package/build/dist/Utils/Dashboard/Components/DashboardMonitorListComponent.js.map +1 -1
- package/build/dist/Utils/Dashboard/LabelVariable.js +96 -0
- package/build/dist/Utils/Dashboard/LabelVariable.js.map +1 -0
- package/build/dist/Utils/Dashboard/VariableUrlState.js +19 -4
- package/build/dist/Utils/Dashboard/VariableUrlState.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/MetricUnitUtil.js +26 -0
- package/build/dist/Utils/MetricUnitUtil.js.map +1 -1
- package/build/dist/Utils/Monitor/DeviceMacLearningUtil.js +112 -0
- package/build/dist/Utils/Monitor/DeviceMacLearningUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/MetricValueFormatter.js +276 -0
- package/build/dist/Utils/Monitor/MetricValueFormatter.js.map +1 -0
- package/build/dist/Utils/Monitor/MonitorTemplateCustomFieldUtil.js +101 -0
- package/build/dist/Utils/Monitor/MonitorTemplateCustomFieldUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.js +7 -2
- package/build/dist/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.js.map +1 -1
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +484 -0
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
- package/build/dist/Utils/NetworkAutomation/AutoImportRunChain.js +59 -0
- package/build/dist/Utils/NetworkAutomation/AutoImportRunChain.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/DiscoveryScanStatus.js +69 -0
- package/build/dist/Utils/NetworkDiscovery/DiscoveryScanStatus.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/jest.config.json +2 -0
- package/package.json +1 -1
- package/test-setup.sh +9 -9
- package/tsconfig.json +51 -11
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Recording health for one RUM application: the answer to "why are there
|
|
3
|
+
* no recordings?" as data rather than as silence.
|
|
4
|
+
*
|
|
5
|
+
* Two shapes live here. SessionReplayIngestStatusResponseDto is the JSON
|
|
6
|
+
* that POST /telemetry/rum/session-replay/ingest-status answers today
|
|
7
|
+
* plus its additive fields, every new one optional. RecordingHealthStatus
|
|
8
|
+
* is the normalised object the Dashboard builds from it (see
|
|
9
|
+
* parseRecordingHealthStatus in Common/Utils/Rum/SessionReplayHealth.ts)
|
|
10
|
+
* and the only input diagnoseRecordingHealth takes. Keeping the two apart
|
|
11
|
+
* is what lets the diagnosis be exhaustively tested against a stable
|
|
12
|
+
* shape while the wire grows a field at a time.
|
|
13
|
+
*
|
|
14
|
+
* One rule runs through both: a counter that could not be read is null,
|
|
15
|
+
* never 0. "0 refusals" and "the refusal counter is unreachable" are
|
|
16
|
+
* different facts and the UI says "unknown" for the second.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
/*
|
|
20
|
+
* WHY the ingest gate refused a chunk. This is the gate's EXISTING closed
|
|
21
|
+
* vocabulary (SessionReplayIngestService.gateChunkRequest), copied rather
|
|
22
|
+
* than invented: the refusal counters are keyed on the reason string the
|
|
23
|
+
* gate already puts on the chunk response, so a customer's support ticket,
|
|
24
|
+
* the recorder's debug log and this list all quote the same word.
|
|
25
|
+
*/
|
|
26
|
+
export type SessionReplayRefusalReason =
|
|
27
|
+
/* SESSION_REPLAY_INGEST_ENABLED=false on this deployment. */
|
|
28
|
+
| "ingest-disabled"
|
|
29
|
+
/* No recorder artifact is published, so nothing should be posting. */
|
|
30
|
+
| "instance-not-offering-replay"
|
|
31
|
+
/* The policy lookup threw; failed closed. */
|
|
32
|
+
| "policy-unavailable"
|
|
33
|
+
/* Project or application switched off, or an unknown identifier. */
|
|
34
|
+
| "not-enabled"
|
|
35
|
+
/* The Origin header is not in the application's allowed origins. */
|
|
36
|
+
| "origin-not-allowed"
|
|
37
|
+
/* The session already holds MAX_SESSION_REPLAY_CHUNKS_PER_SESSION. */
|
|
38
|
+
| "session-chunk-cap"
|
|
39
|
+
/* The server's sampling draw disagrees with the recorder's. */
|
|
40
|
+
| "not-sampled"
|
|
41
|
+
| "rate-limited"
|
|
42
|
+
/* The rate counter (Redis) was unreachable; failed closed. */
|
|
43
|
+
| "rate-counter-unavailable"
|
|
44
|
+
/* The project's daily byte budget is spent. */
|
|
45
|
+
| "budget-exhausted"
|
|
46
|
+
/* The budget counter (Redis) was unreachable; failed closed. */
|
|
47
|
+
| "budget-counter-unavailable"
|
|
48
|
+
/* The application's own monthly budget is spent. */
|
|
49
|
+
| "app-monthly-budget-exhausted"
|
|
50
|
+
/*
|
|
51
|
+
* Every frame in the request asserted consent Unknown while the
|
|
52
|
+
* application requires explicit consent. The recorder is told to keep
|
|
53
|
+
* recording (directive continue): the page simply has not called
|
|
54
|
+
* grantConsent() yet, and this is the count that tells the customer so.
|
|
55
|
+
*/
|
|
56
|
+
| "consent-required";
|
|
57
|
+
|
|
58
|
+
export const SESSION_REPLAY_REFUSAL_REASONS: ReadonlyArray<SessionReplayRefusalReason> =
|
|
59
|
+
[
|
|
60
|
+
"ingest-disabled",
|
|
61
|
+
"instance-not-offering-replay",
|
|
62
|
+
"policy-unavailable",
|
|
63
|
+
"not-enabled",
|
|
64
|
+
"origin-not-allowed",
|
|
65
|
+
"session-chunk-cap",
|
|
66
|
+
"not-sampled",
|
|
67
|
+
"rate-limited",
|
|
68
|
+
"rate-counter-unavailable",
|
|
69
|
+
"budget-exhausted",
|
|
70
|
+
"budget-counter-unavailable",
|
|
71
|
+
"app-monthly-budget-exhausted",
|
|
72
|
+
"consent-required",
|
|
73
|
+
];
|
|
74
|
+
|
|
75
|
+
export function isSessionReplayRefusalReason(
|
|
76
|
+
value: unknown,
|
|
77
|
+
): value is SessionReplayRefusalReason {
|
|
78
|
+
return (
|
|
79
|
+
typeof value === "string" &&
|
|
80
|
+
(SESSION_REPLAY_REFUSAL_REASONS as ReadonlyArray<string>).includes(value)
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export interface SessionReplayRefusalCount {
|
|
85
|
+
reason: SessionReplayRefusalReason;
|
|
86
|
+
count: number;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/*
|
|
90
|
+
* The wire response of /ingest-status. The first block is what the route
|
|
91
|
+
* has always answered; everything after it is additive and optional.
|
|
92
|
+
*/
|
|
93
|
+
export interface SessionReplayIngestStatusResponseDto {
|
|
94
|
+
isProjectAllowed: boolean;
|
|
95
|
+
isApplicationEnabled: boolean;
|
|
96
|
+
appIdentifier: string;
|
|
97
|
+
allowedOrigins: Array<string>;
|
|
98
|
+
samplePercentage: number;
|
|
99
|
+
captureTrigger: string;
|
|
100
|
+
/* ISO-8601 or null. */
|
|
101
|
+
lastChunkReceivedAt: string | null;
|
|
102
|
+
budgetExceededAt: string | null;
|
|
103
|
+
/* null = counter unreachable. */
|
|
104
|
+
projectBytesUsedToday: number | null;
|
|
105
|
+
dailyByteLimit: number;
|
|
106
|
+
applicationBytesUsedThisMonth: number | null;
|
|
107
|
+
monthlyBudgetInGB: number | null;
|
|
108
|
+
|
|
109
|
+
/* ---- Additive. ---- */
|
|
110
|
+
consentMode?: string;
|
|
111
|
+
maskingMode?: string;
|
|
112
|
+
retentionInDays?: number;
|
|
113
|
+
/* The recorder artifact version the /config route hands out; null when none is built. */
|
|
114
|
+
publishedRecorderVersion?: string | null;
|
|
115
|
+
/* RumApplication.lastSeenAt: the /config route stamps it on every fetch. */
|
|
116
|
+
lastConfigFetchAt?: string | null;
|
|
117
|
+
lastSessionStartedAt?: string | null;
|
|
118
|
+
sessionsLast24h?: number | null;
|
|
119
|
+
playableSessionsLast24h?: number | null;
|
|
120
|
+
/* null when the counter store is unreachable; [] when nothing was refused. */
|
|
121
|
+
refusalsLast24h?: Array<{ reason: string; count: number }> | null;
|
|
122
|
+
/*
|
|
123
|
+
* Chunks the server ACCEPTED (202) and then dropped in the ingest worker,
|
|
124
|
+
* by reason. Kept apart from refusals because the recorder was told these
|
|
125
|
+
* landed; an open vocabulary (scrub-incomplete, over-cap, erased, ...)
|
|
126
|
+
* because the worker's drop reasons are operational, not a contract.
|
|
127
|
+
*/
|
|
128
|
+
dropsLast24h?: Array<{ reason: string; count: number }> | null;
|
|
129
|
+
/*
|
|
130
|
+
* What the recorder that most recently uploaded announced it can
|
|
131
|
+
* capture (SESSION_REPLAY_RECORDER_CAPABILITIES on the chunk envelope,
|
|
132
|
+
* the same vocabulary the manifest header carries). The setup guide and
|
|
133
|
+
* the health card show it so "no clicks in the rail" can be answered
|
|
134
|
+
* with "this recorder does not send click events" rather than left as a
|
|
135
|
+
* mystery. null = not reported (an older server, or no chunk yet);
|
|
136
|
+
* [] = a recorder uploaded and announced nothing, which is a different
|
|
137
|
+
* fact and reads as "unknown capabilities" on purpose.
|
|
138
|
+
*/
|
|
139
|
+
recorderCapabilities?: Array<string> | null;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/* The policy half of the status, as the recorder would see it. */
|
|
143
|
+
export interface RecordingHealthPolicy {
|
|
144
|
+
isProjectEnabled: boolean;
|
|
145
|
+
isApplicationEnabled: boolean;
|
|
146
|
+
/* SessionReplayCaptureTrigger value; "" when the server did not say. */
|
|
147
|
+
captureTrigger: string;
|
|
148
|
+
samplePercentage: number;
|
|
149
|
+
/* SessionReplayConsentMode value; "" when the server did not say. */
|
|
150
|
+
consentMode: string;
|
|
151
|
+
/* SessionReplayMaskingMode value; "" when the server did not say. */
|
|
152
|
+
maskingMode: string;
|
|
153
|
+
/* null when the server did not say. */
|
|
154
|
+
retentionInDays: number | null;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/*
|
|
158
|
+
* Normalised health status. Timestamps stay ISO strings (null when the
|
|
159
|
+
* event never happened); the diagnosis converts them against `now` so it
|
|
160
|
+
* remains a pure function of its inputs.
|
|
161
|
+
*/
|
|
162
|
+
export interface RecordingHealthStatus {
|
|
163
|
+
appIdentifier: string;
|
|
164
|
+
allowedOrigins: Array<string>;
|
|
165
|
+
policy: RecordingHealthPolicy;
|
|
166
|
+
/* null when no recorder artifact is published or the server did not say. */
|
|
167
|
+
publishedRecorderVersion: string | null;
|
|
168
|
+
lastConfigFetchAt: string | null;
|
|
169
|
+
lastChunkReceivedAt: string | null;
|
|
170
|
+
lastSessionStartedAt: string | null;
|
|
171
|
+
budgetExceededAt: string | null;
|
|
172
|
+
sessionsLast24h: number | null;
|
|
173
|
+
playableSessionsLast24h: number | null;
|
|
174
|
+
refusalsLast24h: Array<SessionReplayRefusalCount> | null;
|
|
175
|
+
/*
|
|
176
|
+
* Open vocabulary; see SessionReplayIngestStatusResponseDto.dropsLast24h.
|
|
177
|
+
* Optional as well as nullable: it was added after the surfaces that
|
|
178
|
+
* build this object, and absent means the same as null (unknown).
|
|
179
|
+
*/
|
|
180
|
+
dropsLast24h?: Array<{ reason: string; count: number }> | null;
|
|
181
|
+
/*
|
|
182
|
+
* See SessionReplayIngestStatusResponseDto.recorderCapabilities. Carried
|
|
183
|
+
* through parseRecordingHealthStatus so the surfaces that already hold a
|
|
184
|
+
* RecordingHealthStatus do not have to keep a second parse of the same
|
|
185
|
+
* body alive. Optional as well as nullable for the same reason
|
|
186
|
+
* dropsLast24h is: it postdates the objects that build this shape.
|
|
187
|
+
*/
|
|
188
|
+
recorderCapabilities?: Array<string> | null;
|
|
189
|
+
projectBytesUsedToday: number | null;
|
|
190
|
+
dailyByteLimit: number;
|
|
191
|
+
applicationBytesUsedThisMonth: number | null;
|
|
192
|
+
monthlyBudgetInGB: number | null;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/*
|
|
196
|
+
* In strict priority order. The diagnosis returns the FIRST state whose
|
|
197
|
+
* condition holds, so a project that is switched off is reported as
|
|
198
|
+
* switched off even when its refusal counters are also climbing.
|
|
199
|
+
*/
|
|
200
|
+
export type RecordingHealthState =
|
|
201
|
+
| "disabled-project"
|
|
202
|
+
| "disabled-app"
|
|
203
|
+
| "budget-paused"
|
|
204
|
+
| "refusing"
|
|
205
|
+
| "never-loaded"
|
|
206
|
+
| "loaded-never-uploaded"
|
|
207
|
+
| "stale"
|
|
208
|
+
| "healthy-quiet"
|
|
209
|
+
| "healthy"
|
|
210
|
+
| "unknown";
|
|
211
|
+
|
|
212
|
+
export type RecordingHealthSeverity = "ok" | "info" | "warning" | "error";
|
|
213
|
+
|
|
214
|
+
/* Where the one offered action takes the viewer. */
|
|
215
|
+
export type RecordingHealthActionTarget =
|
|
216
|
+
| "app-settings"
|
|
217
|
+
| "project-settings"
|
|
218
|
+
| "setup-guide"
|
|
219
|
+
| "docs-consent"
|
|
220
|
+
| "docs-csp"
|
|
221
|
+
| "budget"
|
|
222
|
+
| "allowed-origins";
|
|
223
|
+
|
|
224
|
+
export interface RecordingHealthAction {
|
|
225
|
+
label: string;
|
|
226
|
+
target: RecordingHealthActionTarget;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
export interface RecordingHealthDiagnosis {
|
|
230
|
+
state: RecordingHealthState;
|
|
231
|
+
severity: RecordingHealthSeverity;
|
|
232
|
+
/* One line: names the cause. */
|
|
233
|
+
title: string;
|
|
234
|
+
/* One or two sentences: quantifies it. */
|
|
235
|
+
detail: string;
|
|
236
|
+
/* At most one. Absent when nothing in the product fixes the state. */
|
|
237
|
+
action?: RecordingHealthAction;
|
|
238
|
+
}
|
|
@@ -8,6 +8,7 @@ import GreaterThanOrEqual from "./BaseDatabase/GreaterThanOrEqual";
|
|
|
8
8
|
import InBetween from "./BaseDatabase/InBetween";
|
|
9
9
|
import Includes from "./BaseDatabase/Includes";
|
|
10
10
|
import IncludesAll from "./BaseDatabase/IncludesAll";
|
|
11
|
+
import IncludesAnyOfGroups from "./BaseDatabase/IncludesAnyOfGroups";
|
|
11
12
|
import IncludesNone from "./BaseDatabase/IncludesNone";
|
|
12
13
|
import StartsWith from "./BaseDatabase/StartsWith";
|
|
13
14
|
import EndsWith from "./BaseDatabase/EndsWith";
|
|
@@ -155,6 +156,9 @@ const SerializableObjectDictionary: Dictionary<any> = {
|
|
|
155
156
|
get [ObjectType.IncludesAll](): any {
|
|
156
157
|
return IncludesAll;
|
|
157
158
|
},
|
|
159
|
+
get [ObjectType.IncludesAnyOfGroups](): any {
|
|
160
|
+
return IncludesAnyOfGroups;
|
|
161
|
+
},
|
|
158
162
|
get [ObjectType.IncludesNone](): any {
|
|
159
163
|
return IncludesNone;
|
|
160
164
|
},
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import EntitySource from "./EntitySource";
|
|
2
|
+
|
|
3
|
+
export enum InventoryLiveness {
|
|
4
|
+
Live = "live",
|
|
5
|
+
Recent = "recent",
|
|
6
|
+
Stale = "stale",
|
|
7
|
+
Never = "never",
|
|
8
|
+
NotTracked = "not-tracked",
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export const INVENTORY_LIVE_WINDOW_MINUTES: number = 30;
|
|
12
|
+
export const INVENTORY_STALE_AFTER_MINUTES: number = 24 * 60;
|
|
13
|
+
|
|
14
|
+
export interface InventoryLivenessInput {
|
|
15
|
+
source?: string | undefined;
|
|
16
|
+
lastSeenAt?: Date | string | undefined | null;
|
|
17
|
+
now: Date;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* A last-seen timestamp is a heartbeat only for discovered items. Mirrored
|
|
22
|
+
* and manual items retain their creation timestamp, so aging those would
|
|
23
|
+
* incorrectly classify healthy infrastructure as stale.
|
|
24
|
+
*/
|
|
25
|
+
export const getInventoryLivenessState: (
|
|
26
|
+
input: InventoryLivenessInput,
|
|
27
|
+
) => InventoryLiveness = (input: InventoryLivenessInput): InventoryLiveness => {
|
|
28
|
+
if (input.source !== EntitySource.Discovered) {
|
|
29
|
+
return InventoryLiveness.NotTracked;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
if (!input.lastSeenAt) {
|
|
33
|
+
return InventoryLiveness.Never;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const lastSeenAt: Date = new Date(input.lastSeenAt);
|
|
37
|
+
|
|
38
|
+
if (Number.isNaN(lastSeenAt.getTime())) {
|
|
39
|
+
return InventoryLiveness.Never;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const minutesSinceLastSeen: number = Math.max(
|
|
43
|
+
0,
|
|
44
|
+
Math.floor((input.now.getTime() - lastSeenAt.getTime()) / (60 * 1000)),
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
if (minutesSinceLastSeen <= INVENTORY_LIVE_WINDOW_MINUTES) {
|
|
48
|
+
return InventoryLiveness.Live;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if (minutesSinceLastSeen <= INVENTORY_STALE_AFTER_MINUTES) {
|
|
52
|
+
return InventoryLiveness.Recent;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return InventoryLiveness.Stale;
|
|
56
|
+
};
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Every distinct endpoint family that accepts a TelemetryIngestionKey.
|
|
3
|
+
*
|
|
4
|
+
* This enum exists so the "may this key write here?" decision is made in ONE
|
|
5
|
+
* place against a closed vocabulary, rather than each route inventing its own
|
|
6
|
+
* ad-hoc check. Each ingest route names the surface it is, the shared guard
|
|
7
|
+
* answers yes or no, and adding a new route becomes a conscious decision about
|
|
8
|
+
* whether a public browser key may reach it (the Record below will not compile
|
|
9
|
+
* until the new member is given a readable name).
|
|
10
|
+
*
|
|
11
|
+
* The string values are the wire/log form and are deliberately stable: they
|
|
12
|
+
* appear in refusal messages and in ingest logs, so renaming one changes what
|
|
13
|
+
* an operator greps for.
|
|
14
|
+
*/
|
|
15
|
+
enum TelemetryIngestSurface {
|
|
16
|
+
OtelTraces = "otel-traces",
|
|
17
|
+
OtelLogs = "otel-logs",
|
|
18
|
+
OtelMetrics = "otel-metrics",
|
|
19
|
+
OtelProfiles = "otel-profiles",
|
|
20
|
+
SessionReplay = "session-replay",
|
|
21
|
+
SourceMap = "source-map",
|
|
22
|
+
Syslog = "syslog",
|
|
23
|
+
Fluent = "fluent",
|
|
24
|
+
Pyroscope = "pyroscope",
|
|
25
|
+
KubernetesCost = "kubernetes-cost",
|
|
26
|
+
ChangeEvents = "change-events",
|
|
27
|
+
SecurityEvents = "security-events",
|
|
28
|
+
Grpc = "grpc",
|
|
29
|
+
Mqtt = "mqtt",
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/*
|
|
33
|
+
* The only surfaces a Browser key may write to. This is an ALLOWLIST, not a
|
|
34
|
+
* denylist, on purpose: a surface added later is refused to browser keys until
|
|
35
|
+
* someone deliberately adds it here, so the failure mode of forgetting is
|
|
36
|
+
* "browser keys cannot reach a new endpoint" rather than "a key scraped off a
|
|
37
|
+
* public page can reach it".
|
|
38
|
+
*
|
|
39
|
+
* The four members are exactly what a real browser agent emits: OTLP traces,
|
|
40
|
+
* logs and metrics from the web SDKs, plus session replay chunks. Everything
|
|
41
|
+
* else is a server-side or infrastructure pipe that no page has any business
|
|
42
|
+
* calling - profiles, syslog, Fluent, Pyroscope, Kubernetes cost, gRPC, MQTT -
|
|
43
|
+
* or is a build-time artifact upload (source maps) that belongs in CI with a
|
|
44
|
+
* server key, not in the browser bundle, which would otherwise be able to
|
|
45
|
+
* overwrite the maps used to de-obfuscate everyone else's stack traces.
|
|
46
|
+
*/
|
|
47
|
+
export const BROWSER_ALLOWED_INGEST_SURFACES: ReadonlySet<TelemetryIngestSurface> =
|
|
48
|
+
new Set<TelemetryIngestSurface>([
|
|
49
|
+
TelemetryIngestSurface.OtelTraces,
|
|
50
|
+
TelemetryIngestSurface.OtelLogs,
|
|
51
|
+
TelemetryIngestSurface.OtelMetrics,
|
|
52
|
+
TelemetryIngestSurface.SessionReplay,
|
|
53
|
+
]);
|
|
54
|
+
|
|
55
|
+
/*
|
|
56
|
+
* Typed as a total Record rather than a partial lookup so that adding a member
|
|
57
|
+
* to the enum without naming it is a compile error, not a surface that
|
|
58
|
+
* silently reports itself by its raw slug in a customer-facing error.
|
|
59
|
+
*/
|
|
60
|
+
const INGEST_SURFACE_READABLE_NAMES: Record<TelemetryIngestSurface, string> = {
|
|
61
|
+
[TelemetryIngestSurface.OtelTraces]: "OTLP trace ingest",
|
|
62
|
+
[TelemetryIngestSurface.OtelLogs]: "OTLP log ingest",
|
|
63
|
+
[TelemetryIngestSurface.OtelMetrics]: "OTLP metric ingest",
|
|
64
|
+
[TelemetryIngestSurface.OtelProfiles]: "OTLP profile ingest",
|
|
65
|
+
[TelemetryIngestSurface.SessionReplay]: "session replay ingest",
|
|
66
|
+
[TelemetryIngestSurface.SourceMap]: "source map upload",
|
|
67
|
+
[TelemetryIngestSurface.Syslog]: "syslog ingest",
|
|
68
|
+
[TelemetryIngestSurface.Fluent]: "Fluentd / Fluent Bit ingest",
|
|
69
|
+
[TelemetryIngestSurface.Pyroscope]: "Pyroscope profile ingest",
|
|
70
|
+
[TelemetryIngestSurface.KubernetesCost]: "Kubernetes cost ingest",
|
|
71
|
+
[TelemetryIngestSurface.ChangeEvents]: "change event ingest",
|
|
72
|
+
[TelemetryIngestSurface.SecurityEvents]: "security event ingest",
|
|
73
|
+
[TelemetryIngestSurface.Grpc]: "gRPC ingest",
|
|
74
|
+
[TelemetryIngestSurface.Mqtt]: "MQTT ingest",
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
type GetIngestSurfaceReadableNameFunction = (
|
|
78
|
+
surface: TelemetryIngestSurface,
|
|
79
|
+
) => string;
|
|
80
|
+
|
|
81
|
+
export const getIngestSurfaceReadableName: GetIngestSurfaceReadableNameFunction =
|
|
82
|
+
(surface: TelemetryIngestSurface): string => {
|
|
83
|
+
/*
|
|
84
|
+
* The fallback guards the one case the type system cannot: a surface
|
|
85
|
+
* string that came off the wire, or out of an older row, and was cast
|
|
86
|
+
* into the enum. Echoing the raw slug beats rendering "undefined" in a
|
|
87
|
+
* refusal message.
|
|
88
|
+
*/
|
|
89
|
+
const readableName: string | undefined =
|
|
90
|
+
INGEST_SURFACE_READABLE_NAMES[surface];
|
|
91
|
+
|
|
92
|
+
return readableName || String(surface);
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
export default TelemetryIngestSurface;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import ObjectID from "../ObjectID";
|
|
2
|
+
import TelemetryIngestionKeyType from "./TelemetryIngestionKeyType";
|
|
3
|
+
|
|
4
|
+
/*
|
|
5
|
+
* The resolved, ingest-time view of one TelemetryIngestionKey: everything the
|
|
6
|
+
* guard needs to decide whether to accept a request, and nothing else.
|
|
7
|
+
*
|
|
8
|
+
* It is a plain type rather than the model itself so the hot path can cache it
|
|
9
|
+
* (and so nothing downstream is tempted to reach for the model's other
|
|
10
|
+
* columns, or to write through it). Note what is deliberately ABSENT: the
|
|
11
|
+
* secret. Once a request has been authenticated the secret has done its job,
|
|
12
|
+
* and a value that must never be logged is safest in a shape that never
|
|
13
|
+
* carries it.
|
|
14
|
+
*
|
|
15
|
+
* Every field is non-optional - null is spelled out - because these are
|
|
16
|
+
* decisions, and "the caller forgot to set it" must not be indistinguishable
|
|
17
|
+
* from "there is deliberately no limit here".
|
|
18
|
+
*/
|
|
19
|
+
export default interface TelemetryIngestionKeyPolicy {
|
|
20
|
+
ingestionKeyId: ObjectID;
|
|
21
|
+
projectId: ObjectID;
|
|
22
|
+
|
|
23
|
+
keyType: TelemetryIngestionKeyType;
|
|
24
|
+
|
|
25
|
+
/*
|
|
26
|
+
* Origins this key may be used from. REQUIRED and strictly enforced on a
|
|
27
|
+
* Browser key (empty means the key cannot be used at all, since a public
|
|
28
|
+
* key with no origin binding is just a key anyone may write with); IGNORED
|
|
29
|
+
* on a Server key, which has no Origin header to check in the first place.
|
|
30
|
+
*
|
|
31
|
+
* Note this is the opposite polarity from
|
|
32
|
+
* RumApplication.sessionReplayAllowedOrigins, where empty means "any
|
|
33
|
+
* origin". That column is an optional hardening control on an existing
|
|
34
|
+
* feature and could not be tightened without breaking live installations;
|
|
35
|
+
* this one is on a key type that did not exist before, so it can start
|
|
36
|
+
* closed.
|
|
37
|
+
*/
|
|
38
|
+
allowedOrigins: Array<string>;
|
|
39
|
+
|
|
40
|
+
/*
|
|
41
|
+
* When set, every OTLP resource ingested with this key has its service.name
|
|
42
|
+
* REPLACED with this value. Null means the payload's own service.name is
|
|
43
|
+
* kept (the historical behaviour, and the only sane one for a server key
|
|
44
|
+
* that legitimately reports for many services).
|
|
45
|
+
*/
|
|
46
|
+
pinnedServiceName: string | null;
|
|
47
|
+
|
|
48
|
+
/* Kill switch. False refuses everything, immediately, without deleting. */
|
|
49
|
+
isEnabled: boolean;
|
|
50
|
+
|
|
51
|
+
/* Null means never expires - the historical behaviour of every key. */
|
|
52
|
+
expiresAt: Date | null;
|
|
53
|
+
|
|
54
|
+
/*
|
|
55
|
+
* Null means "no explicit limit configured", which resolves differently per
|
|
56
|
+
* key type: a Browser key falls back to
|
|
57
|
+
* DEFAULT_BROWSER_KEY_REQUESTS_PER_MINUTE, a Server key is unlimited.
|
|
58
|
+
*/
|
|
59
|
+
requestsPerMinuteLimit: number | null;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/*
|
|
63
|
+
* Shipped ceiling for a Browser key that has not set its own limit.
|
|
64
|
+
*
|
|
65
|
+
* Sized to be irrelevant to honest traffic and material to an abuser: 6000
|
|
66
|
+
* requests/minute is 100/second sustained, which a real page cannot approach
|
|
67
|
+
* (browser SDKs batch and flush on an interval, so one visitor generates
|
|
68
|
+
* single-digit requests per minute), while a scraped key driven from a script
|
|
69
|
+
* hits it in seconds. The limit is per KEY, not per visitor, so it must clear
|
|
70
|
+
* the whole legitimate fleet behind one key - hence a headroom this generous
|
|
71
|
+
* rather than a tight per-client number.
|
|
72
|
+
*
|
|
73
|
+
* A customer who genuinely needs more sets requestsPerMinuteLimit explicitly.
|
|
74
|
+
*/
|
|
75
|
+
export const DEFAULT_BROWSER_KEY_REQUESTS_PER_MINUTE: number = 6000;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* What kind of credential a TelemetryIngestionKey is, and therefore what the
|
|
3
|
+
* ingest side is willing to let it do.
|
|
4
|
+
*
|
|
5
|
+
* The distinction exists because these two are NOT the same secret class, even
|
|
6
|
+
* though today they are the same column:
|
|
7
|
+
*
|
|
8
|
+
* - Server keys live in a backend process, an OTel collector config, or a CI
|
|
9
|
+
* secret. Nobody outside the customer's infrastructure ever sees them, so
|
|
10
|
+
* they get the full ingest surface with no origin binding. This is the
|
|
11
|
+
* historical behaviour and the DEFAULT, so every key that already exists
|
|
12
|
+
* keeps working exactly as before.
|
|
13
|
+
* - Browser keys are pasted into a public web page - the session-replay
|
|
14
|
+
* snippet, a browser OTLP exporter - which means "secret" is a fiction:
|
|
15
|
+
* anyone who views source has it. They are therefore treated as PUBLIC
|
|
16
|
+
* write-only credentials and are constrained on every axis that can be
|
|
17
|
+
* enforced server-side: a required origin allowlist, a pinned service.name,
|
|
18
|
+
* a per-key rate limit, an expiry, a kill switch, and a reduced set of
|
|
19
|
+
* ingest surfaces (see BROWSER_ALLOWED_INGEST_SURFACES).
|
|
20
|
+
*
|
|
21
|
+
* The type of a key is immutable after creation - see the keyType column on
|
|
22
|
+
* TelemetryIngestionKey for why.
|
|
23
|
+
*/
|
|
24
|
+
enum TelemetryIngestionKeyType {
|
|
25
|
+
Server = "Server",
|
|
26
|
+
Browser = "Browser",
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export default TelemetryIngestionKeyType;
|
package/Types/WebsiteRequest.ts
CHANGED
|
@@ -3,6 +3,9 @@ import Headers from "./API/Headers";
|
|
|
3
3
|
import URL from "./API/URL";
|
|
4
4
|
import Dictionary from "./Dictionary";
|
|
5
5
|
import HTML from "./Html";
|
|
6
|
+
import HTTPResponseBodyReader, {
|
|
7
|
+
HTTPResponseBodyBudget,
|
|
8
|
+
} from "../Utils/HTTPResponseBodyReader";
|
|
6
9
|
import axios, { AxiosRequestConfig, AxiosResponse } from "axios";
|
|
7
10
|
import type { Agent as HttpAgent } from "http";
|
|
8
11
|
import type { Agent as HttpsAgent } from "https";
|
|
@@ -24,6 +27,17 @@ export default class WebsiteRequest {
|
|
|
24
27
|
timeout?: number | undefined;
|
|
25
28
|
isHeadRequest?: boolean | undefined;
|
|
26
29
|
doNotFollowRedirects?: boolean | undefined;
|
|
30
|
+
doNotFallbackFromHead?: boolean | undefined;
|
|
31
|
+
acceptRedirectResponses?: boolean | undefined;
|
|
32
|
+
maxContentLength?: number | undefined;
|
|
33
|
+
maxBodyLength?: number | undefined;
|
|
34
|
+
disableProxy?: boolean | undefined;
|
|
35
|
+
signal?: AbortSignal | undefined;
|
|
36
|
+
responseBodyBudget?: HTTPResponseBodyBudget | undefined;
|
|
37
|
+
limitRedirectResponseBody?: boolean | undefined;
|
|
38
|
+
maximumResponseBytes?: number | undefined;
|
|
39
|
+
/** @internal Already-validated href used only for the Axios dispatch. */
|
|
40
|
+
dispatchUrl?: string | undefined;
|
|
27
41
|
httpAgent?: HttpAgent | undefined; // per-request HTTP proxy agent
|
|
28
42
|
httpsAgent?: HttpsAgent | undefined; // per-request HTTPS proxy agent
|
|
29
43
|
},
|
|
@@ -45,6 +59,38 @@ export default class WebsiteRequest {
|
|
|
45
59
|
axiosOptions.maxRedirects = 0;
|
|
46
60
|
}
|
|
47
61
|
|
|
62
|
+
if (options.acceptRedirectResponses) {
|
|
63
|
+
axiosOptions.validateStatus = (status: number): boolean => {
|
|
64
|
+
return status >= 200 && status < 400;
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
if (options.maxContentLength !== undefined) {
|
|
69
|
+
axiosOptions.maxContentLength = options.maxContentLength;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (options.maxBodyLength !== undefined) {
|
|
73
|
+
axiosOptions.maxBodyLength = options.maxBodyLength;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
if (options.disableProxy) {
|
|
77
|
+
axiosOptions.proxy = false;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if (options.signal) {
|
|
81
|
+
axiosOptions.signal = options.signal;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
if (options.responseBodyBudget) {
|
|
85
|
+
axiosOptions.responseType = "stream";
|
|
86
|
+
/*
|
|
87
|
+
* Let the shared streamed reader own this limit. Axios otherwise throws
|
|
88
|
+
* before yielding the over-limit chunk, so bytes already received on a
|
|
89
|
+
* failed attempt would never be charged to the cumulative budget.
|
|
90
|
+
*/
|
|
91
|
+
axiosOptions.maxContentLength = -1;
|
|
92
|
+
}
|
|
93
|
+
|
|
48
94
|
if (options.httpAgent) {
|
|
49
95
|
(axiosOptions as AxiosRequestConfig).httpAgent = options.httpAgent;
|
|
50
96
|
}
|
|
@@ -54,13 +100,36 @@ export default class WebsiteRequest {
|
|
|
54
100
|
|
|
55
101
|
// use axios to fetch an HTML page
|
|
56
102
|
let response: AxiosResponse | null = null;
|
|
103
|
+
let responseIsForHeadRequest: boolean = Boolean(options.isHeadRequest);
|
|
57
104
|
|
|
58
105
|
try {
|
|
59
|
-
response = await axios(
|
|
106
|
+
response = await axios(
|
|
107
|
+
options.dispatchUrl ?? url.toString(),
|
|
108
|
+
axiosOptions,
|
|
109
|
+
);
|
|
60
110
|
} catch (err: unknown) {
|
|
61
|
-
if (
|
|
111
|
+
if (
|
|
112
|
+
options.responseBodyBudget &&
|
|
113
|
+
axios.isAxiosError(err) &&
|
|
114
|
+
err.response
|
|
115
|
+
) {
|
|
116
|
+
err.response.data = HTTPResponseBodyReader.decodeUtf8(
|
|
117
|
+
await HTTPResponseBodyReader.read(err.response.data, {
|
|
118
|
+
budget: options.responseBodyBudget,
|
|
119
|
+
statusCode: err.response.status,
|
|
120
|
+
headers: err.response.headers,
|
|
121
|
+
limitRedirectResponseBody:
|
|
122
|
+
options.limitRedirectResponseBody || false,
|
|
123
|
+
isHeadResponse: responseIsForHeadRequest,
|
|
124
|
+
maximumResponseBytes: options.maximumResponseBytes,
|
|
125
|
+
}),
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
if (err && options.isHeadRequest && !options.doNotFallbackFromHead) {
|
|
62
130
|
// 404 because of HEAD request. Retry with GET request.
|
|
63
|
-
|
|
131
|
+
responseIsForHeadRequest = false;
|
|
132
|
+
response = await axios(options.dispatchUrl ?? url.toString(), {
|
|
64
133
|
...axiosOptions,
|
|
65
134
|
method: HTTPMethod.GET,
|
|
66
135
|
});
|
|
@@ -69,6 +138,19 @@ export default class WebsiteRequest {
|
|
|
69
138
|
}
|
|
70
139
|
}
|
|
71
140
|
|
|
141
|
+
if (options.responseBodyBudget) {
|
|
142
|
+
response!.data = HTTPResponseBodyReader.decodeUtf8(
|
|
143
|
+
await HTTPResponseBodyReader.read(response!.data, {
|
|
144
|
+
budget: options.responseBodyBudget,
|
|
145
|
+
statusCode: response!.status,
|
|
146
|
+
headers: response!.headers,
|
|
147
|
+
limitRedirectResponseBody: options.limitRedirectResponseBody || false,
|
|
148
|
+
isHeadResponse: responseIsForHeadRequest,
|
|
149
|
+
maximumResponseBytes: options.maximumResponseBytes,
|
|
150
|
+
}),
|
|
151
|
+
);
|
|
152
|
+
}
|
|
153
|
+
|
|
72
154
|
// return the response
|
|
73
155
|
return {
|
|
74
156
|
url: url,
|
|
@@ -93,7 +93,14 @@ const CSVFileUpload: FunctionComponent<ComponentProps> = (
|
|
|
93
93
|
const [error, setError] = useState<string>("");
|
|
94
94
|
const [parsedRows, setParsedRows] = useState<Array<CSVRow>>([]);
|
|
95
95
|
const [fileName, setFileName] = useState<string>("");
|
|
96
|
-
|
|
96
|
+
/*
|
|
97
|
+
* The element type goes in T on its own: RefObject<T> already declares
|
|
98
|
+
* `current` as `T | null`, and RefObject<HTMLInputElement | null> is a
|
|
99
|
+
* structurally identical but non-assignable type, rejected on the `ref`
|
|
100
|
+
* prop below because RefObject is covariant in T. That mismatch is what
|
|
101
|
+
* used to need a cast there.
|
|
102
|
+
*/
|
|
103
|
+
const fileInputRef: React.RefObject<HTMLInputElement> =
|
|
97
104
|
useRef<HTMLInputElement>(null);
|
|
98
105
|
|
|
99
106
|
const downloadTemplate: DownloadTemplateFunction = (): void => {
|
|
@@ -270,7 +277,7 @@ const CSVFileUpload: FunctionComponent<ComponentProps> = (
|
|
|
270
277
|
</div>
|
|
271
278
|
<p className="text-xs text-gray-500">CSV files only</p>
|
|
272
279
|
<input
|
|
273
|
-
ref={fileInputRef
|
|
280
|
+
ref={fileInputRef}
|
|
274
281
|
type="file"
|
|
275
282
|
accept=".csv"
|
|
276
283
|
className="sr-only"
|