@oneuptime/common 12.0.8 → 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} +139 -9
- package/Models/DatabaseModels/InventoryItemCustomField.ts +434 -0
- package/Models/DatabaseModels/{TelemetryEntityRelationship.ts → InventoryItemRelationship.ts} +8 -8
- 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/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/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/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 +20 -0
- package/Server/Infrastructure/Queue.ts +78 -13
- 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} +4 -4
- package/Server/Services/{TelemetryEntityService.ts → InventoryItemService.ts} +89 -20
- 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/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/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 +25 -25
- package/Server/Utils/Telemetry/TelemetryEntity.ts +160 -52
- 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/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/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/{TelemetryEntityManualCreate.test.ts → InventoryItemManualCreate.test.ts} +27 -27
- 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/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/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 +15 -15
- package/Tests/Server/Utils/Telemetry/TelemetryEntity.test.ts +356 -39
- 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/Telemetry/EntityTypeGroups.test.ts +6 -6
- 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/TemplateSyntax.test.ts +112 -0
- package/Tests/Types/Workflow/Templates.test.ts +916 -101
- package/Tests/UI/Components/ActiveFilterChipsOpenRoute.test.tsx +82 -0
- package/Tests/UI/Components/ComponentsModal.test.tsx +564 -7
- package/Tests/UI/Components/KeyboardShortcut.test.tsx +95 -0
- package/Tests/UI/Components/LogDetailsPanelCrossSignal.test.tsx +448 -0
- package/Tests/UI/Components/LogsTableCrossLinks.test.tsx +263 -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/Workflow/GraphLint.test.ts +72 -0
- package/Tests/UI/Components/Workflow/GraphLintSummary.test.ts +755 -0
- package/Tests/UI/Components/Workflow/ModelColumnEditor.test.ts +242 -7
- package/Tests/UI/Components/Workflow/ModelColumnEditorServerContract.test.ts +15 -7
- package/Tests/UI/Components/Workflow/ModelSchema.test.ts +242 -28
- package/Tests/UI/Components/Workflow/RunStatusWatcher.test.ts +59 -1
- 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/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/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/NetworkTopologyUtil.test.ts +487 -0
- package/Tests/Utils/Telemetry/CrossSignalScope.test.ts +698 -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 +49 -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/Telemetry/EntityRelationshipType.ts +1 -1
- package/Types/Telemetry/EntitySource.ts +1 -1
- package/Types/Telemetry/EntityType.ts +1 -1
- package/Types/Telemetry/EntityTypeGroups.ts +1 -1
- package/Types/Workflow/Components/BaseModel.ts +75 -29
- 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/TemplateSyntax.ts +44 -0
- package/Types/Workflow/Templates.ts +2097 -45
- 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/Dictionary/Dictionary.tsx +48 -9
- package/UI/Components/FormModal/BasicFormModal.tsx +2 -1
- package/UI/Components/Header/HeaderIconDropdownButton.tsx +53 -3
- package/UI/Components/Input/Input.tsx +1 -0
- 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/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/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/Workflow/ArgumentsForm.tsx +155 -9
- package/UI/Components/Workflow/ComponentReturnValueViewer.tsx +26 -0
- package/UI/Components/Workflow/ComponentSettingsModal.tsx +10 -1
- 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 +42 -5
- package/UI/Components/Workflow/GraphLintSummary.ts +390 -0
- package/UI/Components/Workflow/ModelColumnEditor.tsx +154 -22
- package/UI/Components/Workflow/ModelSchema.ts +115 -33
- package/UI/Components/Workflow/RunStatusWatcher.ts +1 -1
- package/UI/Components/Workflow/StepTraceViewer.tsx +1 -1
- package/UI/Components/Workflow/UseRunWatch.ts +212 -0
- package/UI/Components/Workflow/VariableModal.tsx +6 -2
- package/UI/Components/Workflow/Workflow.tsx +49 -3
- 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/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/NetworkTopologyUtil.ts +888 -164
- package/Utils/Telemetry/CrossSignalScope.ts +502 -0
- package/Utils/Telemetry/EntityKey.ts +5 -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} +167 -31
- 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} +27 -27
- 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/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/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/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 +20 -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/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} +6 -6
- package/build/dist/Server/Services/InventoryItemRelationshipService.js.map +1 -0
- package/build/dist/Server/Services/{TelemetryEntityService.js → InventoryItemService.js} +68 -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/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/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 +11 -11
- package/build/dist/Server/Utils/Telemetry/InventoryEntityRegistry.js.map +1 -1
- 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/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/Telemetry/EntityRelationshipType.js +1 -1
- package/build/dist/Types/Telemetry/EntitySource.js +1 -1
- package/build/dist/Types/Telemetry/EntityType.js +1 -1
- package/build/dist/Types/Telemetry/EntityTypeGroups.js +1 -1
- package/build/dist/Types/Telemetry/EntityTypeGroups.js.map +1 -1
- package/build/dist/Types/Workflow/Components/BaseModel.js +66 -28
- 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/TemplateSyntax.js +12 -0
- package/build/dist/Types/Workflow/TemplateSyntax.js.map +1 -1
- package/build/dist/Types/Workflow/Templates.js +1931 -38
- package/build/dist/Types/Workflow/Templates.js.map +1 -1
- 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/Dictionary/Dictionary.js +25 -11
- 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/Header/HeaderIconDropdownButton.js +27 -4
- package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js.map +1 -1
- package/build/dist/UI/Components/Input/Input.js +1 -0
- 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/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/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/Workflow/ArgumentsForm.js +130 -12
- package/build/dist/UI/Components/Workflow/ArgumentsForm.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 +4 -4
- 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 +33 -4
- package/build/dist/UI/Components/Workflow/GraphLint.js.map +1 -1
- 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 +116 -21
- package/build/dist/UI/Components/Workflow/ModelColumnEditor.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ModelSchema.js +72 -34
- package/build/dist/UI/Components/Workflow/ModelSchema.js.map +1 -1
- package/build/dist/UI/Components/Workflow/RunStatusWatcher.js +1 -1
- package/build/dist/UI/Components/Workflow/RunStatusWatcher.js.map +1 -1
- package/build/dist/UI/Components/Workflow/StepTraceViewer.js +1 -1
- package/build/dist/UI/Components/Workflow/StepTraceViewer.js.map +1 -1
- 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/VariableModal.js +3 -2
- package/build/dist/UI/Components/Workflow/VariableModal.js.map +1 -1
- package/build/dist/UI/Components/Workflow/Workflow.js +41 -1
- 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/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/NetworkTopologyUtil.js +642 -136
- 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 +5 -5
- 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
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import "@testing-library/jest-dom";
|
|
2
|
+
import { describe, expect, test } from "@jest/globals";
|
|
3
|
+
import { render, screen } from "@testing-library/react";
|
|
4
|
+
import React from "react";
|
|
5
|
+
import ActiveFilterChips from "../../../UI/Components/LogsViewer/components/ActiveFilterChips";
|
|
6
|
+
import { ActiveFilter } from "../../../UI/Components/LogsViewer/types";
|
|
7
|
+
import Route from "../../../Types/API/Route";
|
|
8
|
+
|
|
9
|
+
/*
|
|
10
|
+
* Trace/span filter chips carry an optional `openRoute` — a small icon-link
|
|
11
|
+
* out to the trace view. Chips without a resolvable destination must stay
|
|
12
|
+
* plain chips, on both the read-only and the removable rendering paths.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
function chip(overrides: Partial<ActiveFilter>): ActiveFilter {
|
|
16
|
+
return {
|
|
17
|
+
facetKey: "traceId",
|
|
18
|
+
value: "trace-1",
|
|
19
|
+
displayKey: "Trace",
|
|
20
|
+
displayValue: "trace-1",
|
|
21
|
+
...overrides,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function renderChips(filters: Array<ActiveFilter>): void {
|
|
26
|
+
render(
|
|
27
|
+
<ActiveFilterChips
|
|
28
|
+
filters={filters}
|
|
29
|
+
onRemove={() => {}}
|
|
30
|
+
onClearAll={() => {}}
|
|
31
|
+
/>,
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
describe("ActiveFilterChips open affordance", () => {
|
|
36
|
+
test("a read-only chip with an openRoute renders an icon-link to it", () => {
|
|
37
|
+
renderChips([
|
|
38
|
+
chip({
|
|
39
|
+
readOnly: true,
|
|
40
|
+
openRoute: new Route("/traces/view/trace-1"),
|
|
41
|
+
}),
|
|
42
|
+
]);
|
|
43
|
+
|
|
44
|
+
const link: HTMLElement = screen.getByRole("link", {
|
|
45
|
+
name: "Open trace view",
|
|
46
|
+
});
|
|
47
|
+
expect(link).toHaveAttribute("href", "/traces/view/trace-1");
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
test("a removable chip with an openRoute renders the icon-link next to the remove button", () => {
|
|
51
|
+
renderChips([
|
|
52
|
+
chip({
|
|
53
|
+
facetKey: "spanId",
|
|
54
|
+
value: "span-1",
|
|
55
|
+
displayKey: "Span",
|
|
56
|
+
displayValue: "span-1",
|
|
57
|
+
openRoute: new Route("/traces/view/trace-1?spanId=span-1"),
|
|
58
|
+
}),
|
|
59
|
+
]);
|
|
60
|
+
|
|
61
|
+
expect(
|
|
62
|
+
screen.getByRole("link", { name: "Open span view" }),
|
|
63
|
+
).toHaveAttribute("href", "/traces/view/trace-1?spanId=span-1");
|
|
64
|
+
expect(
|
|
65
|
+
screen.getByRole("button", { name: "Remove Span: span-1" }),
|
|
66
|
+
).toBeInTheDocument();
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
test("chips without an openRoute render no link on either path", () => {
|
|
70
|
+
renderChips([
|
|
71
|
+
chip({ readOnly: true }),
|
|
72
|
+
chip({
|
|
73
|
+
facetKey: "spanId",
|
|
74
|
+
value: "span-1",
|
|
75
|
+
displayKey: "Span",
|
|
76
|
+
displayValue: "span-1",
|
|
77
|
+
}),
|
|
78
|
+
]);
|
|
79
|
+
|
|
80
|
+
expect(screen.queryByRole("link")).toBeNull();
|
|
81
|
+
});
|
|
82
|
+
});
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import ComponentsModal
|
|
1
|
+
import ComponentsModal, {
|
|
2
|
+
getSearchScore,
|
|
3
|
+
getSearchTokens,
|
|
4
|
+
matchesSearch,
|
|
5
|
+
} from "../../../UI/Components/Workflow/ComponentsModal";
|
|
2
6
|
import { describe, expect, it } from "@jest/globals";
|
|
3
7
|
/*
|
|
4
8
|
* The main entry, not "/extend-expect": the latter no longer ships type
|
|
@@ -51,6 +55,216 @@ const getComponentCategory: GetComponentCategoryFunction = (
|
|
|
51
55
|
};
|
|
52
56
|
};
|
|
53
57
|
|
|
58
|
+
type BuildDatabaseComponentFunction = (
|
|
59
|
+
title: string,
|
|
60
|
+
description: string,
|
|
61
|
+
category: string,
|
|
62
|
+
) => ComponentMetadata;
|
|
63
|
+
|
|
64
|
+
/*
|
|
65
|
+
* Only the three fields the search reads are meaningful here. The icon and the
|
|
66
|
+
* ports the generator fills in play no part in matching or ranking.
|
|
67
|
+
*/
|
|
68
|
+
const buildDatabaseComponent: BuildDatabaseComponentFunction = (
|
|
69
|
+
title: string,
|
|
70
|
+
description: string,
|
|
71
|
+
category: string,
|
|
72
|
+
): ComponentMetadata => {
|
|
73
|
+
return {
|
|
74
|
+
id: title.toLowerCase().replace(/\s+/g, "-"),
|
|
75
|
+
title,
|
|
76
|
+
description,
|
|
77
|
+
category,
|
|
78
|
+
iconProp: IconProp.Database,
|
|
79
|
+
componentType: ComponentType.Component,
|
|
80
|
+
arguments: [],
|
|
81
|
+
returnValues: [],
|
|
82
|
+
inPorts: [],
|
|
83
|
+
outPorts: [],
|
|
84
|
+
};
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
/*
|
|
88
|
+
* The database half of the palette is generated rather than written: one
|
|
89
|
+
* component per operation per model, by
|
|
90
|
+
* Common/Types/Workflow/Components/BaseModel.ts. These are that generator's
|
|
91
|
+
* strings copied word for word, not approximated, because the whole regression
|
|
92
|
+
* below lives in the gap between what it writes ("Create One Monitor") and what
|
|
93
|
+
* somebody building a workflow types ("create monitor"). A fixture that merely
|
|
94
|
+
* looked like the real thing would pin nothing.
|
|
95
|
+
*
|
|
96
|
+
* These eight are the components; the generator also emits three triggers per
|
|
97
|
+
* model, which the modal keeps in a separate palette.
|
|
98
|
+
*/
|
|
99
|
+
type GetDatabaseComponentsFunction = (
|
|
100
|
+
singularName: string,
|
|
101
|
+
pluralName: string,
|
|
102
|
+
) => Array<ComponentMetadata>;
|
|
103
|
+
|
|
104
|
+
const getDatabaseComponents: GetDatabaseComponentsFunction = (
|
|
105
|
+
singularName: string,
|
|
106
|
+
pluralName: string,
|
|
107
|
+
): Array<ComponentMetadata> => {
|
|
108
|
+
return [
|
|
109
|
+
buildDatabaseComponent(
|
|
110
|
+
`Find One ${singularName}`,
|
|
111
|
+
`Database query to find one ${singularName}`,
|
|
112
|
+
`${singularName}`,
|
|
113
|
+
),
|
|
114
|
+
buildDatabaseComponent(
|
|
115
|
+
`Find Many ${pluralName}`,
|
|
116
|
+
`Database query to find many ${pluralName}`,
|
|
117
|
+
`${singularName}`,
|
|
118
|
+
),
|
|
119
|
+
buildDatabaseComponent(
|
|
120
|
+
`Delete One ${singularName}`,
|
|
121
|
+
`Database query to delete one ${singularName}`,
|
|
122
|
+
`${singularName}`,
|
|
123
|
+
),
|
|
124
|
+
buildDatabaseComponent(
|
|
125
|
+
`Delete Many ${pluralName}`,
|
|
126
|
+
`Delete many ${pluralName} that match a query.`,
|
|
127
|
+
`${singularName}`,
|
|
128
|
+
),
|
|
129
|
+
buildDatabaseComponent(
|
|
130
|
+
`Create One ${singularName}`,
|
|
131
|
+
`Database query to create one ${singularName}`,
|
|
132
|
+
`${singularName}`,
|
|
133
|
+
),
|
|
134
|
+
buildDatabaseComponent(
|
|
135
|
+
`Create Many ${pluralName}`,
|
|
136
|
+
`Database query to create many ${pluralName}`,
|
|
137
|
+
`${singularName}`,
|
|
138
|
+
),
|
|
139
|
+
buildDatabaseComponent(
|
|
140
|
+
`Update One ${singularName}`,
|
|
141
|
+
`Database query to update one ${singularName}`,
|
|
142
|
+
`${singularName}`,
|
|
143
|
+
),
|
|
144
|
+
buildDatabaseComponent(
|
|
145
|
+
`Update Many ${pluralName}`,
|
|
146
|
+
`Database query to update many ${pluralName}`,
|
|
147
|
+
`${singularName}`,
|
|
148
|
+
),
|
|
149
|
+
];
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
/*
|
|
153
|
+
* Two entries from the hand-written half of the palette, copied from
|
|
154
|
+
* Common/Types/Workflow/Components/JavaScript.ts and Manual.ts. A generated
|
|
155
|
+
* component always restates its own title inside its description, so it can
|
|
156
|
+
* never show a word that lives in one field alone - these two can.
|
|
157
|
+
*/
|
|
158
|
+
const runCustomJavaScriptComponent: ComponentMetadata = {
|
|
159
|
+
id: "run-custom-javascript",
|
|
160
|
+
title: "Run Custom JavaScript",
|
|
161
|
+
category: "Custom Code",
|
|
162
|
+
description: "Run custom JavaScript in your workflow",
|
|
163
|
+
iconProp: IconProp.Code,
|
|
164
|
+
componentType: ComponentType.Component,
|
|
165
|
+
arguments: [],
|
|
166
|
+
returnValues: [],
|
|
167
|
+
inPorts: [],
|
|
168
|
+
outPorts: [],
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
const manualComponent: ComponentMetadata = {
|
|
172
|
+
id: "manual",
|
|
173
|
+
title: "Manual",
|
|
174
|
+
category: "Utils",
|
|
175
|
+
description: "Run this workflow manually",
|
|
176
|
+
iconProp: IconProp.Play,
|
|
177
|
+
componentType: ComponentType.Trigger,
|
|
178
|
+
arguments: [],
|
|
179
|
+
returnValues: [],
|
|
180
|
+
inPorts: [],
|
|
181
|
+
outPorts: [],
|
|
182
|
+
};
|
|
183
|
+
|
|
184
|
+
type GetComponentByTitleFunction = (
|
|
185
|
+
components: Array<ComponentMetadata>,
|
|
186
|
+
title: string,
|
|
187
|
+
) => ComponentMetadata;
|
|
188
|
+
|
|
189
|
+
const getComponentByTitle: GetComponentByTitleFunction = (
|
|
190
|
+
components: Array<ComponentMetadata>,
|
|
191
|
+
title: string,
|
|
192
|
+
): ComponentMetadata => {
|
|
193
|
+
const componentMetadata: ComponentMetadata | undefined = components.find(
|
|
194
|
+
(candidate: ComponentMetadata) => {
|
|
195
|
+
return candidate.title === title;
|
|
196
|
+
},
|
|
197
|
+
);
|
|
198
|
+
|
|
199
|
+
if (!componentMetadata) {
|
|
200
|
+
/*
|
|
201
|
+
* A mistyped fixture title would otherwise resolve to undefined and quietly
|
|
202
|
+
* weaken every assertion that reads it.
|
|
203
|
+
*/
|
|
204
|
+
throw new Error(`No component titled "${title}" in these fixtures.`);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
return componentMetadata;
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
/*
|
|
211
|
+
* The filter as it used to be: the whole typed string, as one substring,
|
|
212
|
+
* against each field on its own. Kept here so the tests can show what each of
|
|
213
|
+
* these searches used to return rather than only asserting that it works now.
|
|
214
|
+
*/
|
|
215
|
+
type MatchesWholeSearchStringFunction = (
|
|
216
|
+
componentMetadata: ComponentMetadata,
|
|
217
|
+
search: string,
|
|
218
|
+
) => boolean;
|
|
219
|
+
|
|
220
|
+
const matchesWholeSearchString: MatchesWholeSearchStringFunction = (
|
|
221
|
+
componentMetadata: ComponentMetadata,
|
|
222
|
+
search: string,
|
|
223
|
+
): boolean => {
|
|
224
|
+
const normalizedSearch: string = search.trim().toLowerCase();
|
|
225
|
+
|
|
226
|
+
return (
|
|
227
|
+
componentMetadata.title.toLowerCase().includes(normalizedSearch) ||
|
|
228
|
+
componentMetadata.description.toLowerCase().includes(normalizedSearch) ||
|
|
229
|
+
componentMetadata.category.toLowerCase().includes(normalizedSearch)
|
|
230
|
+
);
|
|
231
|
+
};
|
|
232
|
+
|
|
233
|
+
/*
|
|
234
|
+
* The modal's own pipeline - keep what matches every word, then order by score
|
|
235
|
+
* with the alphabetical tie-break - so the ranking assertions below describe
|
|
236
|
+
* the list somebody actually sees rather than a number in isolation.
|
|
237
|
+
*/
|
|
238
|
+
type RankBySearchFunction = (
|
|
239
|
+
components: Array<ComponentMetadata>,
|
|
240
|
+
search: string,
|
|
241
|
+
) => Array<string>;
|
|
242
|
+
|
|
243
|
+
const rankBySearch: RankBySearchFunction = (
|
|
244
|
+
components: Array<ComponentMetadata>,
|
|
245
|
+
search: string,
|
|
246
|
+
): Array<string> => {
|
|
247
|
+
const tokens: Array<string> = getSearchTokens(search);
|
|
248
|
+
|
|
249
|
+
return components
|
|
250
|
+
.filter((componentMetadata: ComponentMetadata) => {
|
|
251
|
+
return matchesSearch(componentMetadata, tokens);
|
|
252
|
+
})
|
|
253
|
+
.sort((componentA: ComponentMetadata, componentB: ComponentMetadata) => {
|
|
254
|
+
const scoreDifference: number =
|
|
255
|
+
getSearchScore(componentB, tokens) - getSearchScore(componentA, tokens);
|
|
256
|
+
|
|
257
|
+
if (scoreDifference !== 0) {
|
|
258
|
+
return scoreDifference;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
return componentA.title.localeCompare(componentB.title);
|
|
262
|
+
})
|
|
263
|
+
.map((componentMetadata: ComponentMetadata) => {
|
|
264
|
+
return componentMetadata.title;
|
|
265
|
+
});
|
|
266
|
+
};
|
|
267
|
+
|
|
54
268
|
describe("ComponentsModal", () => {
|
|
55
269
|
const mockedCategories: ComponentCategory[] = [
|
|
56
270
|
getComponentCategory(),
|
|
@@ -163,11 +377,12 @@ describe("ComponentsModal", () => {
|
|
|
163
377
|
categories={mockedCategories}
|
|
164
378
|
/>,
|
|
165
379
|
);
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
380
|
+
/*
|
|
381
|
+
* An empty palette and an unproductive search are different situations and
|
|
382
|
+
* no longer share a message. Nothing has been typed here, so there is no
|
|
383
|
+
* advice to give about the words used.
|
|
384
|
+
*/
|
|
385
|
+
expect(screen.getByText("No components to show.")).toBeInTheDocument();
|
|
171
386
|
});
|
|
172
387
|
|
|
173
388
|
it("should not display categories when there are no categories", () => {
|
|
@@ -203,9 +418,15 @@ describe("ComponentsModal", () => {
|
|
|
203
418
|
target: { value: "Non-existent Ccmponent" },
|
|
204
419
|
},
|
|
205
420
|
);
|
|
421
|
+
/*
|
|
422
|
+
* Says what actually happened: a search now fails only when no component
|
|
423
|
+
* holds every word typed, so the useful advice is to type fewer words. The
|
|
424
|
+
* old wording concluded on the builder's behalf that the integration did
|
|
425
|
+
* not exist, which is what sent people off to write it by hand.
|
|
426
|
+
*/
|
|
206
427
|
expect(
|
|
207
428
|
screen.getByText(
|
|
208
|
-
"No components
|
|
429
|
+
"No components match every word you typed. Try fewer words. If what you need really does not exist, the Custom Code and API components can build anything you like.",
|
|
209
430
|
),
|
|
210
431
|
).toBeInTheDocument();
|
|
211
432
|
});
|
|
@@ -480,4 +701,340 @@ describe("ComponentsModal", () => {
|
|
|
480
701
|
expect(screen.getByText(comp.title)).toBeInTheDocument();
|
|
481
702
|
});
|
|
482
703
|
});
|
|
704
|
+
|
|
705
|
+
/*
|
|
706
|
+
* Everything above searches with a single word, which is the one shape the
|
|
707
|
+
* old whole-string filter handled. These use the strings the palette is
|
|
708
|
+
* really made of, where the words a builder types are separated in the
|
|
709
|
+
* component by words they have no reason to guess.
|
|
710
|
+
*/
|
|
711
|
+
describe("search across every word typed", () => {
|
|
712
|
+
const monitorComponents: Array<ComponentMetadata> = getDatabaseComponents(
|
|
713
|
+
"Monitor",
|
|
714
|
+
"Monitors",
|
|
715
|
+
);
|
|
716
|
+
const teamComponents: Array<ComponentMetadata> = getDatabaseComponents(
|
|
717
|
+
"Team",
|
|
718
|
+
"Teams",
|
|
719
|
+
);
|
|
720
|
+
const palette: Array<ComponentMetadata> = [
|
|
721
|
+
...monitorComponents,
|
|
722
|
+
...teamComponents,
|
|
723
|
+
runCustomJavaScriptComponent,
|
|
724
|
+
manualComponent,
|
|
725
|
+
];
|
|
726
|
+
|
|
727
|
+
const createOneMonitor: ComponentMetadata = getComponentByTitle(
|
|
728
|
+
palette,
|
|
729
|
+
"Create One Monitor",
|
|
730
|
+
);
|
|
731
|
+
const createManyMonitors: ComponentMetadata = getComponentByTitle(
|
|
732
|
+
palette,
|
|
733
|
+
"Create Many Monitors",
|
|
734
|
+
);
|
|
735
|
+
const findOneMonitor: ComponentMetadata = getComponentByTitle(
|
|
736
|
+
palette,
|
|
737
|
+
"Find One Monitor",
|
|
738
|
+
);
|
|
739
|
+
const updateOneMonitor: ComponentMetadata = getComponentByTitle(
|
|
740
|
+
palette,
|
|
741
|
+
"Update One Monitor",
|
|
742
|
+
);
|
|
743
|
+
const deleteManyMonitors: ComponentMetadata = getComponentByTitle(
|
|
744
|
+
palette,
|
|
745
|
+
"Delete Many Monitors",
|
|
746
|
+
);
|
|
747
|
+
const createOneTeam: ComponentMetadata = getComponentByTitle(
|
|
748
|
+
palette,
|
|
749
|
+
"Create One Team",
|
|
750
|
+
);
|
|
751
|
+
const findOneTeam: ComponentMetadata = getComponentByTitle(
|
|
752
|
+
palette,
|
|
753
|
+
"Find One Team",
|
|
754
|
+
);
|
|
755
|
+
|
|
756
|
+
it("should split a search into its words, lower cased, ignoring runs of whitespace", () => {
|
|
757
|
+
expect(getSearchTokens("create monitor")).toEqual(["create", "monitor"]);
|
|
758
|
+
|
|
759
|
+
/*
|
|
760
|
+
* Leading, trailing and repeated whitespace all come from ordinary
|
|
761
|
+
* typing - a trailing space while still thinking, a double space between
|
|
762
|
+
* words - and none of them should narrow the results.
|
|
763
|
+
*/
|
|
764
|
+
expect(getSearchTokens(" Create ONE Monitor ")).toEqual([
|
|
765
|
+
"create",
|
|
766
|
+
"one",
|
|
767
|
+
"monitor",
|
|
768
|
+
]);
|
|
769
|
+
expect(getSearchTokens("create\tmonitor\nsecret")).toEqual([
|
|
770
|
+
"create",
|
|
771
|
+
"monitor",
|
|
772
|
+
"secret",
|
|
773
|
+
]);
|
|
774
|
+
|
|
775
|
+
// Nothing typed, and whitespace only, are the same thing: no words.
|
|
776
|
+
expect(getSearchTokens("")).toEqual([]);
|
|
777
|
+
expect(getSearchTokens(" ")).toEqual([]);
|
|
778
|
+
});
|
|
779
|
+
|
|
780
|
+
it("should match every component when nothing has been typed", () => {
|
|
781
|
+
// No search means show the palette, not hide it.
|
|
782
|
+
const noTokens: Array<string> = getSearchTokens("");
|
|
783
|
+
|
|
784
|
+
palette.forEach((componentMetadata: ComponentMetadata) => {
|
|
785
|
+
expect(matchesSearch(componentMetadata, noTokens)).toBe(true);
|
|
786
|
+
});
|
|
787
|
+
});
|
|
788
|
+
|
|
789
|
+
it("should find a component when the words typed have other words between them", () => {
|
|
790
|
+
/*
|
|
791
|
+
* "create monitor" is the search this fix exists for. The generator
|
|
792
|
+
* writes "Create One Monitor", so the typed string is not a substring of
|
|
793
|
+
* any field, and the old filter - which tested exactly that - returned an
|
|
794
|
+
* empty list for a component sitting right there in the palette.
|
|
795
|
+
*/
|
|
796
|
+
expect(matchesWholeSearchString(createOneMonitor, "create monitor")).toBe(
|
|
797
|
+
false,
|
|
798
|
+
);
|
|
799
|
+
expect(
|
|
800
|
+
palette.filter((componentMetadata: ComponentMetadata) => {
|
|
801
|
+
return matchesWholeSearchString(componentMetadata, "create monitor");
|
|
802
|
+
}),
|
|
803
|
+
).toHaveLength(0);
|
|
804
|
+
|
|
805
|
+
expect(
|
|
806
|
+
matchesSearch(createOneMonitor, getSearchTokens("create monitor")),
|
|
807
|
+
).toBe(true);
|
|
808
|
+
|
|
809
|
+
// The order the words are typed in is not part of the question.
|
|
810
|
+
expect(
|
|
811
|
+
matchesSearch(createOneMonitor, getSearchTokens("monitor create")),
|
|
812
|
+
).toBe(true);
|
|
813
|
+
|
|
814
|
+
// The same shape of failure held for every other operation...
|
|
815
|
+
expect(matchesWholeSearchString(updateOneMonitor, "update monitor")).toBe(
|
|
816
|
+
false,
|
|
817
|
+
);
|
|
818
|
+
expect(
|
|
819
|
+
matchesSearch(updateOneMonitor, getSearchTokens("update monitor")),
|
|
820
|
+
).toBe(true);
|
|
821
|
+
|
|
822
|
+
// ...and every other model.
|
|
823
|
+
expect(matchesWholeSearchString(findOneTeam, "find team")).toBe(false);
|
|
824
|
+
expect(matchesSearch(findOneTeam, getSearchTokens("find team"))).toBe(
|
|
825
|
+
true,
|
|
826
|
+
);
|
|
827
|
+
});
|
|
828
|
+
|
|
829
|
+
it("should take its words from different fields", () => {
|
|
830
|
+
/*
|
|
831
|
+
* "code" appears only in the category ("Custom Code"), "javascript" only
|
|
832
|
+
* in the title and description. No single field holds both, so the old
|
|
833
|
+
* filter - title, then description, then category, each against the whole
|
|
834
|
+
* string - could not have matched this in any word order.
|
|
835
|
+
*/
|
|
836
|
+
expect(runCustomJavaScriptComponent.title.toLowerCase()).not.toContain(
|
|
837
|
+
"code",
|
|
838
|
+
);
|
|
839
|
+
expect(
|
|
840
|
+
runCustomJavaScriptComponent.description.toLowerCase(),
|
|
841
|
+
).not.toContain("code");
|
|
842
|
+
expect(runCustomJavaScriptComponent.category.toLowerCase()).not.toContain(
|
|
843
|
+
"javascript",
|
|
844
|
+
);
|
|
845
|
+
expect(
|
|
846
|
+
matchesWholeSearchString(
|
|
847
|
+
runCustomJavaScriptComponent,
|
|
848
|
+
"javascript code",
|
|
849
|
+
),
|
|
850
|
+
).toBe(false);
|
|
851
|
+
expect(
|
|
852
|
+
matchesSearch(
|
|
853
|
+
runCustomJavaScriptComponent,
|
|
854
|
+
getSearchTokens("javascript code"),
|
|
855
|
+
),
|
|
856
|
+
).toBe(true);
|
|
857
|
+
|
|
858
|
+
/*
|
|
859
|
+
* The same across the generated components: "database" is only ever in
|
|
860
|
+
* the description, while the model name is in the title and the category.
|
|
861
|
+
*/
|
|
862
|
+
expect(createOneMonitor.title.toLowerCase()).not.toContain("database");
|
|
863
|
+
expect(createOneMonitor.category.toLowerCase()).not.toContain("database");
|
|
864
|
+
expect(
|
|
865
|
+
matchesSearch(createOneMonitor, getSearchTokens("database monitor")),
|
|
866
|
+
).toBe(true);
|
|
867
|
+
});
|
|
868
|
+
|
|
869
|
+
it("should drop a component when one of the words matches nothing", () => {
|
|
870
|
+
/*
|
|
871
|
+
* Every word has to land somewhere. Otherwise the search would widen as
|
|
872
|
+
* it was typed, and adding a word could never narrow the list.
|
|
873
|
+
*/
|
|
874
|
+
expect(
|
|
875
|
+
matchesSearch(
|
|
876
|
+
createOneMonitor,
|
|
877
|
+
getSearchTokens("create monitor banana"),
|
|
878
|
+
),
|
|
879
|
+
).toBe(false);
|
|
880
|
+
expect(rankBySearch(palette, "create monitor banana")).toEqual([]);
|
|
881
|
+
});
|
|
882
|
+
|
|
883
|
+
it("should ignore case on both sides", () => {
|
|
884
|
+
// The generator writes Title Case; almost nobody types it.
|
|
885
|
+
expect(createOneMonitor.title).toBe("Create One Monitor");
|
|
886
|
+
|
|
887
|
+
expect(
|
|
888
|
+
matchesSearch(createOneMonitor, getSearchTokens("create monitor")),
|
|
889
|
+
).toBe(true);
|
|
890
|
+
expect(
|
|
891
|
+
matchesSearch(createOneMonitor, getSearchTokens("CREATE MONITOR")),
|
|
892
|
+
).toBe(true);
|
|
893
|
+
expect(
|
|
894
|
+
matchesSearch(createOneMonitor, getSearchTokens("CrEaTe MoNiToR")),
|
|
895
|
+
).toBe(true);
|
|
896
|
+
});
|
|
897
|
+
|
|
898
|
+
it("should still match part of a word", () => {
|
|
899
|
+
/*
|
|
900
|
+
* Matching inside a word is what makes a search useful while it is still
|
|
901
|
+
* being typed, and it is what lets the singular a builder types reach the
|
|
902
|
+
* plural the generator wrote. Both predate this fix and both still hold.
|
|
903
|
+
*/
|
|
904
|
+
expect(matchesSearch(createOneMonitor, getSearchTokens("mon"))).toBe(
|
|
905
|
+
true,
|
|
906
|
+
);
|
|
907
|
+
expect(
|
|
908
|
+
matchesSearch(createOneMonitor, getSearchTokens("creat mon")),
|
|
909
|
+
).toBe(true);
|
|
910
|
+
expect(
|
|
911
|
+
matchesSearch(createManyMonitors, getSearchTokens("create monitor")),
|
|
912
|
+
).toBe(true);
|
|
913
|
+
});
|
|
914
|
+
|
|
915
|
+
it("should score a search of several words above zero", () => {
|
|
916
|
+
/*
|
|
917
|
+
* Every branch of the per-word score tests one whole token against one
|
|
918
|
+
* field, so scoring the search as a single string gave a score of exactly
|
|
919
|
+
* zero to the very component it was meant to find. With every score zero
|
|
920
|
+
* the order fell through to the alphabetical tie-break, which is to say
|
|
921
|
+
* there was no ranking at all for any search longer than one word.
|
|
922
|
+
*/
|
|
923
|
+
expect(getSearchScore(createOneMonitor, ["create monitor"])).toBe(0);
|
|
924
|
+
expect(
|
|
925
|
+
getSearchScore(createOneMonitor, getSearchTokens("create monitor")),
|
|
926
|
+
).toBeGreaterThan(0);
|
|
927
|
+
});
|
|
928
|
+
|
|
929
|
+
it("should score a component matching both words above one matching a single word", () => {
|
|
930
|
+
const tokens: Array<string> = getSearchTokens("create monitor");
|
|
931
|
+
|
|
932
|
+
expect(getSearchScore(createOneMonitor, tokens)).toBeGreaterThan(
|
|
933
|
+
getSearchScore(updateOneMonitor, tokens),
|
|
934
|
+
);
|
|
935
|
+
|
|
936
|
+
/*
|
|
937
|
+
* "Update One Monitor" earns the "monitor" half and nothing for "create",
|
|
938
|
+
* so its score for the two words is the score of one of them.
|
|
939
|
+
*/
|
|
940
|
+
expect(getSearchScore(updateOneMonitor, tokens)).toBe(
|
|
941
|
+
getSearchScore(updateOneMonitor, getSearchTokens("monitor")),
|
|
942
|
+
);
|
|
943
|
+
});
|
|
944
|
+
|
|
945
|
+
it("should score a title the search starts above a match found only in the description", () => {
|
|
946
|
+
const tokens: Array<string> = getSearchTokens("run");
|
|
947
|
+
|
|
948
|
+
// "Manual" mentions the word only in "Run this workflow manually".
|
|
949
|
+
expect(manualComponent.title.toLowerCase()).not.toContain("run");
|
|
950
|
+
expect(manualComponent.category.toLowerCase()).not.toContain("run");
|
|
951
|
+
|
|
952
|
+
expect(getSearchScore(manualComponent, tokens)).toBeGreaterThan(0);
|
|
953
|
+
expect(
|
|
954
|
+
getSearchScore(runCustomJavaScriptComponent, tokens),
|
|
955
|
+
).toBeGreaterThan(getSearchScore(manualComponent, tokens));
|
|
956
|
+
});
|
|
957
|
+
|
|
958
|
+
it("should score nothing when nothing has been typed", () => {
|
|
959
|
+
// Nothing to rank by, so the modal falls back to sorting by title.
|
|
960
|
+
expect(getSearchScore(createOneMonitor, getSearchTokens(""))).toBe(0);
|
|
961
|
+
expect(getSearchScore(createOneMonitor, [])).toBe(0);
|
|
962
|
+
});
|
|
963
|
+
|
|
964
|
+
it("should rank the components that create Monitors first for 'create monitor'", () => {
|
|
965
|
+
const tokens: Array<string> = getSearchTokens("create monitor");
|
|
966
|
+
|
|
967
|
+
/*
|
|
968
|
+
* Out of both operations of two models plus the hand-written components,
|
|
969
|
+
* only the two that create Monitors survive: the other Monitor
|
|
970
|
+
* components have no "create" anywhere, and the Team components have no
|
|
971
|
+
* "monitor".
|
|
972
|
+
*/
|
|
973
|
+
expect(rankBySearch(palette, "create monitor")).toEqual([
|
|
974
|
+
"Create Many Monitors",
|
|
975
|
+
"Create One Monitor",
|
|
976
|
+
]);
|
|
977
|
+
|
|
978
|
+
/*
|
|
979
|
+
* Those two score identically - nothing in the scoring can prefer "One"
|
|
980
|
+
* over "Many" - so it is the alphabetical tie-break that puts Many first,
|
|
981
|
+
* not the ranking. Typing the third word is what separates them.
|
|
982
|
+
*/
|
|
983
|
+
expect(getSearchScore(createManyMonitors, tokens)).toBe(
|
|
984
|
+
getSearchScore(createOneMonitor, tokens),
|
|
985
|
+
);
|
|
986
|
+
expect(rankBySearch(palette, "create one monitor")).toEqual([
|
|
987
|
+
"Create One Monitor",
|
|
988
|
+
]);
|
|
989
|
+
|
|
990
|
+
/*
|
|
991
|
+
* The two survivors also outscore what the filter dropped, so the
|
|
992
|
+
* ranking would hold them at the top even in a palette where the other
|
|
993
|
+
* components still matched.
|
|
994
|
+
*/
|
|
995
|
+
expect(getSearchScore(createOneMonitor, tokens)).toBeGreaterThan(
|
|
996
|
+
getSearchScore(findOneMonitor, tokens),
|
|
997
|
+
);
|
|
998
|
+
expect(getSearchScore(createOneMonitor, tokens)).toBeGreaterThan(
|
|
999
|
+
getSearchScore(deleteManyMonitors, tokens),
|
|
1000
|
+
);
|
|
1001
|
+
expect(getSearchScore(createOneMonitor, tokens)).toBeGreaterThan(
|
|
1002
|
+
getSearchScore(createOneTeam, tokens),
|
|
1003
|
+
);
|
|
1004
|
+
});
|
|
1005
|
+
|
|
1006
|
+
it("should show the component in the modal when the builder types 'create monitor'", () => {
|
|
1007
|
+
/*
|
|
1008
|
+
* The same regression through the modal itself, since the empty state -
|
|
1009
|
+
* and the conclusion that the integration has to be built by hand - is
|
|
1010
|
+
* what a builder actually met.
|
|
1011
|
+
*/
|
|
1012
|
+
render(
|
|
1013
|
+
<ComponentsModal
|
|
1014
|
+
componentsType={ComponentType.Component}
|
|
1015
|
+
onCloseModal={mockOnCloseModal}
|
|
1016
|
+
onComponentClick={mockOnComponentClick}
|
|
1017
|
+
components={[...monitorComponents, ...teamComponents]}
|
|
1018
|
+
categories={[
|
|
1019
|
+
getComponentCategory("Monitor"),
|
|
1020
|
+
getComponentCategory("Team"),
|
|
1021
|
+
]}
|
|
1022
|
+
/>,
|
|
1023
|
+
);
|
|
1024
|
+
|
|
1025
|
+
fireEvent.change(
|
|
1026
|
+
screen.getByPlaceholderText(
|
|
1027
|
+
"Search components by name, description, or category",
|
|
1028
|
+
),
|
|
1029
|
+
{
|
|
1030
|
+
target: { value: "create monitor" },
|
|
1031
|
+
},
|
|
1032
|
+
);
|
|
1033
|
+
|
|
1034
|
+
expect(screen.getByText("Create One Monitor")).toBeInTheDocument();
|
|
1035
|
+
expect(screen.getByText("Create Many Monitors")).toBeInTheDocument();
|
|
1036
|
+
expect(screen.queryByText("Find One Monitor")).not.toBeInTheDocument();
|
|
1037
|
+
expect(screen.queryByText("Create One Team")).not.toBeInTheDocument();
|
|
1038
|
+
});
|
|
1039
|
+
});
|
|
483
1040
|
});
|