@oneuptime/common 12.0.3 → 12.0.5
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 +38 -1
- package/Models/DatabaseModels/AlertFeed.ts +30 -0
- package/Models/DatabaseModels/CephCluster.ts +14 -0
- package/Models/DatabaseModels/CodeRepository.ts +14 -6
- package/Models/DatabaseModels/Dashboard.ts +28 -0
- package/Models/DatabaseModels/DockerHost.ts +14 -0
- package/Models/DatabaseModels/GlobalOidcProject.ts +18 -0
- package/Models/DatabaseModels/GlobalSsoProject.ts +18 -0
- package/Models/DatabaseModels/Incident.ts +2 -0
- package/Models/DatabaseModels/IncidentEpisode.ts +1 -0
- package/Models/DatabaseModels/IncidentEpisodePublicNote.ts +1 -0
- package/Models/DatabaseModels/IncidentEpisodeStateTimeline.ts +1 -0
- package/Models/DatabaseModels/IncidentFeed.ts +30 -0
- package/Models/DatabaseModels/IncidentPublicNote.ts +1 -0
- package/Models/DatabaseModels/IncidentStateTimeline.ts +1 -0
- package/Models/DatabaseModels/IoTFleet.ts +14 -0
- package/Models/DatabaseModels/KubernetesCluster.ts +14 -0
- package/Models/DatabaseModels/LogSavedView.ts +33 -0
- package/Models/DatabaseModels/NetworkDevice.ts +14 -0
- package/Models/DatabaseModels/NetworkInterface.ts +18 -0
- package/Models/DatabaseModels/Project.ts +247 -11
- package/Models/DatabaseModels/ProxmoxCluster.ts +14 -0
- package/Models/DatabaseModels/ScheduledMaintenance.ts +1 -0
- package/Models/DatabaseModels/ScheduledMaintenancePublicNote.ts +1 -0
- package/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.ts +1 -0
- package/Models/DatabaseModels/ScheduledMaintenanceTemplateOwnerUser.ts +4 -4
- package/Models/DatabaseModels/Service.ts +30 -0
- package/Models/DatabaseModels/StatusPage.ts +28 -0
- package/Models/DatabaseModels/StatusPageAnnouncement.ts +1 -0
- package/Models/DatabaseModels/StatusPagePrivateUser.ts +30 -0
- package/Models/DatabaseModels/User.ts +30 -0
- package/Server/API/AIAgentDataAPI.ts +75 -55
- package/Server/API/AIInvestigationAPI.ts +175 -17
- package/Server/API/DashboardAPI.ts +429 -22
- package/Server/API/GitHubAPI.ts +119 -283
- package/Server/API/StatusPageAPI.ts +38 -19
- package/Server/API/UserAPI.ts +263 -1
- package/Server/EnvironmentConfig.ts +23 -3
- package/Server/Infrastructure/ClickhouseConfig.ts +15 -1
- package/Server/Infrastructure/ClickhouseDatabase.ts +1 -1
- package/Server/Infrastructure/GlobalCache.ts +37 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786018109307-AddPerUserPasswordSalt.ts +21 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786023262402-WidenHashedStringColumnsForScrypt.ts +68 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786096660558-AddTimeRangeToLogSavedView.ts +27 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786100000000-RestoreServiceLowerNameIndex.ts +100 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786101798351-MigrationName.ts +89 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786105470826-MigrationName.ts +27 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786200000000-RestoreDroppedUniqueIndexes.ts +214 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786300000000-QuarantineUnboundGitHubInstallations.ts +69 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786400000000-AddMasterPasswordSalt.ts +40 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786500000000-AddInvestigationCodeFixRecommendation.ts +26 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +20 -0
- package/Server/Services/AIRunService.ts +78 -10
- package/Server/Services/AIService.ts +94 -22
- package/Server/Services/AlertFeedService.ts +5 -0
- package/Server/Services/AnalyticsDatabaseService.ts +101 -1
- package/Server/Services/CodeRepositoryService.ts +105 -2
- package/Server/Services/DatabaseService.ts +227 -3
- package/Server/Services/IncidentFeedService.ts +5 -0
- package/Server/Services/LlmLogService.ts +46 -2
- package/Server/Services/OpenTelemetryIngestService.ts +230 -26
- package/Server/Services/UserService.ts +184 -0
- package/Server/Utils/AI/Chat/ObservabilityAssistant.ts +6 -0
- package/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.ts +4 -0
- package/Server/Utils/AI/CodeFix/CodeFixReadiness.ts +8 -5
- package/Server/Utils/AI/CodeFix/FixRunBudget.ts +90 -16
- package/Server/Utils/AI/Remediation/RemediationExecutionRunner.ts +2 -0
- package/Server/Utils/AI/Remediation/RemediationPlanRunner.ts +2 -0
- package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +223 -22
- package/Server/Utils/AI/SRE/AlertInvestigationRunner.ts +25 -24
- package/Server/Utils/AI/SRE/ConfidenceSignal.ts +182 -71
- package/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.ts +252 -43
- package/Server/Utils/AI/SRE/IncidentInvestigationRunner.ts +25 -24
- package/Server/Utils/AI/SRE/InstrumentationTaskTrigger.ts +47 -13
- package/Server/Utils/AI/SRE/InvestigationGrader.ts +9 -5
- package/Server/Utils/AI/SRE/InvestigationQueue.ts +141 -24
- package/Server/Utils/AI/SRE/InvestigationSubjectLock.ts +66 -0
- package/Server/Utils/AI/SRE/PostedRootCause.ts +94 -3
- package/Server/Utils/AI/SRE/README.md +1 -1
- package/Server/Utils/AI/SRE/SubjectCodeFixRun.ts +132 -10
- package/Server/Utils/AI/Toolbox/CodeTools.ts +45 -4
- package/Server/Utils/AnalyticsDatabase/ClusterConfig.ts +24 -0
- package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +13 -0
- package/Server/Utils/CodeRepository/GitHub/GitHub.ts +157 -4
- package/Server/Utils/CodeRepository/GitHub/GitHubInstallationBinding.ts +130 -0
- package/Server/Utils/Monitor/Criteria/APIRequestCriteria.ts +29 -0
- package/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.ts +56 -0
- package/Server/Utils/Monitor/MonitorMetricUtil.ts +46 -0
- package/Server/Utils/Monitor/MonitorTemplateUtil.ts +1 -0
- package/Server/Utils/PasswordHash.ts +330 -0
- package/Tests/App/Dashboard/AIInvestigationHeaderStatus.test.tsx +251 -0
- package/Tests/App/Dashboard/EventStatusPanel.test.tsx +747 -0
- package/Tests/App/Dashboard/InvestigationFeedRefresh.test.tsx +480 -0
- package/Tests/App/Dashboard/InvestigationPanel.test.tsx +1184 -0
- package/Tests/App/Dashboard/InvestigationPanelStatus.test.tsx +500 -0
- package/Tests/App/Dashboard/OverviewCustomFields.test.tsx +333 -0
- package/Tests/App/Dashboard/PortMonitorCriteriaFilter.test.ts +93 -0
- package/Tests/App/Dashboard/UserCustomFields.test.tsx +392 -0
- package/Tests/App/StatusPage/PublicStatusPageAPIErrorHandling.test.ts +117 -0
- package/Tests/App/StatusPage/StatusPageModelAPIPolymorphism.test.ts +223 -0
- package/Tests/Models/DatabaseModels/PermissionCatalogueCoverage.test.ts +243 -0
- package/Tests/Server/API/AIAgentDataFixFromIncidentContext.test.ts +266 -0
- package/Tests/Server/API/AIAgentDataRepositoryToken.test.ts +381 -0
- package/Tests/Server/API/AIInvestigationAPI.test.ts +594 -0
- package/Tests/Server/API/AIInvestigationCreateFixTask.test.ts +80 -0
- package/Tests/Server/API/DashboardMasterPasswordAPI.test.ts +172 -1
- package/Tests/Server/API/DashboardPublicAttributeValuesAPI.test.ts +943 -0
- package/Tests/Server/API/DashboardPublicMetricsAggregateAPI.test.ts +1296 -0
- package/Tests/Server/API/DashboardPublicTemplatePayloads.test.ts +598 -0
- package/Tests/Server/API/GitHubAppInstallationBindingAPI.test.ts +539 -0
- package/Tests/Server/API/Helpers.ts +6 -1
- package/Tests/Server/API/StatusPageMasterPasswordAPI.test.ts +335 -0
- package/Tests/Server/API/UserProjectsAPI.test.ts +852 -0
- package/Tests/Server/Infrastructure/GlobalCache.test.ts +128 -0
- package/Tests/Server/Infrastructure/SemaphoreMutex.test.ts +215 -0
- package/Tests/Server/Services/AIRunCodeFixClaim.test.ts +59 -5
- package/Tests/Server/Services/AIRunHumanVerdict.test.ts +127 -58
- package/Tests/Server/Services/AIServiceDailyBudget.test.ts +396 -20
- package/Tests/Server/Services/AddMasterPasswordSaltMigration.test.ts +283 -0
- package/Tests/Server/Services/AddPerUserPasswordSaltMigration.test.ts +178 -0
- package/Tests/Server/Services/AnalyticsDatabasePaginationStability.test.ts +582 -0
- package/Tests/Server/Services/AnalyticsDatabaseService.test.ts +30 -1
- package/Tests/Server/Services/CodeRepositoryInstallationBinding.test.ts +305 -0
- package/Tests/Server/Services/CodeRepositoryResolutionBinding.test.ts +147 -0
- package/Tests/Server/Services/DatabaseServicePerUserPasswordSalt.test.ts +880 -0
- package/Tests/Server/Services/DatabaseServiceUpdateColumnsWithoutHooks.test.ts +54 -0
- package/Tests/Server/Services/FeedAIRunAssociation.test.ts +125 -0
- package/Tests/Server/Services/FixFromIncidentTaskTrigger.test.ts +418 -57
- package/Tests/Server/Services/InstrumentationTaskTrigger.test.ts +173 -14
- package/Tests/Server/Services/MasterPasswordScrypt.test.ts +567 -0
- package/Tests/Server/Services/OpenTelemetryServiceResolutionCache.test.ts +568 -0
- package/Tests/Server/Services/RestoreDroppedUniqueIndexesMigration.test.ts +386 -0
- package/Tests/Server/Services/RestoreServiceLowerNameIndexMigration.test.ts +240 -0
- package/Tests/Server/Services/SeparateIncidentAlertAiSettingsMigration.test.ts +194 -0
- package/Tests/Server/Services/UserServiceFirstMasterAdminElection.test.ts +885 -0
- package/Tests/Server/Services/WidenHashedStringColumnsForScryptMigration.test.ts +220 -0
- package/Tests/Server/Utils/AI/AIAlertGating.test.ts +37 -4
- package/Tests/Server/Utils/AI/AIConfidenceSignal.test.ts +330 -29
- package/Tests/Server/Utils/AI/AIIncidentGating.test.ts +25 -0
- package/Tests/Server/Utils/AI/AIInvestigationQueue.test.ts +293 -5
- package/Tests/Server/Utils/AI/CodeFixAgentCompletion.test.ts +59 -1
- package/Tests/Server/Utils/AI/CodeTools.test.ts +47 -1
- package/Tests/Server/Utils/AI/CodeWriteTools.test.ts +10 -0
- package/Tests/Server/Utils/AI/FixFromIncidentAutoTrigger.test.ts +342 -19
- package/Tests/Server/Utils/AI/FixRunBudget.test.ts +214 -30
- package/Tests/Server/Utils/AI/Insights/InvestigationQueueInsightSubject.test.ts +2 -0
- package/Tests/Server/Utils/AI/InvestigationGrader.test.ts +65 -17
- package/Tests/Server/Utils/AI/InvestigationQueueRemediationExecution.test.ts +3 -0
- package/Tests/Server/Utils/AI/InvestigationSettlement.test.ts +313 -20
- package/Tests/Server/Utils/AI/PostedRootCause.test.ts +254 -0
- package/Tests/Server/Utils/AI/RemediationExecutionRunner.test.ts +4 -0
- package/Tests/Server/Utils/AI/RemediationPlanRunner.test.ts +2 -0
- package/Tests/Server/Utils/AI/SubjectCodeFixRunDedupe.test.ts +44 -0
- package/Tests/Server/Utils/AnalyticsDatabase/ClusterAwareSchema.test.ts +30 -0
- package/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.ts +120 -0
- package/Tests/Server/Utils/CodeRepository/GitHubInstallationBinding.test.ts +292 -0
- package/Tests/Server/Utils/GitHubInstallationOwnershipVerification.test.ts +340 -0
- package/Tests/Server/Utils/GitHubWebhookAndTreeCacheIsolation.test.ts +250 -0
- package/Tests/Server/Utils/Monitor/Criteria/APIRequestCriteriaPortTimings.test.ts +212 -0
- package/Tests/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.test.ts +401 -0
- package/Tests/Server/Utils/Monitor/MonitorMetricUtilPortTimings.test.ts +243 -0
- package/Tests/Server/Utils/PasswordHash.test.ts +585 -0
- package/Tests/Types/Dashboard/DashboardTemplates.test.ts +111 -0
- package/Tests/Types/Database/ColumnLength.test.ts +7 -1
- package/Tests/Types/HashedStringPerUserSalt.test.ts +476 -0
- package/Tests/Types/Monitor/CephMetricCatalog.test.ts +104 -0
- package/Tests/Types/Monitor/CriteriaFilter.test.ts +4 -0
- package/Tests/Types/Monitor/DockerAlertTemplates.test.ts +293 -0
- package/Tests/Types/Monitor/DockerMetricCatalog.test.ts +109 -0
- package/Tests/Types/Monitor/DockerSwarmMetricCatalog.test.ts +118 -0
- package/Tests/Types/Monitor/HostAlertTemplates.test.ts +249 -0
- package/Tests/Types/Monitor/HostMetricCatalog.test.ts +104 -0
- package/Tests/Types/Monitor/IotAlertTemplates.test.ts +320 -0
- package/Tests/Types/Monitor/IotMetricCatalog.test.ts +104 -0
- package/Tests/Types/Monitor/KubernetesMetricCatalog.test.ts +118 -0
- package/Tests/Types/Monitor/MonitorCriteriaInstance.test.ts +42 -0
- package/Tests/Types/Monitor/MonitorStep.test.ts +38 -0
- package/Tests/Types/Monitor/MonitorStepDomainMonitor.test.ts +75 -0
- package/Tests/Types/Monitor/PodmanAlertTemplates.test.ts +271 -0
- package/Tests/Types/Monitor/PodmanMetricCatalog.test.ts +109 -0
- package/Tests/Types/Monitor/ProxmoxMetricCatalog.test.ts +107 -0
- package/Tests/Types/Monitor/SnmpMonitor/SnmpVendorTemplate.test.ts +151 -0
- package/Tests/Types/Permission.test.ts +137 -0
- package/Tests/Types/Rum/SessionReplayMaskingMode.test.ts +101 -0
- package/Tests/UI/Components/AiInvestigationSettingsCard.test.tsx +5 -5
- package/Tests/UI/Components/CardModelDetailEdit.test.tsx +3 -5
- package/Tests/UI/Components/CustomFields/CustomFieldsDetail.test.tsx +696 -0
- package/Tests/UI/Components/ErrorBoundary.test.tsx +158 -0
- package/Tests/UI/Components/FeedItemSafeMode.test.tsx +74 -0
- package/Tests/UI/Components/MoreMenu.test.tsx +756 -0
- package/Tests/UI/Components/StatusPage/ResourceGroupSection.test.tsx +62 -0
- package/Tests/UI/Monitor/PortMonitorView.test.tsx +237 -0
- package/Tests/UI/Telemetry/TelemetrySnapshotWindowAlert.test.tsx +91 -0
- package/Tests/UI/Utils/DownloadFile.test.ts +103 -0
- package/Tests/UI/Utils/ErrorSupportBundle.test.ts +582 -0
- package/Tests/UI/Utils/Project.test.ts +31 -0
- package/Tests/UI/Utils/StatusPageModelAPIInjection.test.ts +245 -0
- package/Tests/UI/Utils/UseDashboardGridDnd.test.tsx +820 -0
- package/Tests/UI/Utils/UserProjectsModelAPI.test.ts +714 -0
- package/Tests/Utils/Dashboard/DashboardViewConfig.test.ts +329 -0
- package/Tests/Utils/Dashboard/GridLayout.test.ts +951 -0
- package/Tests/Utils/Monitor/MonitorMetricType.test.ts +117 -0
- package/Tests/Utils/RecordingRuleExpression.test.ts +327 -0
- package/Tests/Utils/StatusPage/GroupNestingLayout.test.ts +186 -0
- package/Tests/Utils/StatusPage/GroupTree.test.ts +456 -0
- package/Tests/Utils/StatusPage/OverviewGroupHierarchyVisibility.test.ts +588 -0
- package/Tests/Utils/TeamMembersByProject.test.ts +655 -0
- package/Tests/Utils/Telemetry/SavedViewTimeRange.test.ts +244 -0
- package/Tests/Utils/Telemetry/TelemetryQueryTimeRange.test.ts +825 -0
- package/Types/AI/AIRunCodeFixRecommendation.ts +17 -0
- package/Types/AI/CodeFixTaskContext.ts +63 -3
- package/Types/AI/CodeFixTaskType.ts +3 -3
- package/Types/Database/ColumnLength.ts +9 -1
- package/Types/Database/TableColumn.ts +11 -0
- package/Types/Database/UnsynchronizedIndex.ts +48 -0
- package/Types/HashedString.ts +140 -4
- package/Types/Monitor/CriteriaFilter.ts +4 -0
- package/Types/Monitor/DomainMonitor/DomainLookupMethod.ts +23 -0
- package/Types/Monitor/DomainMonitor/DomainMonitorResponse.ts +7 -0
- package/Types/Monitor/MonitorCriteriaInstance.ts +24 -7
- package/Types/Monitor/MonitorMetricType.ts +8 -0
- package/Types/Monitor/MonitorStep.ts +10 -1
- package/Types/Monitor/MonitorStepDomainMonitor.ts +21 -0
- package/Types/Monitor/PortMonitor/PortMonitorTimings.ts +10 -0
- package/Types/Permission.ts +23 -175
- package/Types/Probe/ProbeMonitorResponse.ts +6 -0
- package/UI/Components/BulkUpdate/BulkUpdateForm.tsx +2 -3
- package/UI/Components/CustomFields/CustomFieldsDetail.tsx +85 -11
- package/UI/Components/ErrorBoundary.tsx +138 -11
- package/UI/Components/Feed/FeedItem.tsx +9 -2
- package/UI/Components/ModelDetail/CardModelDetail.tsx +0 -12
- package/UI/Components/ModelTable/BaseModelTable.tsx +1 -1
- package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +12 -2
- package/UI/Components/MoreMenu/MoreMenu.tsx +285 -97
- package/UI/Components/MoreMenu/MoreMenuItem.tsx +8 -5
- package/UI/Components/Navbar/NavBar.tsx +12 -2
- package/UI/Components/Navbar/NavBarMenuModal.tsx +19 -7
- package/UI/Utils/DownloadFile.ts +16 -8
- package/UI/Utils/ErrorSupportBundle.ts +805 -0
- package/UI/Utils/ModelAPI/ModelAPI.ts +19 -8
- package/UI/Utils/ModelAPI/UserProjectsModelAPI.ts +257 -0
- package/UI/Utils/Project.ts +4 -0
- package/UI/Utils/StatusPage.ts +8 -2
- package/UI/Utils/UseDashboardGridDnd.ts +917 -0
- package/Utils/Dashboard/DashboardViewConfig.ts +80 -36
- package/Utils/Dashboard/GridLayout.ts +523 -0
- package/Utils/Metrics/RecordingRuleExpression.ts +19 -17
- package/Utils/Monitor/MonitorMetricType.ts +44 -2
- package/Utils/StatusPage/GroupNestingLayout.ts +69 -0
- package/Utils/StatusPage/GroupTree.ts +157 -66
- package/Utils/StatusPage/ResourceUptime.ts +37 -2
- package/Utils/TeamMembersByProject.ts +237 -0
- package/Utils/Telemetry/SavedViewTimeRange.ts +114 -0
- package/Utils/Telemetry/TelemetryQueryTimeRange.ts +334 -0
- package/build/dist/Models/DatabaseModels/AIRun.js +39 -1
- package/build/dist/Models/DatabaseModels/AIRun.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertFeed.js +32 -0
- package/build/dist/Models/DatabaseModels/AlertFeed.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CephCluster.js +16 -1
- package/build/dist/Models/DatabaseModels/CephCluster.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CodeRepository.js +14 -6
- package/build/dist/Models/DatabaseModels/CodeRepository.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Dashboard.js +29 -0
- package/build/dist/Models/DatabaseModels/Dashboard.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DockerHost.js +16 -1
- package/build/dist/Models/DatabaseModels/DockerHost.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GlobalOidcProject.js +16 -1
- package/build/dist/Models/DatabaseModels/GlobalOidcProject.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GlobalSsoProject.js +16 -1
- package/build/dist/Models/DatabaseModels/GlobalSsoProject.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Incident.js +2 -0
- package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisode.js +1 -0
- package/build/dist/Models/DatabaseModels/IncidentEpisode.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodePublicNote.js +1 -0
- package/build/dist/Models/DatabaseModels/IncidentEpisodePublicNote.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodeStateTimeline.js +1 -0
- package/build/dist/Models/DatabaseModels/IncidentEpisodeStateTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentFeed.js +32 -0
- package/build/dist/Models/DatabaseModels/IncidentFeed.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentPublicNote.js +1 -0
- package/build/dist/Models/DatabaseModels/IncidentPublicNote.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentStateTimeline.js +1 -0
- package/build/dist/Models/DatabaseModels/IncidentStateTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IoTFleet.js +16 -1
- package/build/dist/Models/DatabaseModels/IoTFleet.js.map +1 -1
- package/build/dist/Models/DatabaseModels/KubernetesCluster.js +16 -1
- package/build/dist/Models/DatabaseModels/KubernetesCluster.js.map +1 -1
- package/build/dist/Models/DatabaseModels/LogSavedView.js +33 -0
- package/build/dist/Models/DatabaseModels/LogSavedView.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDevice.js +16 -1
- package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkInterface.js +16 -1
- package/build/dist/Models/DatabaseModels/NetworkInterface.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Project.js +257 -13
- package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProxmoxCluster.js +16 -1
- package/build/dist/Models/DatabaseModels/ProxmoxCluster.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +1 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenancePublicNote.js +1 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenancePublicNote.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.js +1 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplateOwnerUser.js +4 -4
- package/build/dist/Models/DatabaseModels/Service.js +28 -1
- package/build/dist/Models/DatabaseModels/Service.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPage.js +29 -0
- package/build/dist/Models/DatabaseModels/StatusPage.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js +1 -0
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPagePrivateUser.js +32 -0
- package/build/dist/Models/DatabaseModels/StatusPagePrivateUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/User.js +32 -0
- package/build/dist/Models/DatabaseModels/User.js.map +1 -1
- package/build/dist/Server/API/AIAgentDataAPI.js +49 -48
- package/build/dist/Server/API/AIAgentDataAPI.js.map +1 -1
- package/build/dist/Server/API/AIInvestigationAPI.js +111 -11
- package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
- package/build/dist/Server/API/DashboardAPI.js +312 -15
- package/build/dist/Server/API/DashboardAPI.js.map +1 -1
- package/build/dist/Server/API/GitHubAPI.js +94 -167
- package/build/dist/Server/API/GitHubAPI.js.map +1 -1
- package/build/dist/Server/API/StatusPageAPI.js +29 -11
- package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
- package/build/dist/Server/API/UserAPI.js +187 -2
- package/build/dist/Server/API/UserAPI.js.map +1 -1
- package/build/dist/Server/EnvironmentConfig.js +21 -3
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/ClickhouseConfig.js +12 -1
- package/build/dist/Server/Infrastructure/ClickhouseConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/ClickhouseDatabase.js +1 -1
- package/build/dist/Server/Infrastructure/ClickhouseDatabase.js.map +1 -1
- package/build/dist/Server/Infrastructure/GlobalCache.js +29 -0
- package/build/dist/Server/Infrastructure/GlobalCache.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786018109307-AddPerUserPasswordSalt.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786018109307-AddPerUserPasswordSalt.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786023262402-WidenHashedStringColumnsForScrypt.js +59 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786023262402-WidenHashedStringColumnsForScrypt.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786096660558-AddTimeRangeToLogSavedView.js +22 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786096660558-AddTimeRangeToLogSavedView.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786100000000-RestoreServiceLowerNameIndex.js +93 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786100000000-RestoreServiceLowerNameIndex.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786101798351-MigrationName.js +36 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786101798351-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786105470826-MigrationName.js +18 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786105470826-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786200000000-RestoreDroppedUniqueIndexes.js +101 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786200000000-RestoreDroppedUniqueIndexes.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786300000000-QuarantineUnboundGitHubInstallations.js +66 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786300000000-QuarantineUnboundGitHubInstallations.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786400000000-AddMasterPasswordSalt.js +19 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786400000000-AddMasterPasswordSalt.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786500000000-AddInvestigationCodeFixRecommendation.js +19 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786500000000-AddInvestigationCodeFixRecommendation.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +20 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Services/AIRunService.js +58 -12
- package/build/dist/Server/Services/AIRunService.js.map +1 -1
- package/build/dist/Server/Services/AIService.js +74 -21
- package/build/dist/Server/Services/AIService.js.map +1 -1
- package/build/dist/Server/Services/AlertFeedService.js +3 -0
- package/build/dist/Server/Services/AlertFeedService.js.map +1 -1
- package/build/dist/Server/Services/AnalyticsDatabaseService.js +86 -2
- package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
- package/build/dist/Server/Services/CodeRepositoryService.js +90 -2
- package/build/dist/Server/Services/CodeRepositoryService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +180 -3
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/IncidentFeedService.js +3 -0
- package/build/dist/Server/Services/IncidentFeedService.js.map +1 -1
- package/build/dist/Server/Services/LlmLogService.js +22 -1
- package/build/dist/Server/Services/LlmLogService.js.map +1 -1
- package/build/dist/Server/Services/OpenTelemetryIngestService.js +155 -25
- package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
- package/build/dist/Server/Services/UserService.js +165 -0
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js +3 -0
- package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js.map +1 -1
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js +4 -0
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js.map +1 -1
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixReadiness.js +8 -5
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixReadiness.js.map +1 -1
- package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js +63 -24
- package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js.map +1 -1
- package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js +2 -0
- package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js +2 -0
- package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +156 -28
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js +21 -19
- package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/ConfidenceSignal.js +128 -49
- package/build/dist/Server/Utils/AI/SRE/ConfidenceSignal.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.js +170 -31
- package/build/dist/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js +21 -19
- package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/InstrumentationTaskTrigger.js +33 -9
- package/build/dist/Server/Utils/AI/SRE/InstrumentationTaskTrigger.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js +9 -5
- package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js +121 -41
- package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/InvestigationSubjectLock.js +46 -0
- package/build/dist/Server/Utils/AI/SRE/InvestigationSubjectLock.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/PostedRootCause.js +61 -14
- package/build/dist/Server/Utils/AI/SRE/PostedRootCause.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/SubjectCodeFixRun.js +79 -1
- package/build/dist/Server/Utils/AI/SRE/SubjectCodeFixRun.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/CodeTools.js +31 -1
- package/build/dist/Server/Utils/AI/Toolbox/CodeTools.js.map +1 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/ClusterConfig.js +21 -0
- package/build/dist/Server/Utils/AnalyticsDatabase/ClusterConfig.js.map +1 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +13 -0
- package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHub.js +126 -4
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHub.js.map +1 -1
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubInstallationBinding.js +136 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubInstallationBinding.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/Criteria/APIRequestCriteria.js +20 -3
- package/build/dist/Server/Utils/Monitor/Criteria/APIRequestCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.js +43 -0
- package/build/dist/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +33 -0
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
- package/build/dist/Server/Utils/PasswordHash.js +258 -0
- package/build/dist/Server/Utils/PasswordHash.js.map +1 -0
- package/build/dist/Types/AI/AIRunCodeFixRecommendation.js +18 -0
- package/build/dist/Types/AI/AIRunCodeFixRecommendation.js.map +1 -0
- package/build/dist/Types/AI/CodeFixTaskContext.js +23 -3
- package/build/dist/Types/AI/CodeFixTaskContext.js.map +1 -1
- package/build/dist/Types/AI/CodeFixTaskType.js +3 -3
- package/build/dist/Types/Database/ColumnLength.js +9 -1
- package/build/dist/Types/Database/ColumnLength.js.map +1 -1
- package/build/dist/Types/Database/TableColumn.js.map +1 -1
- package/build/dist/Types/Database/UnsynchronizedIndex.js +46 -0
- package/build/dist/Types/Database/UnsynchronizedIndex.js.map +1 -0
- package/build/dist/Types/HashedString.js +96 -5
- package/build/dist/Types/HashedString.js.map +1 -1
- package/build/dist/Types/Monitor/CriteriaFilter.js +4 -0
- package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
- package/build/dist/Types/Monitor/DomainMonitor/DomainLookupMethod.js +24 -0
- package/build/dist/Types/Monitor/DomainMonitor/DomainLookupMethod.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +24 -7
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorMetricType.js +7 -0
- package/build/dist/Types/Monitor/MonitorMetricType.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js +6 -1
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepDomainMonitor.js +15 -0
- package/build/dist/Types/Monitor/MonitorStepDomainMonitor.js.map +1 -1
- package/build/dist/Types/Monitor/PortMonitor/PortMonitorTimings.js +2 -0
- package/build/dist/Types/Monitor/PortMonitor/PortMonitorTimings.js.map +1 -0
- package/build/dist/Types/Permission.js +23 -155
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js +2 -5
- package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js.map +1 -1
- package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js +51 -10
- package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js.map +1 -1
- package/build/dist/UI/Components/ErrorBoundary.js +67 -8
- package/build/dist/UI/Components/ErrorBoundary.js.map +1 -1
- package/build/dist/UI/Components/Feed/FeedItem.js +2 -2
- package/build/dist/UI/Components/Feed/FeedItem.js.map +1 -1
- package/build/dist/UI/Components/ModelDetail/CardModelDetail.js +0 -12
- package/build/dist/UI/Components/ModelDetail/CardModelDetail.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +12 -2
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenu.js +193 -65
- package/build/dist/UI/Components/MoreMenu/MoreMenu.js.map +1 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js +1 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBar.js +3 -1
- package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.js +19 -7
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.js.map +1 -1
- package/build/dist/UI/Utils/DownloadFile.js +15 -8
- package/build/dist/UI/Utils/DownloadFile.js.map +1 -1
- package/build/dist/UI/Utils/ErrorSupportBundle.js +476 -0
- package/build/dist/UI/Utils/ErrorSupportBundle.js.map +1 -0
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js +18 -8
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js.map +1 -1
- package/build/dist/UI/Utils/ModelAPI/UserProjectsModelAPI.js +156 -0
- package/build/dist/UI/Utils/ModelAPI/UserProjectsModelAPI.js.map +1 -0
- package/build/dist/UI/Utils/Project.js +3 -0
- package/build/dist/UI/Utils/Project.js.map +1 -1
- package/build/dist/UI/Utils/StatusPage.js +4 -4
- package/build/dist/UI/Utils/StatusPage.js.map +1 -1
- package/build/dist/UI/Utils/UseDashboardGridDnd.js +551 -0
- package/build/dist/UI/Utils/UseDashboardGridDnd.js.map +1 -0
- package/build/dist/Utils/Dashboard/DashboardViewConfig.js +42 -26
- package/build/dist/Utils/Dashboard/DashboardViewConfig.js.map +1 -1
- package/build/dist/Utils/Dashboard/GridLayout.js +338 -0
- package/build/dist/Utils/Dashboard/GridLayout.js.map +1 -0
- package/build/dist/Utils/Metrics/RecordingRuleExpression.js +19 -17
- package/build/dist/Utils/Metrics/RecordingRuleExpression.js.map +1 -1
- package/build/dist/Utils/Monitor/MonitorMetricType.js +38 -6
- package/build/dist/Utils/Monitor/MonitorMetricType.js.map +1 -1
- package/build/dist/Utils/StatusPage/GroupNestingLayout.js +46 -0
- package/build/dist/Utils/StatusPage/GroupNestingLayout.js.map +1 -1
- package/build/dist/Utils/StatusPage/GroupTree.js +79 -34
- package/build/dist/Utils/StatusPage/GroupTree.js.map +1 -1
- package/build/dist/Utils/StatusPage/ResourceUptime.js +22 -1
- package/build/dist/Utils/StatusPage/ResourceUptime.js.map +1 -1
- package/build/dist/Utils/TeamMembersByProject.js +145 -0
- package/build/dist/Utils/TeamMembersByProject.js.map +1 -0
- package/build/dist/Utils/Telemetry/SavedViewTimeRange.js +79 -0
- package/build/dist/Utils/Telemetry/SavedViewTimeRange.js.map +1 -0
- package/build/dist/Utils/Telemetry/TelemetryQueryTimeRange.js +236 -0
- package/build/dist/Utils/Telemetry/TelemetryQueryTimeRange.js.map +1 -0
- package/package.json +1 -1
|
@@ -36,6 +36,17 @@ export interface RequestOptions extends BaseRequestOptions {
|
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
export default class ModelAPI {
|
|
39
|
+
/**
|
|
40
|
+
* The API client used for model requests.
|
|
41
|
+
*
|
|
42
|
+
* Most applications use the authenticated dashboard client. Public-facing
|
|
43
|
+
* applications can override this accessor so a model request cannot inherit
|
|
44
|
+
* dashboard logout and redirect behavior merely because it reuses ModelAPI.
|
|
45
|
+
*/
|
|
46
|
+
protected static getApiClient(): typeof API {
|
|
47
|
+
return API;
|
|
48
|
+
}
|
|
49
|
+
|
|
39
50
|
public static async create<TBaseModel extends BaseModel>(data: {
|
|
40
51
|
model: TBaseModel;
|
|
41
52
|
modelType: { new (): TBaseModel };
|
|
@@ -43,7 +54,7 @@ export default class ModelAPI {
|
|
|
43
54
|
}): Promise<
|
|
44
55
|
HTTPResponse<JSONObject | JSONArray | TBaseModel | Array<TBaseModel>>
|
|
45
56
|
> {
|
|
46
|
-
return await
|
|
57
|
+
return await this.createOrUpdate({
|
|
47
58
|
model: data.model,
|
|
48
59
|
modelType: data.modelType,
|
|
49
60
|
formType: FormType.Create,
|
|
@@ -58,7 +69,7 @@ export default class ModelAPI {
|
|
|
58
69
|
}): Promise<
|
|
59
70
|
HTTPResponse<JSONObject | JSONArray | TBaseModel | Array<TBaseModel>>
|
|
60
71
|
> {
|
|
61
|
-
return await
|
|
72
|
+
return await this.createOrUpdate({
|
|
62
73
|
model: data.model,
|
|
63
74
|
modelType: data.modelType,
|
|
64
75
|
formType: FormType.Update,
|
|
@@ -92,7 +103,7 @@ export default class ModelAPI {
|
|
|
92
103
|
|
|
93
104
|
const result: HTTPResponse<
|
|
94
105
|
JSONObject | JSONArray | TBaseModel | Array<TBaseModel>
|
|
95
|
-
> = await
|
|
106
|
+
> = await this.getApiClient().fetch<
|
|
96
107
|
JSONObject | JSONArray | TBaseModel | Array<TBaseModel>
|
|
97
108
|
>({
|
|
98
109
|
method: HTTPMethod.PUT,
|
|
@@ -146,7 +157,7 @@ export default class ModelAPI {
|
|
|
146
157
|
}
|
|
147
158
|
|
|
148
159
|
const apiResult: HTTPErrorResponse | HTTPResponse<TBaseModel> =
|
|
149
|
-
await
|
|
160
|
+
await this.getApiClient().fetch<TBaseModel>({
|
|
150
161
|
method: httpMethod,
|
|
151
162
|
url: apiUrl,
|
|
152
163
|
data: {
|
|
@@ -223,7 +234,7 @@ export default class ModelAPI {
|
|
|
223
234
|
}
|
|
224
235
|
|
|
225
236
|
const result: HTTPResponse<JSONArray> | HTTPErrorResponse =
|
|
226
|
-
await
|
|
237
|
+
await this.getApiClient().fetch<JSONArray>({
|
|
227
238
|
method: HTTPMethod.POST,
|
|
228
239
|
url: apiUrl,
|
|
229
240
|
data: {
|
|
@@ -296,7 +307,7 @@ export default class ModelAPI {
|
|
|
296
307
|
}
|
|
297
308
|
|
|
298
309
|
const result: HTTPResponse<JSONObject> | HTTPErrorResponse =
|
|
299
|
-
await
|
|
310
|
+
await this.getApiClient().fetch<JSONObject>({
|
|
300
311
|
method: HTTPMethod.POST,
|
|
301
312
|
url: apiUrl,
|
|
302
313
|
data: {
|
|
@@ -398,7 +409,7 @@ export default class ModelAPI {
|
|
|
398
409
|
requestOptions?: RequestOptions | undefined;
|
|
399
410
|
}): Promise<TBaseModel | null> {
|
|
400
411
|
const result: HTTPResponse<TBaseModel> | HTTPErrorResponse =
|
|
401
|
-
await
|
|
412
|
+
await this.getApiClient().fetch<TBaseModel>({
|
|
402
413
|
method: HTTPMethod.POST,
|
|
403
414
|
url: data.apiUrl,
|
|
404
415
|
data: {
|
|
@@ -447,7 +458,7 @@ export default class ModelAPI {
|
|
|
447
458
|
}
|
|
448
459
|
|
|
449
460
|
const result: HTTPResponse<TBaseModel> | HTTPErrorResponse =
|
|
450
|
-
await
|
|
461
|
+
await this.getApiClient().fetch<TBaseModel>({
|
|
451
462
|
method: HTTPMethod.DELETE,
|
|
452
463
|
url: apiUrl,
|
|
453
464
|
headers: this.getCommonHeaders(data.requestOptions),
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
import ModelAPI, { ListResult, RequestOptions } from "./ModelAPI";
|
|
2
|
+
import API from "../API/API";
|
|
3
|
+
import { APP_API_URL } from "../../Config";
|
|
4
|
+
import BaseModel from "../../../Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel";
|
|
5
|
+
import Team from "../../../Models/DatabaseModels/Team";
|
|
6
|
+
import TeamMember from "../../../Models/DatabaseModels/TeamMember";
|
|
7
|
+
import User from "../../../Models/DatabaseModels/User";
|
|
8
|
+
import HTTPErrorResponse from "../../../Types/API/HTTPErrorResponse";
|
|
9
|
+
import HTTPMethod from "../../../Types/API/HTTPMethod";
|
|
10
|
+
import HTTPResponse from "../../../Types/API/HTTPResponse";
|
|
11
|
+
import URL from "../../../Types/API/URL";
|
|
12
|
+
import Query from "../../../Types/BaseDatabase/Query";
|
|
13
|
+
import Select from "../../../Types/BaseDatabase/Select";
|
|
14
|
+
import Sort from "../../../Types/BaseDatabase/Sort";
|
|
15
|
+
import GroupBy from "../../../Types/BaseDatabase/GroupBy";
|
|
16
|
+
import BadDataException from "../../../Types/Exception/BadDataException";
|
|
17
|
+
import { JSONArray, JSONObject } from "../../../Types/JSON";
|
|
18
|
+
import ObjectID from "../../../Types/ObjectID";
|
|
19
|
+
|
|
20
|
+
/*
|
|
21
|
+
* A drop-in ModelAPI for tables that list TeamMember but mean to list the
|
|
22
|
+
* PROJECTS one user belongs to - the Admin Dashboard's User > Projects page
|
|
23
|
+
* being the one that does.
|
|
24
|
+
*
|
|
25
|
+
* TeamMember rows are (user, team) pairs, so the plain API pages over
|
|
26
|
+
* memberships: a user on three teams of one project occupies three rows and
|
|
27
|
+
* reads as three projects. This API pages over projects instead, by calling the
|
|
28
|
+
* master-admin endpoint that does the grouping server-side
|
|
29
|
+
* (POST /user/:userId/projects). Grouping there rather than in the browser is
|
|
30
|
+
* what makes `count` a number of projects and every page boundary fall between
|
|
31
|
+
* two projects rather than between two of one project's teams.
|
|
32
|
+
*
|
|
33
|
+
* The endpoint owns the shape of a row, so the caller's `select` and `sort` are
|
|
34
|
+
* NOT forwarded - a row is always a project with its teams, always ordered by
|
|
35
|
+
* project name. Adding a column to the table therefore means adding the field
|
|
36
|
+
* to the endpoint's select and to the row it serializes, not just to the
|
|
37
|
+
* column list. Only `skip`/`limit` and the user in the query are the caller's.
|
|
38
|
+
*
|
|
39
|
+
* Deleting is redefined to match what a row now means - see deleteItem.
|
|
40
|
+
*/
|
|
41
|
+
|
|
42
|
+
export interface UserProjectExtras {
|
|
43
|
+
// Every team this user belongs to in this project, sorted by name.
|
|
44
|
+
teamsForProject: Array<Team>;
|
|
45
|
+
teamCountForProject: number;
|
|
46
|
+
/*
|
|
47
|
+
* How many of those memberships are still unaccepted invitations. A user can
|
|
48
|
+
* be a fully accepted member of one team of a project and a pending invite on
|
|
49
|
+
* another.
|
|
50
|
+
*/
|
|
51
|
+
pendingTeamCountForProject: number;
|
|
52
|
+
// The ids of every membership this row was folded from.
|
|
53
|
+
teamMemberIdsForProject: Array<string>;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/*
|
|
57
|
+
* The row is still a TeamMember - the table, its columns and its delete action
|
|
58
|
+
* are all typed against the model - it just stands for a project the user is in
|
|
59
|
+
* rather than for one of their memberships.
|
|
60
|
+
*/
|
|
61
|
+
export type UserProjectRow = TeamMember & UserProjectExtras;
|
|
62
|
+
|
|
63
|
+
export default class UserProjectsModelAPI extends ModelAPI {
|
|
64
|
+
public static override async getList<TBaseModel extends BaseModel>(data: {
|
|
65
|
+
modelType: { new (): TBaseModel };
|
|
66
|
+
query: Query<TBaseModel>;
|
|
67
|
+
groupBy?: GroupBy<TBaseModel> | undefined;
|
|
68
|
+
limit: number;
|
|
69
|
+
skip: number;
|
|
70
|
+
select: Select<TBaseModel>;
|
|
71
|
+
sort: Sort<TBaseModel>;
|
|
72
|
+
requestOptions?: RequestOptions | undefined;
|
|
73
|
+
}): Promise<ListResult<TBaseModel>> {
|
|
74
|
+
if (!(new data.modelType() instanceof TeamMember)) {
|
|
75
|
+
/*
|
|
76
|
+
* Not the model this API exists for - a table's entity filter fetching
|
|
77
|
+
* its dropdown options, say. Behave like the plain one, but through
|
|
78
|
+
* `super` so a subclass's getCommonHeaders still applies.
|
|
79
|
+
*/
|
|
80
|
+
return super.getList<TBaseModel>(data);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const userId: ObjectID | null = this.getUserIdFromQuery(
|
|
84
|
+
data.query as Query<TeamMember>,
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
if (!userId) {
|
|
88
|
+
/*
|
|
89
|
+
* Without a user there is no list to fetch - the endpoint is
|
|
90
|
+
* "the projects of THIS user". Failing loudly beats returning an empty
|
|
91
|
+
* list, which would render as "this user is in no projects".
|
|
92
|
+
*/
|
|
93
|
+
throw new BadDataException(
|
|
94
|
+
"A user id is required to list the projects a user belongs to.",
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
const url: URL = URL.fromString(APP_API_URL.toString())
|
|
99
|
+
.addRoute(new User().getCrudApiPath()!)
|
|
100
|
+
.addRoute(`/${userId.toString()}/projects`);
|
|
101
|
+
|
|
102
|
+
const result: HTTPResponse<JSONArray> | HTTPErrorResponse =
|
|
103
|
+
await API.fetch<JSONArray>({
|
|
104
|
+
method: HTTPMethod.POST,
|
|
105
|
+
url: url,
|
|
106
|
+
data: {},
|
|
107
|
+
headers: this.getCommonHeaders(data.requestOptions),
|
|
108
|
+
params: {
|
|
109
|
+
limit: data.limit.toString(),
|
|
110
|
+
skip: data.skip.toString(),
|
|
111
|
+
},
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
if (result instanceof HTTPErrorResponse) {
|
|
115
|
+
throw result;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
const rows: Array<UserProjectRow> = (result.data as JSONArray).map(
|
|
119
|
+
(item: JSONObject) => {
|
|
120
|
+
return this.toRow(item);
|
|
121
|
+
},
|
|
122
|
+
);
|
|
123
|
+
|
|
124
|
+
return {
|
|
125
|
+
data: rows as unknown as Array<TBaseModel>,
|
|
126
|
+
count: result.count,
|
|
127
|
+
skip: result.skip,
|
|
128
|
+
limit: result.limit,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Removes the user from the project on this row - every one of their team
|
|
134
|
+
* memberships in it, not just the one whose id the row happens to carry.
|
|
135
|
+
*
|
|
136
|
+
* A grouped row stands for a project, so deleting one membership would leave
|
|
137
|
+
* the row on screen (still in the project, via their other teams) and look
|
|
138
|
+
* like the delete silently failed. Removing the user from a single team is
|
|
139
|
+
* done from the memberships table on the same page, where a row is a
|
|
140
|
+
* membership again.
|
|
141
|
+
*
|
|
142
|
+
* This goes through one `remove-from-project` request rather than a DELETE
|
|
143
|
+
* per membership, and that is load-bearing rather than an optimisation. The
|
|
144
|
+
* server refuses to remove the last accepted member of the Owners team, and
|
|
145
|
+
* it refuses per request - so a loop deletes every other membership first and
|
|
146
|
+
* only then reports a failure, leaving the person stripped of the teams the
|
|
147
|
+
* caller was just told they had not lost. The endpoint runs that check across
|
|
148
|
+
* the whole set before deleting anything.
|
|
149
|
+
*/
|
|
150
|
+
public static override async deleteItem<TBaseModel extends BaseModel>(data: {
|
|
151
|
+
modelType: { new (): TBaseModel };
|
|
152
|
+
id: ObjectID;
|
|
153
|
+
requestOptions?: RequestOptions | undefined;
|
|
154
|
+
}): Promise<void> {
|
|
155
|
+
if (!(new data.modelType() instanceof TeamMember)) {
|
|
156
|
+
return super.deleteItem<TBaseModel>(data);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
const rowMembership: TeamMember | null = await this.getItem<TeamMember>({
|
|
160
|
+
modelType: TeamMember,
|
|
161
|
+
id: data.id,
|
|
162
|
+
select: {
|
|
163
|
+
_id: true,
|
|
164
|
+
userId: true,
|
|
165
|
+
projectId: true,
|
|
166
|
+
},
|
|
167
|
+
requestOptions: data.requestOptions,
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
const userId: ObjectID | undefined = rowMembership?.userId;
|
|
171
|
+
const projectId: ObjectID | undefined = rowMembership?.projectId;
|
|
172
|
+
|
|
173
|
+
if (!userId || !projectId) {
|
|
174
|
+
/*
|
|
175
|
+
* The row is gone, or came back without the user or project it stands
|
|
176
|
+
* for. Fall back to the single delete the table asked for rather than
|
|
177
|
+
* guessing which project to empty.
|
|
178
|
+
*/
|
|
179
|
+
return super.deleteItem<TBaseModel>(data);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
const url: URL = URL.fromString(APP_API_URL.toString())
|
|
183
|
+
.addRoute(new User().getCrudApiPath()!)
|
|
184
|
+
.addRoute(`/${userId.toString()}/remove-from-project`);
|
|
185
|
+
|
|
186
|
+
const result: HTTPResponse<JSONObject> | HTTPErrorResponse =
|
|
187
|
+
await API.post<JSONObject>({
|
|
188
|
+
url: url,
|
|
189
|
+
data: {
|
|
190
|
+
projectId: projectId.toString(),
|
|
191
|
+
},
|
|
192
|
+
headers: this.getCommonHeaders(data.requestOptions),
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
if (result instanceof HTTPErrorResponse) {
|
|
196
|
+
throw result;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* The user the table is listing projects for.
|
|
202
|
+
*
|
|
203
|
+
* Accepts the id in the shapes a table query can carry it in: an ObjectID
|
|
204
|
+
* (what the page passes) or a plain string.
|
|
205
|
+
*/
|
|
206
|
+
private static getUserIdFromQuery(query: Query<TeamMember>): ObjectID | null {
|
|
207
|
+
const value: unknown = (query as Record<string, unknown>)["userId"];
|
|
208
|
+
|
|
209
|
+
if (value instanceof ObjectID) {
|
|
210
|
+
return value;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
if (typeof value === "string" && value) {
|
|
214
|
+
return new ObjectID(value);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
return null;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* One row of the response.
|
|
222
|
+
*
|
|
223
|
+
* The base of the row is a TeamMember and hydrates as one. The aggregate
|
|
224
|
+
* fields are not columns of TeamMember, so BaseModel.fromJSON drops them -
|
|
225
|
+
* they are read off the raw JSON and attached here.
|
|
226
|
+
*/
|
|
227
|
+
private static toRow(item: JSONObject): UserProjectRow {
|
|
228
|
+
const row: UserProjectRow = BaseModel.fromJSON(
|
|
229
|
+
item,
|
|
230
|
+
TeamMember,
|
|
231
|
+
) as UserProjectRow;
|
|
232
|
+
|
|
233
|
+
row.teamsForProject = BaseModel.fromJSONArray(
|
|
234
|
+
(item["teams"] as Array<JSONObject>) || [],
|
|
235
|
+
Team,
|
|
236
|
+
);
|
|
237
|
+
row.teamCountForProject = row.teamsForProject.length;
|
|
238
|
+
row.pendingTeamCountForProject = this.toCount(item["pendingTeamCount"]);
|
|
239
|
+
row.teamMemberIdsForProject = (
|
|
240
|
+
(item["teamMemberIds"] as Array<unknown>) || []
|
|
241
|
+
)
|
|
242
|
+
.map((id: unknown) => {
|
|
243
|
+
return id?.toString() || "";
|
|
244
|
+
})
|
|
245
|
+
.filter((id: string) => {
|
|
246
|
+
return Boolean(id);
|
|
247
|
+
});
|
|
248
|
+
|
|
249
|
+
return row;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
private static toCount(value: unknown): number {
|
|
253
|
+
const count: number = Number(value);
|
|
254
|
+
|
|
255
|
+
return Number.isFinite(count) && count > 0 ? count : 0;
|
|
256
|
+
}
|
|
257
|
+
}
|
package/UI/Utils/Project.ts
CHANGED
|
@@ -67,6 +67,10 @@ export default class ProjectUtil {
|
|
|
67
67
|
* project id (`/dashboard`, `/dashboard/welcome`, ...).
|
|
68
68
|
*/
|
|
69
69
|
public static getProjectIdFromUrl(): ObjectID | null {
|
|
70
|
+
if (Navigation.getFirstParam(1) !== "dashboard") {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
|
|
70
74
|
const projectId: string | undefined = Navigation.getFirstParam(2);
|
|
71
75
|
|
|
72
76
|
if (!projectId || projectId.includes(":projectId")) {
|
package/UI/Utils/StatusPage.ts
CHANGED
|
@@ -21,12 +21,17 @@ export default class StatusPageUtil {
|
|
|
21
21
|
public static async getCategoryCheckboxPropsBasedOnResources(
|
|
22
22
|
statusPageId: ObjectID,
|
|
23
23
|
overrideRequestUrl?: URL,
|
|
24
|
+
modelAPI: typeof ModelAPI = ModelAPI,
|
|
24
25
|
): Promise<CategoryCheckboxOptionsAndCategories> {
|
|
25
26
|
const categories: Array<CheckboxCategory> = [];
|
|
26
27
|
const options: Array<CategoryCheckboxOption> = [];
|
|
27
28
|
|
|
28
29
|
let resources: Array<StatusPageResource> =
|
|
29
|
-
await StatusPageUtil.getResources(
|
|
30
|
+
await StatusPageUtil.getResources(
|
|
31
|
+
statusPageId,
|
|
32
|
+
overrideRequestUrl,
|
|
33
|
+
modelAPI,
|
|
34
|
+
);
|
|
30
35
|
|
|
31
36
|
let resourceGroups: Array<StatusPageGroup> = resources
|
|
32
37
|
.map((resource: StatusPageResource) => {
|
|
@@ -90,9 +95,10 @@ export default class StatusPageUtil {
|
|
|
90
95
|
public static async getResources(
|
|
91
96
|
statusPageId: ObjectID,
|
|
92
97
|
overrideRequestUrl?: URL,
|
|
98
|
+
modelAPI: typeof ModelAPI = ModelAPI,
|
|
93
99
|
): Promise<Array<StatusPageResource>> {
|
|
94
100
|
const resources: ListResult<StatusPageResource> =
|
|
95
|
-
await
|
|
101
|
+
await modelAPI.getList<StatusPageResource>({
|
|
96
102
|
modelType: StatusPageResource,
|
|
97
103
|
query: {
|
|
98
104
|
statusPageId: statusPageId,
|