@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
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
import {
|
|
2
|
+
MAXIMUM_PASSWORD_LENGTH,
|
|
3
|
+
MINIMUM_PASSWORD_LENGTH,
|
|
4
|
+
getPasswordValidationError,
|
|
5
|
+
} from "../../Types/Password";
|
|
6
|
+
import { describe, expect, test } from "@jest/globals";
|
|
7
|
+
import fs from "fs";
|
|
8
|
+
import path from "path";
|
|
9
|
+
|
|
10
|
+
/*
|
|
11
|
+
* The password policy, pinned.
|
|
12
|
+
*
|
|
13
|
+
* Before this module existed the only thing enforcing a minimum password
|
|
14
|
+
* length in OneUptime was `minLength: 6` typed inline into each browser form.
|
|
15
|
+
* A password that arrives from anywhere other than that form — the master-admin
|
|
16
|
+
* "set this user's password" endpoint being the obvious one — skipped the check
|
|
17
|
+
* entirely. So the value of this module is not that it is clever; it is that
|
|
18
|
+
* exactly one place decides what "acceptable" means, and both the form and the
|
|
19
|
+
* server ask it.
|
|
20
|
+
*
|
|
21
|
+
* That makes two classes of silent breakage worth guarding:
|
|
22
|
+
*
|
|
23
|
+
* 1. The RULES drifting. Every branch here is a rejection an operator or a
|
|
24
|
+
* user will read, and the order the branches run in is load-bearing (a
|
|
25
|
+
* six-space password is long enough and still not a password). Loosening
|
|
26
|
+
* one by accident is invisible until a bad password is already hashed and
|
|
27
|
+
* stored.
|
|
28
|
+
* 2. The rules drifting APART. If the Admin Dashboard form goes back to
|
|
29
|
+
* hardcoding a number, then retuning the policy here silently stops
|
|
30
|
+
* retuning the form, and the browser starts accepting what the server
|
|
31
|
+
* rejects — which surfaces to the operator as an opaque failed request.
|
|
32
|
+
* The last describe block below reads that form's source to pin it.
|
|
33
|
+
*
|
|
34
|
+
* The length cases are derived from the constants rather than written as 6 and
|
|
35
|
+
* 100, so that raising the minimum moves these tests with the policy instead of
|
|
36
|
+
* turning them into a wall of failures that has to be hand-edited (and might be
|
|
37
|
+
* hand-edited wrongly).
|
|
38
|
+
*/
|
|
39
|
+
|
|
40
|
+
describe("getPasswordValidationError rejects a missing password", () => {
|
|
41
|
+
/*
|
|
42
|
+
* undefined, null and "" all mean "the operator submitted the form without
|
|
43
|
+
* typing anything", and each arrives from a different layer: undefined from a
|
|
44
|
+
* JSON body with no `password` key at all, null from a client that sent one
|
|
45
|
+
* explicitly, "" from an empty text input. They have to be one message
|
|
46
|
+
* because to the person reading it they are one mistake.
|
|
47
|
+
*/
|
|
48
|
+
test("undefined, null and the empty string all report the password as required", () => {
|
|
49
|
+
const expected: string = "Password is required.";
|
|
50
|
+
|
|
51
|
+
expect(getPasswordValidationError(undefined)).toBe(expected);
|
|
52
|
+
expect(getPasswordValidationError(null)).toBe(expected);
|
|
53
|
+
expect(getPasswordValidationError("")).toBe(expected);
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
describe("getPasswordValidationError rejects a blank password", () => {
|
|
58
|
+
test("a single space and a tab/newline run are blank, not passwords", () => {
|
|
59
|
+
expect(getPasswordValidationError(" ")).toBe("Password cannot be blank.");
|
|
60
|
+
expect(getPasswordValidationError("\t\n")).toBe(
|
|
61
|
+
"Password cannot be blank.",
|
|
62
|
+
);
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
/*
|
|
66
|
+
* The case the blank check exists for.
|
|
67
|
+
*
|
|
68
|
+
* Six spaces satisfies the length rule on its own — nothing below this line
|
|
69
|
+
* would reject it — so without the blank branch a user could be given a
|
|
70
|
+
* password of pure whitespace that they can neither see nor reliably retype.
|
|
71
|
+
* If the blank check were ever reordered below the length check, or dropped
|
|
72
|
+
* because "the length check covers it", this is the case that would start
|
|
73
|
+
* passing silently, and the shorter whitespace strings above would not catch
|
|
74
|
+
* it because they fail the length rule anyway.
|
|
75
|
+
*/
|
|
76
|
+
test("a whitespace-only value long enough to pass the length rule is still rejected", () => {
|
|
77
|
+
const sixSpaces: string = " ".repeat(MINIMUM_PASSWORD_LENGTH);
|
|
78
|
+
|
|
79
|
+
expect(sixSpaces.length).toBeGreaterThanOrEqual(MINIMUM_PASSWORD_LENGTH);
|
|
80
|
+
expect(getPasswordValidationError(sixSpaces)).toBe(
|
|
81
|
+
"Password cannot be blank.",
|
|
82
|
+
);
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
/*
|
|
86
|
+
* Precedence in the other direction: blankness is reported before length even
|
|
87
|
+
* when the value is also too long. "Password cannot be more than 100
|
|
88
|
+
* characters." would be a baffling thing to show someone who pressed the
|
|
89
|
+
* space bar.
|
|
90
|
+
*/
|
|
91
|
+
test("blankness is reported ahead of the maximum-length rule", () => {
|
|
92
|
+
const overlongWhitespace: string = " ".repeat(MAXIMUM_PASSWORD_LENGTH + 1);
|
|
93
|
+
|
|
94
|
+
expect(getPasswordValidationError(overlongWhitespace)).toBe(
|
|
95
|
+
"Password cannot be blank.",
|
|
96
|
+
);
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
describe("getPasswordValidationError enforces the length bounds", () => {
|
|
101
|
+
/*
|
|
102
|
+
* The four values either side of the two boundaries. Off-by-one here is the
|
|
103
|
+
* classic way a policy quietly becomes a different policy: a `<=` where a `<`
|
|
104
|
+
* belongs locks out everyone whose existing password is exactly at the
|
|
105
|
+
* minimum, and nothing else in the system would notice.
|
|
106
|
+
*/
|
|
107
|
+
test("one character below the minimum is rejected", () => {
|
|
108
|
+
const tooShort: string = "a".repeat(MINIMUM_PASSWORD_LENGTH - 1);
|
|
109
|
+
|
|
110
|
+
expect(getPasswordValidationError(tooShort)).toBe(
|
|
111
|
+
`Password cannot be less than ${MINIMUM_PASSWORD_LENGTH} characters.`,
|
|
112
|
+
);
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
test("exactly the minimum is accepted", () => {
|
|
116
|
+
const atMinimum: string = "a".repeat(MINIMUM_PASSWORD_LENGTH);
|
|
117
|
+
|
|
118
|
+
expect(getPasswordValidationError(atMinimum)).toBeNull();
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
test("exactly the maximum is accepted", () => {
|
|
122
|
+
const atMaximum: string = "a".repeat(MAXIMUM_PASSWORD_LENGTH);
|
|
123
|
+
|
|
124
|
+
expect(getPasswordValidationError(atMaximum)).toBeNull();
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
test("one character above the maximum is rejected", () => {
|
|
128
|
+
const tooLong: string = "a".repeat(MAXIMUM_PASSWORD_LENGTH + 1);
|
|
129
|
+
|
|
130
|
+
expect(getPasswordValidationError(tooLong)).toBe(
|
|
131
|
+
`Password cannot be more than ${MAXIMUM_PASSWORD_LENGTH} characters.`,
|
|
132
|
+
);
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
/*
|
|
136
|
+
* Length is counted on the RAW value, never a trimmed one.
|
|
137
|
+
*
|
|
138
|
+
* This looks like a bug the first time you read it — " ab " is only two
|
|
139
|
+
* real characters — and the temptation is to trim before measuring. Doing so
|
|
140
|
+
* would be worse than lax: whatever the user typed is what gets hashed, so
|
|
141
|
+
* trimming for the length check while hashing the untrimmed value measures
|
|
142
|
+
* one string and stores another, and trimming for BOTH stores a secret the
|
|
143
|
+
* user never typed and then fails to match it when they type it again at
|
|
144
|
+
* login. Leading and trailing spaces in a password are the user's business.
|
|
145
|
+
*/
|
|
146
|
+
test("length is measured before trimming, so padded short passwords are accepted", () => {
|
|
147
|
+
const padded: string = " abcd ";
|
|
148
|
+
|
|
149
|
+
expect(padded.length).toBe(8);
|
|
150
|
+
expect(padded.trim().length).toBe(4);
|
|
151
|
+
expect(padded.trim().length).toBeLessThan(MINIMUM_PASSWORD_LENGTH);
|
|
152
|
+
|
|
153
|
+
expect(getPasswordValidationError(padded)).toBeNull();
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
/*
|
|
157
|
+
* The mirror of the above: padding does not rescue a value that is genuinely
|
|
158
|
+
* too short in raw characters either. Nothing is trimmed, in either
|
|
159
|
+
* direction.
|
|
160
|
+
*/
|
|
161
|
+
test("a padded value that is still short raw is rejected on length", () => {
|
|
162
|
+
const shortEvenPadded: string = " ab ";
|
|
163
|
+
|
|
164
|
+
expect(shortEvenPadded.length).toBeLessThan(MINIMUM_PASSWORD_LENGTH);
|
|
165
|
+
expect(getPasswordValidationError(shortEvenPadded)).toBe(
|
|
166
|
+
`Password cannot be less than ${MINIMUM_PASSWORD_LENGTH} characters.`,
|
|
167
|
+
);
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
describe("the rejection messages tell the operator what to do", () => {
|
|
172
|
+
/*
|
|
173
|
+
* These messages are surfaced verbatim — the browser form shows them and the
|
|
174
|
+
* server wraps them in the exception it returns. A message that says only
|
|
175
|
+
* "Password is invalid." forces the operator to guess, and guessing at
|
|
176
|
+
* somebody else's password policy is exactly the loop this feature exists to
|
|
177
|
+
* remove. So each length message must actually contain its own limit, and
|
|
178
|
+
* must not quote the other one.
|
|
179
|
+
*/
|
|
180
|
+
test("the too-short message names the minimum and not the maximum", () => {
|
|
181
|
+
const message: string | null = getPasswordValidationError(
|
|
182
|
+
"a".repeat(MINIMUM_PASSWORD_LENGTH - 1),
|
|
183
|
+
);
|
|
184
|
+
|
|
185
|
+
expect(message).toContain(String(MINIMUM_PASSWORD_LENGTH));
|
|
186
|
+
expect(message).not.toContain(String(MAXIMUM_PASSWORD_LENGTH));
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
test("the too-long message names the maximum", () => {
|
|
190
|
+
const message: string | null = getPasswordValidationError(
|
|
191
|
+
"a".repeat(MAXIMUM_PASSWORD_LENGTH + 1),
|
|
192
|
+
);
|
|
193
|
+
|
|
194
|
+
expect(message).toContain(String(MAXIMUM_PASSWORD_LENGTH));
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
/*
|
|
198
|
+
* Every rejection is a complete sentence a human can read, not a code. Cheap
|
|
199
|
+
* to assert, and it catches the refactor that starts returning an enum or a
|
|
200
|
+
* key while leaving the `string | null` signature in place.
|
|
201
|
+
*/
|
|
202
|
+
test("every rejection is a non-empty sentence", () => {
|
|
203
|
+
const rejected: Array<string | undefined | null> = [
|
|
204
|
+
undefined,
|
|
205
|
+
null,
|
|
206
|
+
"",
|
|
207
|
+
" ",
|
|
208
|
+
"a".repeat(MINIMUM_PASSWORD_LENGTH - 1),
|
|
209
|
+
"a".repeat(MAXIMUM_PASSWORD_LENGTH + 1),
|
|
210
|
+
];
|
|
211
|
+
|
|
212
|
+
rejected.forEach((value: string | undefined | null): void => {
|
|
213
|
+
const message: string | null = getPasswordValidationError(value);
|
|
214
|
+
|
|
215
|
+
expect(typeof message).toBe("string");
|
|
216
|
+
expect((message as string).length).toBeGreaterThan(0);
|
|
217
|
+
expect(message as string).toMatch(/\.$/);
|
|
218
|
+
});
|
|
219
|
+
});
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
describe("getPasswordValidationError accepts real passwords", () => {
|
|
223
|
+
test("an ordinary passphrase returns null", () => {
|
|
224
|
+
expect(getPasswordValidationError("correct-horse-battery")).toBeNull();
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
/*
|
|
228
|
+
* null specifically, not undefined or false — callers branch on it (`const
|
|
229
|
+
* error = getPasswordValidationError(p); if (error) { throw ... }`), and the
|
|
230
|
+
* server-side guard turns a non-null return straight into a BadDataException.
|
|
231
|
+
*/
|
|
232
|
+
test("acceptance is signalled with null, not undefined", () => {
|
|
233
|
+
const result: string | null = getPasswordValidationError(
|
|
234
|
+
"a-perfectly-fine-password",
|
|
235
|
+
);
|
|
236
|
+
|
|
237
|
+
expect(result).toBeNull();
|
|
238
|
+
expect(result).not.toBeUndefined();
|
|
239
|
+
});
|
|
240
|
+
|
|
241
|
+
test("passwords full of punctuation and symbols are not second-guessed", () => {
|
|
242
|
+
const accepted: Array<string> = [
|
|
243
|
+
"!@#$%^&*()",
|
|
244
|
+
"p@ssw0rd!",
|
|
245
|
+
" spaces inside are fine ",
|
|
246
|
+
"Ünïcödé-påsswörd",
|
|
247
|
+
];
|
|
248
|
+
|
|
249
|
+
accepted.forEach((value: string): void => {
|
|
250
|
+
expect(getPasswordValidationError(value)).toBeNull();
|
|
251
|
+
});
|
|
252
|
+
});
|
|
253
|
+
|
|
254
|
+
/*
|
|
255
|
+
* Pinning, not endorsing: `.length` is UTF-16 code units, so a password of
|
|
256
|
+
* three astral-plane emoji counts as six and clears the minimum. That is the
|
|
257
|
+
* behaviour every other OneUptime password form has always had (they all used
|
|
258
|
+
* the browser's own minLength, which counts the same way), so this module
|
|
259
|
+
* matching it is the point. Recorded here so that if someone ever switches to
|
|
260
|
+
* grapheme counting it is a deliberate, visible change rather than a silent
|
|
261
|
+
* one.
|
|
262
|
+
*/
|
|
263
|
+
test("length counts UTF-16 code units, matching every other password form", () => {
|
|
264
|
+
const threeEmoji: string = "🔐🔐🔐";
|
|
265
|
+
|
|
266
|
+
expect(threeEmoji.length).toBe(MINIMUM_PASSWORD_LENGTH);
|
|
267
|
+
expect(getPasswordValidationError(threeEmoji)).toBeNull();
|
|
268
|
+
});
|
|
269
|
+
});
|
|
270
|
+
|
|
271
|
+
describe("the exported constants are usable as a policy", () => {
|
|
272
|
+
test("both bounds are plain numbers", () => {
|
|
273
|
+
expect(typeof MINIMUM_PASSWORD_LENGTH).toBe("number");
|
|
274
|
+
expect(typeof MAXIMUM_PASSWORD_LENGTH).toBe("number");
|
|
275
|
+
|
|
276
|
+
expect(Number.isInteger(MINIMUM_PASSWORD_LENGTH)).toBe(true);
|
|
277
|
+
expect(Number.isInteger(MAXIMUM_PASSWORD_LENGTH)).toBe(true);
|
|
278
|
+
});
|
|
279
|
+
|
|
280
|
+
/*
|
|
281
|
+
* A minimum at or above the maximum would make every password unacceptable
|
|
282
|
+
* while each individual branch still looked correct in review — the kind of
|
|
283
|
+
* mistake that only shows up when nobody can set a password any more.
|
|
284
|
+
*/
|
|
285
|
+
test("the minimum is positive and strictly below the maximum", () => {
|
|
286
|
+
expect(MINIMUM_PASSWORD_LENGTH).toBeGreaterThan(0);
|
|
287
|
+
expect(MINIMUM_PASSWORD_LENGTH).toBeLessThan(MAXIMUM_PASSWORD_LENGTH);
|
|
288
|
+
});
|
|
289
|
+
});
|
|
290
|
+
|
|
291
|
+
/*
|
|
292
|
+
* The whole reason this module sits in Common/Types rather than Common/Server:
|
|
293
|
+
* the browser can import it, so the form and the endpoint cannot disagree.
|
|
294
|
+
*
|
|
295
|
+
* That only holds while the form actually imports it. A form that hardcodes
|
|
296
|
+
* `minLength: 6` again keeps working today and starts lying the moment the
|
|
297
|
+
* policy is retuned here — the browser would go on accepting six characters
|
|
298
|
+
* that the server now rejects, and the operator would see a request fail with
|
|
299
|
+
* no field marked. Nothing in a type-check or a render test catches that, so it
|
|
300
|
+
* is asserted against the form's source text.
|
|
301
|
+
*/
|
|
302
|
+
describe("the Admin Dashboard set-password form shares this policy", () => {
|
|
303
|
+
const SET_PASSWORD_FORM: string = path.join(
|
|
304
|
+
__dirname,
|
|
305
|
+
"..",
|
|
306
|
+
"..",
|
|
307
|
+
"..",
|
|
308
|
+
"App",
|
|
309
|
+
"FeatureSet",
|
|
310
|
+
"AdminDashboard",
|
|
311
|
+
"src",
|
|
312
|
+
"Pages",
|
|
313
|
+
"Users",
|
|
314
|
+
"View",
|
|
315
|
+
"Authentication.tsx",
|
|
316
|
+
);
|
|
317
|
+
|
|
318
|
+
/*
|
|
319
|
+
* Comments in that file discuss the policy in prose (and the module under
|
|
320
|
+
* test is itself heavily commented), so a bare `toContain` on the raw text
|
|
321
|
+
* could be satisfied by a comment while the code hardcoded a number. Strip
|
|
322
|
+
* comments first and assert only on code. Line comments are only stripped at
|
|
323
|
+
* a line start or after whitespace, so a "//" inside a URL literal survives.
|
|
324
|
+
*/
|
|
325
|
+
const readFormCode: () => string = (): string => {
|
|
326
|
+
const raw: string = fs.readFileSync(SET_PASSWORD_FORM, "utf8");
|
|
327
|
+
|
|
328
|
+
return raw
|
|
329
|
+
.replace(/\/\*[\s\S]*?\*\//g, "")
|
|
330
|
+
.replace(/(^|\s)\/\/.*$/gm, "$1");
|
|
331
|
+
};
|
|
332
|
+
|
|
333
|
+
test("the form imports the minimum from this module", () => {
|
|
334
|
+
const code: string = readFormCode();
|
|
335
|
+
|
|
336
|
+
expect(code).toMatch(
|
|
337
|
+
/import\s*\{[^}]*MINIMUM_PASSWORD_LENGTH[^}]*\}\s*from\s*["']Common\/Types\/Password["']/,
|
|
338
|
+
);
|
|
339
|
+
});
|
|
340
|
+
|
|
341
|
+
test("both password fields validate against the imported constant", () => {
|
|
342
|
+
const code: string = readFormCode();
|
|
343
|
+
|
|
344
|
+
const usages: number = (
|
|
345
|
+
code.match(/minLength\s*:\s*MINIMUM_PASSWORD_LENGTH/g) || []
|
|
346
|
+
).length;
|
|
347
|
+
|
|
348
|
+
// The new password field and the confirmation field.
|
|
349
|
+
expect(usages).toBe(2);
|
|
350
|
+
});
|
|
351
|
+
|
|
352
|
+
/*
|
|
353
|
+
* The assertion that actually bites: no numeric literal may appear as a
|
|
354
|
+
* minLength anywhere in the form, whatever number it is. Written against the
|
|
355
|
+
* digit rather than against "6" so that re-hardcoding the current value under
|
|
356
|
+
* a future, different policy still fails.
|
|
357
|
+
*/
|
|
358
|
+
test("no minLength in the form is a hardcoded number", () => {
|
|
359
|
+
const code: string = readFormCode();
|
|
360
|
+
|
|
361
|
+
expect(code).not.toMatch(/minLength\s*:\s*\d/);
|
|
362
|
+
});
|
|
363
|
+
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import NotFound, { ComponentProps } from "../../../UI/Components/404";
|
|
2
|
-
import "@testing-library/jest-dom
|
|
2
|
+
import "@testing-library/jest-dom";
|
|
3
3
|
import { fireEvent, render, screen } from "@testing-library/react";
|
|
4
4
|
import Route from "../../../Types/API/Route";
|
|
5
5
|
import Email from "../../../Types/Email";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Alert, { AlertType } from "../../../UI/Components/Alerts/Alert";
|
|
2
|
-
import "@testing-library/jest-dom
|
|
2
|
+
import "@testing-library/jest-dom";
|
|
3
3
|
import { fireEvent, render, screen } from "@testing-library/react";
|
|
4
4
|
import React from "react";
|
|
5
5
|
import { describe, expect, jest } from "@jest/globals";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Badge, { BadgeType } from "../../../UI/Components/Badge/Badge";
|
|
2
|
-
import "@testing-library/jest-dom
|
|
2
|
+
import "@testing-library/jest-dom";
|
|
3
3
|
import { render, screen } from "@testing-library/react";
|
|
4
4
|
import React from "react";
|
|
5
5
|
import { describe, expect, test } from "@jest/globals";
|
|
@@ -2,7 +2,7 @@ import BasicForm from "../../../UI/Components/Forms/BasicForm";
|
|
|
2
2
|
import Fields from "../../../UI/Components/Forms/Types/Fields";
|
|
3
3
|
import FormFieldSchemaType from "../../../UI/Components/Forms/Types/FormFieldSchemaType";
|
|
4
4
|
import FormValues from "../../../UI/Components/Forms/Types/FormValues";
|
|
5
|
-
import "@testing-library/jest-dom
|
|
5
|
+
import "@testing-library/jest-dom";
|
|
6
6
|
import { render, screen, waitFor } from "@testing-library/react";
|
|
7
7
|
import userEvent from "@testing-library/user-event";
|
|
8
8
|
import { UserEvent } from "@testing-library/user-event/dist/types/setup/setup";
|
|
@@ -11,6 +11,21 @@ import * as React from "react";
|
|
|
11
11
|
import { describe, expect } from "@jest/globals";
|
|
12
12
|
import getJestMockFunction, { MockFunction } from "../../../Tests/MockType";
|
|
13
13
|
|
|
14
|
+
/*
|
|
15
|
+
* Type without userEvent's default inter-keystroke await. Input keeps a display
|
|
16
|
+
* value in state, syncs it from props, and then writes it straight onto the DOM
|
|
17
|
+
* node -- so a keystroke that arrives before React has committed the previous
|
|
18
|
+
* one gets overwritten by the stale value and is destroyed rather than merely
|
|
19
|
+
* delayed. Nothing recovers it, and the form submits "test@sample.cm". With
|
|
20
|
+
* `delay: null` the whole string is dispatched inside a single act(), where
|
|
21
|
+
* effects flush between keys, so that window never opens. Measured on a loaded
|
|
22
|
+
* machine: the default pacing dropped characters in 4 runs out of 6, this in 0
|
|
23
|
+
* out of 8.
|
|
24
|
+
*/
|
|
25
|
+
function setupUser(): UserEvent {
|
|
26
|
+
return userEvent.setup({ delay: null });
|
|
27
|
+
}
|
|
28
|
+
|
|
14
29
|
describe("BasicForm test", () => {
|
|
15
30
|
const fields: Fields<FormValues<any>> = [
|
|
16
31
|
{
|
|
@@ -65,6 +80,11 @@ describe("BasicForm test", () => {
|
|
|
65
80
|
expect(forgotPasswordText).toHaveTextContent("Forgot password?");
|
|
66
81
|
});
|
|
67
82
|
|
|
83
|
+
/*
|
|
84
|
+
* The explicit timeout: typing 24 characters re-validates the whole form once
|
|
85
|
+
* per keystroke, which finishes well inside a second locally but has no
|
|
86
|
+
* headroom left against Jest's 5s default on a loaded runner.
|
|
87
|
+
*/
|
|
68
88
|
test("Should accept values and submit if valid", async () => {
|
|
69
89
|
const handleSubmit: MockFunction = getJestMockFunction();
|
|
70
90
|
const onSubmitSuccessful: MockFunction = getJestMockFunction();
|
|
@@ -82,7 +102,7 @@ describe("BasicForm test", () => {
|
|
|
82
102
|
submitButtonText="Login"
|
|
83
103
|
/>,
|
|
84
104
|
);
|
|
85
|
-
const user: UserEvent =
|
|
105
|
+
const user: UserEvent = setupUser();
|
|
86
106
|
await user.type(screen.getByTestId("email"), "test@sample.com");
|
|
87
107
|
await user.type(screen.getByTestId("password"), "12345678");
|
|
88
108
|
|
|
@@ -101,7 +121,7 @@ describe("BasicForm test", () => {
|
|
|
101
121
|
onSubmitSuccessful,
|
|
102
122
|
);
|
|
103
123
|
});
|
|
104
|
-
});
|
|
124
|
+
}, 30000);
|
|
105
125
|
|
|
106
126
|
test("Should display error if values are invalid", async () => {
|
|
107
127
|
const handleSubmit: MockFunction = getJestMockFunction();
|
|
@@ -117,19 +137,28 @@ describe("BasicForm test", () => {
|
|
|
117
137
|
submitButtonText="Login"
|
|
118
138
|
/>,
|
|
119
139
|
);
|
|
120
|
-
const user: UserEvent =
|
|
140
|
+
const user: UserEvent = setupUser();
|
|
121
141
|
await user.type(screen.getByTestId("email"), "humed");
|
|
122
142
|
await user.type(screen.getByTestId("password"), "1238");
|
|
123
143
|
|
|
124
144
|
const loginButton: HTMLButtonElement = screen.getByTestId("Login");
|
|
125
145
|
await user.click(loginButton);
|
|
126
146
|
|
|
127
|
-
|
|
128
|
-
|
|
147
|
+
/*
|
|
148
|
+
* Both errors have to be waited for. The email error is already on screen
|
|
149
|
+
* -- it was raised while the user was still typing -- but the password one
|
|
150
|
+
* only lands once the submit-time validation has flushed, so reading the
|
|
151
|
+
* list straight after the click finds a single error and indexes off the
|
|
152
|
+
* end of it.
|
|
153
|
+
*/
|
|
154
|
+
await waitFor(() => {
|
|
155
|
+
const errorComponent: HTMLElement[] =
|
|
156
|
+
screen.getAllByTestId("error-message");
|
|
129
157
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
158
|
+
expect(errorComponent[0]?.innerHTML).toEqual("Email is not valid.");
|
|
159
|
+
expect(errorComponent[1]?.innerHTML).toEqual(
|
|
160
|
+
"Password cannot be less than 6 characters.",
|
|
161
|
+
);
|
|
162
|
+
});
|
|
134
163
|
});
|
|
135
164
|
});
|
|
@@ -4,7 +4,7 @@ import Button, {
|
|
|
4
4
|
} from "../../../UI/Components/Button/Button";
|
|
5
5
|
import ButtonType from "../../../UI/Components/Button/ButtonTypes";
|
|
6
6
|
import ShortcutKey from "../../../UI/Components/ShortcutKey/ShortcutKey";
|
|
7
|
-
import "@testing-library/jest-dom
|
|
7
|
+
import "@testing-library/jest-dom";
|
|
8
8
|
import { fireEvent, render, screen } from "@testing-library/react";
|
|
9
9
|
import IconProp from "../../../Types/Icon/IconProp";
|
|
10
10
|
import React from "react";
|
|
@@ -3,7 +3,7 @@ import Card, {
|
|
|
3
3
|
CardButtonSchema,
|
|
4
4
|
ComponentProps,
|
|
5
5
|
} from "../../../UI/Components/Card/Card";
|
|
6
|
-
import "@testing-library/jest-dom
|
|
6
|
+
import "@testing-library/jest-dom";
|
|
7
7
|
import { fireEvent, render, screen } from "@testing-library/react";
|
|
8
8
|
import IconProp from "../../../Types/Icon/IconProp";
|
|
9
9
|
import React, { ReactElement } from "react";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AreaChart } from "../../../../UI/Components/Charts/ChartLibrary/AreaChart/AreaChart";
|
|
2
2
|
import { BarChart } from "../../../../UI/Components/Charts/ChartLibrary/BarChart/BarChart";
|
|
3
3
|
import { LineChart } from "../../../../UI/Components/Charts/ChartLibrary/LineChart/LineChart";
|
|
4
|
-
import "@testing-library/jest-dom
|
|
4
|
+
import "@testing-library/jest-dom";
|
|
5
5
|
import { render } from "@testing-library/react";
|
|
6
6
|
import React from "react";
|
|
7
7
|
import { describe, expect, test } from "@jest/globals";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import ColorViewer from "../../../UI/Components/ColorViewer/ColorViewer";
|
|
2
|
-
import "@testing-library/jest-dom
|
|
2
|
+
import "@testing-library/jest-dom";
|
|
3
3
|
import { fireEvent, render } from "@testing-library/react";
|
|
4
4
|
import Color from "../../../Types/Color";
|
|
5
5
|
import * as React from "react";
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import ComponentsModal from "../../../UI/Components/Workflow/ComponentsModal";
|
|
2
2
|
import { describe, expect, it } from "@jest/globals";
|
|
3
|
-
|
|
3
|
+
/*
|
|
4
|
+
* The main entry, not "/extend-expect": the latter no longer ships type
|
|
5
|
+
* declarations, so every jest-dom matcher in this file fails to typecheck and
|
|
6
|
+
* the whole suite is skipped before a single assertion runs. This suite is one
|
|
7
|
+
* of only two that exercise SideOver, so it has to actually run.
|
|
8
|
+
*/
|
|
9
|
+
import "@testing-library/jest-dom";
|
|
4
10
|
import { fireEvent, render, screen } from "@testing-library/react";
|
|
5
11
|
import IconProp from "../../../Types/Icon/IconProp";
|
|
6
12
|
import ComponentMetadata, {
|
|
@@ -3,6 +3,13 @@ import ConfirmModal, {
|
|
|
3
3
|
ComponentProps,
|
|
4
4
|
} from "../../../UI/Components/Modal/ConfirmModal";
|
|
5
5
|
import { describe, expect, it, jest, beforeEach } from "@jest/globals";
|
|
6
|
+
/*
|
|
7
|
+
* The main entry, not "/extend-expect": the latter no longer ships type
|
|
8
|
+
* declarations. Without this import the jest-dom matchers below have no types
|
|
9
|
+
* of their own, and the suite only compiled when it happened to share a
|
|
10
|
+
* program with a file that did import them.
|
|
11
|
+
*/
|
|
12
|
+
import "@testing-library/jest-dom";
|
|
6
13
|
import { fireEvent, render, screen } from "@testing-library/react";
|
|
7
14
|
import React from "react";
|
|
8
15
|
|
|
@@ -6,7 +6,7 @@ import DictionaryOfStrings, {
|
|
|
6
6
|
ComponentProps,
|
|
7
7
|
} from "../../../UI/Components/Dictionary/DictionaryOfStrings";
|
|
8
8
|
import { describe, expect, it, jest } from "@jest/globals";
|
|
9
|
-
import "@testing-library/jest-dom
|
|
9
|
+
import "@testing-library/jest-dom";
|
|
10
10
|
import { fireEvent, render, screen } from "@testing-library/react";
|
|
11
11
|
import Dictionary from "../../../Types/Dictionary";
|
|
12
12
|
import React from "react";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import Dropdown, {
|
|
2
2
|
DropdownOption,
|
|
3
3
|
} from "../../../UI/Components/Dropdown/Dropdown";
|
|
4
|
-
import "@testing-library/jest-dom
|
|
4
|
+
import "@testing-library/jest-dom";
|
|
5
5
|
import { fireEvent, render, screen } from "@testing-library/react";
|
|
6
6
|
import React from "react";
|
|
7
7
|
import { describe, expect } from "@jest/globals";
|
|
@@ -222,6 +222,18 @@ describe("ErrorBoundary", () => {
|
|
|
222
222
|
expect(screen.queryByRole("alert")).not.toBeNull();
|
|
223
223
|
});
|
|
224
224
|
|
|
225
|
+
test("leads with a plain-language heading", () => {
|
|
226
|
+
render(
|
|
227
|
+
<ErrorBoundary>
|
|
228
|
+
<ThrowOnRender />
|
|
229
|
+
</ErrorBoundary>,
|
|
230
|
+
);
|
|
231
|
+
|
|
232
|
+
expect(
|
|
233
|
+
screen.queryByRole("heading", { name: "Something went wrong" }),
|
|
234
|
+
).not.toBeNull();
|
|
235
|
+
});
|
|
236
|
+
|
|
225
237
|
test("shows the underlying error message for support", () => {
|
|
226
238
|
render(
|
|
227
239
|
<ErrorBoundary>
|
|
@@ -234,6 +246,26 @@ describe("ErrorBoundary", () => {
|
|
|
234
246
|
).toContain("reading 'queryConfigs'");
|
|
235
247
|
});
|
|
236
248
|
|
|
249
|
+
/*
|
|
250
|
+
* The stack-shaped message is for support, not for the person who just hit
|
|
251
|
+
* the error. It stays in the DOM (so it can be read and copied) but behind
|
|
252
|
+
* a closed disclosure so the recovery actions lead.
|
|
253
|
+
*/
|
|
254
|
+
test("keeps the raw error message behind a closed disclosure", () => {
|
|
255
|
+
render(
|
|
256
|
+
<ErrorBoundary>
|
|
257
|
+
<ThrowOnRender message="Cannot read properties of undefined (reading 'queryConfigs')" />
|
|
258
|
+
</ErrorBoundary>,
|
|
259
|
+
);
|
|
260
|
+
|
|
261
|
+
const disclosure: HTMLDetailsElement | null = screen
|
|
262
|
+
.getByTestId("error-boundary-error-message")
|
|
263
|
+
.closest("details");
|
|
264
|
+
|
|
265
|
+
expect(disclosure).not.toBeNull();
|
|
266
|
+
expect(disclosure!.open).toBe(false);
|
|
267
|
+
});
|
|
268
|
+
|
|
237
269
|
test("offers a support bundle and explains what it contains", () => {
|
|
238
270
|
render(
|
|
239
271
|
<ErrorBoundary>
|
|
@@ -247,6 +279,27 @@ describe("ErrorBoundary", () => {
|
|
|
247
279
|
expect(screen.queryByText(/scrubbed page URL/)).not.toBeNull();
|
|
248
280
|
expect(screen.queryByText(/never reads cookies/)).not.toBeNull();
|
|
249
281
|
});
|
|
282
|
+
|
|
283
|
+
/*
|
|
284
|
+
* A downloaded bundle is only useful if the user knows where to send it,
|
|
285
|
+
* so the address is on the fallback rather than a page they have to find.
|
|
286
|
+
*/
|
|
287
|
+
test("says where to send the support bundle", () => {
|
|
288
|
+
render(
|
|
289
|
+
<ErrorBoundary>
|
|
290
|
+
<ThrowOnRender />
|
|
291
|
+
</ErrorBoundary>,
|
|
292
|
+
);
|
|
293
|
+
|
|
294
|
+
const supportEmailLink: HTMLAnchorElement = screen.getByTestId(
|
|
295
|
+
"error-boundary-support-email",
|
|
296
|
+
) as HTMLAnchorElement;
|
|
297
|
+
|
|
298
|
+
expect(supportEmailLink.textContent).toBe("support@oneuptime.com");
|
|
299
|
+
expect(supportEmailLink.getAttribute("href")).toBe(
|
|
300
|
+
"mailto:support@oneuptime.com",
|
|
301
|
+
);
|
|
302
|
+
});
|
|
250
303
|
});
|
|
251
304
|
|
|
252
305
|
describe("reporting", () => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import FilePicker from "../../../UI/Components/FilePicker/FilePicker";
|
|
2
2
|
import ModelAPI from "../../../UI/Utils/ModelAPI/ModelAPI";
|
|
3
3
|
import { describe, expect, beforeEach, jest } from "@jest/globals";
|
|
4
|
-
import "@testing-library/jest-dom
|
|
4
|
+
import "@testing-library/jest-dom";
|
|
5
5
|
import { fireEvent, render, screen, waitFor } from "@testing-library/react";
|
|
6
6
|
import HTTPResponse from "../../../Types/API/HTTPResponse";
|
|
7
7
|
import MimeType from "../../../Types/File/MimeType";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import HiddenText from "../../../UI/Components/HiddenText/HiddenText";
|
|
2
|
-
import "@testing-library/jest-dom
|
|
2
|
+
import "@testing-library/jest-dom";
|
|
3
3
|
import { fireEvent, render, screen, waitFor } from "@testing-library/react";
|
|
4
4
|
import React from "react";
|
|
5
5
|
import { describe, expect, test } from "@jest/globals";
|