@oneuptime/common 12.0.5 → 12.0.6
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/DatabaseModels/AIRun.ts +33 -0
- package/Models/DatabaseModels/DataSource.ts +744 -0
- package/Models/DatabaseModels/Index.ts +3 -0
- package/Models/DatabaseModels/ProjectCallSMSConfig.ts +10 -2
- package/Models/DatabaseModels/User.ts +2 -0
- package/Models/DatabaseModels/UserOnCallLog.ts +2 -0
- package/Models/DatabaseModels/UserOnCallLogTimeline.ts +2 -0
- package/Models/DatabaseModels/UserSession.ts +2 -0
- package/Models/DatabaseModels/UserTotpAuth.ts +6 -4
- package/Models/DatabaseModels/UserWebAuthn.ts +5 -3
- package/Server/API/AIInsightAPI.ts +47 -4
- package/Server/API/AIInvestigationAPI.ts +25 -0
- package/Server/API/DashboardAPI.ts +176 -492
- package/Server/API/DataSourceAPI.ts +268 -0
- package/Server/API/StatusPageAPI.ts +11 -1
- package/Server/API/UserAPI.ts +119 -0
- package/Server/Infrastructure/ClickhouseConfig.ts +59 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786303472848-AddDataSourceTable.ts +39 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786600000000-AddInvestigationAnalysisTldr.ts +24 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786700000000-DropProjectCallSMSConfigCredentialUniques.ts +76 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +6 -0
- package/Server/Infrastructure/Queue.ts +26 -0
- package/Server/Infrastructure/QueueWorker.ts +17 -0
- package/Server/Middleware/TelemetryIngest.ts +8 -3
- package/Server/Services/AIInsightService.ts +132 -12
- package/Server/Services/AIRunService.ts +34 -0
- package/Server/Services/AIService.ts +17 -2
- package/Server/Services/AlertService.ts +38 -32
- package/Server/Services/AnalyticsDatabaseService.ts +8 -4
- package/Server/Services/DataSourceService.ts +200 -0
- package/Server/Services/HostService.ts +92 -0
- package/Server/Services/IncidentService.ts +45 -0
- package/Server/Services/Index.ts +2 -0
- package/Server/Services/MonitorService.ts +49 -0
- package/Server/Services/MonitorStatusService.ts +166 -0
- package/Server/Services/OpenTelemetryIngestService.ts +255 -184
- package/Server/Services/RumSessionPinService.ts +7 -21
- package/Server/Services/StatusPageSubscriberService.ts +13 -0
- package/Server/Services/UserService.ts +280 -9
- package/Server/Static/Vendor/README.md +62 -0
- package/Server/Static/Vendor/fonts/InterVariable.woff2 +0 -0
- package/Server/Static/Vendor/highlight/highlight.min.js +1244 -0
- package/Server/Static/Vendor/highlight/languages/apache.min.js +15 -0
- package/Server/Static/Vendor/highlight/languages/bash.min.js +21 -0
- package/Server/Static/Vendor/highlight/languages/c.min.js +41 -0
- package/Server/Static/Vendor/highlight/languages/cpp.min.js +47 -0
- package/Server/Static/Vendor/highlight/languages/csharp.min.js +49 -0
- package/Server/Static/Vendor/highlight/languages/css.min.js +31 -0
- package/Server/Static/Vendor/highlight/languages/diff.min.js +9 -0
- package/Server/Static/Vendor/highlight/languages/dns.min.js +11 -0
- package/Server/Static/Vendor/highlight/languages/dockerfile.min.js +8 -0
- package/Server/Static/Vendor/highlight/languages/go.min.js +20 -0
- package/Server/Static/Vendor/highlight/languages/graphql.min.js +12 -0
- package/Server/Static/Vendor/highlight/languages/http.min.js +14 -0
- package/Server/Static/Vendor/highlight/languages/ini.min.js +15 -0
- package/Server/Static/Vendor/highlight/languages/java.min.js +38 -0
- package/Server/Static/Vendor/highlight/languages/javascript.min.js +81 -0
- package/Server/Static/Vendor/highlight/languages/json.min.js +8 -0
- package/Server/Static/Vendor/highlight/languages/kotlin.min.js +46 -0
- package/Server/Static/Vendor/highlight/languages/lua.min.js +15 -0
- package/Server/Static/Vendor/highlight/languages/makefile.min.js +14 -0
- package/Server/Static/Vendor/highlight/languages/nginx.min.js +21 -0
- package/Server/Static/Vendor/highlight/languages/perl.min.js +41 -0
- package/Server/Static/Vendor/highlight/languages/php.min.js +59 -0
- package/Server/Static/Vendor/highlight/languages/powershell.min.js +39 -0
- package/Server/Static/Vendor/highlight/languages/python.min.js +42 -0
- package/Server/Static/Vendor/highlight/languages/r.min.js +26 -0
- package/Server/Static/Vendor/highlight/languages/ruby.min.js +54 -0
- package/Server/Static/Vendor/highlight/languages/rust.min.js +27 -0
- package/Server/Static/Vendor/highlight/languages/scala.min.js +28 -0
- package/Server/Static/Vendor/highlight/languages/sql.min.js +21 -0
- package/Server/Static/Vendor/highlight/languages/swift.min.js +68 -0
- package/Server/Static/Vendor/highlight/languages/typescript.min.js +99 -0
- package/Server/Static/Vendor/highlight/languages/xml.min.js +29 -0
- package/Server/Static/Vendor/highlight/languages/yaml.min.js +28 -0
- package/Server/Static/Vendor/highlight/styles/github-dark.min.css +10 -0
- package/Server/Static/Vendor/highlight/styles/vs2015.min.css +1 -0
- package/Server/Static/Vendor/tailwind/tailwind-3.4.5.js +21028 -0
- package/Server/Types/Database/Permissions/BasePermission.ts +7 -0
- package/Server/Types/Database/Permissions/DeletePermission.ts +2 -0
- package/Server/Types/Database/Permissions/ReadPermission.ts +3 -0
- package/Server/Types/Database/Permissions/TenantPermission.ts +101 -16
- package/Server/Utils/AI/CodeFix/FixRunBudget.ts +2 -2
- package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +90 -11
- package/Server/Utils/AI/SRE/AlertInvestigationRunner.ts +1 -0
- package/Server/Utils/AI/SRE/IncidentInvestigationRunner.ts +1 -0
- package/Server/Utils/AI/SRE/Insights/Detectors/ExceptionIdentity.ts +125 -0
- package/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.ts +25 -15
- package/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.ts +256 -57
- package/Server/Utils/AI/SRE/Insights/InsightStore.ts +76 -18
- package/Server/Utils/AI/SRE/InvestigationTldr.ts +352 -0
- package/Server/Utils/AnalyticsDatabase/InsertDedupContext.ts +7 -2
- package/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.ts +1793 -0
- package/Server/Utils/Dashboard/PublicDashboardViewConfig.ts +65 -0
- package/Server/Utils/DataSource/ConnectorRegistry.ts +53 -0
- package/Server/Utils/DataSource/Connectors/ClickHouseConnector.ts +338 -0
- package/Server/Utils/DataSource/Connectors/ElasticsearchConnector.ts +717 -0
- package/Server/Utils/DataSource/Connectors/LokiConnector.ts +606 -0
- package/Server/Utils/DataSource/Connectors/MySqlConnector.ts +307 -0
- package/Server/Utils/DataSource/Connectors/PostgresConnector.ts +260 -0
- package/Server/Utils/DataSource/Connectors/PrometheusConnector.ts +555 -0
- package/Server/Utils/DataSource/Connectors/RestApiConnector.ts +597 -0
- package/Server/Utils/DataSource/Connectors/SqlServerConnector.ts +318 -0
- package/Server/Utils/DataSource/EgressGuard.ts +446 -0
- package/Server/Utils/DataSource/HttpFetch.ts +221 -0
- package/Server/Utils/DataSource/SqlQueryGuard.ts +383 -0
- package/Server/Utils/DataSource/SqlResultShaper.ts +372 -0
- package/Server/Utils/DataSource/Types.ts +93 -0
- package/Server/Utils/Database/PostgresErrorTranslator.ts +172 -17
- package/Server/Utils/InProcessMemo.ts +141 -0
- package/Server/Utils/InstanceHealth/TelemetryIngestion.ts +628 -0
- package/Server/Utils/Monitor/MonitorMetricUtil.ts +58 -0
- package/Server/Utils/Monitor/MonitorResource.ts +14 -0
- package/Server/Utils/Response.ts +12 -1
- package/Server/Utils/SSRFProtection.ts +237 -0
- package/Server/Utils/StartServer.ts +8 -0
- package/Server/Utils/StatusPageSubscriberWebhook.ts +30 -0
- package/Server/Utils/Telemetry/CaptureSpan.ts +30 -18
- package/Server/Utils/Telemetry/IngestionTimestamp.ts +75 -0
- package/Server/Utils/Telemetry/ResourceHeartbeat.ts +99 -7
- package/Server/Utils/Telemetry/Telemetry.ts +112 -1
- package/Server/Utils/Telemetry.ts +104 -3
- package/Server/Utils/VendorAssets.ts +165 -0
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +28 -5
- package/Server/Utils/Workspace/Slack/Slack.ts +5 -0
- package/Server/Views/Partials/Head.ejs +21 -7
- package/Tests/App/AdminDashboard/AdminProjectsIdFilter.test.tsx +207 -0
- package/Tests/App/AdminDashboard/AdminUsersIdFilter.test.tsx +216 -0
- package/Tests/App/Dashboard/AIInsightViewActions.test.tsx +422 -0
- package/Tests/App/Dashboard/AddWidgetModal.test.tsx +10 -3
- package/Tests/App/Dashboard/AlertsSideMenu.test.tsx +387 -0
- package/Tests/App/Dashboard/ChatActivityFeed.test.tsx +199 -0
- package/Tests/App/Dashboard/DataSourceChartSyntheticConfig.test.tsx +736 -0
- package/Tests/App/Dashboard/DataSourceQueryEditor.test.tsx +868 -0
- package/Tests/App/Dashboard/DataSourceWidgetCatalog.test.ts +440 -0
- package/Tests/App/Dashboard/DataSourceWidgetFetching.test.tsx +2109 -0
- package/Tests/App/Dashboard/DataSourceWidgetViews.test.tsx +726 -0
- package/Tests/App/Dashboard/IncidentsSideMenu.test.tsx +447 -0
- package/Tests/App/Dashboard/InvestigationPanel.test.tsx +514 -3
- package/Tests/App/Dashboard/ProductMenuBreadcrumbs.test.tsx +391 -0
- package/Tests/App/Dashboard/ScheduledMaintenanceSideMenu.test.tsx +326 -0
- package/Tests/App/Dashboard/SideMenuHarness.tsx +187 -0
- package/Tests/App/Dashboard/WidgetCatalog.test.ts +6 -1
- package/Tests/App/StatusPage/StatusPageResourceExplorer.test.tsx +1858 -0
- package/Tests/Models/DatabaseModels/DataSourceModelSecrets.test.ts +70 -0
- package/Tests/Server/API/AIInvestigationAPI.test.ts +187 -0
- package/Tests/Server/API/DashboardPublicDataSourceStrip.test.ts +686 -0
- package/Tests/Server/API/DashboardPublicResourceListAPI.test.ts +585 -823
- package/Tests/Server/API/DataSourceAPIRoutes.test.ts +486 -0
- package/Tests/Server/API/StatusPageSubscriberOwnership.test.ts +291 -0
- package/Tests/Server/API/UserAuthenticationAPI.test.ts +641 -0
- package/Tests/Server/Infrastructure/ClickhouseKeepAliveOptions.test.ts +441 -0
- package/Tests/Server/Middleware/TelemetryIngestTokenLog.test.ts +140 -0
- package/Tests/Server/Services/AIInsightService.test.ts +266 -11
- package/Tests/Server/Services/AIRunAnalysisTldrPersistence.test.ts +160 -0
- package/Tests/Server/Services/AIServiceDailyBudget.test.ts +4 -0
- package/Tests/Server/Services/AlertMetricResourceAttributes.test.ts +352 -0
- package/Tests/Server/Services/DataSourceServiceSettings.test.ts +244 -0
- package/Tests/Server/Services/HostServiceFindOrCreateMemo.test.ts +397 -0
- package/Tests/Server/Services/HostServiceUpdateLastSeen.test.ts +41 -2
- package/Tests/Server/Services/IncidentMetricResourceAttributes.test.ts +408 -0
- package/Tests/Server/Services/MonitorStatusServiceDeleteReferenceCleanup.test.ts +351 -0
- package/Tests/Server/Services/MonitorStatusServiceValidation.test.ts +171 -0
- package/Tests/Server/Services/OpenTelemetryResourceRetentionMemo.test.ts +398 -0
- package/Tests/Server/Services/OpenTelemetryServiceResolutionCache.test.ts +19 -0
- package/Tests/Server/Services/ProjectCallSMSConfigCredentialUniqueness.test.ts +305 -0
- package/Tests/Server/Services/ResourceUpdateLastSeenLivenessFallback.test.ts +36 -1
- package/Tests/Server/Services/RumSessionPinUniqueViolationRecovery.test.ts +163 -0
- package/Tests/Server/Services/UserAuthenticationService.test.ts +973 -0
- package/Tests/Server/Types/Database/ObjectIdColumnQuery.test.ts +262 -0
- package/Tests/Server/Types/Database/Permissions/TenantPermission.test.ts +358 -0
- package/Tests/Server/Utils/AI/FixRunBudget.test.ts +2 -2
- package/Tests/Server/Utils/AI/Insights/ExceptionSpikeDetector.test.ts +6 -1
- package/Tests/Server/Utils/AI/Insights/InsightStore.test.ts +121 -4
- package/Tests/Server/Utils/AI/Insights/NewExceptionDetector.test.ts +361 -10
- package/Tests/Server/Utils/AI/InvestigationSettlement.test.ts +292 -0
- package/Tests/Server/Utils/AI/InvestigationTldr.test.ts +623 -0
- package/Tests/Server/Utils/AI/InvestigationTldrWiring.test.ts +98 -0
- package/Tests/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.test.ts +857 -0
- package/Tests/Server/Utils/Dashboard/PublicDashboardViewConfig.test.ts +480 -0
- package/Tests/Server/Utils/DataSource/ClickHouseConnector.test.ts +759 -0
- package/Tests/Server/Utils/DataSource/ConnectorRegistry.test.ts +37 -0
- package/Tests/Server/Utils/DataSource/EgressGuard.test.ts +645 -0
- package/Tests/Server/Utils/DataSource/ElasticsearchConnector.test.ts +1206 -0
- package/Tests/Server/Utils/DataSource/HttpFetch.test.ts +616 -0
- package/Tests/Server/Utils/DataSource/LokiConnector.test.ts +970 -0
- package/Tests/Server/Utils/DataSource/MySqlConnector.test.ts +935 -0
- package/Tests/Server/Utils/DataSource/PostgresConnector.test.ts +854 -0
- package/Tests/Server/Utils/DataSource/PrometheusConnector.test.ts +881 -0
- package/Tests/Server/Utils/DataSource/RestApiConnector.test.ts +1020 -0
- package/Tests/Server/Utils/DataSource/SqlQueryGuard.test.ts +425 -0
- package/Tests/Server/Utils/DataSource/SqlResultShaper.test.ts +555 -0
- package/Tests/Server/Utils/DataSource/SqlServerConnector.test.ts +934 -0
- package/Tests/Server/Utils/Database/PostgresErrorTranslator.test.ts +228 -7
- package/Tests/Server/Utils/InProcessMemo.test.ts +292 -0
- package/Tests/Server/Utils/InstanceHealth/TelemetryIngestion.test.ts +960 -0
- package/Tests/Server/Utils/MicrosoftTeamsWebhookUrlValidation.test.ts +103 -0
- package/Tests/Server/Utils/Monitor/MonitorMetricResourceAttributes.test.ts +336 -0
- package/Tests/Server/Utils/OfflineAssetHygiene.test.ts +521 -0
- package/Tests/Server/Utils/ResponseRenderAnalytics.test.ts +143 -0
- package/Tests/Server/Utils/SSRFProtection.test.ts +193 -0
- package/Tests/Server/Utils/StatusPageSubscriberWebhook.test.ts +101 -0
- package/Tests/Server/Utils/TailwindBuildCopy.test.ts +225 -0
- package/Tests/Server/Utils/Telemetry/ResourceHeartbeatL1Memo.test.ts +355 -0
- package/Tests/Server/Utils/Telemetry/TelemetryFanInWriter.test.ts +128 -0
- package/Tests/Server/Utils/Telemetry/TelemetryUtilAttributeKeys.test.ts +381 -0
- package/Tests/Server/Utils/Telemetry.test.ts +87 -0
- package/Tests/Server/Utils/VendorAssetIntegrity.test.ts +343 -0
- package/Tests/Server/Utils/VendorAssets.test.ts +671 -0
- package/Tests/Server/Views/OfflineRender.test.ts +297 -0
- package/Tests/Types/Dashboard/DataSourceComponentTypes.test.ts +618 -0
- package/Tests/Types/DateClickhouseFormat.test.ts +192 -0
- package/Tests/Types/Password.test.ts +363 -0
- package/Tests/UI/Components/ConfirmModal.test.tsx +7 -0
- package/Tests/UI/Components/ErrorBoundary.test.tsx +53 -0
- package/Tests/UI/Components/Modal.test.tsx +281 -1
- package/Tests/UI/Components/ObjectIdFilterPipeline.test.tsx +396 -0
- package/Tests/UI/Components/StatusPage/ResourceGroupNavigator.test.tsx +1147 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +116 -1
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +2 -0
- package/Tests/Utils/Analytics.test.ts +23 -0
- package/Tests/Utils/Dashboard/Components/DashboardDataSourceComponents.test.ts +640 -0
- package/Tests/Utils/DataSource/DataSourceQueryText.test.ts +138 -0
- package/Tests/Utils/DataSource/DataSourceValueReducer.test.ts +526 -0
- package/Tests/Utils/Metrics/MetricResourceAttributeUtil.test.ts +691 -0
- package/Tests/Utils/StatusPage/GroupHierarchyView.test.ts +1452 -0
- package/Tests/Utils/StatusPage/ResourceExplorer.test.ts +931 -0
- package/Tests/Utils/Telemetry/CaptureSpanExportGating.test.ts +288 -0
- package/Tests/Utils/Telemetry/IngestionTimestamp.test.ts +170 -0
- package/Types/AI/AIInsightEvidence.ts +6 -0
- package/Types/Analytics/RevenueEvent.ts +31 -0
- package/Types/Dashboard/DashboardComponentType.ts +31 -0
- package/Types/Dashboard/DashboardComponents/DashboardDataSourceChartComponent.ts +27 -0
- package/Types/Dashboard/DashboardComponents/DashboardDataSourceGaugeComponent.ts +32 -0
- package/Types/Dashboard/DashboardComponents/DashboardDataSourceTableComponent.ts +30 -0
- package/Types/Dashboard/DashboardComponents/DashboardDataSourceValueComponent.ts +55 -0
- package/Types/DataSource/DataSourceLimits.ts +62 -0
- package/Types/DataSource/DataSourceQueryConfig.ts +41 -0
- package/Types/DataSource/DataSourceTableResult.ts +38 -0
- package/Types/DataSource/DataSourceType.ts +213 -0
- package/Types/Date.ts +43 -3
- package/Types/Password.ts +64 -0
- package/Types/Permission.ts +46 -0
- package/Types/UserAuthenticationStatus.ts +34 -0
- package/UI/Components/Button/Button.tsx +1 -1
- package/UI/Components/ErrorBoundary.tsx +459 -108
- package/UI/Components/Icon/Icon.tsx +10 -9
- package/UI/Components/Modal/ConfirmModal.tsx +6 -1
- package/UI/Components/Modal/Modal.tsx +267 -35
- package/UI/Components/Modal/ModalFooter.tsx +6 -1
- package/UI/Components/MoreMenu/MoreMenu.tsx +19 -4
- package/UI/Components/MoreMenu/MoreMenuItem.tsx +6 -1
- package/UI/Components/StatusPage/ResourceGrid.tsx +314 -0
- package/UI/Components/StatusPage/ResourceGroupNavigator.tsx +808 -0
- package/UI/Components/StatusPage/ResourceList.tsx +570 -0
- package/UI/Styles/Theme.css +18 -0
- package/UI/Utils/API/RequestOptions.ts +7 -0
- package/UI/Utils/AnalyticsModelAPI/AnalyticsModelAPI.ts +1 -0
- package/UI/Utils/ModelAPI/ModelAPI.ts +1 -0
- package/UI/Utils/TestDataSource.ts +61 -0
- package/UI/esbuild-config.js +45 -0
- package/Utils/Analytics.ts +15 -0
- package/Utils/Dashboard/Components/DashboardDataSourceChartComponent.ts +88 -0
- package/Utils/Dashboard/Components/DashboardDataSourceGaugeComponent.ts +123 -0
- package/Utils/Dashboard/Components/DashboardDataSourceShared.ts +16 -0
- package/Utils/Dashboard/Components/DashboardDataSourceTableComponent.ts +72 -0
- package/Utils/Dashboard/Components/DashboardDataSourceValueComponent.ts +126 -0
- package/Utils/Dashboard/Components/Index.ts +28 -0
- package/Utils/DataSource/DataSourceQueryText.ts +94 -0
- package/Utils/DataSource/DataSourceValueReducer.ts +156 -0
- package/Utils/Metrics/MetricResourceAttributeUtil.ts +380 -0
- package/Utils/NetworkDiscovery/ScanTargetUtil.ts +8 -6
- package/Utils/StatusPage/GroupHierarchyView.ts +931 -0
- package/Utils/StatusPage/ResourceExplorer.ts +853 -0
- package/build/dist/Models/DatabaseModels/AIRun.js +34 -0
- package/build/dist/Models/DatabaseModels/AIRun.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DataSource.js +774 -0
- package/build/dist/Models/DatabaseModels/DataSource.js.map +1 -0
- package/build/dist/Models/DatabaseModels/Index.js +2 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProjectCallSMSConfig.js +14 -4
- package/build/dist/Models/DatabaseModels/ProjectCallSMSConfig.js.map +1 -1
- package/build/dist/Models/DatabaseModels/User.js +2 -0
- package/build/dist/Models/DatabaseModels/User.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserOnCallLog.js +2 -0
- package/build/dist/Models/DatabaseModels/UserOnCallLog.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserOnCallLogTimeline.js +2 -0
- package/build/dist/Models/DatabaseModels/UserOnCallLogTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserSession.js +2 -0
- package/build/dist/Models/DatabaseModels/UserSession.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserTotpAuth.js +6 -4
- package/build/dist/Models/DatabaseModels/UserTotpAuth.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserWebAuthn.js +5 -3
- package/build/dist/Models/DatabaseModels/UserWebAuthn.js.map +1 -1
- package/build/dist/Server/API/AIInsightAPI.js +34 -4
- package/build/dist/Server/API/AIInsightAPI.js.map +1 -1
- package/build/dist/Server/API/AIInvestigationAPI.js +23 -0
- package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
- package/build/dist/Server/API/DashboardAPI.js +119 -433
- package/build/dist/Server/API/DashboardAPI.js.map +1 -1
- package/build/dist/Server/API/DataSourceAPI.js +173 -0
- package/build/dist/Server/API/DataSourceAPI.js.map +1 -0
- package/build/dist/Server/API/StatusPageAPI.js +11 -1
- package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
- package/build/dist/Server/API/UserAPI.js +94 -2
- package/build/dist/Server/API/UserAPI.js.map +1 -1
- package/build/dist/Server/Infrastructure/ClickhouseConfig.js +49 -0
- package/build/dist/Server/Infrastructure/ClickhouseConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786303472848-AddDataSourceTable.js +20 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786303472848-AddDataSourceTable.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786600000000-AddInvestigationAnalysisTldr.js +19 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786600000000-AddInvestigationAnalysisTldr.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786700000000-DropProjectCallSMSConfigCredentialUniques.js +64 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786700000000-DropProjectCallSMSConfigCredentialUniques.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +6 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Infrastructure/Queue.js +27 -0
- package/build/dist/Server/Infrastructure/Queue.js.map +1 -1
- package/build/dist/Server/Infrastructure/QueueWorker.js +13 -0
- package/build/dist/Server/Infrastructure/QueueWorker.js.map +1 -1
- package/build/dist/Server/Middleware/TelemetryIngest.js +8 -3
- package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
- package/build/dist/Server/Services/AIInsightService.js +110 -10
- package/build/dist/Server/Services/AIInsightService.js.map +1 -1
- package/build/dist/Server/Services/AIRunService.js +34 -0
- package/build/dist/Server/Services/AIRunService.js.map +1 -1
- package/build/dist/Server/Services/AIService.js +16 -2
- package/build/dist/Server/Services/AIService.js.map +1 -1
- package/build/dist/Server/Services/AlertService.js +28 -35
- package/build/dist/Server/Services/AlertService.js.map +1 -1
- package/build/dist/Server/Services/AnalyticsDatabaseService.js +8 -4
- package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
- package/build/dist/Server/Services/DataSourceService.js +159 -0
- package/build/dist/Server/Services/DataSourceService.js.map +1 -0
- package/build/dist/Server/Services/HostService.js +74 -0
- package/build/dist/Server/Services/HostService.js.map +1 -1
- package/build/dist/Server/Services/IncidentService.js +35 -24
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +2 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +45 -0
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/MonitorStatusService.js +129 -0
- package/build/dist/Server/Services/MonitorStatusService.js.map +1 -1
- package/build/dist/Server/Services/OpenTelemetryIngestService.js +222 -159
- package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
- package/build/dist/Server/Services/RumSessionPinService.js +7 -15
- package/build/dist/Server/Services/RumSessionPinService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageSubscriberService.js +10 -0
- package/build/dist/Server/Services/StatusPageSubscriberService.js.map +1 -1
- package/build/dist/Server/Services/UserService.js +241 -10
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/BasePermission.js +6 -0
- package/build/dist/Server/Types/Database/Permissions/BasePermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/DeletePermission.js +1 -0
- package/build/dist/Server/Types/Database/Permissions/DeletePermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/ReadPermission.js +2 -0
- package/build/dist/Server/Types/Database/Permissions/ReadPermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/TenantPermission.js +68 -12
- package/build/dist/Server/Types/Database/Permissions/TenantPermission.js.map +1 -1
- package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js +2 -2
- package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +68 -8
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js +1 -0
- package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js +1 -0
- package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionIdentity.js +97 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionIdentity.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js +17 -15
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js +178 -54
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/Insights/InsightStore.js +65 -16
- package/build/dist/Server/Utils/AI/SRE/Insights/InsightStore.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/InvestigationTldr.js +303 -0
- package/build/dist/Server/Utils/AI/SRE/InvestigationTldr.js.map +1 -0
- package/build/dist/Server/Utils/AnalyticsDatabase/InsertDedupContext.js.map +1 -1
- package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js +1261 -0
- package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js.map +1 -0
- package/build/dist/Server/Utils/Dashboard/PublicDashboardViewConfig.js +47 -0
- package/build/dist/Server/Utils/Dashboard/PublicDashboardViewConfig.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/ConnectorRegistry.js +42 -0
- package/build/dist/Server/Utils/DataSource/ConnectorRegistry.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/Connectors/ClickHouseConnector.js +187 -0
- package/build/dist/Server/Utils/DataSource/Connectors/ClickHouseConnector.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/Connectors/ElasticsearchConnector.js +493 -0
- package/build/dist/Server/Utils/DataSource/Connectors/ElasticsearchConnector.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/Connectors/LokiConnector.js +399 -0
- package/build/dist/Server/Utils/DataSource/Connectors/LokiConnector.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/Connectors/MySqlConnector.js +195 -0
- package/build/dist/Server/Utils/DataSource/Connectors/MySqlConnector.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/Connectors/PostgresConnector.js +149 -0
- package/build/dist/Server/Utils/DataSource/Connectors/PostgresConnector.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/Connectors/PrometheusConnector.js +362 -0
- package/build/dist/Server/Utils/DataSource/Connectors/PrometheusConnector.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/Connectors/RestApiConnector.js +342 -0
- package/build/dist/Server/Utils/DataSource/Connectors/RestApiConnector.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/Connectors/SqlServerConnector.js +186 -0
- package/build/dist/Server/Utils/DataSource/Connectors/SqlServerConnector.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/EgressGuard.js +305 -0
- package/build/dist/Server/Utils/DataSource/EgressGuard.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/HttpFetch.js +134 -0
- package/build/dist/Server/Utils/DataSource/HttpFetch.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/SqlQueryGuard.js +331 -0
- package/build/dist/Server/Utils/DataSource/SqlQueryGuard.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/SqlResultShaper.js +280 -0
- package/build/dist/Server/Utils/DataSource/SqlResultShaper.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/Types.js +2 -0
- package/build/dist/Server/Utils/DataSource/Types.js.map +1 -0
- package/build/dist/Server/Utils/Database/PostgresErrorTranslator.js +103 -9
- package/build/dist/Server/Utils/Database/PostgresErrorTranslator.js.map +1 -1
- package/build/dist/Server/Utils/InProcessMemo.js +113 -0
- package/build/dist/Server/Utils/InProcessMemo.js.map +1 -0
- package/build/dist/Server/Utils/InstanceHealth/TelemetryIngestion.js +406 -0
- package/build/dist/Server/Utils/InstanceHealth/TelemetryIngestion.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +34 -0
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorResource.js +14 -0
- package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
- package/build/dist/Server/Utils/Response.js +9 -1
- package/build/dist/Server/Utils/Response.js.map +1 -1
- package/build/dist/Server/Utils/SSRFProtection.js +192 -0
- package/build/dist/Server/Utils/SSRFProtection.js.map +1 -0
- package/build/dist/Server/Utils/StartServer.js +7 -0
- package/build/dist/Server/Utils/StartServer.js.map +1 -1
- package/build/dist/Server/Utils/StatusPageSubscriberWebhook.js +24 -0
- package/build/dist/Server/Utils/StatusPageSubscriberWebhook.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/CaptureSpan.js +25 -11
- package/build/dist/Server/Utils/Telemetry/CaptureSpan.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/IngestionTimestamp.js +32 -0
- package/build/dist/Server/Utils/Telemetry/IngestionTimestamp.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/ResourceHeartbeat.js +92 -5
- package/build/dist/Server/Utils/Telemetry/ResourceHeartbeat.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/Telemetry.js +92 -6
- package/build/dist/Server/Utils/Telemetry/Telemetry.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry.js +93 -6
- package/build/dist/Server/Utils/Telemetry.js.map +1 -1
- package/build/dist/Server/Utils/VendorAssets.js +121 -0
- package/build/dist/Server/Utils/VendorAssets.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +25 -4
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/Slack/Slack.js +5 -0
- package/build/dist/Server/Utils/Workspace/Slack/Slack.js.map +1 -1
- package/build/dist/Types/Analytics/RevenueEvent.js +26 -0
- package/build/dist/Types/Analytics/RevenueEvent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponentType.js +27 -0
- package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceChartComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceChartComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceGaugeComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceGaugeComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceTableComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceTableComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceValueComponent.js +16 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceValueComponent.js.map +1 -0
- package/build/dist/Types/DataSource/DataSourceLimits.js +47 -0
- package/build/dist/Types/DataSource/DataSourceLimits.js.map +1 -0
- package/build/dist/Types/DataSource/DataSourceQueryConfig.js +10 -0
- package/build/dist/Types/DataSource/DataSourceQueryConfig.js.map +1 -0
- package/build/dist/Types/DataSource/DataSourceTableResult.js +14 -0
- package/build/dist/Types/DataSource/DataSourceTableResult.js.map +1 -0
- package/build/dist/Types/DataSource/DataSourceType.js +183 -0
- package/build/dist/Types/DataSource/DataSourceType.js.map +1 -0
- package/build/dist/Types/Date.js +38 -3
- package/build/dist/Types/Date.js.map +1 -1
- package/build/dist/Types/Password.js +56 -0
- package/build/dist/Types/Password.js.map +1 -0
- package/build/dist/Types/Permission.js +42 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/UserAuthenticationStatus.js +2 -0
- package/build/dist/Types/UserAuthenticationStatus.js.map +1 -0
- package/build/dist/UI/Components/ErrorBoundary.js +388 -72
- package/build/dist/UI/Components/ErrorBoundary.js.map +1 -1
- package/build/dist/UI/Components/Icon/Icon.js +10 -4
- package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
- package/build/dist/UI/Components/Modal/ConfirmModal.js +1 -1
- package/build/dist/UI/Components/Modal/ConfirmModal.js.map +1 -1
- package/build/dist/UI/Components/Modal/Modal.js +178 -19
- package/build/dist/UI/Components/Modal/Modal.js.map +1 -1
- package/build/dist/UI/Components/Modal/ModalFooter.js +3 -1
- package/build/dist/UI/Components/Modal/ModalFooter.js.map +1 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenu.js +9 -6
- package/build/dist/UI/Components/MoreMenu/MoreMenu.js.map +1 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js +7 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js.map +1 -1
- package/build/dist/UI/Components/StatusPage/ResourceGrid.js +119 -0
- package/build/dist/UI/Components/StatusPage/ResourceGrid.js.map +1 -0
- package/build/dist/UI/Components/StatusPage/ResourceGroupNavigator.js +354 -0
- package/build/dist/UI/Components/StatusPage/ResourceGroupNavigator.js.map +1 -0
- package/build/dist/UI/Components/StatusPage/ResourceList.js +203 -0
- package/build/dist/UI/Components/StatusPage/ResourceList.js.map +1 -0
- package/build/dist/UI/Utils/AnalyticsModelAPI/AnalyticsModelAPI.js +1 -6
- package/build/dist/UI/Utils/AnalyticsModelAPI/AnalyticsModelAPI.js.map +1 -1
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js +3 -8
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js.map +1 -1
- package/build/dist/UI/Utils/TestDataSource.js +39 -0
- package/build/dist/UI/Utils/TestDataSource.js.map +1 -0
- package/build/dist/Utils/Analytics.js +4 -0
- package/build/dist/Utils/Analytics.js.map +1 -1
- package/build/dist/Utils/Dashboard/Components/DashboardDataSourceChartComponent.js +79 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDataSourceChartComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDataSourceGaugeComponent.js +111 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDataSourceGaugeComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDataSourceShared.js +15 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDataSourceShared.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDataSourceTableComponent.js +62 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDataSourceTableComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDataSourceValueComponent.js +112 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDataSourceValueComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/Index.js +16 -0
- package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
- package/build/dist/Utils/DataSource/DataSourceQueryText.js +64 -0
- package/build/dist/Utils/DataSource/DataSourceQueryText.js.map +1 -0
- package/build/dist/Utils/DataSource/DataSourceValueReducer.js +124 -0
- package/build/dist/Utils/DataSource/DataSourceValueReducer.js.map +1 -0
- package/build/dist/Utils/Metrics/MetricResourceAttributeUtil.js +281 -0
- package/build/dist/Utils/Metrics/MetricResourceAttributeUtil.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/ScanTargetUtil.js +8 -6
- package/build/dist/Utils/NetworkDiscovery/ScanTargetUtil.js.map +1 -1
- package/build/dist/Utils/StatusPage/GroupHierarchyView.js +560 -0
- package/build/dist/Utils/StatusPage/GroupHierarchyView.js.map +1 -0
- package/build/dist/Utils/StatusPage/ResourceExplorer.js +519 -0
- package/build/dist/Utils/StatusPage/ResourceExplorer.js.map +1 -0
- package/jest.config.json +1 -0
- package/package.json +5 -1
- package/tsconfig.json +12 -10
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import DatabaseConfig from "../DatabaseConfig";
|
|
2
2
|
import {
|
|
3
|
+
EncryptionSecret,
|
|
3
4
|
IsBillingEnabled,
|
|
4
5
|
NotificationSlackWebhookOnCreateUser,
|
|
5
6
|
} from "../EnvironmentConfig";
|
|
@@ -18,9 +19,12 @@ import UserNotificationSettingService from "./UserNotificationSettingService";
|
|
|
18
19
|
import UserSessionService from "./UserSessionService";
|
|
19
20
|
import { AccountsRoute } from "../../ServiceRoute";
|
|
20
21
|
import Hostname from "../../Types/API/Hostname";
|
|
22
|
+
import HTTPErrorResponse from "../../Types/API/HTTPErrorResponse";
|
|
23
|
+
import HTTPResponse from "../../Types/API/HTTPResponse";
|
|
21
24
|
import Protocol from "../../Types/API/Protocol";
|
|
22
25
|
import Route from "../../Types/API/Route";
|
|
23
26
|
import URL from "../../Types/API/URL";
|
|
27
|
+
import EmptyResponseData from "../../Types/API/EmptyResponse";
|
|
24
28
|
import DatabaseCommonInteractionProps from "../../Types/BaseDatabase/DatabaseCommonInteractionProps";
|
|
25
29
|
import LIMIT_MAX from "../../Types/Database/LimitMax";
|
|
26
30
|
import OneUptimeDate from "../../Types/Date";
|
|
@@ -43,6 +47,9 @@ import UserTotpAuthService from "./UserTotpAuthService";
|
|
|
43
47
|
import UserWebAuthn from "../../Models/DatabaseModels/UserWebAuthn";
|
|
44
48
|
import UserWebAuthnService from "./UserWebAuthnService";
|
|
45
49
|
import BadDataException from "../../Types/Exception/BadDataException";
|
|
50
|
+
import NotFoundException from "../../Types/Exception/NotFoundException";
|
|
51
|
+
import { getPasswordValidationError } from "../../Types/Password";
|
|
52
|
+
import UserAuthenticationStatus from "../../Types/UserAuthenticationStatus";
|
|
46
53
|
import Name from "../../Types/Name";
|
|
47
54
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
48
55
|
import Timezone from "../../Types/Timezone";
|
|
@@ -267,9 +274,7 @@ export class Service extends DatabaseService<Model> {
|
|
|
267
274
|
_id: true,
|
|
268
275
|
email: true,
|
|
269
276
|
},
|
|
270
|
-
props:
|
|
271
|
-
isRoot: true,
|
|
272
|
-
},
|
|
277
|
+
props: updateBy.props,
|
|
273
278
|
limit: LIMIT_MAX,
|
|
274
279
|
skip: 0,
|
|
275
280
|
});
|
|
@@ -286,9 +291,7 @@ export class Service extends DatabaseService<Model> {
|
|
|
286
291
|
_id: true,
|
|
287
292
|
email: true,
|
|
288
293
|
},
|
|
289
|
-
props:
|
|
290
|
-
isRoot: true,
|
|
291
|
-
},
|
|
294
|
+
props: updateBy.props,
|
|
292
295
|
limit: LIMIT_MAX,
|
|
293
296
|
skip: 0,
|
|
294
297
|
});
|
|
@@ -343,9 +346,7 @@ export class Service extends DatabaseService<Model> {
|
|
|
343
346
|
select: {
|
|
344
347
|
_id: true,
|
|
345
348
|
},
|
|
346
|
-
props:
|
|
347
|
-
isRoot: true,
|
|
348
|
-
},
|
|
349
|
+
props: deleteBy.props,
|
|
349
350
|
limit: LIMIT_MAX,
|
|
350
351
|
skip: 0,
|
|
351
352
|
});
|
|
@@ -725,6 +726,276 @@ export class Service extends DatabaseService<Model> {
|
|
|
725
726
|
});
|
|
726
727
|
}
|
|
727
728
|
|
|
729
|
+
/**
|
|
730
|
+
* How this user authenticates today, for an operator looking at their
|
|
731
|
+
* account. Runs as root because the caller is a master admin acting outside
|
|
732
|
+
* of any project, and is authorized by the route's middleware rather than by
|
|
733
|
+
* tenant permissions.
|
|
734
|
+
*
|
|
735
|
+
* Throws NotFoundException rather than returning null so that every caller
|
|
736
|
+
* reports "no such user" the same way instead of each inventing its own.
|
|
737
|
+
*/
|
|
738
|
+
@CaptureSpan()
|
|
739
|
+
public async getAuthenticationStatus(
|
|
740
|
+
userId: ObjectID,
|
|
741
|
+
): Promise<UserAuthenticationStatus> {
|
|
742
|
+
const user: Model | null = await this.findOneBy({
|
|
743
|
+
query: {
|
|
744
|
+
_id: userId,
|
|
745
|
+
},
|
|
746
|
+
select: {
|
|
747
|
+
_id: true,
|
|
748
|
+
password: true,
|
|
749
|
+
isEmailVerified: true,
|
|
750
|
+
enableTwoFactorAuth: true,
|
|
751
|
+
resetPasswordToken: true,
|
|
752
|
+
resetPasswordExpires: true,
|
|
753
|
+
},
|
|
754
|
+
props: {
|
|
755
|
+
isRoot: true,
|
|
756
|
+
},
|
|
757
|
+
});
|
|
758
|
+
|
|
759
|
+
if (!user) {
|
|
760
|
+
throw new NotFoundException("User not found.");
|
|
761
|
+
}
|
|
762
|
+
|
|
763
|
+
/*
|
|
764
|
+
* An expired token is not a pending link: the row keeps the token until
|
|
765
|
+
* something overwrites it, so "the column is set" on its own would report
|
|
766
|
+
* a link that /reset-password would refuse.
|
|
767
|
+
*/
|
|
768
|
+
const hasPendingPasswordResetLink: boolean = Boolean(
|
|
769
|
+
user.resetPasswordToken &&
|
|
770
|
+
user.resetPasswordExpires &&
|
|
771
|
+
!OneUptimeDate.hasExpired(user.resetPasswordExpires),
|
|
772
|
+
);
|
|
773
|
+
|
|
774
|
+
return {
|
|
775
|
+
hasPassword: Boolean(user.password),
|
|
776
|
+
isEmailVerified: Boolean(user.isEmailVerified),
|
|
777
|
+
isTwoFactorAuthEnabled: Boolean(user.enableTwoFactorAuth),
|
|
778
|
+
hasPendingPasswordResetLink: hasPendingPasswordResetLink,
|
|
779
|
+
};
|
|
780
|
+
}
|
|
781
|
+
|
|
782
|
+
/**
|
|
783
|
+
* Set one user's password on their behalf. Used by the master-admin route
|
|
784
|
+
* behind Admin Dashboard > User > Authentication.
|
|
785
|
+
*
|
|
786
|
+
* Three things make this safe to expose:
|
|
787
|
+
*
|
|
788
|
+
* - the plaintext is handed to the write path as an UNHASHED HashedString,
|
|
789
|
+
* which is what makes `sanitizeCreateOrUpdate` mint a fresh per-user salt
|
|
790
|
+
* and run scrypt over it. Pre-hashing here, or passing a bare string,
|
|
791
|
+
* would be rejected by that same code (see DatabaseService's salted-column
|
|
792
|
+
* guard) precisely because it would strand the row's salt;
|
|
793
|
+
* - any outstanding reset link is invalidated in the SAME statement. A link
|
|
794
|
+
* mailed before the admin intervened must not still be able to change the
|
|
795
|
+
* password afterwards;
|
|
796
|
+
* - session revocation and the "Password Changed." email are NOT done here.
|
|
797
|
+
* `onUpdateSuccess` already does both for any update that carries a
|
|
798
|
+
* password, and doing it again would send the user two identical emails.
|
|
799
|
+
*/
|
|
800
|
+
@CaptureSpan()
|
|
801
|
+
public async setPassword(data: {
|
|
802
|
+
userId: ObjectID;
|
|
803
|
+
password: string;
|
|
804
|
+
}): Promise<void> {
|
|
805
|
+
const validationError: string | null = getPasswordValidationError(
|
|
806
|
+
data.password,
|
|
807
|
+
);
|
|
808
|
+
|
|
809
|
+
if (validationError) {
|
|
810
|
+
throw new BadDataException(validationError);
|
|
811
|
+
}
|
|
812
|
+
|
|
813
|
+
const user: Model | null = await this.findOneBy({
|
|
814
|
+
query: {
|
|
815
|
+
_id: data.userId,
|
|
816
|
+
},
|
|
817
|
+
select: {
|
|
818
|
+
_id: true,
|
|
819
|
+
email: true,
|
|
820
|
+
},
|
|
821
|
+
props: {
|
|
822
|
+
isRoot: true,
|
|
823
|
+
},
|
|
824
|
+
});
|
|
825
|
+
|
|
826
|
+
if (!user) {
|
|
827
|
+
throw new NotFoundException("User not found.");
|
|
828
|
+
}
|
|
829
|
+
|
|
830
|
+
await this.updateOneById({
|
|
831
|
+
id: user.id!,
|
|
832
|
+
data: {
|
|
833
|
+
password: new HashedString(data.password),
|
|
834
|
+
resetPasswordToken: null!,
|
|
835
|
+
resetPasswordExpires: null!,
|
|
836
|
+
},
|
|
837
|
+
props: {
|
|
838
|
+
isRoot: true,
|
|
839
|
+
},
|
|
840
|
+
});
|
|
841
|
+
|
|
842
|
+
logger.info(
|
|
843
|
+
`Password set by a master admin for user: ${user.id!.toString()}`,
|
|
844
|
+
);
|
|
845
|
+
}
|
|
846
|
+
|
|
847
|
+
/**
|
|
848
|
+
* Mint a fresh password-reset link for a user and email it to them.
|
|
849
|
+
*
|
|
850
|
+
* Produces exactly the link the public /forgot-password endpoint produces --
|
|
851
|
+
* same token minting, same hashed-at-rest storage, same 24 hour expiry, same
|
|
852
|
+
* /accounts/reset-password/<token> shape -- so the link an operator sends
|
|
853
|
+
* from the Admin Dashboard is redeemed by the ordinary reset-password page
|
|
854
|
+
* with no second code path behind it. Identity's /forgot-password keeps its
|
|
855
|
+
* own copy of this because it differs around the edges (it finds the user by
|
|
856
|
+
* a typed email, refuses accounts with no password, and answers success
|
|
857
|
+
* without waiting for the mail); if either changes the token scheme, both
|
|
858
|
+
* must move together.
|
|
859
|
+
*
|
|
860
|
+
* Only the SHA-256 of the token is stored. The token itself exists just long
|
|
861
|
+
* enough to be put in the email, so a leaked database row cannot be replayed
|
|
862
|
+
* as a reset link. It is hashed unsalted on purpose: /reset-password looks
|
|
863
|
+
* the row up BY that hash, which a per-row salt would make impossible, and a
|
|
864
|
+
* generated ObjectID has enough entropy that there is nothing to guess.
|
|
865
|
+
*/
|
|
866
|
+
@CaptureSpan()
|
|
867
|
+
public async sendPasswordResetLink(data: {
|
|
868
|
+
userId: ObjectID;
|
|
869
|
+
}): Promise<Email> {
|
|
870
|
+
const user: Model | null = await this.findOneBy({
|
|
871
|
+
query: {
|
|
872
|
+
_id: data.userId,
|
|
873
|
+
},
|
|
874
|
+
select: {
|
|
875
|
+
_id: true,
|
|
876
|
+
email: true,
|
|
877
|
+
},
|
|
878
|
+
props: {
|
|
879
|
+
isRoot: true,
|
|
880
|
+
},
|
|
881
|
+
});
|
|
882
|
+
|
|
883
|
+
if (!user) {
|
|
884
|
+
throw new NotFoundException("User not found.");
|
|
885
|
+
}
|
|
886
|
+
|
|
887
|
+
/*
|
|
888
|
+
* `email` is a NOT NULL column, so this is unreachable through the
|
|
889
|
+
* database -- it is here because the alternative is a non-null assertion
|
|
890
|
+
* on the address we are about to mail a password-reset link to, and being
|
|
891
|
+
* wrong about that would send the link somewhere unintended.
|
|
892
|
+
*/
|
|
893
|
+
if (!user.email) {
|
|
894
|
+
throw new BadDataException(
|
|
895
|
+
"This user has no email address, so a password reset link cannot be sent to them.",
|
|
896
|
+
);
|
|
897
|
+
}
|
|
898
|
+
|
|
899
|
+
const token: string = ObjectID.generate().toString();
|
|
900
|
+
|
|
901
|
+
const hashedToken: string = await HashedString.hashValue(
|
|
902
|
+
token,
|
|
903
|
+
EncryptionSecret,
|
|
904
|
+
);
|
|
905
|
+
|
|
906
|
+
await this.updateOneById({
|
|
907
|
+
id: data.userId,
|
|
908
|
+
data: {
|
|
909
|
+
resetPasswordToken: hashedToken,
|
|
910
|
+
resetPasswordExpires: OneUptimeDate.getOneDayAfter(),
|
|
911
|
+
},
|
|
912
|
+
props: {
|
|
913
|
+
isRoot: true,
|
|
914
|
+
},
|
|
915
|
+
});
|
|
916
|
+
|
|
917
|
+
const host: Hostname = await DatabaseConfig.getHost();
|
|
918
|
+
const httpProtocol: Protocol = await DatabaseConfig.getHttpProtocol();
|
|
919
|
+
|
|
920
|
+
const tokenVerifyUrl: string = new URL(
|
|
921
|
+
httpProtocol,
|
|
922
|
+
host,
|
|
923
|
+
new Route(AccountsRoute.toString()).addRoute("/reset-password/" + token),
|
|
924
|
+
).toString();
|
|
925
|
+
|
|
926
|
+
/*
|
|
927
|
+
* Awaited, unlike most MailService calls in this file. The caller is a
|
|
928
|
+
* human who just pressed "send password reset link" and needs to be told
|
|
929
|
+
* if the instance cannot send mail -- reporting success and dropping the
|
|
930
|
+
* email would leave them waiting for a link that is never coming.
|
|
931
|
+
*/
|
|
932
|
+
try {
|
|
933
|
+
const mailResponse: HTTPResponse<EmptyResponseData> =
|
|
934
|
+
await MailService.sendMail({
|
|
935
|
+
toEmail: user.email,
|
|
936
|
+
subject: "Password Reset Request for OneUptime",
|
|
937
|
+
templateType: EmailTemplateType.ForgotPassword,
|
|
938
|
+
vars: {
|
|
939
|
+
homeURL: new URL(httpProtocol, host).toString(),
|
|
940
|
+
tokenVerifyUrl: tokenVerifyUrl,
|
|
941
|
+
},
|
|
942
|
+
});
|
|
943
|
+
|
|
944
|
+
/*
|
|
945
|
+
* Awaiting is not enough on its own. MailService.sendMail is an HTTP
|
|
946
|
+
* call to the notification service, and the API client only REJECTS
|
|
947
|
+
* when no response came back at all (connection refused, timeout). A
|
|
948
|
+
* response that says no -- 400 "Global SMTP Config not found" on an
|
|
949
|
+
* instance with no mail set up, an auth failure, a rejected recipient --
|
|
950
|
+
* arrives as a RESOLVED HTTPErrorResponse, which type-checks as an
|
|
951
|
+
* HTTPResponse and would sail straight past a bare try/catch.
|
|
952
|
+
*
|
|
953
|
+
* That is the common failure, not the exotic one, so it has to be
|
|
954
|
+
* turned back into a throw for the rollback below to mean anything.
|
|
955
|
+
*/
|
|
956
|
+
if (mailResponse instanceof HTTPErrorResponse) {
|
|
957
|
+
throw new BadDataException(
|
|
958
|
+
`Could not send the password reset email: ${mailResponse.message}`,
|
|
959
|
+
);
|
|
960
|
+
}
|
|
961
|
+
} catch (err) {
|
|
962
|
+
/*
|
|
963
|
+
* The token was written before the send, so a failed send would
|
|
964
|
+
* otherwise leave a live 24 hour link on the row that nobody ever
|
|
965
|
+
* received -- and the Authentication page would then report "reset link
|
|
966
|
+
* pending" directly underneath the error saying it could not be sent.
|
|
967
|
+
* Take it back off so the record matches what the operator was told.
|
|
968
|
+
*
|
|
969
|
+
* Best-effort, and it never masks the mail failure: that is the error
|
|
970
|
+
* worth reporting, and an orphaned token expires on its own anyway.
|
|
971
|
+
*/
|
|
972
|
+
await this.updateOneById({
|
|
973
|
+
id: data.userId,
|
|
974
|
+
data: {
|
|
975
|
+
resetPasswordToken: null!,
|
|
976
|
+
resetPasswordExpires: null!,
|
|
977
|
+
},
|
|
978
|
+
props: {
|
|
979
|
+
isRoot: true,
|
|
980
|
+
},
|
|
981
|
+
}).catch((clearError: Error) => {
|
|
982
|
+
logger.error(
|
|
983
|
+
`Failed to clear the unsent password reset token for user ${data.userId.toString()}; it will expire on its own.`,
|
|
984
|
+
);
|
|
985
|
+
logger.error(clearError);
|
|
986
|
+
});
|
|
987
|
+
|
|
988
|
+
throw err;
|
|
989
|
+
}
|
|
990
|
+
|
|
991
|
+
logger.info(
|
|
992
|
+
`Password reset link sent by a master admin to user: ${data.userId.toString()}`,
|
|
993
|
+
);
|
|
994
|
+
|
|
995
|
+
// Returned so the caller can tell the operator where the link went.
|
|
996
|
+
return user.email;
|
|
997
|
+
}
|
|
998
|
+
|
|
728
999
|
public async getTimezoneForUser(userId: ObjectID): Promise<Timezone | null> {
|
|
729
1000
|
const user: Model | null = await this.findOneBy({
|
|
730
1001
|
query: {
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Vendored browser assets
|
|
2
|
+
|
|
3
|
+
Third-party browser assets that server-rendered OneUptime pages used to pull
|
|
4
|
+
from a public CDN. They live here, in the repo, because a self-hosted install
|
|
5
|
+
is not guaranteed to have outbound internet access - and when it does not, a
|
|
6
|
+
CDN `<script>` does not degrade, it hangs. See
|
|
7
|
+
https://github.com/OneUptime/oneuptime/issues/2570.
|
|
8
|
+
|
|
9
|
+
Every service mounts this directory read-only at `/oneuptime-assets` (see
|
|
10
|
+
`Common/Server/Utils/VendorAssets.ts`). Reference the files from a view by that
|
|
11
|
+
absolute path, never by a CDN URL -
|
|
12
|
+
`Common/Tests/Server/Utils/OfflineAssetHygiene.test.ts` fails the build on a CDN
|
|
13
|
+
URL in any `.ejs` under `Common/Server/Views`, `App/FeatureSet/*/{Views,views}`
|
|
14
|
+
or `Home/Views`.
|
|
15
|
+
|
|
16
|
+
## Contents
|
|
17
|
+
|
|
18
|
+
| Path | Source |
|
|
19
|
+
| -------------------------- | ----------------------------------------------------------- |
|
|
20
|
+
| `tailwind/tailwind-3.4.5.js` | Tailwind Play CDN build 3.4.5 |
|
|
21
|
+
| `highlight/` | highlight.js 11.11.1, from cdnjs |
|
|
22
|
+
| `fonts/InterVariable.woff2` | Inter variable font, byte-identical to the copies under `App/FeatureSet/{Docs,APIReference}/Static/fonts/` |
|
|
23
|
+
|
|
24
|
+
The Tailwind file is the **only** copy in the tree. The five frontends used to
|
|
25
|
+
commit one each; `Common/UI/esbuild-config.js` now copies this one into each
|
|
26
|
+
`public/assets/js/` at build time, next to where it already copies Monaco, and
|
|
27
|
+
the built copies are gitignored. Their `index.ejs` still loads it from their own
|
|
28
|
+
prefix (`/dashboard/assets/js/...`) rather than through `/oneuptime-assets` - the
|
|
29
|
+
URLs did not change, only where the bytes come from.
|
|
30
|
+
|
|
31
|
+
Renaming it means editing five `index.ejs` files to match, so the version stays
|
|
32
|
+
in the filename and `TAILWIND_FILENAME` in the esbuild config.
|
|
33
|
+
|
|
34
|
+
Mermaid is not vendored here. It is already a dependency of `Common`, so
|
|
35
|
+
`VendorAssets.ts` serves `node_modules/mermaid/dist` at
|
|
36
|
+
`/oneuptime-assets/mermaid` instead - one version to keep current rather than
|
|
37
|
+
two, and none of the ~8 MB of lazily-loaded diagram chunks in git.
|
|
38
|
+
|
|
39
|
+
## Refreshing highlight.js
|
|
40
|
+
|
|
41
|
+
`highlight/languages` holds exactly the grammars the views ask for; the core
|
|
42
|
+
bundle already carries the rest of the common set. Adding a language to a view's
|
|
43
|
+
`langMap` means adding the matching file here, or that language silently stops
|
|
44
|
+
highlighting offline.
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
BASE="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1"
|
|
48
|
+
DEST="Common/Server/Static/Vendor/highlight"
|
|
49
|
+
|
|
50
|
+
curl -sSfL "$BASE/highlight.min.js" -o "$DEST/highlight.min.js"
|
|
51
|
+
|
|
52
|
+
for style in vs2015 github-dark; do
|
|
53
|
+
curl -sSfL "$BASE/styles/$style.min.css" -o "$DEST/styles/$style.min.css"
|
|
54
|
+
done
|
|
55
|
+
|
|
56
|
+
for language in $(ls "$DEST/languages" | sed 's/\.min\.js$//'); do
|
|
57
|
+
curl -sSfL "$BASE/languages/$language.min.js" -o "$DEST/languages/$language.min.js"
|
|
58
|
+
done
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Note that `hcl`/`terraform` is deliberately absent: highlight.js has never
|
|
62
|
+
shipped that grammar, so the request 404'd against the CDN too.
|
|
Binary file
|