@oneuptime/common 12.0.5 → 12.0.7
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/AIInsight.ts +1 -1
- package/Models/DatabaseModels/AIRun.ts +33 -0
- package/Models/DatabaseModels/DataSource.ts +744 -0
- package/Models/DatabaseModels/DatabaseBaseModel/FileModel.ts +2 -3
- package/Models/DatabaseModels/DeletedProject.ts +595 -0
- package/Models/DatabaseModels/Index.ts +5 -0
- package/Models/DatabaseModels/Monitor.ts +111 -0
- package/Models/DatabaseModels/Project.ts +3 -3
- 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/Models/DatabaseModels/WorkspaceProjectAuthToken.ts +19 -1
- 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/FileAPI.ts +15 -2
- package/Server/API/MicrosoftTeamsAPI.ts +6 -1
- package/Server/API/ProjectAPI.ts +214 -0
- package/Server/API/StatusPageAPI.ts +50 -7
- 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/1786446545142-MigrationName.ts +50 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786449497966-AddMonitorDependency.ts +67 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786461136170-AddDeletedProjectTable.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 +12 -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/AIAgentService.ts +20 -0
- 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/DashboardDomainService.ts +73 -28
- package/Server/Services/DataSourceService.ts +200 -0
- package/Server/Services/DatabaseService.ts +1 -0
- package/Server/Services/DeletedProjectService.ts +138 -0
- package/Server/Services/FileService.ts +61 -0
- package/Server/Services/HostService.ts +92 -0
- package/Server/Services/IncidentEpisodePublicNoteService.ts +18 -0
- package/Server/Services/IncidentPublicNoteService.ts +18 -0
- package/Server/Services/IncidentService.ts +45 -0
- package/Server/Services/Index.ts +4 -0
- package/Server/Services/MonitorService.ts +360 -0
- package/Server/Services/MonitorStatusService.ts +166 -0
- package/Server/Services/OpenTelemetryIngestService.ts +255 -184
- package/Server/Services/ProbeService.ts +20 -0
- package/Server/Services/ProjectService.ts +297 -1
- package/Server/Services/PushNotificationService.ts +71 -0
- package/Server/Services/RumSessionPinService.ts +7 -21
- package/Server/Services/ScheduledMaintenancePublicNoteService.ts +18 -0
- package/Server/Services/StatusPageAnnouncementService.ts +53 -0
- package/Server/Services/StatusPageDomainService.ts +73 -28
- package/Server/Services/StatusPageSubscriberService.ts +13 -0
- package/Server/Services/TeamMemberService.ts +117 -12
- package/Server/Services/TelemetryIngestionKeyService.ts +1 -0
- package/Server/Services/UserService.ts +280 -9
- package/Server/Services/UserWebhookService.ts +34 -109
- package/Server/Services/WorkspaceNotificationRuleService.ts +69 -0
- package/Server/Services/WorkspaceProjectAuthTokenService.ts +37 -1
- 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/DeleteById.ts +2 -0
- package/Server/Types/Database/DeleteOneBy.ts +6 -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/Types/Domain.ts +41 -0
- package/Server/Types/Workflow/Components/API/Delete.ts +2 -1
- package/Server/Types/Workflow/Components/API/Get.ts +2 -1
- package/Server/Types/Workflow/Components/API/Patch.ts +2 -1
- package/Server/Types/Workflow/Components/API/Post.ts +2 -1
- package/Server/Types/Workflow/Components/API/Put.ts +2 -1
- package/Server/Types/Workflow/Components/API/Utils.ts +41 -2
- package/Server/Types/Workflow/Components/BaseModel/CreateManyBaseModel.ts +25 -19
- package/Server/Types/Workflow/Components/BaseModel/CreateOneBaseModel.ts +6 -5
- package/Server/Types/Workflow/Components/BaseModel/DeleteManyBaseModel.ts +32 -14
- package/Server/Types/Workflow/Components/BaseModel/DeleteOneBaseModel.ts +31 -13
- package/Server/Types/Workflow/Components/BaseModel/FindManyBaseModel.ts +29 -20
- package/Server/Types/Workflow/Components/BaseModel/FindOneBaseModel.ts +28 -21
- package/Server/Types/Workflow/Components/BaseModel/LogComponentError.ts +89 -0
- package/Server/Types/Workflow/Components/BaseModel/ModelArguments.ts +208 -0
- package/Server/Types/Workflow/Components/BaseModel/OnTriggerBaseModel.ts +11 -0
- package/Server/Types/Workflow/Components/BaseModel/UpdateManyBaseModel.ts +41 -18
- package/Server/Types/Workflow/Components/BaseModel/UpdateOneBaseModel.ts +45 -19
- package/Server/Types/Workflow/Components/Discord/SendMessageToChannel.ts +16 -9
- package/Server/Types/Workflow/Components/IncomingWebhookUtils.ts +66 -0
- package/Server/Types/Workflow/Components/MicrosoftTeams/SendMessageToChannel.ts +15 -9
- package/Server/Types/Workflow/Components/Slack/SendMessageToChannel.ts +17 -0
- package/Server/Utils/AI/Chat/ObservabilityChatPrompt.ts +1 -1
- package/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.ts +171 -0
- 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/FixFromIncidentTaskTrigger.ts +3 -3
- 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/FixRouting.ts +3 -2
- package/Server/Utils/AI/SRE/Insights/InsightStore.ts +76 -18
- package/Server/Utils/AI/SRE/InvestigationTldr.ts +352 -0
- package/Server/Utils/AI/SRE/TelemetryImprovementTaskTrigger.ts +1 -1
- package/Server/Utils/AI/Toolbox/CodeWriteTools.ts +6 -6
- package/Server/Utils/AnalyticsDatabase/InsertDedupContext.ts +7 -2
- package/Server/Utils/CodeRepository/GitHub/GitHub.ts +43 -5
- 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 +606 -0
- package/Server/Utils/DataSource/HttpFetch.ts +182 -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/Execute.ts +8 -0
- package/Server/Utils/InProcessMemo.ts +141 -0
- package/Server/Utils/InlineImageAccessTokenSync.ts +23 -0
- package/Server/Utils/InstanceHealth/TelemetryIngestion.ts +628 -0
- package/Server/Utils/LLM/LLMService.ts +57 -12
- package/Server/Utils/Monitor/MonitorAlert.ts +40 -0
- package/Server/Utils/Monitor/MonitorDependencySuppression.ts +192 -0
- package/Server/Utils/Monitor/MonitorIncident.ts +40 -0
- package/Server/Utils/Monitor/MonitorMetricUtil.ts +58 -0
- package/Server/Utils/Monitor/MonitorResource.ts +50 -0
- package/Server/Utils/Response.ts +154 -7
- package/Server/Utils/SSRFProtection.ts +450 -0
- package/Server/Utils/StartServer.ts +16 -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/VM/VMRunner.ts +88 -1
- package/Server/Utils/VendorAssets.ts +165 -0
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +582 -53
- package/Server/Utils/Workspace/Slack/Slack.ts +30 -2
- package/Server/Utils/Workspace/WorkspaceBase.ts +6 -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/DangerZone.test.tsx +334 -0
- package/Tests/App/Dashboard/DashboardVariableAllContract.test.tsx +539 -0
- package/Tests/App/Dashboard/DashboardVariableSelector.test.tsx +678 -0
- package/Tests/App/Dashboard/DashboardVariablesDiscard.test.tsx +706 -0
- package/Tests/App/Dashboard/DashboardVariablesModal.test.tsx +508 -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/PublicDashboard/DashboardVariableSelector.test.tsx +470 -0
- package/Tests/App/StatusPage/StatusPageDetailPagesNotFound.test.tsx +308 -0
- package/Tests/App/StatusPage/StatusPageResourceExplorer.test.tsx +1858 -0
- package/Tests/Models/DatabaseModels/DataSourceModelSecrets.test.ts +70 -0
- package/Tests/Models/DatabaseModels/DeletedProjectModel.test.ts +251 -0
- package/Tests/Models/DatabaseModels/SavedViewJSONColumnTuples.test.ts +115 -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/FileAPIAccessControl.test.ts +316 -0
- package/Tests/Server/API/ProjectAPI.test.ts +299 -1
- package/Tests/Server/API/ProjectAPIAdjustBalance.test.ts +459 -0
- package/Tests/Server/API/ProjectAPIAdjustBalanceBillingDisabled.test.ts +177 -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/DatabaseServiceDeletionReason.test.ts +123 -0
- package/Tests/Server/Services/DeletedProjectService.test.ts +415 -0
- package/Tests/Server/Services/DeletedProjectServiceSelfHosted.test.ts +70 -0
- package/Tests/Server/Services/DomainSubdomainHooks.test.ts +94 -0
- package/Tests/Server/Services/FileIsPublicBooleanMigration.test.ts +244 -0
- package/Tests/Server/Services/FileServiceMimeType.test.ts +89 -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/MonitorServiceDependencyValidation.test.ts +702 -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/ProjectServiceAdjustBalance.test.ts +615 -0
- package/Tests/Server/Services/ProjectServiceDeleteAudit.test.ts +406 -0
- package/Tests/Server/Services/PublishTimeImageVisibility.test.ts +450 -0
- package/Tests/Server/Services/ResourceUpdateLastSeenLivenessFallback.test.ts +36 -1
- package/Tests/Server/Services/RumSessionPinUniqueViolationRecovery.test.ts +163 -0
- package/Tests/Server/Services/TeamMemberAutoAcceptInvitation.test.ts +669 -0
- package/Tests/Server/Services/UserAuthenticationService.test.ts +973 -0
- package/Tests/Server/Services/UserWebhookSSRF.test.ts +174 -0
- package/Tests/Server/Services/WebPushEndpointAllowlist.test.ts +133 -0
- package/Tests/Server/Services/WorkspaceProjectAuthTokenRepoint.test.ts +618 -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/Types/Workflow/Components/ApiComponentErrorPort.test.ts +26 -1
- package/Tests/Server/Types/Workflow/Components/ApiComponentSsrf.test.ts +215 -0
- package/Tests/Server/Types/Workflow/Components/BaseModelDatabaseComponents.test.ts +742 -0
- package/Tests/Server/Types/Workflow/Components/ChatWebhookComponents.test.ts +256 -0
- package/Tests/Server/Types/Workflow/Components/ModelArguments.test.ts +371 -0
- package/Tests/Server/Utils/AI/CodeAgentCommandGuard.test.ts +204 -0
- package/Tests/Server/Utils/AI/CodeAgentWriteLimits.test.ts +213 -0
- package/Tests/Server/Utils/AI/CodeWriteTools.test.ts +52 -5
- 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/AI/LLMServiceBaseUrl.test.ts +3 -0
- package/Tests/Server/Utils/AI/LLMServiceEgressGuard.test.ts +315 -0
- package/Tests/Server/Utils/AI/LLMServiceModelCompatibility.test.ts +3 -0
- package/Tests/Server/Utils/AI/LLMServiceRequestPolicy.test.ts +17 -5
- package/Tests/Server/Utils/AI/LLMServiceToolCalling.test.ts +14 -1
- package/Tests/Server/Utils/AI/ObservabilityChatPrompt.test.ts +35 -0
- package/Tests/Server/Utils/AI/StubLLMEgressGuard.ts +25 -0
- package/Tests/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.test.ts +912 -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 +714 -0
- package/Tests/Server/Utils/DataSource/EgressGuardPinning.test.ts +330 -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/GitHubCreatePullRequestWithToken.test.ts +393 -0
- package/Tests/Server/Utils/InProcessMemo.test.ts +292 -0
- package/Tests/Server/Utils/InlineImageAccessTokenSync.test.ts +202 -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/MonitorDependencySuppression.test.ts +811 -0
- package/Tests/Server/Utils/Monitor/MonitorDependencySuppressionCreatorSkip.test.ts +604 -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/ResponseSendFileResponse.test.ts +192 -0
- package/Tests/Server/Utils/SSRFProtection.test.ts +193 -0
- package/Tests/Server/Utils/SSRFProtectionBypasses.test.ts +406 -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/VM/VMRunnerSsrf.test.ts +194 -0
- package/Tests/Server/Utils/VendorAssetIntegrity.test.ts +343 -0
- package/Tests/Server/Utils/VendorAssets.test.ts +671 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsChannelSend.test.ts +1169 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsChannelsList.test.ts +2 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsTeamInstalls.test.ts +1605 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsTenantResolution.test.ts +1218 -0
- package/Tests/Server/Views/OfflineRender.test.ts +297 -0
- package/Tests/Types/AI/AIChatMessageStatus.test.ts +79 -0
- package/Tests/Types/AI/AIInsightStatus.test.ts +40 -0
- package/Tests/Types/API/HostnameAuthorityParsing.test.ts +157 -0
- package/Tests/Types/Dashboard/DashboardTemplateInvariants.test.ts +27 -0
- package/Tests/Types/Dashboard/DataSourceComponentTypes.test.ts +618 -0
- package/Tests/Types/DataSource/DataSourceLimits.test.ts +71 -0
- package/Tests/Types/DataSource/DataSourceType.test.ts +181 -0
- package/Tests/Types/DateClickhouseFormat.test.ts +192 -0
- package/Tests/Types/DomainSubdomainValidation.test.ts +90 -0
- package/Tests/Types/JSONFunctions.test.ts +252 -1
- package/Tests/Types/Monitor/SnmpMonitor/SnmpAuthProtocol.test.ts +61 -0
- package/Tests/Types/Monitor/SnmpMonitor/SnmpPrivProtocol.test.ts +62 -0
- package/Tests/Types/Monitor/SnmpMonitor/SnmpSecurityLevel.test.ts +68 -0
- package/Tests/Types/Monitor/SnmpMonitor/SnmpVersion.test.ts +51 -0
- package/Tests/Types/Password.test.ts +363 -0
- package/Tests/UI/Components/404.test.tsx +1 -1
- package/Tests/UI/Components/Alert.test.tsx +1 -1
- package/Tests/UI/Components/Badge.test.tsx +1 -1
- package/Tests/UI/Components/BasicForm.test.tsx +39 -10
- package/Tests/UI/Components/Button.test.tsx +1 -1
- package/Tests/UI/Components/Card.test.tsx +1 -1
- package/Tests/UI/Components/Charts/AxisTickColor.test.tsx +1 -1
- package/Tests/UI/Components/ColorViewer.test.tsx +1 -1
- package/Tests/UI/Components/ComponentsModal.test.tsx +7 -1
- package/Tests/UI/Components/ConfirmModal.test.tsx +7 -0
- package/Tests/UI/Components/DictionaryOfStrings.test.tsx +1 -1
- package/Tests/UI/Components/Dropdown.test.tsx +1 -1
- package/Tests/UI/Components/ErrorBoundary.test.tsx +53 -0
- package/Tests/UI/Components/FilePicker.test.tsx +1 -1
- package/Tests/UI/Components/HiddenText.test.tsx +1 -1
- package/Tests/UI/Components/Input.test.tsx +1 -1
- package/Tests/UI/Components/Loader.test.tsx +1 -1
- package/Tests/UI/Components/LogTimeRangePicker.test.tsx +1 -1
- package/Tests/UI/Components/MasterPage.test.tsx +1 -1
- package/Tests/UI/Components/Modal.test.tsx +281 -1
- package/Tests/UI/Components/ModalPortalDismissal.test.tsx +489 -0
- package/Tests/UI/Components/ModelDelete.test.tsx +214 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableBulkSelectAll.test.tsx +1 -1
- package/Tests/UI/Components/ModelTable/BaseModelTableColumnCustomization.test.tsx +1 -1
- package/Tests/UI/Components/ModelTable/BaseModelTableSearchLabels.test.tsx +1 -1
- package/Tests/UI/Components/ModelTable/BaseModelTableUrlState.test.tsx +1 -1
- package/Tests/UI/Components/ModelTable/CustomFieldColumns.test.tsx +1 -1
- package/Tests/UI/Components/NavBar.test.tsx +1 -1
- package/Tests/UI/Components/ObjectIdFilterPipeline.test.tsx +396 -0
- package/Tests/UI/Components/OperatorSelectorKeyboard.test.tsx +1 -1
- package/Tests/UI/Components/Pagination.test.tsx +1 -1
- package/Tests/UI/Components/Pill.test.tsx +1 -1
- package/Tests/UI/Components/Probe.test.tsx +1 -1
- package/Tests/UI/Components/ProgressBar.test.tsx +1 -1
- package/Tests/UI/Components/RadioButtons.test.tsx +1 -1
- package/Tests/UI/Components/SideMenuItem.test.tsx +1 -1
- package/Tests/UI/Components/SideOver.test.tsx +500 -6
- package/Tests/UI/Components/StatusPage/ResourceGroupNavigator.test.tsx +1147 -0
- package/Tests/UI/Components/Tabs.test.tsx +1 -1
- package/Tests/UI/Components/TelemetrySearchBar.test.tsx +1 -1
- package/Tests/UI/Components/TelemetryTimeRangePicker.test.tsx +1 -1
- package/Tests/UI/Components/TextArea.test.tsx +1 -1
- package/Tests/UI/Components/Toast.test.tsx +1 -1
- package/Tests/UI/Components/Toggle.test.tsx +1 -1
- package/Tests/UI/Components/TopSection.test.tsx +1 -1
- package/Tests/UI/Components/UseLiveLogsRefresh.test.tsx +1 -1
- package/Tests/UI/Rum/ReplayScrubber.test.tsx +1 -1
- package/Tests/UI/Rum/ReplayStage.test.tsx +1 -1
- package/Tests/UI/Telemetry/TelemetrySnapshotWindowAlert.test.tsx +1 -1
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +116 -1
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +2 -0
- package/Tests/UI/Utils/LocalStorageArrayRoundTrip.test.ts +72 -0
- package/Tests/Utils/Analytics.test.ts +23 -0
- package/Tests/Utils/Dashboard/Components/DashboardDataSourceComponents.test.ts +640 -0
- package/Tests/Utils/Dashboard/HtmlWidgetDocument.test.ts +19 -2
- package/Tests/Utils/Dashboard/ModelQueryVariableInterpolation.test.ts +44 -0
- package/Tests/Utils/Dashboard/VariableInterpolation.test.ts +288 -5
- package/Tests/Utils/Dashboard/VariableUrlState.test.ts +42 -0
- package/Tests/Utils/DataSource/DataSourceQueryText.test.ts +165 -0
- package/Tests/Utils/DataSource/DataSourceValueReducer.test.ts +526 -0
- package/Tests/Utils/LegacySerializedArray.test.ts +139 -0
- package/Tests/Utils/Metrics/MetricResourceAttributeUtil.test.ts +691 -0
- package/Tests/Utils/Monitor/MonitorDependencyRule.test.ts +190 -0
- package/Tests/Utils/Realtime.test.ts +78 -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/Tests/Utils/Telemetry/SavedViewFilters.test.ts +246 -0
- package/Tests/__mocks__/i18next-browser-languagedetector.js +21 -0
- package/Types/AI/AIInsightEvidence.ts +6 -0
- package/Types/AI/FixPullRequestCiStatus.ts +1 -1
- package/Types/AI/FixVerificationStatus.ts +2 -2
- package/Types/API/Hostname.ts +92 -4
- package/Types/API/URL.ts +43 -25
- package/Types/Analytics/RevenueEvent.ts +31 -0
- package/Types/Billing/BalanceAdjustmentType.ts +14 -0
- package/Types/Billing/ProjectBalanceType.ts +13 -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/Domain.ts +26 -0
- package/Types/File/MimeType.ts +11 -0
- package/Types/JSONFunctions.ts +15 -0
- package/Types/Password.ts +64 -0
- package/Types/Permission.ts +46 -0
- package/Types/Telemetry/TelemetrySavedViewState.ts +9 -1
- package/Types/UserAuthenticationStatus.ts +34 -0
- package/Types/Workflow/Components/BaseModel.ts +92 -28
- package/Typings/Index.d.ts +12 -0
- package/UI/Components/Button/Button.tsx +1 -1
- package/UI/Components/ErrorBoundary.tsx +459 -108
- package/UI/Components/GanttChart/ChartContainer.tsx +4 -3
- package/UI/Components/Icon/Icon.tsx +10 -9
- package/UI/Components/Modal/ConfirmModal.tsx +15 -5
- package/UI/Components/Modal/Modal.tsx +247 -35
- package/UI/Components/Modal/ModalFooter.tsx +6 -1
- package/UI/Components/ModelDelete/ModelDelete.tsx +23 -6
- package/UI/Components/MoreMenu/MoreMenu.tsx +19 -4
- package/UI/Components/MoreMenu/MoreMenuItem.tsx +6 -1
- package/UI/Components/SideOver/SideOver.tsx +195 -68
- 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/PageScrollLock.ts +66 -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/Dashboard/HtmlWidgetDocument.ts +4 -2
- package/Utils/Dashboard/VariableInterpolation.ts +19 -1
- package/Utils/DataSource/DataSourceQueryText.ts +94 -0
- package/Utils/DataSource/DataSourceValueReducer.ts +156 -0
- package/Utils/LegacySerializedArray.ts +60 -0
- package/Utils/Metrics/MetricResourceAttributeUtil.ts +380 -0
- package/Utils/Monitor/MonitorDependencyRule.ts +88 -0
- package/Utils/NetworkDiscovery/ScanTargetUtil.ts +8 -6
- package/Utils/StatusPage/GroupHierarchyView.ts +931 -0
- package/Utils/StatusPage/ResourceExplorer.ts +853 -0
- package/Utils/Telemetry/SavedViewFilters.ts +88 -0
- package/build/dist/Models/DatabaseModels/AIInsight.js +1 -1
- package/build/dist/Models/DatabaseModels/AIInsight.js.map +1 -1
- 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/DatabaseBaseModel/FileModel.js +2 -3
- package/build/dist/Models/DatabaseModels/DatabaseBaseModel/FileModel.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DeletedProject.js +640 -0
- package/build/dist/Models/DatabaseModels/DeletedProject.js.map +1 -0
- package/build/dist/Models/DatabaseModels/Index.js +4 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Monitor.js +106 -0
- package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Project.js +3 -3
- package/build/dist/Models/DatabaseModels/Project.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/Models/DatabaseModels/WorkspaceProjectAuthToken.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/FileAPI.js +14 -2
- package/build/dist/Server/API/FileAPI.js.map +1 -1
- package/build/dist/Server/API/MicrosoftTeamsAPI.js +6 -1
- package/build/dist/Server/API/MicrosoftTeamsAPI.js.map +1 -1
- package/build/dist/Server/API/ProjectAPI.js +157 -4
- package/build/dist/Server/API/ProjectAPI.js.map +1 -1
- package/build/dist/Server/API/StatusPageAPI.js +38 -4
- 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/1786446545142-MigrationName.js +34 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786446545142-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786449497966-AddMonitorDependency.js +30 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786449497966-AddMonitorDependency.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786461136170-AddDeletedProjectTable.js +20 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786461136170-AddDeletedProjectTable.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 +12 -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/AIAgentService.js +17 -0
- package/build/dist/Server/Services/AIAgentService.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/DashboardDomainService.js +55 -18
- package/build/dist/Server/Services/DashboardDomainService.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/DatabaseService.js +1 -0
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/DeletedProjectService.js +124 -0
- package/build/dist/Server/Services/DeletedProjectService.js.map +1 -0
- package/build/dist/Server/Services/FileService.js +52 -0
- package/build/dist/Server/Services/FileService.js.map +1 -1
- package/build/dist/Server/Services/HostService.js +74 -0
- package/build/dist/Server/Services/HostService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodePublicNoteService.js +10 -1
- package/build/dist/Server/Services/IncidentEpisodePublicNoteService.js.map +1 -1
- package/build/dist/Server/Services/IncidentPublicNoteService.js +10 -1
- package/build/dist/Server/Services/IncidentPublicNoteService.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 +4 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +277 -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/ProbeService.js +17 -0
- package/build/dist/Server/Services/ProbeService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +228 -6
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/PushNotificationService.js +56 -0
- package/build/dist/Server/Services/PushNotificationService.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/ScheduledMaintenancePublicNoteService.js +10 -1
- package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageAnnouncementService.js +54 -0
- package/build/dist/Server/Services/StatusPageAnnouncementService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageDomainService.js +55 -18
- package/build/dist/Server/Services/StatusPageDomainService.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/TeamMemberService.js +97 -6
- package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryIngestionKeyService.js +1 -0
- package/build/dist/Server/Services/TelemetryIngestionKeyService.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/Services/UserWebhookService.js +31 -87
- package/build/dist/Server/Services/UserWebhookService.js.map +1 -1
- package/build/dist/Server/Services/WorkspaceNotificationRuleService.js +65 -0
- package/build/dist/Server/Services/WorkspaceNotificationRuleService.js.map +1 -1
- package/build/dist/Server/Services/WorkspaceProjectAuthTokenService.js +23 -0
- package/build/dist/Server/Services/WorkspaceProjectAuthTokenService.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/Types/Domain.js +37 -0
- package/build/dist/Server/Types/Domain.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Delete.js +2 -1
- package/build/dist/Server/Types/Workflow/Components/API/Delete.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Get.js +2 -1
- package/build/dist/Server/Types/Workflow/Components/API/Get.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Patch.js +2 -1
- package/build/dist/Server/Types/Workflow/Components/API/Patch.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Post.js +2 -1
- package/build/dist/Server/Types/Workflow/Components/API/Post.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Put.js +2 -1
- package/build/dist/Server/Types/Workflow/Components/API/Put.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Utils.js +35 -2
- package/build/dist/Server/Types/Workflow/Components/API/Utils.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/BaseModel/CreateManyBaseModel.js +15 -11
- package/build/dist/Server/Types/Workflow/Components/BaseModel/CreateManyBaseModel.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/BaseModel/CreateOneBaseModel.js +2 -3
- package/build/dist/Server/Types/Workflow/Components/BaseModel/CreateOneBaseModel.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/BaseModel/DeleteManyBaseModel.js +21 -10
- package/build/dist/Server/Types/Workflow/Components/BaseModel/DeleteManyBaseModel.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/BaseModel/DeleteOneBaseModel.js +21 -10
- package/build/dist/Server/Types/Workflow/Components/BaseModel/DeleteOneBaseModel.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/BaseModel/FindManyBaseModel.js +18 -13
- package/build/dist/Server/Types/Workflow/Components/BaseModel/FindManyBaseModel.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/BaseModel/FindOneBaseModel.js +18 -13
- package/build/dist/Server/Types/Workflow/Components/BaseModel/FindOneBaseModel.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/BaseModel/LogComponentError.js +43 -0
- package/build/dist/Server/Types/Workflow/Components/BaseModel/LogComponentError.js.map +1 -0
- package/build/dist/Server/Types/Workflow/Components/BaseModel/ModelArguments.js +116 -0
- package/build/dist/Server/Types/Workflow/Components/BaseModel/ModelArguments.js.map +1 -0
- package/build/dist/Server/Types/Workflow/Components/BaseModel/OnTriggerBaseModel.js +7 -0
- package/build/dist/Server/Types/Workflow/Components/BaseModel/OnTriggerBaseModel.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/BaseModel/UpdateManyBaseModel.js +24 -13
- package/build/dist/Server/Types/Workflow/Components/BaseModel/UpdateManyBaseModel.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/BaseModel/UpdateOneBaseModel.js +27 -13
- package/build/dist/Server/Types/Workflow/Components/BaseModel/UpdateOneBaseModel.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/Discord/SendMessageToChannel.js +14 -6
- package/build/dist/Server/Types/Workflow/Components/Discord/SendMessageToChannel.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/IncomingWebhookUtils.js +42 -0
- package/build/dist/Server/Types/Workflow/Components/IncomingWebhookUtils.js.map +1 -0
- package/build/dist/Server/Types/Workflow/Components/MicrosoftTeams/SendMessageToChannel.js +15 -6
- package/build/dist/Server/Types/Workflow/Components/MicrosoftTeams/SendMessageToChannel.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/Slack/SendMessageToChannel.js +10 -2
- package/build/dist/Server/Types/Workflow/Components/Slack/SendMessageToChannel.js.map +1 -1
- package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js +1 -1
- package/build/dist/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.js +141 -0
- package/build/dist/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.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/FixRouting.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/AI/SRE/TelemetryImprovementTaskTrigger.js +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/CodeWriteTools.js +6 -6
- package/build/dist/Server/Utils/AI/Toolbox/CodeWriteTools.js.map +1 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/InsertDedupContext.js.map +1 -1
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHub.js +39 -5
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHub.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 +389 -0
- package/build/dist/Server/Utils/DataSource/EgressGuard.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/HttpFetch.js +116 -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/Execute.js +2 -2
- package/build/dist/Server/Utils/Execute.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/InlineImageAccessTokenSync.js +13 -0
- package/build/dist/Server/Utils/InlineImageAccessTokenSync.js.map +1 -1
- 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/LLM/LLMService.js +43 -12
- package/build/dist/Server/Utils/LLM/LLMService.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js +44 -24
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorDependencySuppression.js +158 -0
- package/build/dist/Server/Utils/Monitor/MonitorDependencySuppression.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js +50 -30
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
- 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 +46 -0
- package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
- package/build/dist/Server/Utils/Response.js +121 -6
- package/build/dist/Server/Utils/Response.js.map +1 -1
- package/build/dist/Server/Utils/SSRFProtection.js +358 -0
- package/build/dist/Server/Utils/SSRFProtection.js.map +1 -0
- package/build/dist/Server/Utils/StartServer.js +14 -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/VM/VMRunner.js +73 -1
- package/build/dist/Server/Utils/VM/VMRunner.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 +469 -46
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/Slack/Slack.js +23 -1
- package/build/dist/Server/Utils/Workspace/Slack/Slack.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/WorkspaceBase.js.map +1 -1
- package/build/dist/Types/AI/FixPullRequestCiStatus.js +1 -1
- package/build/dist/Types/AI/FixVerificationStatus.js +2 -2
- package/build/dist/Types/API/Hostname.js +73 -4
- package/build/dist/Types/API/Hostname.js.map +1 -1
- package/build/dist/Types/API/URL.js +42 -24
- package/build/dist/Types/API/URL.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/Billing/BalanceAdjustmentType.js +15 -0
- package/build/dist/Types/Billing/BalanceAdjustmentType.js.map +1 -0
- package/build/dist/Types/Billing/ProjectBalanceType.js +14 -0
- package/build/dist/Types/Billing/ProjectBalanceType.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/Domain.js +22 -0
- package/build/dist/Types/Domain.js.map +1 -1
- package/build/dist/Types/File/MimeType.js +11 -0
- package/build/dist/Types/File/MimeType.js.map +1 -1
- package/build/dist/Types/JSONFunctions.js +14 -0
- package/build/dist/Types/JSONFunctions.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/Types/Workflow/Components/BaseModel.js +83 -28
- package/build/dist/Types/Workflow/Components/BaseModel.js.map +1 -1
- package/build/dist/UI/Components/ErrorBoundary.js +388 -72
- package/build/dist/UI/Components/ErrorBoundary.js.map +1 -1
- package/build/dist/UI/Components/GanttChart/ChartContainer.js +4 -3
- package/build/dist/UI/Components/GanttChart/ChartContainer.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 +3 -1
- package/build/dist/UI/Components/Modal/ConfirmModal.js.map +1 -1
- package/build/dist/UI/Components/Modal/Modal.js +168 -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/ModelDelete/ModelDelete.js +11 -6
- package/build/dist/UI/Components/ModelDelete/ModelDelete.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/SideOver/SideOver.js +105 -30
- package/build/dist/UI/Components/SideOver/SideOver.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/PageScrollLock.js +52 -0
- package/build/dist/UI/Utils/PageScrollLock.js.map +1 -0
- 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/Dashboard/HtmlWidgetDocument.js +4 -2
- package/build/dist/Utils/Dashboard/HtmlWidgetDocument.js.map +1 -1
- package/build/dist/Utils/Dashboard/VariableInterpolation.js +19 -1
- package/build/dist/Utils/Dashboard/VariableInterpolation.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/LegacySerializedArray.js +51 -0
- package/build/dist/Utils/LegacySerializedArray.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/Monitor/MonitorDependencyRule.js +47 -0
- package/build/dist/Utils/Monitor/MonitorDependencyRule.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/build/dist/Utils/Telemetry/SavedViewFilters.js +52 -0
- package/build/dist/Utils/Telemetry/SavedViewFilters.js.map +1 -0
- package/jest.config.json +4 -0
- package/package.json +5 -1
- package/tsconfig.json +14 -10
|
@@ -16,6 +16,7 @@ import WorkspaceType from "../../../../Types/Workspace/WorkspaceType";
|
|
|
16
16
|
import CaptureSpan from "../../Telemetry/CaptureSpan";
|
|
17
17
|
import BadDataException from "../../../../Types/Exception/BadDataException";
|
|
18
18
|
import WorkspaceProjectAuthTokenService from "../../../Services/WorkspaceProjectAuthTokenService";
|
|
19
|
+
import SSRFProtection from "../../SSRFProtection";
|
|
19
20
|
import OneUptimeDate from "../../../../Types/Date";
|
|
20
21
|
import { MicrosoftTeamsAppClientId, MicrosoftTeamsAppClientSecret, MicrosoftTeamsAppTenantId, } from "../../../EnvironmentConfig";
|
|
21
22
|
// Import services for bot commands
|
|
@@ -43,8 +44,26 @@ import MicrosoftTeamsOnCallDutyActions from "./Actions/OnCallDutyPolicy";
|
|
|
43
44
|
import AccessTokenService from "../../../Services/AccessTokenService";
|
|
44
45
|
// Microsoft Teams apps should always be single-tenant
|
|
45
46
|
const MICROSOFT_TEAMS_APP_TYPE = "SingleTenant";
|
|
47
|
+
/*
|
|
48
|
+
* Microsoft's wording when the Bot Framework refuses a proactive post because
|
|
49
|
+
* the app is not a member of the target conversation. Matched case-insensitively
|
|
50
|
+
* so we can replace it with something the admin can act on.
|
|
51
|
+
*/
|
|
52
|
+
const MICROSOFT_TEAMS_ROSTER_ERROR_FRAGMENTS = [
|
|
53
|
+
"not part of the conversation roster",
|
|
54
|
+
"bot is not part of the conversation",
|
|
55
|
+
];
|
|
46
56
|
// Maximum number of pages to fetch when paginating teams
|
|
47
57
|
const MICROSOFT_TEAMS_MAX_PAGES = 500;
|
|
58
|
+
/*
|
|
59
|
+
* Hosts that may receive a Teams incoming webhook. Connector webhooks are
|
|
60
|
+
* issued on outlook.office.com / outlook.office365.com, and per-tenant ones on
|
|
61
|
+
* <tenant>.webhook.office.com — all covered by these two registrable domains.
|
|
62
|
+
*/
|
|
63
|
+
export const MICROSOFT_TEAMS_WEBHOOK_DOMAINS = [
|
|
64
|
+
"office.com",
|
|
65
|
+
"office365.com",
|
|
66
|
+
];
|
|
48
67
|
class MicrosoftTeamsUtil extends WorkspaceBase {
|
|
49
68
|
// Get or create Bot Framework adapter for a specific tenant
|
|
50
69
|
static getBotAdapter() {
|
|
@@ -463,11 +482,26 @@ class MicrosoftTeamsUtil extends WorkspaceBase {
|
|
|
463
482
|
static async sendMessageToChannelViaIncomingWebhook(data) {
|
|
464
483
|
logger.debug("Sending message to Teams channel via incoming webhook:");
|
|
465
484
|
logger.debug(data);
|
|
485
|
+
/*
|
|
486
|
+
* Enforced at the sink, not only at the callers: this URL reaches here from
|
|
487
|
+
* workflow arguments and from status page subscribers, and a caller that
|
|
488
|
+
* forgets the pin is an SSRF from the API server.
|
|
489
|
+
*/
|
|
490
|
+
if (!MicrosoftTeamsUtil.isValidMicrosoftTeamsIncomingWebhookUrl(data.url)) {
|
|
491
|
+
throw new BadDataException(`Microsoft Teams Webhook URL must be an https URL on ${MICROSOFT_TEAMS_WEBHOOK_DOMAINS.join(" or ")}.`);
|
|
492
|
+
}
|
|
466
493
|
// Build a structured MessageCard from markdown for better rendering in Teams
|
|
467
494
|
const payload = this.buildMessageCardFromMarkdown(data.text);
|
|
468
495
|
const apiResult = await API.post({
|
|
469
496
|
url: data.url,
|
|
470
497
|
data: payload,
|
|
498
|
+
options: {
|
|
499
|
+
/*
|
|
500
|
+
* The host is pinned to Microsoft, but do not let a redirect from it
|
|
501
|
+
* bounce this request to an internal address.
|
|
502
|
+
*/
|
|
503
|
+
doNotFollowRedirects: true,
|
|
504
|
+
},
|
|
471
505
|
});
|
|
472
506
|
if (!apiResult) {
|
|
473
507
|
logger.error("Could not send message to Teams channel via incoming webhook.");
|
|
@@ -483,10 +517,14 @@ class MicrosoftTeamsUtil extends WorkspaceBase {
|
|
|
483
517
|
return apiResult;
|
|
484
518
|
}
|
|
485
519
|
static isValidMicrosoftTeamsIncomingWebhookUrl(incomingWebhookUrl) {
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
520
|
+
/*
|
|
521
|
+
* Pin on the URL's HOST, not on a substring of the whole URL. Subscribers
|
|
522
|
+
* (including unauthenticated ones on a public status page) supply this
|
|
523
|
+
* value and the server POSTs to it, so a substring check was satisfied by
|
|
524
|
+
* an attacker-controlled path or query — `http://169.254.169.254/?x=office.com`
|
|
525
|
+
* passed and turned this into an SSRF into the cloud metadata endpoint.
|
|
526
|
+
*/
|
|
527
|
+
return SSRFProtection.isUrlOnAllowedDomain(incomingWebhookUrl, MICROSOFT_TEAMS_WEBHOOK_DOMAINS);
|
|
490
528
|
}
|
|
491
529
|
static async getUsernameFromUserId(data) {
|
|
492
530
|
logger.debug("Getting username from user ID with data:", {
|
|
@@ -697,6 +735,7 @@ class MicrosoftTeamsUtil extends WorkspaceBase {
|
|
|
697
735
|
name: displayName,
|
|
698
736
|
workspaceType: WorkspaceType.MicrosoftTeams,
|
|
699
737
|
teamId: data.teamId,
|
|
738
|
+
membershipType: channelData["membershipType"],
|
|
700
739
|
};
|
|
701
740
|
logger.debug(`Channel match found: ${JSON.stringify(foundChannel)}`);
|
|
702
741
|
return foundChannel;
|
|
@@ -736,6 +775,16 @@ class MicrosoftTeamsUtil extends WorkspaceBase {
|
|
|
736
775
|
const workspaceChannelsToPostTo = [];
|
|
737
776
|
logger.debug(`Processing ${data.workspaceMessagePayload.channelNames.length} channel names`);
|
|
738
777
|
logger.debug(`Channel names: ${JSON.stringify(data.workspaceMessagePayload.channelNames)}`);
|
|
778
|
+
/*
|
|
779
|
+
* Declared before destination resolution so that a destination we cannot
|
|
780
|
+
* even resolve is reported as an error. Silently skipping it made a
|
|
781
|
+
* typo'd or deleted channel look like a successful send.
|
|
782
|
+
*/
|
|
783
|
+
const workspaceMessageResponse = {
|
|
784
|
+
threads: [],
|
|
785
|
+
workspaceType: WorkspaceType.MicrosoftTeams,
|
|
786
|
+
errors: [],
|
|
787
|
+
};
|
|
739
788
|
// Resolve channel names
|
|
740
789
|
for (const channelName of data.workspaceMessagePayload.channelNames) {
|
|
741
790
|
logger.debug(`Attempting to resolve channel name: ${channelName}`);
|
|
@@ -754,6 +803,15 @@ class MicrosoftTeamsUtil extends WorkspaceBase {
|
|
|
754
803
|
}
|
|
755
804
|
else {
|
|
756
805
|
logger.warn(`Channel not found: ${channelName}`);
|
|
806
|
+
workspaceMessageResponse.errors.push({
|
|
807
|
+
channel: {
|
|
808
|
+
id: "",
|
|
809
|
+
name: channelName,
|
|
810
|
+
workspaceType: WorkspaceType.MicrosoftTeams,
|
|
811
|
+
teamId: data.workspaceMessagePayload.teamId,
|
|
812
|
+
},
|
|
813
|
+
error: `Channel "${channelName}" was not found in this Microsoft Teams team. It may have been renamed or deleted.`,
|
|
814
|
+
});
|
|
757
815
|
}
|
|
758
816
|
}
|
|
759
817
|
logger.debug("=== Starting message sending loop ===");
|
|
@@ -781,16 +839,20 @@ class MicrosoftTeamsUtil extends WorkspaceBase {
|
|
|
781
839
|
channelId: channelId,
|
|
782
840
|
});
|
|
783
841
|
logger.error(err);
|
|
842
|
+
workspaceMessageResponse.errors.push({
|
|
843
|
+
channel: {
|
|
844
|
+
id: channelId,
|
|
845
|
+
name: channelId,
|
|
846
|
+
workspaceType: WorkspaceType.MicrosoftTeams,
|
|
847
|
+
teamId: data.workspaceMessagePayload.teamId,
|
|
848
|
+
},
|
|
849
|
+
error: err instanceof Error ? err.message : String(err),
|
|
850
|
+
});
|
|
784
851
|
}
|
|
785
852
|
}
|
|
786
853
|
logger.debug("=== Starting message sending loop ===");
|
|
787
854
|
logger.debug(`Total channels to post to: ${workspaceChannelsToPostTo.length}`);
|
|
788
855
|
logger.debug(`Channels: ${JSON.stringify(workspaceChannelsToPostTo)}`);
|
|
789
|
-
const workspaceMessageResponse = {
|
|
790
|
-
threads: [],
|
|
791
|
-
workspaceType: WorkspaceType.MicrosoftTeams,
|
|
792
|
-
errors: [],
|
|
793
|
-
};
|
|
794
856
|
for (const channel of workspaceChannelsToPostTo) {
|
|
795
857
|
try {
|
|
796
858
|
logger.debug(`Attempting to send message to channel: ${JSON.stringify(channel)}`);
|
|
@@ -915,6 +977,34 @@ class MicrosoftTeamsUtil extends WorkspaceBase {
|
|
|
915
977
|
throw new BadDataException("Microsoft Teams App Client ID not configured");
|
|
916
978
|
}
|
|
917
979
|
logger.debug(`Using bot ID: ${miscData.botId}`);
|
|
980
|
+
/*
|
|
981
|
+
* Bots cannot post to shared channels at all, so fail with the reason
|
|
982
|
+
* rather than letting Microsoft reject the send with a generic error.
|
|
983
|
+
*/
|
|
984
|
+
if (data.workspaceChannel.membershipType === "shared") {
|
|
985
|
+
throw new BadDataException(`"${data.workspaceChannel.name}" is a shared channel, and Microsoft Teams does not allow bots to post in shared channels. Please pick a standard or private channel instead.`);
|
|
986
|
+
}
|
|
987
|
+
/*
|
|
988
|
+
* Preflight: refuse before calling the Bot Framework when we know the
|
|
989
|
+
* app was never installed into this team. Channels are discovered with
|
|
990
|
+
* tenant-wide Graph application permissions, which see every team
|
|
991
|
+
* regardless of installation — so reaching this point proves nothing
|
|
992
|
+
* about whether we can actually post.
|
|
993
|
+
*
|
|
994
|
+
* installedTeams is only populated from install events, so an empty map
|
|
995
|
+
* means "we have not observed any installs" (for example on a workspace
|
|
996
|
+
* connected before this shipped), not "nothing is installed". Only
|
|
997
|
+
* enforce once we have at least one record, and let the Bot Framework
|
|
998
|
+
* error be translated below otherwise.
|
|
999
|
+
*/
|
|
1000
|
+
const installedTeams = miscData.installedTeams || {};
|
|
1001
|
+
const installedTeam = installedTeams[data.teamId];
|
|
1002
|
+
if (Object.keys(installedTeams).length > 0 && !installedTeam) {
|
|
1003
|
+
throw new BadDataException(this.getBotNotInTeamMessage({
|
|
1004
|
+
channelName: data.workspaceChannel.name,
|
|
1005
|
+
membershipType: data.workspaceChannel.membershipType,
|
|
1006
|
+
}));
|
|
1007
|
+
}
|
|
918
1008
|
// Get Bot Framework adapter
|
|
919
1009
|
const adapter = this.getBotAdapter();
|
|
920
1010
|
// Create conversation reference for the channel
|
|
@@ -931,7 +1021,12 @@ class MicrosoftTeamsUtil extends WorkspaceBase {
|
|
|
931
1021
|
tenantId: tenantId,
|
|
932
1022
|
},
|
|
933
1023
|
channelId: "msteams",
|
|
934
|
-
|
|
1024
|
+
/*
|
|
1025
|
+
* Fallback is the commercial-cloud global endpoint; the serviceUrl
|
|
1026
|
+
* captured from the install event is preferred (required for GCC/DoD),
|
|
1027
|
+
* matching what sendAdaptiveCardToChat already does.
|
|
1028
|
+
*/
|
|
1029
|
+
serviceUrl: (installedTeam === null || installedTeam === void 0 ? void 0 : installedTeam.serviceUrl) || "https://smba.trafficmanager.net/teams/",
|
|
935
1030
|
};
|
|
936
1031
|
logger.debug(`Conversation reference: ${JSON.stringify(conversationReference)}`);
|
|
937
1032
|
// Send proactive message using Bot Framework
|
|
@@ -961,9 +1056,44 @@ class MicrosoftTeamsUtil extends WorkspaceBase {
|
|
|
961
1056
|
teamId: data.teamId,
|
|
962
1057
|
});
|
|
963
1058
|
logger.error(error);
|
|
1059
|
+
/*
|
|
1060
|
+
* Microsoft's roster rejection is meaningless to an admin ("The bot is
|
|
1061
|
+
* not part of the conversation roster"). Replace it with the action that
|
|
1062
|
+
* actually fixes it.
|
|
1063
|
+
*/
|
|
1064
|
+
if (this.isBotNotInConversationRosterError(error)) {
|
|
1065
|
+
throw new BadDataException(this.getBotNotInTeamMessage({
|
|
1066
|
+
channelName: data.workspaceChannel.name,
|
|
1067
|
+
membershipType: data.workspaceChannel.membershipType,
|
|
1068
|
+
}));
|
|
1069
|
+
}
|
|
964
1070
|
throw error;
|
|
965
1071
|
}
|
|
966
1072
|
}
|
|
1073
|
+
/*
|
|
1074
|
+
* True when an error is Microsoft's "bot is not in this conversation"
|
|
1075
|
+
* rejection from a proactive Bot Framework send.
|
|
1076
|
+
*/
|
|
1077
|
+
static isBotNotInConversationRosterError(error) {
|
|
1078
|
+
const message = (error instanceof Error ? error.message : String(error || "")).toLowerCase();
|
|
1079
|
+
if (!message) {
|
|
1080
|
+
return false;
|
|
1081
|
+
}
|
|
1082
|
+
return MICROSOFT_TEAMS_ROSTER_ERROR_FRAGMENTS.some((fragment) => {
|
|
1083
|
+
return message.includes(fragment);
|
|
1084
|
+
});
|
|
1085
|
+
}
|
|
1086
|
+
/*
|
|
1087
|
+
* Actionable replacement for the roster error. Private channels need the app
|
|
1088
|
+
* installed into the channel itself; a parent-team install does not cover
|
|
1089
|
+
* them, so the two cases get different instructions.
|
|
1090
|
+
*/
|
|
1091
|
+
static getBotNotInTeamMessage(data) {
|
|
1092
|
+
if (data.membershipType === "private") {
|
|
1093
|
+
return `The OneUptime app is not installed in the private channel "${data.channelName}". In Microsoft Teams, open the channel, click the "..." menu, then Manage channel > Apps > Add an app, and add OneUptime. Installing OneUptime in the parent team does not cover private channels.`;
|
|
1094
|
+
}
|
|
1095
|
+
return `The OneUptime app is not installed in the Microsoft Teams team that owns "${data.channelName}". In Microsoft Teams, click the "..." next to the team name, then Manage team > Apps > More apps, and add OneUptime. Installing OneUptime for yourself or in a chat is not the same as adding it to the team.`;
|
|
1096
|
+
}
|
|
967
1097
|
/*
|
|
968
1098
|
* Sends an adaptive card to a Teams group chat or personal (1:1) chat via a
|
|
969
1099
|
* proactive Bot Framework message. The OneUptime app must have been added to
|
|
@@ -1109,6 +1239,7 @@ class MicrosoftTeamsUtil extends WorkspaceBase {
|
|
|
1109
1239
|
name: channelData["displayName"],
|
|
1110
1240
|
workspaceType: WorkspaceType.MicrosoftTeams,
|
|
1111
1241
|
teamId: data.teamId,
|
|
1242
|
+
membershipType: channelData["membershipType"],
|
|
1112
1243
|
};
|
|
1113
1244
|
logger.debug(`Channel info retrieved: ${JSON.stringify(channel)}`);
|
|
1114
1245
|
return channel;
|
|
@@ -1251,10 +1382,21 @@ class MicrosoftTeamsUtil extends WorkspaceBase {
|
|
|
1251
1382
|
const channelsArray = channelsData["value"] || [];
|
|
1252
1383
|
const channelsDict = {};
|
|
1253
1384
|
for (const channelData of channelsArray) {
|
|
1385
|
+
const membershipType = channelData["membershipType"];
|
|
1386
|
+
/*
|
|
1387
|
+
* Microsoft Teams does not support bots in shared channels, so offering
|
|
1388
|
+
* one as a notification destination can only ever produce a failed send.
|
|
1389
|
+
*/
|
|
1390
|
+
if (membershipType === "shared") {
|
|
1391
|
+
logger.debug(`Skipping shared channel ${channelData["displayName"]} — Teams does not support bots in shared channels.`);
|
|
1392
|
+
continue;
|
|
1393
|
+
}
|
|
1254
1394
|
const channel = {
|
|
1255
1395
|
id: channelData["id"],
|
|
1256
1396
|
name: channelData["displayName"],
|
|
1257
1397
|
workspaceType: WorkspaceType.MicrosoftTeams,
|
|
1398
|
+
teamId: data.teamId,
|
|
1399
|
+
membershipType: membershipType,
|
|
1258
1400
|
};
|
|
1259
1401
|
channelsDict[channel.id] = channel;
|
|
1260
1402
|
}
|
|
@@ -1410,6 +1552,18 @@ class MicrosoftTeamsUtil extends WorkspaceBase {
|
|
|
1410
1552
|
onlyIfMissingOrStale: true,
|
|
1411
1553
|
});
|
|
1412
1554
|
}
|
|
1555
|
+
/*
|
|
1556
|
+
* Same backfill for team installs. Teams the app was added to before we
|
|
1557
|
+
* started recording installs fire no new install event, so an @mention in
|
|
1558
|
+
* any channel of that team is the recovery path that makes proactive
|
|
1559
|
+
* channel notifications work again.
|
|
1560
|
+
*/
|
|
1561
|
+
if (messageConversationType === "channel") {
|
|
1562
|
+
await this.captureTeamFromBotActivity({
|
|
1563
|
+
activity: data.activity,
|
|
1564
|
+
turnContext: data.turnContext,
|
|
1565
|
+
});
|
|
1566
|
+
}
|
|
1413
1567
|
// If this is actually an Adaptive Card submit wrapped as a message, route to invoke handler
|
|
1414
1568
|
if (possibleActionValue["action"] ||
|
|
1415
1569
|
((_b = possibleActionValue["data"]) === null || _b === void 0 ? void 0 : _b["action"])) {
|
|
@@ -1442,27 +1596,15 @@ class MicrosoftTeamsUtil extends WorkspaceBase {
|
|
|
1442
1596
|
return;
|
|
1443
1597
|
}
|
|
1444
1598
|
// Get project auth by tenant ID
|
|
1445
|
-
const
|
|
1446
|
-
|
|
1447
|
-
workspaceType: WorkspaceType.MicrosoftTeams,
|
|
1448
|
-
workspaceProjectId: tenantId,
|
|
1449
|
-
},
|
|
1450
|
-
select: {
|
|
1451
|
-
projectId: true,
|
|
1452
|
-
workspaceProjectId: true,
|
|
1453
|
-
},
|
|
1454
|
-
props: {
|
|
1455
|
-
isRoot: true,
|
|
1456
|
-
},
|
|
1599
|
+
const tenantResolution = await this.resolveProjectByTenantId({
|
|
1600
|
+
tenantId: tenantId,
|
|
1457
1601
|
});
|
|
1458
|
-
if (!projectAuth ||
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
});
|
|
1462
|
-
await data.turnContext.sendActivity("Sorry, I couldn't find your project configuration. Please try again later.");
|
|
1602
|
+
if (!tenantResolution.projectAuth ||
|
|
1603
|
+
!tenantResolution.projectAuth.projectId) {
|
|
1604
|
+
await data.turnContext.sendActivity(this.getTenantResolutionFailureMessage(tenantResolution));
|
|
1463
1605
|
return;
|
|
1464
1606
|
}
|
|
1465
|
-
const projectId = projectAuth.projectId;
|
|
1607
|
+
const projectId = tenantResolution.projectAuth.projectId;
|
|
1466
1608
|
logger.debug(`Found project ID: ${projectId.toString()} for tenant ID: ${tenantId}`);
|
|
1467
1609
|
// Clean the message text by removing bot mentions
|
|
1468
1610
|
const cleanText = messageText
|
|
@@ -2253,26 +2395,15 @@ All monitoring checks are passing normally.`;
|
|
|
2253
2395
|
await data.turnContext.sendActivity("Sorry, I couldn't identify your organization. Please try again later.");
|
|
2254
2396
|
return;
|
|
2255
2397
|
}
|
|
2256
|
-
const
|
|
2257
|
-
|
|
2258
|
-
workspaceType: WorkspaceType.MicrosoftTeams,
|
|
2259
|
-
workspaceProjectId: tenantId,
|
|
2260
|
-
},
|
|
2261
|
-
select: {
|
|
2262
|
-
projectId: true,
|
|
2263
|
-
authToken: true,
|
|
2264
|
-
workspaceProjectId: true,
|
|
2265
|
-
},
|
|
2266
|
-
props: { isRoot: true },
|
|
2398
|
+
const tenantResolution = await this.resolveProjectByTenantId({
|
|
2399
|
+
tenantId: tenantId,
|
|
2267
2400
|
});
|
|
2268
|
-
if (!projectAuth ||
|
|
2269
|
-
|
|
2270
|
-
|
|
2271
|
-
});
|
|
2272
|
-
await data.turnContext.sendActivity("Sorry, I couldn't find your project configuration.");
|
|
2401
|
+
if (!tenantResolution.projectAuth ||
|
|
2402
|
+
!tenantResolution.projectAuth.projectId) {
|
|
2403
|
+
await data.turnContext.sendActivity(this.getTenantResolutionFailureMessage(tenantResolution));
|
|
2273
2404
|
return;
|
|
2274
2405
|
}
|
|
2275
|
-
const projectId = projectAuth.projectId;
|
|
2406
|
+
const projectId = tenantResolution.projectAuth.projectId;
|
|
2276
2407
|
const fromObj = (data.activity["from"] ||
|
|
2277
2408
|
{});
|
|
2278
2409
|
const teamsUserId = fromObj["aadObjectId"] || undefined;
|
|
@@ -2402,6 +2533,10 @@ All monitoring checks are passing normally.`;
|
|
|
2402
2533
|
activity: data.activity,
|
|
2403
2534
|
turnContext: data.turnContext,
|
|
2404
2535
|
});
|
|
2536
|
+
await this.captureTeamFromBotActivity({
|
|
2537
|
+
activity: data.activity,
|
|
2538
|
+
turnContext: data.turnContext,
|
|
2539
|
+
});
|
|
2405
2540
|
await this.sendWelcomeAdaptiveCard(data.turnContext);
|
|
2406
2541
|
}
|
|
2407
2542
|
if (botWasRemoved) {
|
|
@@ -2409,6 +2544,9 @@ All monitoring checks are passing normally.`;
|
|
|
2409
2544
|
await this.removeChatFromBotActivity({
|
|
2410
2545
|
activity: data.activity,
|
|
2411
2546
|
});
|
|
2547
|
+
await this.removeTeamFromBotActivity({
|
|
2548
|
+
activity: data.activity,
|
|
2549
|
+
});
|
|
2412
2550
|
}
|
|
2413
2551
|
}
|
|
2414
2552
|
static async handleInstallationUpdateActivity(data) {
|
|
@@ -2430,13 +2568,115 @@ All monitoring checks are passing normally.`;
|
|
|
2430
2568
|
activity: data.activity,
|
|
2431
2569
|
turnContext: data.turnContext,
|
|
2432
2570
|
});
|
|
2571
|
+
await this.captureTeamFromBotActivity({
|
|
2572
|
+
activity: data.activity,
|
|
2573
|
+
turnContext: data.turnContext,
|
|
2574
|
+
});
|
|
2433
2575
|
}
|
|
2434
2576
|
else if (action === "remove" || action === "remove-upgrade") {
|
|
2435
2577
|
logger.debug("OneUptime bot was uninstalled");
|
|
2436
2578
|
await this.removeChatFromBotActivity({
|
|
2437
2579
|
activity: data.activity,
|
|
2438
2580
|
});
|
|
2581
|
+
await this.removeTeamFromBotActivity({
|
|
2582
|
+
activity: data.activity,
|
|
2583
|
+
});
|
|
2584
|
+
}
|
|
2585
|
+
}
|
|
2586
|
+
/*
|
|
2587
|
+
* Resolve the OneUptime project that owns a Microsoft tenant.
|
|
2588
|
+
*
|
|
2589
|
+
* Bot activities carry a tenant id and nothing else, so the tenant is the
|
|
2590
|
+
* only key we can resolve a project by. A tenant may legitimately be
|
|
2591
|
+
* connected to more than one OneUptime project (saveChatToProjectAuthTokens
|
|
2592
|
+
* fans out for exactly that reason), and when that happens the tenant alone
|
|
2593
|
+
* does NOT identify a project.
|
|
2594
|
+
*
|
|
2595
|
+
* Previously this was a bare findOneBy, which silently returned whichever
|
|
2596
|
+
* row sorted first and served that project's incidents, alerts and AI
|
|
2597
|
+
* assistant answers to anyone in the tenant — including users with no access
|
|
2598
|
+
* to it. The bot's message path performs no per-user authorization, so
|
|
2599
|
+
* picking arbitrarily is a cross-project disclosure. Refuse instead.
|
|
2600
|
+
*/
|
|
2601
|
+
static async resolveProjectByTenantId(data) {
|
|
2602
|
+
const projectAuths = await WorkspaceProjectAuthTokenService.findBy({
|
|
2603
|
+
query: {
|
|
2604
|
+
workspaceType: WorkspaceType.MicrosoftTeams,
|
|
2605
|
+
workspaceProjectId: data.tenantId,
|
|
2606
|
+
},
|
|
2607
|
+
select: {
|
|
2608
|
+
projectId: true,
|
|
2609
|
+
authToken: true,
|
|
2610
|
+
workspaceProjectId: true,
|
|
2611
|
+
miscData: true,
|
|
2612
|
+
},
|
|
2613
|
+
limit: LIMIT_MAX,
|
|
2614
|
+
skip: 0,
|
|
2615
|
+
props: {
|
|
2616
|
+
isRoot: true,
|
|
2617
|
+
},
|
|
2618
|
+
});
|
|
2619
|
+
/*
|
|
2620
|
+
* Ambiguity is about distinct PROJECTS, not rows. Two rows pointing at the
|
|
2621
|
+
* same project are a data-integrity wart, not a question we cannot answer,
|
|
2622
|
+
* so collapse them rather than refusing to serve that tenant forever.
|
|
2623
|
+
*/
|
|
2624
|
+
const seenProjectIds = new Set();
|
|
2625
|
+
const usableProjectAuths = [];
|
|
2626
|
+
for (const projectAuth of projectAuths) {
|
|
2627
|
+
if (!projectAuth.projectId) {
|
|
2628
|
+
continue;
|
|
2629
|
+
}
|
|
2630
|
+
const projectIdString = projectAuth.projectId.toString();
|
|
2631
|
+
if (seenProjectIds.has(projectIdString)) {
|
|
2632
|
+
continue;
|
|
2633
|
+
}
|
|
2634
|
+
seenProjectIds.add(projectIdString);
|
|
2635
|
+
usableProjectAuths.push(projectAuth);
|
|
2636
|
+
}
|
|
2637
|
+
if (usableProjectAuths.length === 0) {
|
|
2638
|
+
logger.error("Project auth not found for tenant ID: " + data.tenantId, {
|
|
2639
|
+
tenantId: data.tenantId,
|
|
2640
|
+
});
|
|
2641
|
+
return {
|
|
2642
|
+
projectAuth: null,
|
|
2643
|
+
isAmbiguous: false,
|
|
2644
|
+
candidateProjectIds: [],
|
|
2645
|
+
};
|
|
2646
|
+
}
|
|
2647
|
+
if (usableProjectAuths.length > 1) {
|
|
2648
|
+
const candidateProjectIds = usableProjectAuths.map((projectAuth) => {
|
|
2649
|
+
return projectAuth.projectId;
|
|
2650
|
+
});
|
|
2651
|
+
logger.error(`Microsoft tenant ${data.tenantId} is connected to ${usableProjectAuths.length} OneUptime projects. Refusing to guess which one this bot activity belongs to.`, {
|
|
2652
|
+
tenantId: data.tenantId,
|
|
2653
|
+
projectIds: candidateProjectIds
|
|
2654
|
+
.map((projectId) => {
|
|
2655
|
+
return projectId.toString();
|
|
2656
|
+
})
|
|
2657
|
+
.join(", "),
|
|
2658
|
+
});
|
|
2659
|
+
return {
|
|
2660
|
+
projectAuth: null,
|
|
2661
|
+
isAmbiguous: true,
|
|
2662
|
+
candidateProjectIds: candidateProjectIds,
|
|
2663
|
+
};
|
|
2664
|
+
}
|
|
2665
|
+
return {
|
|
2666
|
+
projectAuth: usableProjectAuths[0],
|
|
2667
|
+
isAmbiguous: false,
|
|
2668
|
+
candidateProjectIds: [usableProjectAuths[0].projectId],
|
|
2669
|
+
};
|
|
2670
|
+
}
|
|
2671
|
+
/*
|
|
2672
|
+
* User-facing text for a failed tenant resolution. The two cases need
|
|
2673
|
+
* different remedies, so they must not share a message.
|
|
2674
|
+
*/
|
|
2675
|
+
static getTenantResolutionFailureMessage(resolution) {
|
|
2676
|
+
if (resolution.isAmbiguous) {
|
|
2677
|
+
return "This Microsoft 365 organization is connected to more than one OneUptime project, so I can't tell which one you mean. Please ask your OneUptime admin to disconnect Microsoft Teams from all but one project.";
|
|
2439
2678
|
}
|
|
2679
|
+
return "Sorry, I couldn't find your project configuration. This usually means the Microsoft 365 organization you're messaging me from isn't the one connected to OneUptime. Please ask your OneUptime admin to check the Microsoft Teams integration in Project Settings.";
|
|
2440
2680
|
}
|
|
2441
2681
|
/*
|
|
2442
2682
|
* Chats (group chats and personal 1:1 chats) cannot be listed with the
|
|
@@ -2713,6 +2953,148 @@ All monitoring checks are passing normally.`;
|
|
|
2713
2953
|
}
|
|
2714
2954
|
return (projectAuth.miscData.availableChats || {});
|
|
2715
2955
|
}
|
|
2956
|
+
/*
|
|
2957
|
+
* Record that the OneUptime app was installed into a team.
|
|
2958
|
+
*
|
|
2959
|
+
* Team installs arrive as conversationUpdate / installationUpdate activities
|
|
2960
|
+
* whose conversation is a channel. captureChatFromBotActivity drops those
|
|
2961
|
+
* (channels are not chats), so before this existed we threw away the only
|
|
2962
|
+
* signal that tells us a proactive channel post will be accepted.
|
|
2963
|
+
*/
|
|
2964
|
+
static async captureTeamFromBotActivity(data) {
|
|
2965
|
+
var _a;
|
|
2966
|
+
try {
|
|
2967
|
+
const channelData = data.activity["channelData"] || {};
|
|
2968
|
+
const team = channelData["team"];
|
|
2969
|
+
const teamId = (team === null || team === void 0 ? void 0 : team["id"]) || "";
|
|
2970
|
+
if (!teamId) {
|
|
2971
|
+
// Not a team-scoped activity (personal or group chat). Nothing to do.
|
|
2972
|
+
return;
|
|
2973
|
+
}
|
|
2974
|
+
const tenantId = ((_a = channelData["tenant"]) === null || _a === void 0 ? void 0 : _a["id"]) || "";
|
|
2975
|
+
if (!tenantId) {
|
|
2976
|
+
logger.debug("No tenant id found on team activity. Skipping.");
|
|
2977
|
+
return;
|
|
2978
|
+
}
|
|
2979
|
+
const installedTeam = {
|
|
2980
|
+
id: teamId,
|
|
2981
|
+
name: (team === null || team === void 0 ? void 0 : team["name"]) || undefined,
|
|
2982
|
+
serviceUrl: data.activity["serviceUrl"] ||
|
|
2983
|
+
data.turnContext.activity.serviceUrl ||
|
|
2984
|
+
undefined,
|
|
2985
|
+
addedAt: OneUptimeDate.getCurrentDate().toISOString(),
|
|
2986
|
+
};
|
|
2987
|
+
await this.saveTeamToProjectAuthTokens({
|
|
2988
|
+
tenantId: tenantId,
|
|
2989
|
+
team: installedTeam,
|
|
2990
|
+
});
|
|
2991
|
+
logger.debug(`Captured Microsoft Teams team install ${teamId} for tenant ${tenantId}`);
|
|
2992
|
+
}
|
|
2993
|
+
catch (err) {
|
|
2994
|
+
logger.error("Error capturing Microsoft Teams team from bot activity:");
|
|
2995
|
+
logger.error(err);
|
|
2996
|
+
}
|
|
2997
|
+
}
|
|
2998
|
+
static async removeTeamFromBotActivity(data) {
|
|
2999
|
+
var _a, _b;
|
|
3000
|
+
try {
|
|
3001
|
+
const channelData = data.activity["channelData"] || {};
|
|
3002
|
+
const teamId = ((_a = channelData["team"]) === null || _a === void 0 ? void 0 : _a["id"]) || "";
|
|
3003
|
+
const tenantId = ((_b = channelData["tenant"]) === null || _b === void 0 ? void 0 : _b["id"]) || "";
|
|
3004
|
+
if (!teamId || !tenantId) {
|
|
3005
|
+
return;
|
|
3006
|
+
}
|
|
3007
|
+
await this.removeTeamFromProjectAuthTokens({
|
|
3008
|
+
tenantId: tenantId,
|
|
3009
|
+
teamId: teamId,
|
|
3010
|
+
});
|
|
3011
|
+
logger.debug(`Removed Microsoft Teams team install ${teamId} for tenant ${tenantId}`);
|
|
3012
|
+
}
|
|
3013
|
+
catch (err) {
|
|
3014
|
+
logger.error("Error removing Microsoft Teams team from bot activity:");
|
|
3015
|
+
logger.error(err);
|
|
3016
|
+
}
|
|
3017
|
+
}
|
|
3018
|
+
static async saveTeamToProjectAuthTokens(data) {
|
|
3019
|
+
/*
|
|
3020
|
+
* Same fan-out reasoning as saveChatToProjectAuthTokens: the install event
|
|
3021
|
+
* does not say which project it belongs to, so record it on every project
|
|
3022
|
+
* connected to this tenant.
|
|
3023
|
+
*/
|
|
3024
|
+
const projectAuths = await WorkspaceProjectAuthTokenService.findBy({
|
|
3025
|
+
query: {
|
|
3026
|
+
workspaceType: WorkspaceType.MicrosoftTeams,
|
|
3027
|
+
workspaceProjectId: data.tenantId,
|
|
3028
|
+
},
|
|
3029
|
+
select: {
|
|
3030
|
+
_id: true,
|
|
3031
|
+
miscData: true,
|
|
3032
|
+
},
|
|
3033
|
+
limit: LIMIT_MAX,
|
|
3034
|
+
skip: 0,
|
|
3035
|
+
props: {
|
|
3036
|
+
isRoot: true,
|
|
3037
|
+
},
|
|
3038
|
+
});
|
|
3039
|
+
for (const projectAuth of projectAuths) {
|
|
3040
|
+
const miscData = Object.assign({}, (projectAuth.miscData || {}));
|
|
3041
|
+
miscData.installedTeams = Object.assign(Object.assign({}, (miscData.installedTeams || {})), { [data.team.id]: data.team });
|
|
3042
|
+
await WorkspaceProjectAuthTokenService.updateOneById({
|
|
3043
|
+
id: projectAuth.id,
|
|
3044
|
+
data: {
|
|
3045
|
+
miscData: miscData,
|
|
3046
|
+
},
|
|
3047
|
+
props: {
|
|
3048
|
+
isRoot: true,
|
|
3049
|
+
},
|
|
3050
|
+
});
|
|
3051
|
+
}
|
|
3052
|
+
}
|
|
3053
|
+
static async removeTeamFromProjectAuthTokens(data) {
|
|
3054
|
+
const projectAuths = await WorkspaceProjectAuthTokenService.findBy({
|
|
3055
|
+
query: {
|
|
3056
|
+
workspaceType: WorkspaceType.MicrosoftTeams,
|
|
3057
|
+
workspaceProjectId: data.tenantId,
|
|
3058
|
+
},
|
|
3059
|
+
select: {
|
|
3060
|
+
_id: true,
|
|
3061
|
+
miscData: true,
|
|
3062
|
+
},
|
|
3063
|
+
limit: LIMIT_MAX,
|
|
3064
|
+
skip: 0,
|
|
3065
|
+
props: {
|
|
3066
|
+
isRoot: true,
|
|
3067
|
+
},
|
|
3068
|
+
});
|
|
3069
|
+
for (const projectAuth of projectAuths) {
|
|
3070
|
+
const miscData = Object.assign({}, (projectAuth.miscData || {}));
|
|
3071
|
+
if (!miscData.installedTeams || !miscData.installedTeams[data.teamId]) {
|
|
3072
|
+
continue;
|
|
3073
|
+
}
|
|
3074
|
+
const installedTeams = Object.assign({}, miscData.installedTeams);
|
|
3075
|
+
delete installedTeams[data.teamId];
|
|
3076
|
+
miscData.installedTeams = installedTeams;
|
|
3077
|
+
await WorkspaceProjectAuthTokenService.updateOneById({
|
|
3078
|
+
id: projectAuth.id,
|
|
3079
|
+
data: {
|
|
3080
|
+
miscData: miscData,
|
|
3081
|
+
},
|
|
3082
|
+
props: {
|
|
3083
|
+
isRoot: true,
|
|
3084
|
+
},
|
|
3085
|
+
});
|
|
3086
|
+
}
|
|
3087
|
+
}
|
|
3088
|
+
static async getInstalledTeamsForProject(data) {
|
|
3089
|
+
const projectAuth = await WorkspaceProjectAuthTokenService.getProjectAuth({
|
|
3090
|
+
projectId: data.projectId,
|
|
3091
|
+
workspaceType: WorkspaceType.MicrosoftTeams,
|
|
3092
|
+
});
|
|
3093
|
+
if (!projectAuth || !projectAuth.miscData) {
|
|
3094
|
+
return {};
|
|
3095
|
+
}
|
|
3096
|
+
return (projectAuth.miscData.installedTeams || {});
|
|
3097
|
+
}
|
|
2716
3098
|
/**
|
|
2717
3099
|
* Process Bot Framework activity using the botbuilder SDK adapter.processActivity
|
|
2718
3100
|
* This replaces the manual JWT validation and activity handling with proper SDK methods
|
|
@@ -3045,7 +3427,12 @@ All monitoring checks are passing normally.`;
|
|
|
3045
3427
|
id: t["id"],
|
|
3046
3428
|
name: t["displayName"] || "Unnamed Team",
|
|
3047
3429
|
};
|
|
3048
|
-
|
|
3430
|
+
/*
|
|
3431
|
+
* Keyed by id, not display name — Teams allows duplicate team
|
|
3432
|
+
* names, and keying by name silently collapsed them so only the
|
|
3433
|
+
* last one of each name was selectable.
|
|
3434
|
+
*/
|
|
3435
|
+
acc[team.id] = team;
|
|
3049
3436
|
return acc;
|
|
3050
3437
|
}, {});
|
|
3051
3438
|
logger.debug(`Processed ${Object.keys(availableTeams).length} teams`);
|
|
@@ -3510,6 +3897,12 @@ __decorate([
|
|
|
3510
3897
|
__metadata("design:paramtypes", [Object]),
|
|
3511
3898
|
__metadata("design:returntype", Promise)
|
|
3512
3899
|
], MicrosoftTeamsUtil, "handleInstallationUpdateActivity", null);
|
|
3900
|
+
__decorate([
|
|
3901
|
+
CaptureSpan(),
|
|
3902
|
+
__metadata("design:type", Function),
|
|
3903
|
+
__metadata("design:paramtypes", [Object]),
|
|
3904
|
+
__metadata("design:returntype", Promise)
|
|
3905
|
+
], MicrosoftTeamsUtil, "resolveProjectByTenantId", null);
|
|
3513
3906
|
__decorate([
|
|
3514
3907
|
CaptureSpan(),
|
|
3515
3908
|
__metadata("design:type", Function),
|
|
@@ -3540,6 +3933,36 @@ __decorate([
|
|
|
3540
3933
|
__metadata("design:paramtypes", [Object]),
|
|
3541
3934
|
__metadata("design:returntype", Promise)
|
|
3542
3935
|
], MicrosoftTeamsUtil, "getChatsForProject", null);
|
|
3936
|
+
__decorate([
|
|
3937
|
+
CaptureSpan(),
|
|
3938
|
+
__metadata("design:type", Function),
|
|
3939
|
+
__metadata("design:paramtypes", [Object]),
|
|
3940
|
+
__metadata("design:returntype", Promise)
|
|
3941
|
+
], MicrosoftTeamsUtil, "captureTeamFromBotActivity", null);
|
|
3942
|
+
__decorate([
|
|
3943
|
+
CaptureSpan(),
|
|
3944
|
+
__metadata("design:type", Function),
|
|
3945
|
+
__metadata("design:paramtypes", [Object]),
|
|
3946
|
+
__metadata("design:returntype", Promise)
|
|
3947
|
+
], MicrosoftTeamsUtil, "removeTeamFromBotActivity", null);
|
|
3948
|
+
__decorate([
|
|
3949
|
+
CaptureSpan(),
|
|
3950
|
+
__metadata("design:type", Function),
|
|
3951
|
+
__metadata("design:paramtypes", [Object]),
|
|
3952
|
+
__metadata("design:returntype", Promise)
|
|
3953
|
+
], MicrosoftTeamsUtil, "saveTeamToProjectAuthTokens", null);
|
|
3954
|
+
__decorate([
|
|
3955
|
+
CaptureSpan(),
|
|
3956
|
+
__metadata("design:type", Function),
|
|
3957
|
+
__metadata("design:paramtypes", [Object]),
|
|
3958
|
+
__metadata("design:returntype", Promise)
|
|
3959
|
+
], MicrosoftTeamsUtil, "removeTeamFromProjectAuthTokens", null);
|
|
3960
|
+
__decorate([
|
|
3961
|
+
CaptureSpan(),
|
|
3962
|
+
__metadata("design:type", Function),
|
|
3963
|
+
__metadata("design:paramtypes", [Object]),
|
|
3964
|
+
__metadata("design:returntype", Promise)
|
|
3965
|
+
], MicrosoftTeamsUtil, "getInstalledTeamsForProject", null);
|
|
3543
3966
|
__decorate([
|
|
3544
3967
|
CaptureSpan(),
|
|
3545
3968
|
__metadata("design:type", Function),
|