@oneuptime/common 12.0.7 → 12.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Models/AnalyticsModels/MetricItemAggMV1mByK8sCluster.ts +1 -1
- package/Models/AnalyticsModels/MetricItemAggMV1mByService.ts +1 -1
- package/Models/DatabaseModels/AIConversation.ts +32 -0
- package/Models/DatabaseModels/AIConversationMessage.ts +41 -0
- package/Models/DatabaseModels/AlertEpisodeMember.ts +27 -0
- package/Models/DatabaseModels/IncidentEpisodeMember.ts +28 -0
- package/Models/DatabaseModels/Index.ts +12 -4
- package/Models/DatabaseModels/{TelemetryEntity.ts → InventoryItem.ts} +184 -9
- package/Models/DatabaseModels/InventoryItemCustomField.ts +434 -0
- package/Models/DatabaseModels/{TelemetryEntityRelationship.ts → InventoryItemRelationship.ts} +33 -7
- package/Models/DatabaseModels/NetworkDevice.ts +141 -0
- package/Models/DatabaseModels/NetworkDeviceLink.ts +699 -0
- package/Models/DatabaseModels/NetworkDeviceLinkRule.ts +467 -0
- package/Models/DatabaseModels/NetworkTopologySuppression.ts +429 -0
- package/Models/DatabaseModels/OnCallDutyPolicyFeed.ts +9 -0
- package/Models/DatabaseModels/Project.ts +78 -0
- package/Models/DatabaseModels/UserCall.ts +42 -0
- package/Models/DatabaseModels/UserEmail.ts +44 -0
- package/Models/DatabaseModels/UserNotificationRule.ts +425 -55
- package/Models/DatabaseModels/UserOnCallLogTimeline.ts +24 -2
- package/Models/DatabaseModels/UserPush.ts +49 -0
- package/Models/DatabaseModels/UserSMS.ts +43 -0
- package/Models/DatabaseModels/UserTelegram.ts +59 -0
- package/Models/DatabaseModels/UserWebhook.ts +52 -0
- package/Models/DatabaseModels/UserWhatsApp.ts +41 -0
- package/Models/DatabaseModels/WorkflowLog.ts +38 -0
- package/Models/DatabaseModels/WorkflowVariable.ts +12 -0
- package/Server/API/AIChatAPI.ts +315 -1
- package/Server/API/DashboardAPI.ts +217 -1
- package/Server/API/OnCallReadinessAPI.ts +841 -0
- package/Server/API/TeamComplianceAPI.ts +69 -17
- package/Server/API/TelemetryAPI.ts +220 -12
- package/Server/API/UserAPI.ts +16 -1
- package/Server/EnvironmentConfig.ts +52 -0
- package/Server/Infrastructure/Postgres/DataSourceOptions.ts +22 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786100000000-RestoreServiceLowerNameIndex.ts +4 -4
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786200000000-RestoreDroppedUniqueIndexes.ts +5 -5
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786551733814-MigrationName.ts +41 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786559879134-AddWorkflowLogStepTrace.ts +17 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786625176831-AddMonitoringMethodToNetworkDevice.ts +35 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786634985763-AddNetworkDeviceLink.ts +82 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786639512056-AddNetworkDeviceLinkRule.ts +91 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786639972982-AddNetworkTopologySuppression.ts +47 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786800000000-RenameTelemetryEntityToInventoryItem.ts +255 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786900000000-AddInventoryItemArchiveAndCustomFields.ts +107 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787000000000-AddOnCallNotificationFallbackColumns.ts +90 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787100000000-AddAIConversationPageContext.ts +39 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787200000000-AddAIChatMessageFeedback.ts +33 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787300000000-AddEpisodeMemberNotifyIndexes.ts +59 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +24 -0
- package/Server/Infrastructure/Queue.ts +78 -13
- package/Server/Middleware/MasterAdminAuthorization.ts +11 -6
- package/Server/Middleware/PublicDashboardRateLimit.ts +593 -0
- package/Server/Services/AIService.ts +7 -0
- package/Server/Services/AlertEpisodeStateTimelineService.ts +29 -0
- package/Server/Services/AlertSeverityService.ts +63 -0
- package/Server/Services/DashboardService.ts +9 -10
- package/Server/Services/DatabaseService.ts +32 -2
- package/Server/Services/IncidentEpisodeStateTimelineService.ts +29 -0
- package/Server/Services/IncidentSeverityService.ts +76 -0
- package/Server/Services/Index.ts +12 -4
- package/Server/Services/InventoryItemCustomFieldService.ts +9 -0
- package/Server/Services/{TelemetryEntityRelationshipService.ts → InventoryItemRelationshipService.ts} +7 -4
- package/Server/Services/{TelemetryEntityService.ts → InventoryItemService.ts} +203 -21
- package/Server/Services/LogAggregationService.ts +45 -8
- package/Server/Services/MetricAggregationService.ts +121 -0
- package/Server/Services/MetricService.ts +7 -7
- package/Server/Services/NetworkDeviceLinkRuleService.ts +10 -0
- package/Server/Services/NetworkDeviceLinkService.ts +84 -0
- package/Server/Services/NetworkDeviceService.ts +140 -0
- package/Server/Services/NetworkSiteService.ts +77 -25
- package/Server/Services/NetworkTopologySuppressionService.ts +84 -0
- package/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.ts +41 -29
- package/Server/Services/OnCallDutyPolicyExecutionLogService.ts +8 -0
- package/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.ts +62 -13
- package/Server/Services/OnCallDutyPolicyScheduleService.ts +61 -1
- package/Server/Services/OnCallNotificationAlertingService.ts +742 -0
- package/Server/Services/OnCallReadinessService.ts +2803 -0
- package/Server/Services/OnCallSetupReminderService.ts +955 -0
- package/Server/Services/ProfileAggregationService.ts +123 -0
- package/Server/Services/StatusPageService.ts +9 -10
- package/Server/Services/TeamComplianceService.ts +429 -252
- package/Server/Services/UserCallService.ts +26 -1
- package/Server/Services/UserEmailService.ts +26 -1
- package/Server/Services/UserNotificationRuleAdminService.ts +1183 -0
- package/Server/Services/UserNotificationRuleService.ts +3812 -333
- package/Server/Services/UserOnCallLogService.ts +561 -48
- package/Server/Services/UserPushService.ts +29 -0
- package/Server/Services/UserService.ts +11 -0
- package/Server/Services/UserSmsService.ts +26 -1
- package/Server/Services/UserTelegramService.ts +24 -1
- package/Server/Services/UserWebhookService.ts +28 -1
- package/Server/Services/UserWhatsAppService.ts +24 -1
- package/Server/Types/Database/Permissions/BasePermission.ts +19 -0
- package/Server/Types/Database/Permissions/CreatePermission.ts +164 -0
- package/Server/Types/Database/Permissions/OwnerOnlyColumnPermission.ts +340 -0
- package/Server/Types/Database/Permissions/QueryPermission.ts +48 -0
- package/Server/Types/Database/Permissions/TenantPermission.ts +8 -1
- package/Server/Types/Workflow/Components/API/Delete.ts +1 -1
- package/Server/Types/Workflow/Components/API/Get.ts +1 -1
- package/Server/Types/Workflow/Components/API/Patch.ts +1 -1
- package/Server/Types/Workflow/Components/API/Post.ts +1 -1
- package/Server/Types/Workflow/Components/API/Put.ts +1 -1
- package/Server/Types/Workflow/Components/API/Utils.ts +44 -1
- package/Server/Types/Workflow/Components/BaseModel/CreateManyBaseModel.ts +29 -5
- package/Server/Types/Workflow/Components/BaseModel/CreateOneBaseModel.ts +18 -10
- package/Server/Types/Workflow/Components/BaseModel/ModelArguments.ts +55 -0
- package/Server/Types/Workflow/Components/Conditions/IfElse.ts +3 -17
- package/Server/Types/Workflow/Components/Email.ts +25 -7
- package/Server/Types/Workflow/Components/JavaScript.ts +10 -3
- package/Server/Types/Workflow/Components/MicrosoftTeams/SendMessageToChannel.ts +1 -1
- package/Server/Types/Workflow/TriggerCode.ts +12 -0
- package/Server/Types/Workflow/Workflow.ts +5 -0
- package/Server/Utils/AI/Chat/ChatAgentRunner.ts +643 -48
- package/Server/Utils/AI/Chat/ObservabilityAssistant.ts +32 -3
- package/Server/Utils/AI/Chat/ObservabilityChatPrompt.ts +20 -6
- package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +7 -0
- package/Server/Utils/AI/Toolbox/AIActionTools.ts +2 -2
- package/Server/Utils/AI/Toolbox/AIMetaTools.ts +863 -0
- package/Server/Utils/AI/Toolbox/AlertTools.ts +177 -15
- package/Server/Utils/AI/Toolbox/IncidentTools.ts +191 -10
- package/Server/Utils/AI/Toolbox/Index.ts +48 -0
- package/Server/Utils/AI/Toolbox/MonitorTools.ts +298 -11
- package/Server/Utils/AI/Toolbox/NoteWriteTools.ts +295 -0
- package/Server/Utils/AI/Toolbox/OnCallTools.ts +1246 -0
- package/Server/Utils/AI/Toolbox/RunbookTools.ts +424 -0
- package/Server/Utils/AI/Toolbox/SloTools.ts +456 -0
- package/Server/Utils/AI/Toolbox/StatusPageTools.ts +559 -0
- package/Server/Utils/AI/Toolbox/TeamTools.ts +327 -0
- package/Server/Utils/AI/Toolbox/TimelineTools.ts +615 -0
- package/Server/Utils/AI/Toolbox/WorkflowProbeTools.ts +664 -0
- package/Server/Utils/ClientIp.ts +221 -0
- package/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.ts +47 -0
- package/Server/Utils/Dashboard/PublicDashboardSloHistoryPolicy.ts +163 -0
- package/Server/Utils/Dashboard/PublicDashboardSloWidget.ts +147 -0
- package/Server/Utils/Express.ts +12 -17
- package/Server/Utils/LLM/LLMService.ts +85 -8
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +204 -10
- package/Server/Utils/SSRFProtection.ts +98 -23
- package/Server/Utils/StartServer.ts +12 -3
- package/Server/Utils/Telemetry/EntityRegistry.ts +205 -18
- package/Server/Utils/Telemetry/InventoryEntityRegistry.ts +689 -0
- package/Server/Utils/Telemetry/TelemetryEntity.ts +160 -52
- package/Server/Utils/VM/VMAPI.ts +56 -8
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +7 -3
- package/Tests/App/Dashboard/AdminNotificationRulesPage.test.tsx +2146 -0
- package/Tests/App/Dashboard/CreateWorkflowModal.test.tsx +561 -0
- package/Tests/App/Dashboard/EscalationRuleReadiness.test.tsx +2470 -0
- package/Tests/App/Dashboard/MonitorCriteriaAttributeFilter.test.tsx +574 -0
- package/Tests/App/Dashboard/OnCallPreventionGuards.test.tsx +1897 -0
- package/Tests/App/Dashboard/OnCallReadinessSurfaces.test.tsx +3606 -0
- package/Tests/App/Dashboard/OnCallRulesDeleteGuard.test.tsx +784 -0
- package/Tests/App/Dashboard/OnCallRulesTable.test.tsx +1119 -0
- package/Tests/App/Dashboard/SloWidgetFetching.test.tsx +531 -0
- package/Tests/App/Dashboard/UserSettingsSetupChecklistModel.test.ts +1312 -0
- package/Tests/App/Dashboard/UserSettingsSetupChecklistPage.test.tsx +1390 -0
- package/Tests/Models/InventoryItemModel.test.ts +174 -0
- package/Tests/Models/InventoryItemNaming.test.ts +302 -0
- package/Tests/Server/API/AIChatCancelAndFeedback.test.ts +437 -0
- package/Tests/Server/API/DashboardPublicRateLimit.test.ts +659 -0
- package/Tests/Server/API/DashboardPublicResourceListAPI.test.ts +18 -0
- package/Tests/Server/API/DashboardPublicSloAPI.test.ts +880 -0
- package/Tests/Server/API/Helpers.ts +24 -15
- package/Tests/Server/API/OnCallReadinessAPI.test.ts +2680 -0
- package/Tests/Server/API/OnCallSetupReminderAPI.test.ts +915 -0
- package/Tests/Server/API/UserProjectsAPI.test.ts +478 -4
- package/Tests/Server/Infrastructure/Postgres/EpisodeMemberNotifyIndexesMigration.test.ts +533 -0
- package/Tests/Server/Infrastructure/Postgres/InventoryItemArchiveMigration.test.ts +213 -0
- package/Tests/Server/Infrastructure/Postgres/RenameInventoryItemMigration.test.ts +432 -0
- package/Tests/Server/Infrastructure/Queue.test.ts +293 -0
- package/Tests/Server/Middleware/PublicDashboardRateLimit.test.ts +1645 -0
- package/Tests/Server/Services/AdminRuleEditGuards.test.ts +2848 -0
- package/Tests/Server/Services/DeliverNotificationForRuleExtraction.test.ts +1393 -0
- package/Tests/Server/Services/EpisodeRuleSeverityRepair.test.ts +1802 -0
- package/Tests/Server/Services/EpisodeStateTimelineNote.test.ts +304 -0
- package/Tests/Server/Services/InventoryItemDisplayName.test.ts +339 -0
- package/Tests/Server/Services/InventoryItemManualCreate.test.ts +248 -0
- package/Tests/Server/Services/IpAllowlistSpoofing.test.ts +450 -0
- package/Tests/Server/Services/LogAggregationService.test.ts +235 -1
- package/Tests/Server/Services/MetricAggregationService.test.ts +231 -0
- package/Tests/Server/Services/MetricEntityMVKeyParity.test.ts +80 -29
- package/Tests/Server/Services/MetricServiceAggregate.test.ts +30 -30
- package/Tests/Server/Services/NetworkSiteService.test.ts +18 -3
- package/Tests/Server/Services/NotificationChannelEventCoverage.test.ts +1728 -0
- package/Tests/Server/Services/NotificationDeletionImpact.test.ts +2402 -0
- package/Tests/Server/Services/OnCallDutyPolicyExecutionLogTimelineGapFeed.test.ts +394 -0
- package/Tests/Server/Services/OnCallNotificationFallback.test.ts +1744 -0
- package/Tests/Server/Services/OnCallReadinessService.test.ts +4295 -0
- package/Tests/Server/Services/OnCallSetupReminder.test.ts +1272 -0
- package/Tests/Server/Services/OnCallWeeklyReadinessDigest.test.ts +1021 -0
- package/Tests/Server/Services/ProfileAggregationService.test.ts +296 -0
- package/Tests/Server/Services/SeverityCreationRuleBackfill.test.ts +1536 -0
- package/Tests/Server/Services/SeverityRuleBackfill.test.ts +1818 -0
- package/Tests/Server/Services/TeamComplianceServiceBehaviour.test.ts +1845 -0
- package/Tests/Server/Services/UserNotificationRuleAdminGuards.test.ts +1394 -0
- package/Tests/Server/Services/UserNotificationRuleDefaultCreation.test.ts +1166 -0
- package/Tests/Server/Services/UserNotificationRuleExecuteItem.test.ts +1468 -0
- package/Tests/Server/Services/UserOnCallLogNoNotificationRules.test.ts +1457 -0
- package/Tests/Server/Types/Database/Permissions/AdminNotificationRuleAccess.test.ts +1546 -0
- package/Tests/Server/Types/Database/Permissions/CreateOwnershipScoping.test.ts +529 -0
- package/Tests/Server/Types/Database/Permissions/OwnerOnlyColumns.test.ts +1219 -0
- package/Tests/Server/Types/Database/Permissions/UserNotificationRuleScoping.test.ts +1089 -0
- package/Tests/Server/Types/Workflow/Components/ApiComponentErrorPort.test.ts +2 -1
- package/Tests/Server/Types/Workflow/Components/ApiComponentHeaders.test.ts +192 -0
- package/Tests/Server/Types/Workflow/Components/BaseModelDatabaseComponents.test.ts +190 -0
- package/Tests/Server/Types/Workflow/Components/ChatWebhookComponents.test.ts +44 -14
- package/Tests/Server/Types/Workflow/Components/Email.test.ts +151 -0
- package/Tests/Server/Types/Workflow/Components/IfElse.test.ts +98 -0
- package/Tests/Server/Types/Workflow/Components/JavaScript.test.ts +51 -0
- package/Tests/Server/Utils/AI/AIMetaTools.test.ts +586 -0
- package/Tests/Server/Utils/AI/AlertMonitorFilters.test.ts +582 -0
- package/Tests/Server/Utils/AI/ChatAgentRunner.test.ts +726 -0
- package/Tests/Server/Utils/AI/IncidentToolsFilters.test.ts +315 -0
- package/Tests/Server/Utils/AI/LLMServiceStopReason.test.ts +314 -0
- package/Tests/Server/Utils/AI/LLMServiceToolCalling.test.ts +26 -3
- package/Tests/Server/Utils/AI/NoteWriteTools.test.ts +268 -0
- package/Tests/Server/Utils/AI/ObservabilityChatPrompt.test.ts +169 -0
- package/Tests/Server/Utils/AI/OnCallTools.test.ts +664 -0
- package/Tests/Server/Utils/AI/RunbookTools.test.ts +325 -0
- package/Tests/Server/Utils/AI/SloTools.test.ts +306 -0
- package/Tests/Server/Utils/AI/StatusPageTools.test.ts +391 -0
- package/Tests/Server/Utils/AI/TeamTools.test.ts +257 -0
- package/Tests/Server/Utils/AI/TimelineTools.test.ts +472 -0
- package/Tests/Server/Utils/AI/WorkflowProbeTools.test.ts +428 -0
- package/Tests/Server/Utils/AnalyticsDatabase/QuerySettingsHelper.test.ts +152 -0
- package/Tests/Server/Utils/ClientIp.test.ts +438 -0
- package/Tests/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.test.ts +171 -0
- package/Tests/Server/Utils/Dashboard/PublicDashboardSloHistoryPolicy.test.ts +383 -0
- package/Tests/Server/Utils/EntityRegistryRowFence.test.ts +23 -25
- package/Tests/Server/Utils/MicrosoftTeamsWebhookUrlValidation.test.ts +6 -0
- package/Tests/Server/Utils/Monitor/Criteria/DnssecMonitorCriteria.test.ts +307 -0
- package/Tests/Server/Utils/Monitor/Criteria/SSLMonitorCriteria.test.ts +468 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorTelemetryDeepLinks.test.ts +460 -0
- package/Tests/Server/Utils/ResponseRateLimitStatusCodes.test.ts +137 -0
- package/Tests/Server/Utils/SSRFProtectionBypasses.test.ts +40 -8
- package/Tests/Server/Utils/SSRFProtectionUserInfo.test.ts +351 -0
- package/Tests/Server/Utils/Telemetry/EntityRegistryRetirement.test.ts +531 -0
- package/Tests/Server/Utils/Telemetry/InventoryEntityRegistry.test.ts +322 -0
- package/Tests/Server/Utils/Telemetry/TelemetryEntity.test.ts +356 -39
- package/Tests/Server/Utils/VM/VMAPISubstitution.test.ts +243 -0
- package/Tests/Types/IP/IP.test.ts +263 -0
- package/Tests/Types/IP/IPWhitelist.test.ts +197 -0
- package/Tests/Types/IP/IPv6.test.ts +12 -1
- package/Tests/Types/Monitor/SnmpOid.test.ts +64 -0
- package/Tests/Types/NetworkDevice/NetworkDeviceMonitoringMethod.test.ts +110 -0
- package/Tests/Types/OnCallDutyPolicy/LayerUtilMergeAudit.test.ts +106 -0
- package/Tests/Types/OnCallDutyPolicy/LayerUtilMergeDifferential.test.ts +511 -0
- package/Tests/Types/OnCallDutyPolicy/ScheduleCoverageEndToEnd.test.ts +489 -0
- package/Tests/Types/OnCallDutyPolicy/ScheduleCoverageGapTolerance.test.ts +479 -0
- package/Tests/Types/OnCallDutyPolicy/ScheduleCoverageState.test.ts +822 -0
- package/Tests/Types/SerializableObjectDictionaryImportCycle.test.ts +197 -0
- package/Tests/Types/Telemetry/EntityTypeGroups.test.ts +140 -0
- package/Tests/Types/Workflow/BaseModelComponents.test.ts +429 -0
- package/Tests/Types/Workflow/Components/BaseModel.test.ts +225 -0
- package/Tests/Types/Workflow/IntegrationCredentialMetadata.test.ts +100 -0
- package/Tests/Types/Workflow/StepTrace.test.ts +235 -0
- package/Tests/Types/Workflow/TemplateSyntax.test.ts +491 -0
- package/Tests/Types/Workflow/Templates.test.ts +1218 -0
- package/Tests/UI/Components/ActiveFilterChipsOpenRoute.test.tsx +82 -0
- package/Tests/UI/Components/ComponentsModal.test.tsx +564 -7
- package/Tests/UI/Components/CustomTimeRangeModal.test.tsx +459 -0
- package/Tests/UI/Components/DictionaryAttributeFilterRow.test.tsx +477 -0
- package/Tests/UI/Components/Forms/AnchoredFieldPopupKeyboard.test.tsx +382 -0
- package/Tests/UI/Components/Forms/ColorPickerPicking.test.tsx +569 -0
- package/Tests/UI/Components/Forms/ValidationJSON.test.ts +241 -0
- package/Tests/UI/Components/KeyboardShortcut.test.tsx +95 -0
- package/Tests/UI/Components/LogDetailsPanelCrossSignal.test.tsx +448 -0
- package/Tests/UI/Components/LogTimeRangePicker.test.tsx +42 -0
- package/Tests/UI/Components/LogsTableCrossLinks.test.tsx +263 -0
- package/Tests/UI/Components/ModalPortalDismissal.test.tsx +90 -0
- package/Tests/UI/Components/PendingProjectInvitations.test.tsx +913 -0
- package/Tests/UI/Components/SimpleLogViewer.test.tsx +228 -0
- package/Tests/UI/Components/TableRowSelectability.test.tsx +312 -0
- package/Tests/UI/Components/TelemetryTimeRangePicker.test.tsx +49 -7
- package/Tests/UI/Components/TimeRangePickerDropdown.test.tsx +325 -0
- package/Tests/UI/Components/Workflow/GraphLint.test.ts +893 -0
- package/Tests/UI/Components/Workflow/GraphLintSummary.test.ts +755 -0
- package/Tests/UI/Components/Workflow/ModelColumnEditor.test.ts +522 -0
- package/Tests/UI/Components/Workflow/ModelColumnEditorServerContract.test.ts +193 -0
- package/Tests/UI/Components/Workflow/ModelSchema.test.ts +388 -0
- package/Tests/UI/Components/Workflow/RunStatusWatcher.test.ts +210 -0
- package/Tests/UI/Components/Workflow/StepTraceViewer.test.tsx +256 -0
- package/Tests/UI/Components/Workflow/UseRunWatch.test.tsx +665 -0
- package/Tests/UI/Components/Workflow/Utils.test.ts +192 -0
- package/Tests/UI/Components/Workflow/WorkflowIssuesModal.test.tsx +485 -0
- package/Tests/UI/Components/Workflow/WorkflowLogModal.test.tsx +478 -0
- package/Tests/UI/Components/Workflow/WorkflowStatusBar.test.tsx +379 -0
- package/Tests/UI/EsbuildConfig.test.ts +607 -0
- package/Tests/UI/Monitor/MonitorStepCriteriaView.test.tsx +432 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +5 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +11 -4
- package/Tests/UI/Utils/ModelAPICreateMiscData.test.ts +94 -0
- package/Tests/UI/Utils/Platform.test.ts +147 -0
- package/Tests/UI/Utils/ProjectInvitationDisplay.test.ts +357 -0
- package/Tests/Utils/Monitor/NetworkDeviceLinkRuleUtil.test.ts +198 -0
- package/Tests/Utils/Monitor/NetworkDeviceRoleUtil.test.ts +514 -0
- package/Tests/Utils/Monitor/NetworkTopologyUtil.test.ts +727 -0
- package/Tests/Utils/Schema/AnalyticsModelSchema.test.ts +469 -0
- package/Tests/Utils/Schema/ModelSchema.test.ts +268 -0
- package/Tests/Utils/Telemetry/CrossSignalScope.test.ts +698 -0
- package/Tests/Utils/Telemetry/EntityKeyNonTelemetry.test.ts +193 -0
- package/Tests/__mocks__/bullmq.js +55 -0
- package/Types/AI/AIChatMessageStatus.ts +8 -1
- package/Types/AI/AIChatTypes.ts +12 -0
- package/Types/Database/AccessControl/OwnerOnlyColumn.ts +88 -0
- package/Types/Exception/ExceptionCode.ts +2 -0
- package/Types/Exception/ServiceUnavailableException.ts +8 -0
- package/Types/Exception/TooManyRequestsException.ts +8 -0
- package/Types/IP/IP.ts +93 -47
- package/Types/Monitor/SnmpMonitor/NetworkTopology.ts +80 -3
- package/Types/NetworkDevice/NetworkDeviceMonitoringMethod.ts +55 -0
- package/Types/OnCallDutyPolicy/Layer.ts +203 -149
- package/Types/OnCallDutyPolicy/OnCallDutyPolicyStatus.ts +13 -0
- package/Types/OnCallDutyPolicy/ScheduleShiftUtil.ts +155 -10
- package/Types/Permission.ts +193 -0
- package/Types/SerializableObjectDictionary.ts +133 -39
- package/Types/Telemetry/EntityRelationshipType.ts +1 -1
- package/Types/Telemetry/EntitySource.ts +40 -0
- package/Types/Telemetry/EntityType.ts +28 -1
- package/Types/Telemetry/EntityTypeGroups.ts +65 -0
- package/Types/Workflow/Component.ts +29 -0
- package/Types/Workflow/Components/API.ts +35 -0
- package/Types/Workflow/Components/BaseModel.ts +77 -27
- package/Types/Workflow/Components/Discord.ts +1 -0
- package/Types/Workflow/Components/Email.ts +12 -3
- package/Types/Workflow/Components/JavaScript.ts +7 -0
- package/Types/Workflow/Components/MicrosoftTeams.ts +3 -2
- package/Types/Workflow/Components/Slack.ts +1 -0
- package/Types/Workflow/Components/Telegram.ts +1 -0
- package/Types/Workflow/StepTrace.ts +181 -0
- package/Types/Workflow/TemplateSyntax.ts +543 -0
- package/Types/Workflow/Templates.ts +2368 -0
- package/UI/Components/Calendar/Calendar.css +43 -0
- package/UI/Components/Calendar/Calendar.tsx +8 -0
- package/UI/Components/Card/Card.tsx +2 -2
- package/UI/Components/Checkbox/Checkbox.tsx +16 -0
- package/UI/Components/Date/CustomTimeRangeModal.tsx +278 -0
- package/UI/Components/Date/TimeRangePickerDropdown.tsx +250 -0
- package/UI/Components/Dictionary/Dictionary.tsx +71 -15
- package/UI/Components/FormModal/BasicFormModal.tsx +2 -1
- package/UI/Components/Forms/Fields/ColorPicker.tsx +66 -10
- package/UI/Components/Forms/Fields/IconPicker.tsx +48 -10
- package/UI/Components/Forms/Types/Field.ts +7 -0
- package/UI/Components/Forms/Validation.ts +63 -1
- package/UI/Components/Header/HeaderIconDropdownButton.tsx +53 -3
- package/UI/Components/Input/Input.tsx +32 -3
- package/UI/Components/KeyboardShortcut/KeyboardKey.ts +185 -0
- package/UI/Components/KeyboardShortcut/KeyboardShortcut.tsx +87 -0
- package/UI/Components/LogsViewer/LogsViewer.tsx +28 -0
- package/UI/Components/LogsViewer/components/ActiveFilterChips.tsx +31 -0
- package/UI/Components/LogsViewer/components/KeyboardShortcutsHelp.tsx +18 -18
- package/UI/Components/LogsViewer/components/LogDetailsPanel.tsx +363 -14
- package/UI/Components/LogsViewer/components/LogTimeRangePicker.tsx +11 -216
- package/UI/Components/LogsViewer/components/LogsAnalyticsView.tsx +11 -0
- package/UI/Components/LogsViewer/components/LogsTable.tsx +155 -12
- package/UI/Components/LogsViewer/components/LogsViewerToolbar.tsx +29 -0
- package/UI/Components/LogsViewer/types.ts +23 -0
- package/UI/Components/Markdown.tsx/MarkdownEditor.tsx +9 -2
- package/UI/Components/Modal/Modal.tsx +37 -4
- package/UI/Components/Navbar/NavBarMenuModal.tsx +15 -30
- package/UI/Components/ProjectInvitations/PendingProjectInvitations.tsx +442 -0
- package/UI/Components/SimpleLogViewer/SimpleLogViewer.tsx +23 -1
- package/UI/Components/Table/Table.tsx +49 -16
- package/UI/Components/Table/TableBody.tsx +53 -28
- package/UI/Components/Table/TableHeader.tsx +13 -0
- package/UI/Components/Table/TableRow.tsx +58 -26
- package/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.tsx +11 -210
- package/UI/Components/Workflow/ArgumentsForm.tsx +341 -8
- package/UI/Components/Workflow/Component.tsx +28 -26
- package/UI/Components/Workflow/ComponentReturnValueViewer.tsx +26 -0
- package/UI/Components/Workflow/ComponentSettingsModal.tsx +79 -9
- package/UI/Components/Workflow/ComponentValuePickerModal.tsx +135 -7
- package/UI/Components/Workflow/ComponentsModal.tsx +116 -22
- package/UI/Components/Workflow/DocumentationViewer.tsx +59 -9
- package/UI/Components/Workflow/GraphLint.ts +628 -0
- package/UI/Components/Workflow/GraphLintSummary.ts +390 -0
- package/UI/Components/Workflow/ModelColumnEditor.tsx +528 -0
- package/UI/Components/Workflow/ModelSchema.ts +278 -0
- package/UI/Components/Workflow/RunForm.tsx +41 -7
- package/UI/Components/Workflow/RunStatusWatcher.ts +122 -0
- package/UI/Components/Workflow/StepTraceViewer.tsx +186 -0
- package/UI/Components/Workflow/UseRunWatch.ts +212 -0
- package/UI/Components/Workflow/Utils.ts +93 -1
- package/UI/Components/Workflow/VariableModal.tsx +6 -2
- package/UI/Components/Workflow/Workflow.tsx +126 -7
- package/UI/Components/Workflow/WorkflowIssuesModal.tsx +255 -0
- package/UI/Components/Workflow/WorkflowLogModal.tsx +128 -0
- package/UI/Components/Workflow/WorkflowStatusBar.tsx +224 -0
- package/UI/Types/LayeredDismissal.ts +31 -0
- package/UI/Types/UseAnchoredFieldPopup.ts +99 -0
- package/UI/Utils/AIChatExport/ConversationMarkdown.ts +10 -0
- package/UI/Utils/ModelAPI/ModelAPI.ts +7 -1
- package/UI/Utils/Platform.ts +149 -0
- package/UI/Utils/ProjectInvitationDisplay.ts +118 -0
- package/UI/esbuild-config.js +22 -1
- package/Utils/Monitor/NetworkDeviceLinkRuleUtil.ts +187 -0
- package/Utils/Monitor/NetworkDeviceRoleUtil.ts +533 -0
- package/Utils/Monitor/NetworkTopologyUtil.ts +917 -155
- package/Utils/Telemetry/CrossSignalScope.ts +502 -0
- package/Utils/Telemetry/EntityKey.ts +71 -5
- package/Utils/Telemetry/EntityRelationship.ts +1 -1
- package/build/dist/Models/AnalyticsModels/MetricItemAggMV1mByK8sCluster.js +1 -1
- package/build/dist/Models/AnalyticsModels/MetricItemAggMV1mByService.js +1 -1
- package/build/dist/Models/DatabaseModels/AIConversation.js +32 -0
- package/build/dist/Models/DatabaseModels/AIConversation.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AIConversationMessage.js +42 -0
- package/build/dist/Models/DatabaseModels/AIConversationMessage.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertEpisodeMember.js +28 -0
- package/build/dist/Models/DatabaseModels/AlertEpisodeMember.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodeMember.js +29 -0
- package/build/dist/Models/DatabaseModels/IncidentEpisodeMember.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +12 -4
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/{TelemetryEntity.js → InventoryItem.js} +212 -29
- package/build/dist/Models/DatabaseModels/InventoryItem.js.map +1 -0
- package/build/dist/Models/DatabaseModels/InventoryItemCustomField.js +454 -0
- package/build/dist/Models/DatabaseModels/InventoryItemCustomField.js.map +1 -0
- package/build/dist/Models/DatabaseModels/{TelemetryEntityRelationship.js → InventoryItemRelationship.js} +52 -25
- package/build/dist/Models/DatabaseModels/InventoryItemRelationship.js.map +1 -0
- package/build/dist/Models/DatabaseModels/NetworkDevice.js +141 -0
- package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceLink.js +719 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceLink.js.map +1 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceLinkRule.js +475 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceLinkRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/NetworkTopologySuppression.js +446 -0
- package/build/dist/Models/DatabaseModels/NetworkTopologySuppression.js.map +1 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyFeed.js +9 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyFeed.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Project.js +80 -0
- package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserCall.js +46 -2
- package/build/dist/Models/DatabaseModels/UserCall.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserEmail.js +48 -2
- package/build/dist/Models/DatabaseModels/UserEmail.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserNotificationRule.js +424 -55
- package/build/dist/Models/DatabaseModels/UserNotificationRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserOnCallLogTimeline.js +24 -2
- package/build/dist/Models/DatabaseModels/UserOnCallLogTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserPush.js +51 -1
- package/build/dist/Models/DatabaseModels/UserPush.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserSMS.js +47 -2
- package/build/dist/Models/DatabaseModels/UserSMS.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserTelegram.js +65 -3
- package/build/dist/Models/DatabaseModels/UserTelegram.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserWebhook.js +56 -2
- package/build/dist/Models/DatabaseModels/UserWebhook.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserWhatsApp.js +45 -2
- package/build/dist/Models/DatabaseModels/UserWhatsApp.js.map +1 -1
- package/build/dist/Models/DatabaseModels/WorkflowLog.js +39 -0
- package/build/dist/Models/DatabaseModels/WorkflowLog.js.map +1 -1
- package/build/dist/Models/DatabaseModels/WorkflowVariable.js +12 -0
- package/build/dist/Models/DatabaseModels/WorkflowVariable.js.map +1 -1
- package/build/dist/Server/API/AIChatAPI.js +237 -1
- package/build/dist/Server/API/AIChatAPI.js.map +1 -1
- package/build/dist/Server/API/DashboardAPI.js +165 -13
- package/build/dist/Server/API/DashboardAPI.js.map +1 -1
- package/build/dist/Server/API/OnCallReadinessAPI.js +599 -0
- package/build/dist/Server/API/OnCallReadinessAPI.js.map +1 -0
- package/build/dist/Server/API/TeamComplianceAPI.js +68 -9
- package/build/dist/Server/API/TeamComplianceAPI.js.map +1 -1
- package/build/dist/Server/API/TelemetryAPI.js +129 -18
- package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
- package/build/dist/Server/API/UserAPI.js +16 -1
- package/build/dist/Server/API/UserAPI.js.map +1 -1
- package/build/dist/Server/EnvironmentConfig.js +45 -0
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/DataSourceOptions.js +22 -0
- package/build/dist/Server/Infrastructure/Postgres/DataSourceOptions.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786100000000-RestoreServiceLowerNameIndex.js +4 -4
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786551733814-MigrationName.js +20 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786551733814-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786559879134-AddWorkflowLogStepTrace.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786559879134-AddWorkflowLogStepTrace.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786625176831-AddMonitoringMethodToNetworkDevice.js +18 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786625176831-AddMonitoringMethodToNetworkDevice.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786634985763-AddNetworkDeviceLink.js +39 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786634985763-AddNetworkDeviceLink.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786639512056-AddNetworkDeviceLinkRule.js +38 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786639512056-AddNetworkDeviceLinkRule.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786639972982-AddNetworkTopologySuppression.js +22 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786639972982-AddNetworkTopologySuppression.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786800000000-RenameTelemetryEntityToInventoryItem.js +150 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786800000000-RenameTelemetryEntityToInventoryItem.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786900000000-AddInventoryItemArchiveAndCustomFields.js +57 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786900000000-AddInventoryItemArchiveAndCustomFields.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787000000000-AddOnCallNotificationFallbackColumns.js +69 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787000000000-AddOnCallNotificationFallbackColumns.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787100000000-AddAIConversationPageContext.js +32 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787100000000-AddAIConversationPageContext.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787200000000-AddAIChatMessageFeedback.js +26 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787200000000-AddAIChatMessageFeedback.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787300000000-AddEpisodeMemberNotifyIndexes.js +48 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787300000000-AddEpisodeMemberNotifyIndexes.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +24 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Infrastructure/Queue.js +72 -13
- package/build/dist/Server/Infrastructure/Queue.js.map +1 -1
- package/build/dist/Server/Middleware/MasterAdminAuthorization.js +11 -6
- package/build/dist/Server/Middleware/MasterAdminAuthorization.js.map +1 -1
- package/build/dist/Server/Middleware/PublicDashboardRateLimit.js +399 -0
- package/build/dist/Server/Middleware/PublicDashboardRateLimit.js.map +1 -0
- package/build/dist/Server/Services/AIService.js +1 -0
- package/build/dist/Server/Services/AIService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeStateTimelineService.js +24 -3
- package/build/dist/Server/Services/AlertEpisodeStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/AlertSeverityService.js +54 -0
- package/build/dist/Server/Services/AlertSeverityService.js.map +1 -1
- package/build/dist/Server/Services/DashboardService.js +10 -9
- package/build/dist/Server/Services/DashboardService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +24 -2
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeStateTimelineService.js +24 -3
- package/build/dist/Server/Services/IncidentEpisodeStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentSeverityService.js +67 -0
- package/build/dist/Server/Services/IncidentSeverityService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +12 -4
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/InventoryItemCustomFieldService.js +9 -0
- package/build/dist/Server/Services/InventoryItemCustomFieldService.js.map +1 -0
- package/build/dist/Server/Services/{TelemetryEntityRelationshipService.js → InventoryItemRelationshipService.js} +9 -6
- package/build/dist/Server/Services/InventoryItemRelationshipService.js.map +1 -0
- package/build/dist/Server/Services/{TelemetryEntityService.js → InventoryItemService.js} +158 -23
- package/build/dist/Server/Services/InventoryItemService.js.map +1 -0
- package/build/dist/Server/Services/LogAggregationService.js +27 -8
- package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
- package/build/dist/Server/Services/MetricAggregationService.js +80 -0
- package/build/dist/Server/Services/MetricAggregationService.js.map +1 -1
- package/build/dist/Server/Services/MetricService.js +6 -6
- package/build/dist/Server/Services/MetricService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceLinkRuleService.js +9 -0
- package/build/dist/Server/Services/NetworkDeviceLinkRuleService.js.map +1 -0
- package/build/dist/Server/Services/NetworkDeviceLinkService.js +71 -0
- package/build/dist/Server/Services/NetworkDeviceLinkService.js.map +1 -0
- package/build/dist/Server/Services/NetworkDeviceService.js +113 -0
- package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
- package/build/dist/Server/Services/NetworkSiteService.js +53 -13
- package/build/dist/Server/Services/NetworkSiteService.js.map +1 -1
- package/build/dist/Server/Services/NetworkTopologySuppressionService.js +85 -0
- package/build/dist/Server/Services/NetworkTopologySuppressionService.js.map +1 -0
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js +48 -32
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogService.js +8 -0
- package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.js +51 -12
- package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js +57 -13
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js.map +1 -1
- package/build/dist/Server/Services/OnCallNotificationAlertingService.js +548 -0
- package/build/dist/Server/Services/OnCallNotificationAlertingService.js.map +1 -0
- package/build/dist/Server/Services/OnCallReadinessService.js +1961 -0
- package/build/dist/Server/Services/OnCallReadinessService.js.map +1 -0
- package/build/dist/Server/Services/OnCallSetupReminderService.js +738 -0
- package/build/dist/Server/Services/OnCallSetupReminderService.js.map +1 -0
- package/build/dist/Server/Services/ProfileAggregationService.js +68 -4
- package/build/dist/Server/Services/ProfileAggregationService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageService.js +11 -10
- package/build/dist/Server/Services/StatusPageService.js.map +1 -1
- package/build/dist/Server/Services/TeamComplianceService.js +312 -160
- package/build/dist/Server/Services/TeamComplianceService.js.map +1 -1
- package/build/dist/Server/Services/UserCallService.js +24 -1
- package/build/dist/Server/Services/UserCallService.js.map +1 -1
- package/build/dist/Server/Services/UserEmailService.js +24 -1
- package/build/dist/Server/Services/UserEmailService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationRuleAdminService.js +858 -0
- package/build/dist/Server/Services/UserNotificationRuleAdminService.js.map +1 -0
- package/build/dist/Server/Services/UserNotificationRuleService.js +2830 -175
- package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
- package/build/dist/Server/Services/UserOnCallLogService.js +488 -43
- package/build/dist/Server/Services/UserOnCallLogService.js.map +1 -1
- package/build/dist/Server/Services/UserPushService.js +26 -0
- package/build/dist/Server/Services/UserPushService.js.map +1 -1
- package/build/dist/Server/Services/UserService.js +10 -0
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Services/UserSmsService.js +24 -1
- package/build/dist/Server/Services/UserSmsService.js.map +1 -1
- package/build/dist/Server/Services/UserTelegramService.js +22 -1
- package/build/dist/Server/Services/UserTelegramService.js.map +1 -1
- package/build/dist/Server/Services/UserWebhookService.js +25 -1
- package/build/dist/Server/Services/UserWebhookService.js.map +1 -1
- package/build/dist/Server/Services/UserWhatsAppService.js +22 -1
- package/build/dist/Server/Services/UserWhatsAppService.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/BasePermission.js +12 -1
- package/build/dist/Server/Types/Database/Permissions/BasePermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/CreatePermission.js +126 -0
- package/build/dist/Server/Types/Database/Permissions/CreatePermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/OwnerOnlyColumnPermission.js +254 -0
- package/build/dist/Server/Types/Database/Permissions/OwnerOnlyColumnPermission.js.map +1 -0
- package/build/dist/Server/Types/Database/Permissions/QueryPermission.js +47 -2
- package/build/dist/Server/Types/Database/Permissions/QueryPermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/TenantPermission.js +7 -0
- package/build/dist/Server/Types/Database/Permissions/TenantPermission.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Delete.js +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Delete.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Get.js +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Get.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Patch.js +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Patch.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Post.js +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Post.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Put.js +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Put.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Utils.js +28 -0
- package/build/dist/Server/Types/Workflow/Components/API/Utils.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/BaseModel/CreateManyBaseModel.js +21 -5
- package/build/dist/Server/Types/Workflow/Components/BaseModel/CreateManyBaseModel.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/BaseModel/CreateOneBaseModel.js +14 -10
- package/build/dist/Server/Types/Workflow/Components/BaseModel/CreateOneBaseModel.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/BaseModel/ModelArguments.js +31 -0
- package/build/dist/Server/Types/Workflow/Components/BaseModel/ModelArguments.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/Conditions/IfElse.js +3 -9
- package/build/dist/Server/Types/Workflow/Components/Conditions/IfElse.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/Email.js +15 -4
- package/build/dist/Server/Types/Workflow/Components/Email.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/JavaScript.js +7 -2
- package/build/dist/Server/Types/Workflow/Components/JavaScript.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/MicrosoftTeams/SendMessageToChannel.js +1 -1
- package/build/dist/Server/Types/Workflow/Components/MicrosoftTeams/SendMessageToChannel.js.map +1 -1
- package/build/dist/Server/Types/Workflow/TriggerCode.js.map +1 -1
- package/build/dist/Server/Utils/AI/Chat/ChatAgentRunner.js +514 -56
- package/build/dist/Server/Utils/AI/Chat/ChatAgentRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js +20 -3
- package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js.map +1 -1
- package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js +19 -6
- package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +7 -0
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/AIActionTools.js +2 -2
- package/build/dist/Server/Utils/AI/Toolbox/AIActionTools.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/AIMetaTools.js +692 -0
- package/build/dist/Server/Utils/AI/Toolbox/AIMetaTools.js.map +1 -0
- package/build/dist/Server/Utils/AI/Toolbox/AlertTools.js +148 -12
- package/build/dist/Server/Utils/AI/Toolbox/AlertTools.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/IncidentTools.js +157 -10
- package/build/dist/Server/Utils/AI/Toolbox/IncidentTools.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/Index.js +37 -0
- package/build/dist/Server/Utils/AI/Toolbox/Index.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/MonitorTools.js +259 -14
- package/build/dist/Server/Utils/AI/Toolbox/MonitorTools.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/NoteWriteTools.js +235 -0
- package/build/dist/Server/Utils/AI/Toolbox/NoteWriteTools.js.map +1 -0
- package/build/dist/Server/Utils/AI/Toolbox/OnCallTools.js +1000 -0
- package/build/dist/Server/Utils/AI/Toolbox/OnCallTools.js.map +1 -0
- package/build/dist/Server/Utils/AI/Toolbox/RunbookTools.js +356 -0
- package/build/dist/Server/Utils/AI/Toolbox/RunbookTools.js.map +1 -0
- package/build/dist/Server/Utils/AI/Toolbox/SloTools.js +394 -0
- package/build/dist/Server/Utils/AI/Toolbox/SloTools.js.map +1 -0
- package/build/dist/Server/Utils/AI/Toolbox/StatusPageTools.js +465 -0
- package/build/dist/Server/Utils/AI/Toolbox/StatusPageTools.js.map +1 -0
- package/build/dist/Server/Utils/AI/Toolbox/TeamTools.js +280 -0
- package/build/dist/Server/Utils/AI/Toolbox/TeamTools.js.map +1 -0
- package/build/dist/Server/Utils/AI/Toolbox/TimelineTools.js +527 -0
- package/build/dist/Server/Utils/AI/Toolbox/TimelineTools.js.map +1 -0
- package/build/dist/Server/Utils/AI/Toolbox/WorkflowProbeTools.js +548 -0
- package/build/dist/Server/Utils/AI/Toolbox/WorkflowProbeTools.js.map +1 -0
- package/build/dist/Server/Utils/ClientIp.js +137 -0
- package/build/dist/Server/Utils/ClientIp.js.map +1 -0
- package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js +38 -0
- package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js.map +1 -1
- package/build/dist/Server/Utils/Dashboard/PublicDashboardSloHistoryPolicy.js +89 -0
- package/build/dist/Server/Utils/Dashboard/PublicDashboardSloHistoryPolicy.js.map +1 -0
- package/build/dist/Server/Utils/Dashboard/PublicDashboardSloWidget.js +77 -0
- package/build/dist/Server/Utils/Dashboard/PublicDashboardSloWidget.js.map +1 -0
- package/build/dist/Server/Utils/Express.js +12 -12
- package/build/dist/Server/Utils/Express.js.map +1 -1
- package/build/dist/Server/Utils/LLM/LLMService.js +70 -7
- package/build/dist/Server/Utils/LLM/LLMService.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +121 -11
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/SSRFProtection.js +82 -21
- package/build/dist/Server/Utils/SSRFProtection.js.map +1 -1
- package/build/dist/Server/Utils/StartServer.js +12 -4
- package/build/dist/Server/Utils/StartServer.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/EntityRegistry.js +165 -18
- package/build/dist/Server/Utils/Telemetry/EntityRegistry.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/InventoryEntityRegistry.js +507 -0
- package/build/dist/Server/Utils/Telemetry/InventoryEntityRegistry.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js +122 -47
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js.map +1 -1
- package/build/dist/Server/Utils/VM/VMAPI.js +51 -4
- package/build/dist/Server/Utils/VM/VMAPI.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +7 -3
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
- package/build/dist/Types/AI/AIChatMessageStatus.js +8 -1
- package/build/dist/Types/AI/AIChatMessageStatus.js.map +1 -1
- package/build/dist/Types/AI/AIChatTypes.js +12 -0
- package/build/dist/Types/AI/AIChatTypes.js.map +1 -1
- package/build/dist/Types/Database/AccessControl/OwnerOnlyColumn.js +60 -0
- package/build/dist/Types/Database/AccessControl/OwnerOnlyColumn.js.map +1 -0
- package/build/dist/Types/Exception/ExceptionCode.js +2 -0
- package/build/dist/Types/Exception/ExceptionCode.js.map +1 -1
- package/build/dist/Types/Exception/ServiceUnavailableException.js +8 -0
- package/build/dist/Types/Exception/ServiceUnavailableException.js.map +1 -0
- package/build/dist/Types/Exception/TooManyRequestsException.js +8 -0
- package/build/dist/Types/Exception/TooManyRequestsException.js.map +1 -0
- package/build/dist/Types/IP/IP.js +87 -43
- package/build/dist/Types/IP/IP.js.map +1 -1
- package/build/dist/Types/NetworkDevice/NetworkDeviceMonitoringMethod.js +50 -0
- package/build/dist/Types/NetworkDevice/NetworkDeviceMonitoringMethod.js.map +1 -0
- package/build/dist/Types/OnCallDutyPolicy/Layer.js +186 -123
- package/build/dist/Types/OnCallDutyPolicy/Layer.js.map +1 -1
- package/build/dist/Types/OnCallDutyPolicy/OnCallDutyPolicyStatus.js +13 -0
- package/build/dist/Types/OnCallDutyPolicy/OnCallDutyPolicyStatus.js.map +1 -1
- package/build/dist/Types/OnCallDutyPolicy/ScheduleShiftUtil.js +105 -11
- package/build/dist/Types/OnCallDutyPolicy/ScheduleShiftUtil.js.map +1 -1
- package/build/dist/Types/Permission.js +174 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/SerializableObjectDictionary.js +133 -39
- package/build/dist/Types/SerializableObjectDictionary.js.map +1 -1
- package/build/dist/Types/Telemetry/EntityRelationshipType.js +1 -1
- package/build/dist/Types/Telemetry/EntitySource.js +39 -0
- package/build/dist/Types/Telemetry/EntitySource.js.map +1 -0
- package/build/dist/Types/Telemetry/EntityType.js +28 -1
- package/build/dist/Types/Telemetry/EntityType.js.map +1 -1
- package/build/dist/Types/Telemetry/EntityTypeGroups.js +57 -0
- package/build/dist/Types/Telemetry/EntityTypeGroups.js.map +1 -0
- package/build/dist/Types/Workflow/Component.js +21 -0
- package/build/dist/Types/Workflow/Component.js.map +1 -1
- package/build/dist/Types/Workflow/Components/API.js +35 -0
- package/build/dist/Types/Workflow/Components/API.js.map +1 -1
- package/build/dist/Types/Workflow/Components/BaseModel.js +68 -26
- package/build/dist/Types/Workflow/Components/BaseModel.js.map +1 -1
- package/build/dist/Types/Workflow/Components/Discord.js +1 -0
- package/build/dist/Types/Workflow/Components/Discord.js.map +1 -1
- package/build/dist/Types/Workflow/Components/Email.js +12 -3
- package/build/dist/Types/Workflow/Components/Email.js.map +1 -1
- package/build/dist/Types/Workflow/Components/JavaScript.js +7 -0
- package/build/dist/Types/Workflow/Components/JavaScript.js.map +1 -1
- package/build/dist/Types/Workflow/Components/MicrosoftTeams.js +3 -2
- package/build/dist/Types/Workflow/Components/MicrosoftTeams.js.map +1 -1
- package/build/dist/Types/Workflow/Components/Slack.js +1 -0
- package/build/dist/Types/Workflow/Components/Slack.js.map +1 -1
- package/build/dist/Types/Workflow/Components/Telegram.js +1 -0
- package/build/dist/Types/Workflow/Components/Telegram.js.map +1 -1
- package/build/dist/Types/Workflow/StepTrace.js +104 -0
- package/build/dist/Types/Workflow/StepTrace.js.map +1 -0
- package/build/dist/Types/Workflow/TemplateSyntax.js +338 -0
- package/build/dist/Types/Workflow/TemplateSyntax.js.map +1 -0
- package/build/dist/Types/Workflow/Templates.js +2111 -0
- package/build/dist/Types/Workflow/Templates.js.map +1 -0
- package/build/dist/UI/Components/Calendar/Calendar.js +1 -1
- package/build/dist/UI/Components/Calendar/Calendar.js.map +1 -1
- package/build/dist/UI/Components/Checkbox/Checkbox.js +1 -1
- package/build/dist/UI/Components/Checkbox/Checkbox.js.map +1 -1
- package/build/dist/UI/Components/Date/CustomTimeRangeModal.js +126 -0
- package/build/dist/UI/Components/Date/CustomTimeRangeModal.js.map +1 -0
- package/build/dist/UI/Components/Date/TimeRangePickerDropdown.js +123 -0
- package/build/dist/UI/Components/Date/TimeRangePickerDropdown.js.map +1 -0
- package/build/dist/UI/Components/Dictionary/Dictionary.js +47 -17
- package/build/dist/UI/Components/Dictionary/Dictionary.js.map +1 -1
- package/build/dist/UI/Components/FormModal/BasicFormModal.js.map +1 -1
- package/build/dist/UI/Components/Forms/Fields/ColorPicker.js +52 -13
- package/build/dist/UI/Components/Forms/Fields/ColorPicker.js.map +1 -1
- package/build/dist/UI/Components/Forms/Fields/IconPicker.js +28 -12
- package/build/dist/UI/Components/Forms/Fields/IconPicker.js.map +1 -1
- package/build/dist/UI/Components/Forms/Validation.js +44 -0
- package/build/dist/UI/Components/Forms/Validation.js.map +1 -1
- package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js +27 -4
- package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js.map +1 -1
- package/build/dist/UI/Components/Input/Input.js +13 -4
- package/build/dist/UI/Components/Input/Input.js.map +1 -1
- package/build/dist/UI/Components/KeyboardShortcut/KeyboardKey.js +163 -0
- package/build/dist/UI/Components/KeyboardShortcut/KeyboardKey.js.map +1 -0
- package/build/dist/UI/Components/KeyboardShortcut/KeyboardShortcut.js +47 -0
- package/build/dist/UI/Components/KeyboardShortcut/KeyboardShortcut.js.map +1 -0
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js +4 -4
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/ActiveFilterChips.js +11 -1
- package/build/dist/UI/Components/LogsViewer/components/ActiveFilterChips.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/KeyboardShortcutsHelp.js +10 -8
- package/build/dist/UI/Components/LogsViewer/components/KeyboardShortcutsHelp.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js +227 -14
- package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogTimeRangePicker.js +5 -108
- package/build/dist/UI/Components/LogsViewer/components/LogTimeRangePicker.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js +5 -0
- package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsTable.js +69 -5
- package/build/dist/UI/Components/LogsViewer/components/LogsTable.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsViewerToolbar.js +8 -0
- package/build/dist/UI/Components/LogsViewer/components/LogsViewerToolbar.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/types.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownEditor.js +9 -2
- package/build/dist/UI/Components/Markdown.tsx/MarkdownEditor.js.map +1 -1
- package/build/dist/UI/Components/Modal/Modal.js +31 -5
- package/build/dist/UI/Components/Modal/Modal.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.js +8 -21
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.js.map +1 -1
- package/build/dist/UI/Components/ProjectInvitations/PendingProjectInvitations.js +251 -0
- package/build/dist/UI/Components/ProjectInvitations/PendingProjectInvitations.js.map +1 -0
- package/build/dist/UI/Components/SimpleLogViewer/SimpleLogViewer.js +9 -2
- package/build/dist/UI/Components/SimpleLogViewer/SimpleLogViewer.js.map +1 -1
- package/build/dist/UI/Components/Table/Table.js +27 -15
- package/build/dist/UI/Components/Table/Table.js.map +1 -1
- package/build/dist/UI/Components/Table/TableBody.js +24 -18
- package/build/dist/UI/Components/Table/TableBody.js.map +1 -1
- package/build/dist/UI/Components/Table/TableHeader.js +9 -1
- package/build/dist/UI/Components/Table/TableHeader.js.map +1 -1
- package/build/dist/UI/Components/Table/TableRow.js +29 -21
- package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.js +5 -105
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ArgumentsForm.js +261 -14
- package/build/dist/UI/Components/Workflow/ArgumentsForm.js.map +1 -1
- package/build/dist/UI/Components/Workflow/Component.js +20 -19
- package/build/dist/UI/Components/Workflow/Component.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ComponentReturnValueViewer.js +10 -1
- package/build/dist/UI/Components/Workflow/ComponentReturnValueViewer.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ComponentSettingsModal.js +35 -7
- package/build/dist/UI/Components/Workflow/ComponentSettingsModal.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ComponentValuePickerModal.js +57 -7
- package/build/dist/UI/Components/Workflow/ComponentValuePickerModal.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ComponentsModal.js +53 -18
- package/build/dist/UI/Components/Workflow/ComponentsModal.js.map +1 -1
- package/build/dist/UI/Components/Workflow/DocumentationViewer.js +19 -6
- package/build/dist/UI/Components/Workflow/DocumentationViewer.js.map +1 -1
- package/build/dist/UI/Components/Workflow/GraphLint.js +425 -0
- package/build/dist/UI/Components/Workflow/GraphLint.js.map +1 -0
- package/build/dist/UI/Components/Workflow/GraphLintSummary.js +231 -0
- package/build/dist/UI/Components/Workflow/GraphLintSummary.js.map +1 -0
- package/build/dist/UI/Components/Workflow/ModelColumnEditor.js +320 -0
- package/build/dist/UI/Components/Workflow/ModelColumnEditor.js.map +1 -0
- package/build/dist/UI/Components/Workflow/ModelSchema.js +156 -0
- package/build/dist/UI/Components/Workflow/ModelSchema.js.map +1 -0
- package/build/dist/UI/Components/Workflow/RunForm.js +22 -6
- package/build/dist/UI/Components/Workflow/RunForm.js.map +1 -1
- package/build/dist/UI/Components/Workflow/RunStatusWatcher.js +76 -0
- package/build/dist/UI/Components/Workflow/RunStatusWatcher.js.map +1 -0
- package/build/dist/UI/Components/Workflow/StepTraceViewer.js +76 -0
- package/build/dist/UI/Components/Workflow/StepTraceViewer.js.map +1 -0
- package/build/dist/UI/Components/Workflow/UseRunWatch.js +123 -0
- package/build/dist/UI/Components/Workflow/UseRunWatch.js.map +1 -0
- package/build/dist/UI/Components/Workflow/Utils.js +73 -1
- package/build/dist/UI/Components/Workflow/Utils.js.map +1 -1
- package/build/dist/UI/Components/Workflow/VariableModal.js +3 -2
- package/build/dist/UI/Components/Workflow/VariableModal.js.map +1 -1
- package/build/dist/UI/Components/Workflow/Workflow.js +92 -7
- package/build/dist/UI/Components/Workflow/Workflow.js.map +1 -1
- package/build/dist/UI/Components/Workflow/WorkflowIssuesModal.js +99 -0
- package/build/dist/UI/Components/Workflow/WorkflowIssuesModal.js.map +1 -0
- package/build/dist/UI/Components/Workflow/WorkflowLogModal.js +56 -0
- package/build/dist/UI/Components/Workflow/WorkflowLogModal.js.map +1 -0
- package/build/dist/UI/Components/Workflow/WorkflowStatusBar.js +92 -0
- package/build/dist/UI/Components/Workflow/WorkflowStatusBar.js.map +1 -0
- package/build/dist/UI/Types/LayeredDismissal.js +21 -0
- package/build/dist/UI/Types/LayeredDismissal.js.map +1 -0
- package/build/dist/UI/Types/UseAnchoredFieldPopup.js +74 -1
- package/build/dist/UI/Types/UseAnchoredFieldPopup.js.map +1 -1
- package/build/dist/UI/Utils/AIChatExport/ConversationMarkdown.js +9 -0
- package/build/dist/UI/Utils/AIChatExport/ConversationMarkdown.js.map +1 -1
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js +1 -1
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js.map +1 -1
- package/build/dist/UI/Utils/Platform.js +118 -0
- package/build/dist/UI/Utils/Platform.js.map +1 -0
- package/build/dist/UI/Utils/ProjectInvitationDisplay.js +106 -0
- package/build/dist/UI/Utils/ProjectInvitationDisplay.js.map +1 -0
- package/build/dist/Utils/Monitor/NetworkDeviceLinkRuleUtil.js +108 -0
- package/build/dist/Utils/Monitor/NetworkDeviceLinkRuleUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/NetworkDeviceRoleUtil.js +386 -0
- package/build/dist/Utils/Monitor/NetworkDeviceRoleUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +661 -126
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
- package/build/dist/Utils/Telemetry/CrossSignalScope.js +328 -0
- package/build/dist/Utils/Telemetry/CrossSignalScope.js.map +1 -0
- package/build/dist/Utils/Telemetry/EntityKey.js +57 -5
- package/build/dist/Utils/Telemetry/EntityKey.js.map +1 -1
- package/build/dist/Utils/Telemetry/EntityRelationship.js +1 -1
- package/jest.config.json +1 -0
- package/package.json +1 -1
- package/build/dist/Models/DatabaseModels/TelemetryEntity.js.map +0 -1
- package/build/dist/Models/DatabaseModels/TelemetryEntityRelationship.js.map +0 -1
- package/build/dist/Server/Services/TelemetryEntityRelationshipService.js.map +0 -1
- package/build/dist/Server/Services/TelemetryEntityService.js.map +0 -1
package/Server/API/AIChatAPI.ts
CHANGED
|
@@ -33,14 +33,19 @@ import {
|
|
|
33
33
|
AIChatToolActionStatus,
|
|
34
34
|
} from "../../Types/AI/AIChatTypes";
|
|
35
35
|
import { JSONArray, JSONObject } from "../../Types/JSON";
|
|
36
|
+
import AIRunEventType from "../../Types/AI/AIRunEventType";
|
|
36
37
|
import AIRunStatus from "../../Types/AI/AIRunStatus";
|
|
37
38
|
import AIRunType from "../../Types/AI/AIRunType";
|
|
38
39
|
import AIConversation from "../../Models/DatabaseModels/AIConversation";
|
|
39
|
-
import AIConversationMessage
|
|
40
|
+
import AIConversationMessage, {
|
|
41
|
+
AIConversationMessageFeedback,
|
|
42
|
+
} from "../../Models/DatabaseModels/AIConversationMessage";
|
|
40
43
|
import AIRun from "../../Models/DatabaseModels/AIRun";
|
|
44
|
+
import AIRunEvent from "../../Models/DatabaseModels/AIRunEvent";
|
|
41
45
|
import Project from "../../Models/DatabaseModels/Project";
|
|
42
46
|
import AIConversationService from "../Services/AIConversationService";
|
|
43
47
|
import AIConversationMessageService from "../Services/AIConversationMessageService";
|
|
48
|
+
import AIRunEventService from "../Services/AIRunEventService";
|
|
44
49
|
import AIRunService from "../Services/AIRunService";
|
|
45
50
|
import ProjectService from "../Services/ProjectService";
|
|
46
51
|
import LlmProviderService from "../Services/LlmProviderService";
|
|
@@ -54,6 +59,16 @@ import logger from "../Utils/Logger";
|
|
|
54
59
|
const MAX_USER_MESSAGE_LENGTH: number = 8000;
|
|
55
60
|
const MAX_CONCURRENT_RUNS_PER_PROJECT: number = 3;
|
|
56
61
|
|
|
62
|
+
// Final message content and run error for a turn the user stopped.
|
|
63
|
+
const STOPPED_BY_USER_TEXT: string = "Stopped by user.";
|
|
64
|
+
|
|
65
|
+
/*
|
|
66
|
+
* Cancel's terminal event must sort after every progress event the runner
|
|
67
|
+
* emitted — same convention as the runner's own failure finalizer, which
|
|
68
|
+
* starts its event sequence at 100000.
|
|
69
|
+
*/
|
|
70
|
+
const CANCEL_EVENT_SEQUENCE: number = 100000;
|
|
71
|
+
|
|
57
72
|
const router: ExpressRouter = Express.getRouter();
|
|
58
73
|
|
|
59
74
|
/*
|
|
@@ -706,4 +721,303 @@ router.post(
|
|
|
706
721
|
},
|
|
707
722
|
);
|
|
708
723
|
|
|
724
|
+
/*
|
|
725
|
+
* Stops the conversation's in-flight turn. Flips the active run to Cancelled,
|
|
726
|
+
* finalizes the in-flight assistant message as "Stopped by user." and emits a
|
|
727
|
+
* terminal run event so the polling UI sees closure. Every write is guarded on
|
|
728
|
+
* the row's current status, so racing the runner is safe: whichever side
|
|
729
|
+
* finalizes first wins and the loser's write matches zero rows (the runner
|
|
730
|
+
* also checks for cancellation cooperatively between its steps). Cancelling
|
|
731
|
+
* the run is also what releases the conversation for the next send —
|
|
732
|
+
* send-message's governor only blocks on Running/WaitingForApproval runs.
|
|
733
|
+
*/
|
|
734
|
+
router.post(
|
|
735
|
+
"/ai-chat/cancel-run",
|
|
736
|
+
UserMiddleware.getUserMiddleware,
|
|
737
|
+
async (
|
|
738
|
+
req: ExpressRequest,
|
|
739
|
+
res: ExpressResponse,
|
|
740
|
+
next: NextFunction,
|
|
741
|
+
): Promise<void> => {
|
|
742
|
+
try {
|
|
743
|
+
const props: DatabaseCommonInteractionProps =
|
|
744
|
+
await CommonAPI.getDatabaseCommonInteractionProps(req);
|
|
745
|
+
|
|
746
|
+
if (!props.userId) {
|
|
747
|
+
throw new NotAuthorizedException(
|
|
748
|
+
"AI chat requires a logged-in user session.",
|
|
749
|
+
);
|
|
750
|
+
}
|
|
751
|
+
|
|
752
|
+
if (!props.tenantId) {
|
|
753
|
+
throw new BadDataException("Project ID is required (tenantid header).");
|
|
754
|
+
}
|
|
755
|
+
|
|
756
|
+
const projectId: ObjectID = props.tenantId;
|
|
757
|
+
const userId: ObjectID = props.userId;
|
|
758
|
+
|
|
759
|
+
const conversationIdString: string = req.body["conversationId"] as string;
|
|
760
|
+
|
|
761
|
+
if (!conversationIdString) {
|
|
762
|
+
throw new BadDataException("conversationId is required.");
|
|
763
|
+
}
|
|
764
|
+
|
|
765
|
+
const conversationId: ObjectID = new ObjectID(conversationIdString);
|
|
766
|
+
|
|
767
|
+
// The privacy pin makes this return null for other users' rows.
|
|
768
|
+
const conversation: AIConversation | null =
|
|
769
|
+
await AIConversationService.findOneById({
|
|
770
|
+
id: conversationId,
|
|
771
|
+
select: { _id: true },
|
|
772
|
+
props: props,
|
|
773
|
+
});
|
|
774
|
+
|
|
775
|
+
if (!conversation) {
|
|
776
|
+
throw new BadDataException("Conversation not found.");
|
|
777
|
+
}
|
|
778
|
+
|
|
779
|
+
/*
|
|
780
|
+
* The conversation's live run: actively generating (Running) or paused
|
|
781
|
+
* for the user's approval (WaitingForApproval). The per-conversation
|
|
782
|
+
* governor allows at most one, so no sort is needed.
|
|
783
|
+
*/
|
|
784
|
+
const activeRun: AIRun | null = await AIRunService.findOneBy({
|
|
785
|
+
query: {
|
|
786
|
+
conversationId: conversationId,
|
|
787
|
+
projectId: projectId,
|
|
788
|
+
status: QueryHelper.any([
|
|
789
|
+
AIRunStatus.Running,
|
|
790
|
+
AIRunStatus.WaitingForApproval,
|
|
791
|
+
]),
|
|
792
|
+
},
|
|
793
|
+
select: { _id: true },
|
|
794
|
+
props: { isRoot: true },
|
|
795
|
+
});
|
|
796
|
+
|
|
797
|
+
if (!activeRun) {
|
|
798
|
+
throw new BadDataException(
|
|
799
|
+
"No response is being generated in this conversation.",
|
|
800
|
+
);
|
|
801
|
+
}
|
|
802
|
+
|
|
803
|
+
/*
|
|
804
|
+
* Status-guarded finalization, the same shape as the runner's own
|
|
805
|
+
* finalizer: only a still-in-flight run is flipped, so a run the runner
|
|
806
|
+
* completed (or errored) inside the race window is never overwritten.
|
|
807
|
+
* updateOneBy returns the matched-row count — zero from both guards
|
|
808
|
+
* means the other side won and already wrote the final state.
|
|
809
|
+
*/
|
|
810
|
+
let cancelledRunCount: number = 0;
|
|
811
|
+
|
|
812
|
+
for (const inFlightRunStatus of [
|
|
813
|
+
AIRunStatus.Running,
|
|
814
|
+
AIRunStatus.WaitingForApproval,
|
|
815
|
+
]) {
|
|
816
|
+
cancelledRunCount += await AIRunService.updateOneBy({
|
|
817
|
+
query: {
|
|
818
|
+
_id: activeRun.id!.toString(),
|
|
819
|
+
status: inFlightRunStatus,
|
|
820
|
+
},
|
|
821
|
+
data: {
|
|
822
|
+
status: AIRunStatus.Cancelled,
|
|
823
|
+
completedAt: OneUptimeDate.getCurrentDate(),
|
|
824
|
+
errorMessage: STOPPED_BY_USER_TEXT,
|
|
825
|
+
// A cancelled turn must never be resumable.
|
|
826
|
+
pausedState: null,
|
|
827
|
+
} as never,
|
|
828
|
+
props: { isRoot: true },
|
|
829
|
+
});
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
/*
|
|
833
|
+
* Finalize the run's in-flight assistant message the same guarded way:
|
|
834
|
+
* a message another path already finalized — completed with its full
|
|
835
|
+
* answer, or errored — keeps what it has.
|
|
836
|
+
*/
|
|
837
|
+
for (const inFlightMessageStatus of [
|
|
838
|
+
AIChatMessageStatus.InProgress,
|
|
839
|
+
AIChatMessageStatus.WaitingForApproval,
|
|
840
|
+
]) {
|
|
841
|
+
await AIConversationMessageService.updateOneBy({
|
|
842
|
+
query: {
|
|
843
|
+
aiRunId: activeRun.id!,
|
|
844
|
+
status: inFlightMessageStatus,
|
|
845
|
+
},
|
|
846
|
+
data: {
|
|
847
|
+
status: AIChatMessageStatus.Cancelled,
|
|
848
|
+
contentInMarkdown: STOPPED_BY_USER_TEXT,
|
|
849
|
+
} as never,
|
|
850
|
+
props: { isRoot: true },
|
|
851
|
+
});
|
|
852
|
+
}
|
|
853
|
+
|
|
854
|
+
/*
|
|
855
|
+
* Terminal event, only when this request actually took the run —
|
|
856
|
+
* emitting closure over a turn the runner finished would tell the UI a
|
|
857
|
+
* completed answer failed. RunFailed is the event enum's terminal
|
|
858
|
+
* "did not finish" member; the summary carries the human reason.
|
|
859
|
+
*/
|
|
860
|
+
if (cancelledRunCount > 0) {
|
|
861
|
+
try {
|
|
862
|
+
const cancelEvent: AIRunEvent = new AIRunEvent();
|
|
863
|
+
cancelEvent.projectId = projectId;
|
|
864
|
+
cancelEvent.aiRunId = activeRun.id!;
|
|
865
|
+
cancelEvent.userId = userId;
|
|
866
|
+
cancelEvent.sequence = CANCEL_EVENT_SEQUENCE;
|
|
867
|
+
cancelEvent.eventType = AIRunEventType.RunFailed;
|
|
868
|
+
cancelEvent.resultSummary = { errorMessage: STOPPED_BY_USER_TEXT };
|
|
869
|
+
|
|
870
|
+
await AIRunEventService.create({
|
|
871
|
+
data: cancelEvent,
|
|
872
|
+
props: { isRoot: true },
|
|
873
|
+
});
|
|
874
|
+
} catch (error) {
|
|
875
|
+
// Events are progress telemetry — never fail the cancel over them.
|
|
876
|
+
logger.error(
|
|
877
|
+
`Failed to emit AI chat cancel event: ${
|
|
878
|
+
error instanceof Error ? error.message : String(error)
|
|
879
|
+
}`,
|
|
880
|
+
);
|
|
881
|
+
}
|
|
882
|
+
}
|
|
883
|
+
|
|
884
|
+
Response.sendJsonObjectResponse(req, res, {
|
|
885
|
+
conversationId: conversationId.toString(),
|
|
886
|
+
aiRunId: activeRun.id!.toString(),
|
|
887
|
+
cancelled: cancelledRunCount > 0,
|
|
888
|
+
});
|
|
889
|
+
return;
|
|
890
|
+
} catch (err) {
|
|
891
|
+
next(err);
|
|
892
|
+
return;
|
|
893
|
+
}
|
|
894
|
+
},
|
|
895
|
+
);
|
|
896
|
+
|
|
897
|
+
/*
|
|
898
|
+
* Stores thumbs feedback on an assistant message (or clears it with null).
|
|
899
|
+
* Ownership is enforced the same way as the other routes: the message AND its
|
|
900
|
+
* conversation must resolve under the requesting user's props (the privacy
|
|
901
|
+
* pin returns null for other users' rows), and only assistant-role messages
|
|
902
|
+
* accept feedback. Persistence only — no analytics pipeline yet.
|
|
903
|
+
*/
|
|
904
|
+
router.post(
|
|
905
|
+
"/ai-chat/message-feedback",
|
|
906
|
+
UserMiddleware.getUserMiddleware,
|
|
907
|
+
async (
|
|
908
|
+
req: ExpressRequest,
|
|
909
|
+
res: ExpressResponse,
|
|
910
|
+
next: NextFunction,
|
|
911
|
+
): Promise<void> => {
|
|
912
|
+
try {
|
|
913
|
+
const props: DatabaseCommonInteractionProps =
|
|
914
|
+
await CommonAPI.getDatabaseCommonInteractionProps(req);
|
|
915
|
+
|
|
916
|
+
if (!props.userId) {
|
|
917
|
+
throw new NotAuthorizedException(
|
|
918
|
+
"AI chat requires a logged-in user session.",
|
|
919
|
+
);
|
|
920
|
+
}
|
|
921
|
+
|
|
922
|
+
if (!props.tenantId) {
|
|
923
|
+
throw new BadDataException("Project ID is required (tenantid header).");
|
|
924
|
+
}
|
|
925
|
+
|
|
926
|
+
const messageIdString: string = req.body["messageId"] as string;
|
|
927
|
+
|
|
928
|
+
if (!messageIdString) {
|
|
929
|
+
throw new BadDataException("messageId is required.");
|
|
930
|
+
}
|
|
931
|
+
|
|
932
|
+
const messageId: ObjectID = new ObjectID(messageIdString);
|
|
933
|
+
|
|
934
|
+
/*
|
|
935
|
+
* Validate before any read: feedback is exactly "Up", "Down" or null
|
|
936
|
+
* (null clears). Anything else — including a missing key — is a bad
|
|
937
|
+
* request, never silently coerced.
|
|
938
|
+
*/
|
|
939
|
+
if (!("feedback" in (req.body as JSONObject))) {
|
|
940
|
+
throw new BadDataException(
|
|
941
|
+
'feedback is required: "Up", "Down" or null (null clears feedback).',
|
|
942
|
+
);
|
|
943
|
+
}
|
|
944
|
+
|
|
945
|
+
const rawFeedback: string | null | undefined = req.body["feedback"] as
|
|
946
|
+
| string
|
|
947
|
+
| null
|
|
948
|
+
| undefined;
|
|
949
|
+
|
|
950
|
+
let feedback: AIConversationMessageFeedback | null = null;
|
|
951
|
+
|
|
952
|
+
if (rawFeedback !== null && rawFeedback !== undefined) {
|
|
953
|
+
if (
|
|
954
|
+
rawFeedback !== AIConversationMessageFeedback.Up &&
|
|
955
|
+
rawFeedback !== AIConversationMessageFeedback.Down
|
|
956
|
+
) {
|
|
957
|
+
throw new BadDataException(
|
|
958
|
+
'feedback must be "Up", "Down" or null (null clears feedback).',
|
|
959
|
+
);
|
|
960
|
+
}
|
|
961
|
+
|
|
962
|
+
feedback = rawFeedback as AIConversationMessageFeedback;
|
|
963
|
+
}
|
|
964
|
+
|
|
965
|
+
// The privacy pin makes this return null for other users' rows.
|
|
966
|
+
const message: AIConversationMessage | null =
|
|
967
|
+
await AIConversationMessageService.findOneById({
|
|
968
|
+
id: messageId,
|
|
969
|
+
select: {
|
|
970
|
+
_id: true,
|
|
971
|
+
conversationId: true,
|
|
972
|
+
role: true,
|
|
973
|
+
},
|
|
974
|
+
props: props,
|
|
975
|
+
});
|
|
976
|
+
|
|
977
|
+
if (!message || !message.conversationId) {
|
|
978
|
+
throw new BadDataException("Message not found.");
|
|
979
|
+
}
|
|
980
|
+
|
|
981
|
+
/*
|
|
982
|
+
* Belt and braces, matching respond-to-approval: the message's
|
|
983
|
+
* conversation must also resolve under this user's props.
|
|
984
|
+
*/
|
|
985
|
+
const conversation: AIConversation | null =
|
|
986
|
+
await AIConversationService.findOneById({
|
|
987
|
+
id: message.conversationId,
|
|
988
|
+
select: { _id: true },
|
|
989
|
+
props: props,
|
|
990
|
+
});
|
|
991
|
+
|
|
992
|
+
if (!conversation) {
|
|
993
|
+
throw new BadDataException("Message not found.");
|
|
994
|
+
}
|
|
995
|
+
|
|
996
|
+
if (message.role !== AIChatMessageRole.Assistant) {
|
|
997
|
+
throw new BadDataException(
|
|
998
|
+
"Feedback can only be left on assistant messages.",
|
|
999
|
+
);
|
|
1000
|
+
}
|
|
1001
|
+
|
|
1002
|
+
// Root write: message columns are deliberately not user-writable.
|
|
1003
|
+
await AIConversationMessageService.updateOneById({
|
|
1004
|
+
id: messageId,
|
|
1005
|
+
data: {
|
|
1006
|
+
userFeedback: feedback,
|
|
1007
|
+
} as never,
|
|
1008
|
+
props: { isRoot: true },
|
|
1009
|
+
});
|
|
1010
|
+
|
|
1011
|
+
Response.sendJsonObjectResponse(req, res, {
|
|
1012
|
+
messageId: messageId.toString(),
|
|
1013
|
+
feedback: feedback,
|
|
1014
|
+
});
|
|
1015
|
+
return;
|
|
1016
|
+
} catch (err) {
|
|
1017
|
+
next(err);
|
|
1018
|
+
return;
|
|
1019
|
+
}
|
|
1020
|
+
},
|
|
1021
|
+
);
|
|
1022
|
+
|
|
709
1023
|
export default router;
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import UserMiddleware from "../Middleware/UserAuthorization";
|
|
2
|
+
import PublicDashboardRateLimit, {
|
|
3
|
+
PublicDashboardRateLimitBucket,
|
|
4
|
+
} from "../Middleware/PublicDashboardRateLimit";
|
|
2
5
|
import DashboardService, {
|
|
3
6
|
Service as DashboardServiceType,
|
|
4
7
|
} from "../Services/DashboardService";
|
|
@@ -51,8 +54,10 @@ import ProxmoxResource from "../../Models/DatabaseModels/ProxmoxResource";
|
|
|
51
54
|
import CephResource from "../../Models/DatabaseModels/CephResource";
|
|
52
55
|
import DockerSwarmResource from "../../Models/DatabaseModels/DockerSwarmResource";
|
|
53
56
|
import NetworkSite from "../../Models/DatabaseModels/NetworkSite";
|
|
57
|
+
import ServiceLevelObjective from "../../Models/DatabaseModels/ServiceLevelObjective";
|
|
54
58
|
import Span from "../../Models/AnalyticsModels/Span";
|
|
55
59
|
import Log from "../../Models/AnalyticsModels/Log";
|
|
60
|
+
import SloHistory from "../../Models/AnalyticsModels/SloHistory";
|
|
56
61
|
import IncidentService from "../Services/IncidentService";
|
|
57
62
|
import AlertService from "../Services/AlertService";
|
|
58
63
|
import MonitorService from "../Services/MonitorService";
|
|
@@ -66,13 +71,20 @@ import ProxmoxResourceService from "../Services/ProxmoxResourceService";
|
|
|
66
71
|
import CephResourceService from "../Services/CephResourceService";
|
|
67
72
|
import DockerSwarmResourceService from "../Services/DockerSwarmResourceService";
|
|
68
73
|
import NetworkSiteService from "../Services/NetworkSiteService";
|
|
74
|
+
import ServiceLevelObjectiveService from "../Services/ServiceLevelObjectiveService";
|
|
69
75
|
import SpanService from "../Services/SpanService";
|
|
70
76
|
import LogService from "../Services/LogService";
|
|
77
|
+
import SloHistoryService from "../Services/SloHistoryService";
|
|
71
78
|
import DashboardComponentType from "../../Types/Dashboard/DashboardComponentType";
|
|
72
79
|
import { DashboardVariableType } from "../../Types/Dashboard/DashboardVariable";
|
|
73
80
|
import PublicDashboardResourceListPolicy, {
|
|
74
81
|
PublicDashboardResourceListPolicyResult,
|
|
75
82
|
} from "../Utils/Dashboard/PublicDashboardResourceListPolicy";
|
|
83
|
+
import PublicDashboardSloHistoryPolicy, {
|
|
84
|
+
PublicDashboardSloHistoryPolicyResult,
|
|
85
|
+
} from "../Utils/Dashboard/PublicDashboardSloHistoryPolicy";
|
|
86
|
+
import AggregationType from "../../Types/BaseDatabase/AggregationType";
|
|
87
|
+
import InBetween from "../../Types/BaseDatabase/InBetween";
|
|
76
88
|
import { applyIncidentSelfPrivacyFilter } from "../Utils/Incident/IncidentPrivacyFilter";
|
|
77
89
|
import { applyAlertSelfPrivacyFilter } from "../Utils/Alert/AlertPrivacyFilter";
|
|
78
90
|
|
|
@@ -97,6 +109,19 @@ interface PublicDashboardResourceConfig {
|
|
|
97
109
|
widgets: Partial<Record<DashboardComponentType, string | null>>;
|
|
98
110
|
}
|
|
99
111
|
|
|
112
|
+
/*
|
|
113
|
+
* Named rather than inlined below: the SLO history route selects its widget
|
|
114
|
+
* through the same registry entry as the resource-list route, so both must
|
|
115
|
+
* agree on which stored widgets count as "an SLO widget on this dashboard".
|
|
116
|
+
*/
|
|
117
|
+
const PUBLIC_DASHBOARD_SLO_RESOURCE: PublicDashboardResourceConfig = {
|
|
118
|
+
modelType: ServiceLevelObjective,
|
|
119
|
+
service: ServiceLevelObjectiveService,
|
|
120
|
+
widgets: {
|
|
121
|
+
[DashboardComponentType.Slo]: null,
|
|
122
|
+
},
|
|
123
|
+
};
|
|
124
|
+
|
|
100
125
|
const PUBLIC_DASHBOARD_RESOURCES: Record<
|
|
101
126
|
string,
|
|
102
127
|
PublicDashboardResourceConfig
|
|
@@ -258,6 +283,7 @@ const PUBLIC_DASHBOARD_RESOURCES: Record<
|
|
|
258
283
|
[DashboardComponentType.LogStream]: null,
|
|
259
284
|
},
|
|
260
285
|
},
|
|
286
|
+
slo: PUBLIC_DASHBOARD_SLO_RESOURCE,
|
|
261
287
|
};
|
|
262
288
|
|
|
263
289
|
type ResolveDashboardIdOrThrowFunction = (
|
|
@@ -319,11 +345,45 @@ export default class DashboardAPI extends BaseAPI<
|
|
|
319
345
|
public constructor() {
|
|
320
346
|
super(Dashboard, DashboardService);
|
|
321
347
|
|
|
348
|
+
/*
|
|
349
|
+
* Rate limiting for the anonymous public dashboard surface. Nginx exposes
|
|
350
|
+
* every route below under /public-dashboard-api and rewrites it to
|
|
351
|
+
* /api/dashboard before it reaches us, so this router IS that prefix and
|
|
352
|
+
* the limiter goes on all of it uniformly rather than on the handful of
|
|
353
|
+
* routes that happen to be the most expensive today.
|
|
354
|
+
*
|
|
355
|
+
* Registered ahead of UserMiddleware so a flood is rejected before it
|
|
356
|
+
* costs a session lookup. See PublicDashboardRateLimit for the budgets
|
|
357
|
+
* and for why the two buckets fail in opposite directions when Redis is
|
|
358
|
+
* unreachable.
|
|
359
|
+
*/
|
|
360
|
+
const publicDashboardRateLimit: (
|
|
361
|
+
req: ExpressRequest,
|
|
362
|
+
res: ExpressResponse,
|
|
363
|
+
next: NextFunction,
|
|
364
|
+
) => Promise<void> = PublicDashboardRateLimit.getMiddleware(
|
|
365
|
+
PublicDashboardRateLimitBucket.Read,
|
|
366
|
+
);
|
|
367
|
+
|
|
368
|
+
/*
|
|
369
|
+
* /master-password verifies a bcrypt hash per request, so unthrottled it
|
|
370
|
+
* is an online password-guessing oracle that also burns a CPU-bound hash
|
|
371
|
+
* per guess. Its own, much tighter bucket.
|
|
372
|
+
*/
|
|
373
|
+
const masterPasswordRateLimit: (
|
|
374
|
+
req: ExpressRequest,
|
|
375
|
+
res: ExpressResponse,
|
|
376
|
+
next: NextFunction,
|
|
377
|
+
) => Promise<void> = PublicDashboardRateLimit.getMiddleware(
|
|
378
|
+
PublicDashboardRateLimitBucket.MasterPassword,
|
|
379
|
+
);
|
|
380
|
+
|
|
322
381
|
// SEO endpoint - resolve dashboard by ID or domain
|
|
323
382
|
this.router.get(
|
|
324
383
|
`${new this.entityType()
|
|
325
384
|
.getCrudApiPath()
|
|
326
385
|
?.toString()}/seo/:dashboardIdOrDomain`,
|
|
386
|
+
publicDashboardRateLimit,
|
|
327
387
|
UserMiddleware.getUserMiddleware,
|
|
328
388
|
async (req: ExpressRequest, res: ExpressResponse, next: NextFunction) => {
|
|
329
389
|
try {
|
|
@@ -504,6 +564,7 @@ export default class DashboardAPI extends BaseAPI<
|
|
|
504
564
|
|
|
505
565
|
this.router.post(
|
|
506
566
|
overviewApiPath,
|
|
567
|
+
publicDashboardRateLimit,
|
|
507
568
|
UserMiddleware.getUserMiddleware,
|
|
508
569
|
overviewHandler,
|
|
509
570
|
);
|
|
@@ -515,6 +576,7 @@ export default class DashboardAPI extends BaseAPI<
|
|
|
515
576
|
*/
|
|
516
577
|
this.router.get(
|
|
517
578
|
overviewApiPath,
|
|
579
|
+
publicDashboardRateLimit,
|
|
518
580
|
UserMiddleware.getUserMiddleware,
|
|
519
581
|
overviewHandler,
|
|
520
582
|
);
|
|
@@ -522,6 +584,7 @@ export default class DashboardAPI extends BaseAPI<
|
|
|
522
584
|
// Domain resolution endpoint
|
|
523
585
|
this.router.post(
|
|
524
586
|
`${new this.entityType().getCrudApiPath()?.toString()}/domain`,
|
|
587
|
+
publicDashboardRateLimit,
|
|
525
588
|
UserMiddleware.getUserMiddleware,
|
|
526
589
|
async (req: ExpressRequest, res: ExpressResponse, next: NextFunction) => {
|
|
527
590
|
try {
|
|
@@ -567,6 +630,7 @@ export default class DashboardAPI extends BaseAPI<
|
|
|
567
630
|
`${new this.entityType()
|
|
568
631
|
.getCrudApiPath()
|
|
569
632
|
?.toString()}/metadata/:dashboardId`,
|
|
633
|
+
publicDashboardRateLimit,
|
|
570
634
|
UserMiddleware.getUserMiddleware,
|
|
571
635
|
async (req: ExpressRequest, res: ExpressResponse, next: NextFunction) => {
|
|
572
636
|
try {
|
|
@@ -629,6 +693,7 @@ export default class DashboardAPI extends BaseAPI<
|
|
|
629
693
|
`${new this.entityType()
|
|
630
694
|
.getCrudApiPath()
|
|
631
695
|
?.toString()}/view-config/:dashboardId`,
|
|
696
|
+
publicDashboardRateLimit,
|
|
632
697
|
UserMiddleware.getUserMiddleware,
|
|
633
698
|
async (req: ExpressRequest, res: ExpressResponse, next: NextFunction) => {
|
|
634
699
|
try {
|
|
@@ -730,6 +795,7 @@ export default class DashboardAPI extends BaseAPI<
|
|
|
730
795
|
`${new this.entityType()
|
|
731
796
|
.getCrudApiPath()
|
|
732
797
|
?.toString()}/attribute-values/:dashboardId`,
|
|
798
|
+
publicDashboardRateLimit,
|
|
733
799
|
UserMiddleware.getUserMiddleware,
|
|
734
800
|
async (req: ExpressRequest, res: ExpressResponse, next: NextFunction) => {
|
|
735
801
|
try {
|
|
@@ -843,6 +909,7 @@ export default class DashboardAPI extends BaseAPI<
|
|
|
843
909
|
`${new this.entityType()
|
|
844
910
|
.getCrudApiPath()
|
|
845
911
|
?.toString()}/metric-types/:dashboardId`,
|
|
912
|
+
publicDashboardRateLimit,
|
|
846
913
|
UserMiddleware.getUserMiddleware,
|
|
847
914
|
async (req: ExpressRequest, res: ExpressResponse, next: NextFunction) => {
|
|
848
915
|
try {
|
|
@@ -952,6 +1019,7 @@ export default class DashboardAPI extends BaseAPI<
|
|
|
952
1019
|
`${new this.entityType()
|
|
953
1020
|
.getCrudApiPath()
|
|
954
1021
|
?.toString()}/metrics-aggregate/:dashboardId`,
|
|
1022
|
+
publicDashboardRateLimit,
|
|
955
1023
|
UserMiddleware.getUserMiddleware,
|
|
956
1024
|
async (req: ExpressRequest, res: ExpressResponse, next: NextFunction) => {
|
|
957
1025
|
try {
|
|
@@ -1228,6 +1296,7 @@ export default class DashboardAPI extends BaseAPI<
|
|
|
1228
1296
|
`${new this.entityType()
|
|
1229
1297
|
.getCrudApiPath()
|
|
1230
1298
|
?.toString()}/resource-list/:dashboardId/:resourceType`,
|
|
1299
|
+
publicDashboardRateLimit,
|
|
1231
1300
|
UserMiddleware.getUserMiddleware,
|
|
1232
1301
|
async (req: ExpressRequest, res: ExpressResponse, next: NextFunction) => {
|
|
1233
1302
|
try {
|
|
@@ -1248,10 +1317,143 @@ export default class DashboardAPI extends BaseAPI<
|
|
|
1248
1317
|
},
|
|
1249
1318
|
);
|
|
1250
1319
|
|
|
1320
|
+
/*
|
|
1321
|
+
* Public SLO history aggregation for the SLO widget's Chart display.
|
|
1322
|
+
*
|
|
1323
|
+
* The SLO's CURRENT numbers come back through /resource-list/.../slo
|
|
1324
|
+
* like every other widget's data; this route serves the time SERIES
|
|
1325
|
+
* behind them, which lives in ClickHouse and so needs an aggregation
|
|
1326
|
+
* rather than a list.
|
|
1327
|
+
*
|
|
1328
|
+
* Nothing the caller sends selects data. The SLO and the series are
|
|
1329
|
+
* read out of the stored widget (identified by componentId), the
|
|
1330
|
+
* aggregation columns are fixed, the bucket size is recomputed from the
|
|
1331
|
+
* window, and the project is pinned to the dashboard's — so the only
|
|
1332
|
+
* caller-supplied input that survives is the time window itself.
|
|
1333
|
+
* Authorization reuses DashboardService.hasReadAccess.
|
|
1334
|
+
*/
|
|
1335
|
+
this.router.post(
|
|
1336
|
+
`${new this.entityType()
|
|
1337
|
+
.getCrudApiPath()
|
|
1338
|
+
?.toString()}/slo-history-aggregate/:dashboardId`,
|
|
1339
|
+
publicDashboardRateLimit,
|
|
1340
|
+
UserMiddleware.getUserMiddleware,
|
|
1341
|
+
async (req: ExpressRequest, res: ExpressResponse, next: NextFunction) => {
|
|
1342
|
+
try {
|
|
1343
|
+
const dashboardId: ObjectID = new ObjectID(
|
|
1344
|
+
req.params["dashboardId"] as string,
|
|
1345
|
+
);
|
|
1346
|
+
|
|
1347
|
+
const accessResult: {
|
|
1348
|
+
hasReadAccess: boolean;
|
|
1349
|
+
error?: NotAuthenticatedException | ForbiddenException;
|
|
1350
|
+
} = await DashboardService.hasReadAccess({
|
|
1351
|
+
dashboardId,
|
|
1352
|
+
req,
|
|
1353
|
+
});
|
|
1354
|
+
|
|
1355
|
+
if (!accessResult.hasReadAccess) {
|
|
1356
|
+
throw (
|
|
1357
|
+
accessResult.error ||
|
|
1358
|
+
new BadDataException("Access denied to this dashboard.")
|
|
1359
|
+
);
|
|
1360
|
+
}
|
|
1361
|
+
|
|
1362
|
+
if (!req.body || !req.body["aggregateBy"]) {
|
|
1363
|
+
throw new BadDataException("aggregateBy is required.");
|
|
1364
|
+
}
|
|
1365
|
+
|
|
1366
|
+
const dashboard: Dashboard | null =
|
|
1367
|
+
await DashboardService.findOneById({
|
|
1368
|
+
id: dashboardId,
|
|
1369
|
+
select: {
|
|
1370
|
+
_id: true,
|
|
1371
|
+
projectId: true,
|
|
1372
|
+
dashboardViewConfig: true,
|
|
1373
|
+
},
|
|
1374
|
+
props: {
|
|
1375
|
+
isRoot: true,
|
|
1376
|
+
},
|
|
1377
|
+
});
|
|
1378
|
+
|
|
1379
|
+
if (!dashboard || !dashboard.projectId) {
|
|
1380
|
+
throw new NotFoundException("Dashboard not found");
|
|
1381
|
+
}
|
|
1382
|
+
|
|
1383
|
+
const widget: JSONObject = DashboardAPI.selectPublicResourceWidget({
|
|
1384
|
+
dashboardViewConfig: dashboard.dashboardViewConfig,
|
|
1385
|
+
config: PUBLIC_DASHBOARD_SLO_RESOURCE,
|
|
1386
|
+
requestedComponentId: req.body["componentId"],
|
|
1387
|
+
});
|
|
1388
|
+
|
|
1389
|
+
const policy: PublicDashboardSloHistoryPolicyResult =
|
|
1390
|
+
PublicDashboardSloHistoryPolicy.build({
|
|
1391
|
+
widget,
|
|
1392
|
+
requestedAggregateBy: JSONFunctions.deserialize(
|
|
1393
|
+
req.body["aggregateBy"] as JSONObject,
|
|
1394
|
+
),
|
|
1395
|
+
});
|
|
1396
|
+
|
|
1397
|
+
const aggregateResult: AggregatedResult =
|
|
1398
|
+
await SloHistoryService.aggregateBy({
|
|
1399
|
+
/*
|
|
1400
|
+
* Narrow the assertion to `query` alone. Everything else in
|
|
1401
|
+
* this literal is typed against SloHistory — the column names
|
|
1402
|
+
* below are `keyof SloHistory` — so asserting the whole object
|
|
1403
|
+
* would turn off exactly the check that catches a typo or a
|
|
1404
|
+
* renamed column at compile time instead of at runtime.
|
|
1405
|
+
*/
|
|
1406
|
+
query: {
|
|
1407
|
+
projectId: dashboard.projectId,
|
|
1408
|
+
sloId: policy.serviceLevelObjectiveId,
|
|
1409
|
+
metricName: policy.metricName,
|
|
1410
|
+
bucketStart: new InBetween<Date>(
|
|
1411
|
+
policy.startDate,
|
|
1412
|
+
policy.endDate,
|
|
1413
|
+
),
|
|
1414
|
+
} as unknown as AggregateBy<SloHistory>["query"],
|
|
1415
|
+
/*
|
|
1416
|
+
* All three SLO series are instantaneous gauges, so averaging
|
|
1417
|
+
* the raw buckets that fall inside one chart point is the only
|
|
1418
|
+
* roll-up that means anything — same as the authenticated
|
|
1419
|
+
* widget and the SLO detail page.
|
|
1420
|
+
*/
|
|
1421
|
+
aggregationType: AggregationType.Avg,
|
|
1422
|
+
aggregateColumnName: "value",
|
|
1423
|
+
aggregationTimestampColumnName: "bucketStart",
|
|
1424
|
+
aggregationInterval: policy.aggregationInterval,
|
|
1425
|
+
startTimestamp: policy.startDate,
|
|
1426
|
+
endTimestamp: policy.endDate,
|
|
1427
|
+
// Oldest -> newest so the line renders left to right.
|
|
1428
|
+
sort: {
|
|
1429
|
+
bucketStart: SortOrder.Ascending,
|
|
1430
|
+
},
|
|
1431
|
+
limit: policy.limit,
|
|
1432
|
+
skip: 0,
|
|
1433
|
+
/*
|
|
1434
|
+
* Run as root: authorization is already enforced by
|
|
1435
|
+
* hasReadAccess above and the project scope is pinned in the
|
|
1436
|
+
* query.
|
|
1437
|
+
*/
|
|
1438
|
+
props: {
|
|
1439
|
+
isRoot: true,
|
|
1440
|
+
},
|
|
1441
|
+
});
|
|
1442
|
+
|
|
1443
|
+
return Response.sendJsonObjectResponse(req, res, {
|
|
1444
|
+
...(aggregateResult as unknown as JSONObject),
|
|
1445
|
+
});
|
|
1446
|
+
} catch (err) {
|
|
1447
|
+
next(err);
|
|
1448
|
+
}
|
|
1449
|
+
},
|
|
1450
|
+
);
|
|
1451
|
+
|
|
1251
1452
|
this.router.post(
|
|
1252
1453
|
`${new this.entityType()
|
|
1253
1454
|
.getCrudApiPath()
|
|
1254
1455
|
?.toString()}/master-password/:dashboardId`,
|
|
1456
|
+
masterPasswordRateLimit,
|
|
1255
1457
|
UserMiddleware.getUserMiddleware,
|
|
1256
1458
|
async (req: ExpressRequest, res: ExpressResponse, next: NextFunction) => {
|
|
1257
1459
|
try {
|
|
@@ -1379,7 +1581,21 @@ export default class DashboardAPI extends BaseAPI<
|
|
|
1379
1581
|
typeof componentObject["componentType"] === "string"
|
|
1380
1582
|
? componentObject["componentType"]
|
|
1381
1583
|
: "",
|
|
1382
|
-
|
|
1584
|
+
/*
|
|
1585
|
+
* Widgets do not agree on where the author's heading lives — each
|
|
1586
|
+
* one's settings form names its own argument (`chartTitle`,
|
|
1587
|
+
* `gaugeTitle`, `tableTitle`, the SLO widget's `widgetTitle`, plain
|
|
1588
|
+
* `title` elsewhere). Read every key that is actually a heading
|
|
1589
|
+
* today, so a summary is not blank for a widget that plainly has a
|
|
1590
|
+
* title on the page. A widget type added later with yet another key
|
|
1591
|
+
* needs adding here too.
|
|
1592
|
+
*/
|
|
1593
|
+
title:
|
|
1594
|
+
getStringArgument("chartTitle") ||
|
|
1595
|
+
getStringArgument("gaugeTitle") ||
|
|
1596
|
+
getStringArgument("tableTitle") ||
|
|
1597
|
+
getStringArgument("widgetTitle") ||
|
|
1598
|
+
getStringArgument("title"),
|
|
1383
1599
|
description: getStringArgument("chartDescription"),
|
|
1384
1600
|
text: getStringArgument("text"),
|
|
1385
1601
|
metricNames: Array.from(
|