@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
|
@@ -21,20 +21,22 @@ import DictionaryForm, { ValueType } from "../Dictionary/Dictionary";
|
|
|
21
21
|
import { DictionaryEntryValue } from "../Dictionary/DictionaryFilterOperator";
|
|
22
22
|
import Icon from "../Icon/Icon";
|
|
23
23
|
import {
|
|
24
|
+
ModelSchemaAccess,
|
|
24
25
|
ModelSchemaColumn,
|
|
25
26
|
ModelSchemaState,
|
|
26
27
|
findColumn,
|
|
28
|
+
requiredWritableColumns,
|
|
27
29
|
useModelSchema,
|
|
28
30
|
} from "./ModelSchema";
|
|
29
31
|
import CodeType from "../../../Types/Code/CodeType";
|
|
30
32
|
import Dictionary from "../../../Types/Dictionary";
|
|
31
33
|
import IconProp from "../../../Types/Icon/IconProp";
|
|
32
34
|
import { JSONObject, ObjectType } from "../../../Types/JSON";
|
|
35
|
+
import { maskTemplateExpressions } from "../../../Types/Workflow/TemplateSyntax";
|
|
33
36
|
import React, {
|
|
34
37
|
FunctionComponent,
|
|
35
38
|
ReactElement,
|
|
36
39
|
useMemo,
|
|
37
|
-
useRef,
|
|
38
40
|
useState,
|
|
39
41
|
} from "react";
|
|
40
42
|
|
|
@@ -53,6 +55,14 @@ export interface ComponentProps {
|
|
|
53
55
|
error?: string | undefined;
|
|
54
56
|
placeholder?: string | undefined;
|
|
55
57
|
tabIndex?: number | undefined;
|
|
58
|
+
/*
|
|
59
|
+
* Offered in any row whose column has no suggestions of its own - the other
|
|
60
|
+
* steps' return values and the workflow's variables. The row editor replaced
|
|
61
|
+
* the "pick this value from another component" footer for these arguments, so
|
|
62
|
+
* without this there is no way to reach a reference from a record payload,
|
|
63
|
+
* which is how almost every create is built.
|
|
64
|
+
*/
|
|
65
|
+
valueSuggestions?: Array<string> | undefined;
|
|
56
66
|
}
|
|
57
67
|
|
|
58
68
|
type ViewMode = "builder" | "json";
|
|
@@ -79,42 +89,84 @@ const REPRESENTABLE_OPERATOR_TYPES: Array<string> = [
|
|
|
79
89
|
ObjectType.IncludesNone,
|
|
80
90
|
];
|
|
81
91
|
|
|
82
|
-
interface ParsedQuery {
|
|
92
|
+
export interface ParsedQuery {
|
|
83
93
|
/** The raw text, always kept so the JSON editor can show it verbatim. */
|
|
84
94
|
text: string;
|
|
85
95
|
/** The parsed object, or null when the text is not a JSON object. */
|
|
86
96
|
parsed: JSONObject | null;
|
|
97
|
+
/**
|
|
98
|
+
* True when the text is a JSON object apart from carrying a bare `{{ }}`
|
|
99
|
+
* reference where a value belongs, as in `{"retries": {{local.variables.n}}}`.
|
|
100
|
+
*
|
|
101
|
+
* That is not JSON, so it cannot be rows, but it is a perfectly good workflow
|
|
102
|
+
* value: GraphLint and form validation both mask references before parsing
|
|
103
|
+
* and accept it. Without this distinction the editor called it "not a JSON
|
|
104
|
+
* object" and locked itself while the canvas showed no error at all, so the
|
|
105
|
+
* builder was told two different things about the same value.
|
|
106
|
+
*/
|
|
107
|
+
hasTemplateExpressions: boolean;
|
|
87
108
|
}
|
|
88
109
|
|
|
89
|
-
type
|
|
110
|
+
type IsJSONObjectFunction = (value: unknown) => boolean;
|
|
111
|
+
|
|
112
|
+
const isJSONObject: IsJSONObjectFunction = (value: unknown): boolean => {
|
|
113
|
+
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
export type NormalizeInitialValueFunction = (
|
|
90
117
|
value: string | JSONObject | null | undefined,
|
|
91
118
|
) => ParsedQuery;
|
|
92
119
|
|
|
93
|
-
const normalizeInitialValue: NormalizeInitialValueFunction = (
|
|
120
|
+
export const normalizeInitialValue: NormalizeInitialValueFunction = (
|
|
94
121
|
value: string | JSONObject | null | undefined,
|
|
95
122
|
): ParsedQuery => {
|
|
96
123
|
if (value === null || value === undefined || value === "") {
|
|
97
|
-
return { text: "", parsed: {} };
|
|
124
|
+
return { text: "", parsed: {}, hasTemplateExpressions: false };
|
|
98
125
|
}
|
|
99
126
|
|
|
100
127
|
if (typeof value === "object" && !Array.isArray(value)) {
|
|
101
|
-
return {
|
|
128
|
+
return {
|
|
129
|
+
text: JSON.stringify(value, null, 2),
|
|
130
|
+
parsed: value,
|
|
131
|
+
hasTemplateExpressions: false,
|
|
132
|
+
};
|
|
102
133
|
}
|
|
103
134
|
|
|
104
135
|
if (typeof value !== "string") {
|
|
105
|
-
return { text: String(value), parsed: null };
|
|
136
|
+
return { text: String(value), parsed: null, hasTemplateExpressions: false };
|
|
106
137
|
}
|
|
107
138
|
|
|
108
139
|
try {
|
|
109
140
|
const parsed: unknown = JSON.parse(value);
|
|
110
141
|
|
|
111
|
-
if (
|
|
112
|
-
return {
|
|
142
|
+
if (isJSONObject(parsed)) {
|
|
143
|
+
return {
|
|
144
|
+
text: value,
|
|
145
|
+
parsed: parsed as JSONObject,
|
|
146
|
+
hasTemplateExpressions: false,
|
|
147
|
+
};
|
|
113
148
|
}
|
|
114
149
|
|
|
115
|
-
return { text: value, parsed: null };
|
|
150
|
+
return { text: value, parsed: null, hasTemplateExpressions: false };
|
|
116
151
|
} catch {
|
|
117
|
-
|
|
152
|
+
/*
|
|
153
|
+
* Same masking TemplateSyntax.checkJSONSyntax does, so this editor and the
|
|
154
|
+
* linter agree on which values are broken and which merely hold a
|
|
155
|
+
* reference.
|
|
156
|
+
*/
|
|
157
|
+
const masked: string = maskTemplateExpressions(value);
|
|
158
|
+
|
|
159
|
+
if (masked !== value) {
|
|
160
|
+
try {
|
|
161
|
+
if (isJSONObject(JSON.parse(masked))) {
|
|
162
|
+
return { text: value, parsed: null, hasTemplateExpressions: true };
|
|
163
|
+
}
|
|
164
|
+
} catch {
|
|
165
|
+
// Still not JSON once the references are out of the way — genuinely broken.
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
return { text: value, parsed: null, hasTemplateExpressions: false };
|
|
118
170
|
}
|
|
119
171
|
};
|
|
120
172
|
|
|
@@ -128,6 +180,7 @@ type ClassifyCompatibilityFunction = (
|
|
|
128
180
|
parsed: JSONObject | null,
|
|
129
181
|
columns: Array<ModelSchemaColumn>,
|
|
130
182
|
mode: ModelColumnEditorMode,
|
|
183
|
+
hasTemplateExpressions?: boolean | undefined,
|
|
131
184
|
) => CompatibilityResult;
|
|
132
185
|
|
|
133
186
|
/**
|
|
@@ -141,11 +194,16 @@ export const classifyColumnValueCompatibility: ClassifyCompatibilityFunction = (
|
|
|
141
194
|
parsed: JSONObject | null,
|
|
142
195
|
columns: Array<ModelSchemaColumn>,
|
|
143
196
|
mode: ModelColumnEditorMode,
|
|
197
|
+
hasTemplateExpressions?: boolean | undefined,
|
|
144
198
|
): CompatibilityResult => {
|
|
145
199
|
if (parsed === null) {
|
|
146
200
|
return {
|
|
147
201
|
compatible: false,
|
|
148
|
-
reasons: [
|
|
202
|
+
reasons: [
|
|
203
|
+
hasTemplateExpressions
|
|
204
|
+
? "This value uses a {{ }} reference where a value goes, which the rows can't show. It stays as JSON."
|
|
205
|
+
: "The current value isn't a JSON object.",
|
|
206
|
+
],
|
|
149
207
|
};
|
|
150
208
|
}
|
|
151
209
|
|
|
@@ -177,8 +235,15 @@ export const classifyColumnValueCompatibility: ClassifyCompatibilityFunction = (
|
|
|
177
235
|
}
|
|
178
236
|
|
|
179
237
|
if (Array.isArray(value)) {
|
|
238
|
+
/*
|
|
239
|
+
* The "is any of" advice is Query-only: Record mode renders with
|
|
240
|
+
* enableOperators={false}, so it was telling half its readers to reach
|
|
241
|
+
* for a control that is not on their screen.
|
|
242
|
+
*/
|
|
180
243
|
reasons.push(
|
|
181
|
-
|
|
244
|
+
mode === ModelColumnEditorMode.Query
|
|
245
|
+
? `"${key}" holds a list. Use the "is any of" operator instead, or keep editing as JSON.`
|
|
246
|
+
: `"${key}" holds a list, which the rows can't show. Keep editing as JSON.`,
|
|
182
247
|
);
|
|
183
248
|
continue;
|
|
184
249
|
}
|
|
@@ -221,6 +286,7 @@ export const classifyColumnValueCompatibility: ClassifyCompatibilityFunction = (
|
|
|
221
286
|
|
|
222
287
|
type BuildQueryJsonFunction = (
|
|
223
288
|
value: Dictionary<DictionaryEntryValue>,
|
|
289
|
+
mode: ModelColumnEditorMode,
|
|
224
290
|
) => string;
|
|
225
291
|
|
|
226
292
|
/**
|
|
@@ -228,9 +294,17 @@ type BuildQueryJsonFunction = (
|
|
|
228
294
|
*
|
|
229
295
|
* Empty collapses to "" rather than "{}" so a required argument still reads as
|
|
230
296
|
* empty to form validation and to the graph linter.
|
|
297
|
+
*
|
|
298
|
+
* In Record mode a row with no value is dropped. The record editor opens with a
|
|
299
|
+
* blank row for every column a create must be given, and those rows serialize
|
|
300
|
+
* to `""` — a non-empty string, which both validateRequired and
|
|
301
|
+
* isEmptyArgumentValue read as "filled in". Keeping them would make an
|
|
302
|
+
* untouched Create One look complete and let it save. Query mode keeps them,
|
|
303
|
+
* because matching a column against "" is a real condition.
|
|
231
304
|
*/
|
|
232
305
|
export const buildColumnValueJson: BuildQueryJsonFunction = (
|
|
233
306
|
value: Dictionary<DictionaryEntryValue>,
|
|
307
|
+
mode: ModelColumnEditorMode,
|
|
234
308
|
): string => {
|
|
235
309
|
const entries: JSONObject = {};
|
|
236
310
|
|
|
@@ -239,6 +313,10 @@ export const buildColumnValueJson: BuildQueryJsonFunction = (
|
|
|
239
313
|
continue;
|
|
240
314
|
}
|
|
241
315
|
|
|
316
|
+
if (mode === ModelColumnEditorMode.Record && value[key] === "") {
|
|
317
|
+
continue;
|
|
318
|
+
}
|
|
319
|
+
|
|
242
320
|
entries[key] = value[key] as never;
|
|
243
321
|
}
|
|
244
322
|
|
|
@@ -257,9 +335,19 @@ export const buildColumnValueJson: BuildQueryJsonFunction = (
|
|
|
257
335
|
const ModelColumnEditor: FunctionComponent<ComponentProps> = (
|
|
258
336
|
props: ComponentProps,
|
|
259
337
|
): ReactElement => {
|
|
260
|
-
const schema: ModelSchemaState = useModelSchema(props.tableName);
|
|
261
338
|
const isQuery: boolean = props.mode === ModelColumnEditorMode.Query;
|
|
262
339
|
|
|
340
|
+
/*
|
|
341
|
+
* A query names columns to filter on, so it wants the read gate. A record
|
|
342
|
+
* names columns to write, and the two lists genuinely differ: a write-only
|
|
343
|
+
* column (MonitorSecret.secretValue declares `read: []`) is absent from the
|
|
344
|
+
* read list, and asking for it under the read gate would leave the one column
|
|
345
|
+
* Create One Monitor Secret exists to write out of its own editor.
|
|
346
|
+
*/
|
|
347
|
+
const access: ModelSchemaAccess = isQuery ? "read" : "write";
|
|
348
|
+
|
|
349
|
+
const schema: ModelSchemaState = useModelSchema(props.tableName, access);
|
|
350
|
+
|
|
263
351
|
const initial: ParsedQuery = useMemo(() => {
|
|
264
352
|
return normalizeInitialValue(props.initialValue);
|
|
265
353
|
}, []);
|
|
@@ -269,18 +357,60 @@ const ModelColumnEditor: FunctionComponent<ComponentProps> = (
|
|
|
269
357
|
|
|
270
358
|
/*
|
|
271
359
|
* The row editor is uncontrolled after mount (DictionaryForm seeds itself
|
|
272
|
-
* once), so
|
|
360
|
+
* once), so this is computed rather than held in state. It only has to be
|
|
361
|
+
* right on the render that first mounts DictionaryForm, which is the first
|
|
362
|
+
* render after the schema resolves — the loader below returns early until
|
|
363
|
+
* then.
|
|
364
|
+
*
|
|
365
|
+
* Record mode opens with a blank row for every column a create must be given
|
|
366
|
+
* a value for. Seeding is additive and never overwrites what was stored, and
|
|
367
|
+
* blank rows are dropped on the way back out (buildColumnValueJson), so
|
|
368
|
+
* opening a saved workflow and saving it again cannot change what it does.
|
|
273
369
|
*/
|
|
274
|
-
const initialRows:
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
370
|
+
const initialRows: Dictionary<DictionaryEntryValue> = useMemo(() => {
|
|
371
|
+
const stored: Dictionary<DictionaryEntryValue> = (initial.parsed ||
|
|
372
|
+
{}) as Dictionary<DictionaryEntryValue>;
|
|
373
|
+
|
|
374
|
+
if (isQuery || !schema.columns) {
|
|
375
|
+
return stored;
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
const seeded: Dictionary<DictionaryEntryValue> = { ...stored };
|
|
379
|
+
|
|
380
|
+
for (const column of requiredWritableColumns(schema.columns)) {
|
|
381
|
+
if (seeded[column.id] === undefined) {
|
|
382
|
+
seeded[column.id] = "";
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
return seeded;
|
|
387
|
+
}, [schema.columns, isQuery]);
|
|
388
|
+
|
|
389
|
+
/*
|
|
390
|
+
* The model's own example for each column, shown in the row it belongs to.
|
|
391
|
+
* MonitorSecret.secretValue ships example: "sk_test_1234567890abcdefghijklmnop",
|
|
392
|
+
* which answers "what goes in this box" better than any prose in the sidebar.
|
|
393
|
+
*/
|
|
394
|
+
const valuePlaceholders: Dictionary<string> = useMemo(() => {
|
|
395
|
+
const placeholders: Dictionary<string> = {};
|
|
396
|
+
|
|
397
|
+
for (const column of schema.columns || []) {
|
|
398
|
+
const hint: string | undefined = column.example || column.placeholder;
|
|
399
|
+
|
|
400
|
+
if (hint) {
|
|
401
|
+
placeholders[column.id] = hint;
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
return placeholders;
|
|
406
|
+
}, [schema.columns]);
|
|
278
407
|
|
|
279
408
|
const compatibility: CompatibilityResult = useMemo(() => {
|
|
280
409
|
return classifyColumnValueCompatibility(
|
|
281
410
|
initial.parsed,
|
|
282
411
|
schema.columns || [],
|
|
283
412
|
props.mode,
|
|
413
|
+
initial.hasTemplateExpressions,
|
|
284
414
|
);
|
|
285
415
|
}, [schema.columns, props.mode]);
|
|
286
416
|
|
|
@@ -309,7 +439,7 @@ const ModelColumnEditor: FunctionComponent<ComponentProps> = (
|
|
|
309
439
|
const onRowsChange: OnRowsChangeFunction = (
|
|
310
440
|
value: Dictionary<DictionaryEntryValue>,
|
|
311
441
|
): void => {
|
|
312
|
-
const asJson: string = buildColumnValueJson(value);
|
|
442
|
+
const asJson: string = buildColumnValueJson(value, props.mode);
|
|
313
443
|
setJsonText(asJson);
|
|
314
444
|
props.onChange(asJson);
|
|
315
445
|
};
|
|
@@ -319,7 +449,7 @@ const ModelColumnEditor: FunctionComponent<ComponentProps> = (
|
|
|
319
449
|
{schema.error && (
|
|
320
450
|
<p className="text-sm text-amber-600 mb-2">
|
|
321
451
|
Couldn't load this model's columns ({schema.error}). You can
|
|
322
|
-
still write the query as JSON.
|
|
452
|
+
still write {isQuery ? "the query" : "these fields"} as JSON.
|
|
323
453
|
</p>
|
|
324
454
|
)}
|
|
325
455
|
|
|
@@ -352,7 +482,9 @@ const ModelColumnEditor: FunctionComponent<ComponentProps> = (
|
|
|
352
482
|
addButtonSuffix={isQuery ? "condition" : "field"}
|
|
353
483
|
keyPlaceholder="Column"
|
|
354
484
|
valuePlaceholder="Value"
|
|
355
|
-
|
|
485
|
+
valuePlaceholders={valuePlaceholders}
|
|
486
|
+
defaultValueSuggestions={props.valueSuggestions}
|
|
487
|
+
initialValue={initialRows}
|
|
356
488
|
onChange={onRowsChange}
|
|
357
489
|
/>
|
|
358
490
|
) : (
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
import HTTPErrorResponse from "../../../Types/API/HTTPErrorResponse";
|
|
11
11
|
import HTTPResponse from "../../../Types/API/HTTPResponse";
|
|
12
12
|
import URL from "../../../Types/API/URL";
|
|
13
|
+
import TableColumnType from "../../../Types/Database/TableColumnType";
|
|
13
14
|
import { JSONObject } from "../../../Types/JSON";
|
|
14
15
|
import { WORKFLOW_URL } from "../../Config";
|
|
15
16
|
import API from "../../Utils/API/API";
|
|
@@ -28,8 +29,26 @@ export interface ModelSchemaColumn {
|
|
|
28
29
|
isRelation: boolean;
|
|
29
30
|
relatedTableName?: string | undefined;
|
|
30
31
|
relatedColumns?: Array<ModelSchemaColumn> | undefined;
|
|
32
|
+
/*
|
|
33
|
+
* Present from the endpoint, absent on anything cached or hand-built before
|
|
34
|
+
* they existed, so every reader must treat them as optional.
|
|
35
|
+
*/
|
|
36
|
+
required?: boolean | undefined;
|
|
37
|
+
hasDefault?: boolean | undefined;
|
|
38
|
+
isTenantColumn?: boolean | undefined;
|
|
39
|
+
example?: string | undefined;
|
|
40
|
+
placeholder?: string | undefined;
|
|
31
41
|
}
|
|
32
42
|
|
|
43
|
+
/**
|
|
44
|
+
* Which permission list the endpoint should gate columns on.
|
|
45
|
+
*
|
|
46
|
+
* "read" is the default and is what a Select or Query argument wants. "write"
|
|
47
|
+
* is for create/update payloads, and is not a superset: a write-only column
|
|
48
|
+
* (MonitorSecret.secretValue declares `read: []`) appears only under "write".
|
|
49
|
+
*/
|
|
50
|
+
export type ModelSchemaAccess = "read" | "write";
|
|
51
|
+
|
|
33
52
|
export interface ModelSchemaState {
|
|
34
53
|
columns: Array<ModelSchemaColumn> | null;
|
|
35
54
|
isLoading: boolean;
|
|
@@ -38,15 +57,25 @@ export interface ModelSchemaState {
|
|
|
38
57
|
|
|
39
58
|
export type FetchModelSchemaFunction = (
|
|
40
59
|
tableName: string,
|
|
60
|
+
access?: ModelSchemaAccess,
|
|
41
61
|
) => Promise<Array<ModelSchemaColumn>>;
|
|
42
62
|
|
|
43
63
|
export const fetchModelSchema: FetchModelSchemaFunction = async (
|
|
44
64
|
tableName: string,
|
|
65
|
+
access: ModelSchemaAccess = "read",
|
|
45
66
|
): Promise<Array<ModelSchemaColumn>> => {
|
|
46
67
|
const url: URL = URL.fromString(WORKFLOW_URL.toString()).addRoute(
|
|
47
68
|
`/model-schema/${encodeURIComponent(tableName)}`,
|
|
48
69
|
);
|
|
49
70
|
|
|
71
|
+
/*
|
|
72
|
+
* Only sent when it is not the default, so the read requests the field picker
|
|
73
|
+
* and query builder make keep the exact URL they had.
|
|
74
|
+
*/
|
|
75
|
+
if (access === "write") {
|
|
76
|
+
url.addQueryParam("access", "write");
|
|
77
|
+
}
|
|
78
|
+
|
|
50
79
|
const result: HTTPResponse<JSONObject> | HTTPErrorResponse =
|
|
51
80
|
await API.get<JSONObject>({ url });
|
|
52
81
|
|
|
@@ -61,6 +90,7 @@ export const fetchModelSchema: FetchModelSchemaFunction = async (
|
|
|
61
90
|
|
|
62
91
|
export type UseModelSchemaFunction = (
|
|
63
92
|
tableName: string | undefined,
|
|
93
|
+
access?: ModelSchemaAccess,
|
|
64
94
|
) => ModelSchemaState;
|
|
65
95
|
|
|
66
96
|
/**
|
|
@@ -72,6 +102,7 @@ export type UseModelSchemaFunction = (
|
|
|
72
102
|
*/
|
|
73
103
|
export const useModelSchema: UseModelSchemaFunction = (
|
|
74
104
|
tableName: string | undefined,
|
|
105
|
+
access: ModelSchemaAccess = "read",
|
|
75
106
|
): ModelSchemaState => {
|
|
76
107
|
const [columns, setColumns] = useState<Array<ModelSchemaColumn> | null>(null);
|
|
77
108
|
const [isLoading, setIsLoading] = useState<boolean>(Boolean(tableName));
|
|
@@ -91,8 +122,10 @@ export const useModelSchema: UseModelSchemaFunction = (
|
|
|
91
122
|
setError(null);
|
|
92
123
|
|
|
93
124
|
try {
|
|
94
|
-
const loaded: Array<ModelSchemaColumn> =
|
|
95
|
-
|
|
125
|
+
const loaded: Array<ModelSchemaColumn> = await fetchModelSchema(
|
|
126
|
+
tableName,
|
|
127
|
+
access,
|
|
128
|
+
);
|
|
96
129
|
|
|
97
130
|
if (cancelled) {
|
|
98
131
|
return;
|
|
@@ -118,43 +151,66 @@ export const useModelSchema: UseModelSchemaFunction = (
|
|
|
118
151
|
return () => {
|
|
119
152
|
cancelled = true;
|
|
120
153
|
};
|
|
121
|
-
|
|
154
|
+
// Re-fetches when the gate changes: the two access modes return different columns.
|
|
155
|
+
}, [tableName, access]);
|
|
122
156
|
|
|
123
157
|
return { columns: columns, isLoading: isLoading, error: error };
|
|
124
158
|
};
|
|
125
159
|
|
|
126
160
|
/*
|
|
127
161
|
* Column types that hold a single scalar the builder can sensibly type into a
|
|
128
|
-
* box. Everything else (relations, JSON blobs, buffers) needs
|
|
162
|
+
* box. Everything else (relations, JSON blobs, buffers, monitor steps) needs
|
|
163
|
+
* the JSON editor.
|
|
164
|
+
*
|
|
165
|
+
* These are spelled with the enum, not with string literals, because the wire
|
|
166
|
+
* carries the enum's *values* and several of them differ from the member name
|
|
167
|
+
* that reads like the obvious literal: ShortText is "Text", ObjectID is
|
|
168
|
+
* "Object ID", PositiveNumber is "Positive Number", LongURL is "URL". Written
|
|
169
|
+
* out by hand this list silently classified the two most-declared non-relation
|
|
170
|
+
* types as non-scalar, and the tests that covered it pinned the same mistake.
|
|
129
171
|
*/
|
|
130
172
|
const SCALAR_COLUMN_TYPES: Array<string> = [
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
173
|
+
TableColumnType.ShortText,
|
|
174
|
+
TableColumnType.LongText,
|
|
175
|
+
TableColumnType.VeryLongText,
|
|
176
|
+
TableColumnType.Slug,
|
|
177
|
+
TableColumnType.Email,
|
|
178
|
+
TableColumnType.Phone,
|
|
179
|
+
TableColumnType.Color,
|
|
180
|
+
TableColumnType.Domain,
|
|
181
|
+
TableColumnType.Name,
|
|
182
|
+
TableColumnType.Description,
|
|
183
|
+
TableColumnType.ObjectID,
|
|
184
|
+
TableColumnType.Number,
|
|
185
|
+
TableColumnType.SmallNumber,
|
|
186
|
+
TableColumnType.BigNumber,
|
|
187
|
+
TableColumnType.PositiveNumber,
|
|
188
|
+
TableColumnType.SmallPositiveNumber,
|
|
189
|
+
TableColumnType.BigPositiveNumber,
|
|
190
|
+
TableColumnType.Boolean,
|
|
191
|
+
TableColumnType.Date,
|
|
192
|
+
TableColumnType.Password,
|
|
193
|
+
TableColumnType.HashedString,
|
|
194
|
+
TableColumnType.Port,
|
|
195
|
+
TableColumnType.LongURL,
|
|
196
|
+
TableColumnType.ShortURL,
|
|
197
|
+
TableColumnType.IP,
|
|
198
|
+
TableColumnType.Version,
|
|
199
|
+
TableColumnType.Markdown,
|
|
200
|
+
TableColumnType.HTML,
|
|
201
|
+
TableColumnType.JavaScript,
|
|
202
|
+
TableColumnType.CSS,
|
|
203
|
+
TableColumnType.OTP,
|
|
204
|
+
];
|
|
205
|
+
|
|
206
|
+
const NUMERIC_COLUMN_TYPES: Array<string> = [
|
|
207
|
+
TableColumnType.Number,
|
|
208
|
+
TableColumnType.SmallNumber,
|
|
209
|
+
TableColumnType.BigNumber,
|
|
210
|
+
TableColumnType.PositiveNumber,
|
|
211
|
+
TableColumnType.SmallPositiveNumber,
|
|
212
|
+
TableColumnType.BigPositiveNumber,
|
|
213
|
+
TableColumnType.Port,
|
|
158
214
|
];
|
|
159
215
|
|
|
160
216
|
export type IsScalarColumnFunction = (column: ModelSchemaColumn) => boolean;
|
|
@@ -170,7 +226,7 @@ export type IsNumericColumnFunction = (column: ModelSchemaColumn) => boolean;
|
|
|
170
226
|
export const isNumericColumn: IsNumericColumnFunction = (
|
|
171
227
|
column: ModelSchemaColumn,
|
|
172
228
|
): boolean => {
|
|
173
|
-
return column.
|
|
229
|
+
return !column.isRelation && NUMERIC_COLUMN_TYPES.includes(column.type);
|
|
174
230
|
};
|
|
175
231
|
|
|
176
232
|
export type IsBooleanColumnFunction = (column: ModelSchemaColumn) => boolean;
|
|
@@ -178,7 +234,33 @@ export type IsBooleanColumnFunction = (column: ModelSchemaColumn) => boolean;
|
|
|
178
234
|
export const isBooleanColumn: IsBooleanColumnFunction = (
|
|
179
235
|
column: ModelSchemaColumn,
|
|
180
236
|
): boolean => {
|
|
181
|
-
return column.type ===
|
|
237
|
+
return !column.isRelation && column.type === TableColumnType.Boolean;
|
|
238
|
+
};
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* Columns a create must be given a value for.
|
|
242
|
+
*
|
|
243
|
+
* Mirrors the server's own rule in DatabaseService.checkRequiredFields —
|
|
244
|
+
* required, minus anything carrying a default — and additionally drops the
|
|
245
|
+
* project column, which the workflow runner stamps itself
|
|
246
|
+
* (ModelArguments.applyTenantColumn) and which a builder must never type.
|
|
247
|
+
* Relations are left out because a row holds one scalar.
|
|
248
|
+
*/
|
|
249
|
+
export type RequiredWritableColumnsFunction = (
|
|
250
|
+
columns: Array<ModelSchemaColumn>,
|
|
251
|
+
) => Array<ModelSchemaColumn>;
|
|
252
|
+
|
|
253
|
+
export const requiredWritableColumns: RequiredWritableColumnsFunction = (
|
|
254
|
+
columns: Array<ModelSchemaColumn>,
|
|
255
|
+
): Array<ModelSchemaColumn> => {
|
|
256
|
+
return columns.filter((column: ModelSchemaColumn) => {
|
|
257
|
+
return (
|
|
258
|
+
Boolean(column.required) &&
|
|
259
|
+
!column.hasDefault &&
|
|
260
|
+
!column.isTenantColumn &&
|
|
261
|
+
!column.isRelation
|
|
262
|
+
);
|
|
263
|
+
});
|
|
182
264
|
};
|
|
183
265
|
|
|
184
266
|
export type FindColumnFunction = (
|
|
@@ -102,7 +102,7 @@ export const decideRunWatch: DecideRunWatchFunction = (params: {
|
|
|
102
102
|
return {
|
|
103
103
|
shouldContinue: false,
|
|
104
104
|
message: isFailedRunStatus(params.run.status)
|
|
105
|
-
? `Run ${params.run.status.toLowerCase()}. Open the
|
|
105
|
+
? `Run ${params.run.status.toLowerCase()}. Open the run log to see why.`
|
|
106
106
|
: "Run finished successfully.",
|
|
107
107
|
};
|
|
108
108
|
}
|
|
@@ -163,7 +163,7 @@ const StepTraceViewer: FunctionComponent<ComponentProps> = (
|
|
|
163
163
|
return (
|
|
164
164
|
<p className="text-sm text-gray-500">
|
|
165
165
|
This run has no recorded steps. Runs from before step recording was
|
|
166
|
-
added show only
|
|
166
|
+
added show only their full log.
|
|
167
167
|
</p>
|
|
168
168
|
);
|
|
169
169
|
}
|