@oneuptime/common 12.0.6 → 12.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Models/DatabaseModels/AIInsight.ts +1 -1
- package/Models/DatabaseModels/DatabaseBaseModel/FileModel.ts +2 -3
- package/Models/DatabaseModels/DeletedProject.ts +595 -0
- package/Models/DatabaseModels/Index.ts +2 -0
- package/Models/DatabaseModels/Monitor.ts +111 -0
- package/Models/DatabaseModels/Project.ts +3 -3
- package/Models/DatabaseModels/TelemetryEntity.ts +45 -0
- package/Models/DatabaseModels/TelemetryEntityRelationship.ts +26 -0
- package/Models/DatabaseModels/WorkflowLog.ts +38 -0
- package/Models/DatabaseModels/WorkspaceProjectAuthToken.ts +19 -1
- package/Server/API/FileAPI.ts +15 -2
- package/Server/API/MicrosoftTeamsAPI.ts +6 -1
- package/Server/API/ProjectAPI.ts +214 -0
- package/Server/API/StatusPageAPI.ts +39 -6
- package/Server/API/UserAPI.ts +16 -1
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786446545142-MigrationName.ts +50 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786449497966-AddMonitorDependency.ts +67 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786461136170-AddDeletedProjectTable.ts +39 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786551733814-MigrationName.ts +41 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786559879134-AddWorkflowLogStepTrace.ts +17 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +10 -0
- package/Server/Middleware/MasterAdminAuthorization.ts +11 -6
- package/Server/Services/AIAgentService.ts +20 -0
- package/Server/Services/DashboardDomainService.ts +73 -28
- package/Server/Services/DatabaseService.ts +1 -0
- package/Server/Services/DeletedProjectService.ts +138 -0
- package/Server/Services/FileService.ts +61 -0
- package/Server/Services/IncidentEpisodePublicNoteService.ts +18 -0
- package/Server/Services/IncidentPublicNoteService.ts +18 -0
- package/Server/Services/Index.ts +2 -0
- package/Server/Services/MonitorService.ts +311 -0
- package/Server/Services/ProbeService.ts +20 -0
- package/Server/Services/ProjectService.ts +297 -1
- package/Server/Services/PushNotificationService.ts +71 -0
- package/Server/Services/ScheduledMaintenancePublicNoteService.ts +18 -0
- package/Server/Services/StatusPageAnnouncementService.ts +53 -0
- package/Server/Services/StatusPageDomainService.ts +73 -28
- package/Server/Services/TeamMemberService.ts +117 -12
- package/Server/Services/TelemetryEntityRelationshipService.ts +3 -0
- package/Server/Services/TelemetryEntityService.ts +114 -1
- package/Server/Services/TelemetryIngestionKeyService.ts +1 -0
- package/Server/Services/UserWebhookService.ts +34 -109
- package/Server/Services/WorkspaceNotificationRuleService.ts +69 -0
- package/Server/Services/WorkspaceProjectAuthTokenService.ts +37 -1
- package/Server/Types/Database/DeleteById.ts +2 -0
- package/Server/Types/Database/DeleteOneBy.ts +6 -0
- package/Server/Types/Domain.ts +41 -0
- package/Server/Types/Workflow/Components/API/Delete.ts +2 -1
- package/Server/Types/Workflow/Components/API/Get.ts +2 -1
- package/Server/Types/Workflow/Components/API/Patch.ts +2 -1
- package/Server/Types/Workflow/Components/API/Post.ts +2 -1
- package/Server/Types/Workflow/Components/API/Put.ts +2 -1
- package/Server/Types/Workflow/Components/API/Utils.ts +85 -3
- package/Server/Types/Workflow/Components/BaseModel/CreateManyBaseModel.ts +25 -19
- package/Server/Types/Workflow/Components/BaseModel/CreateOneBaseModel.ts +6 -5
- package/Server/Types/Workflow/Components/BaseModel/DeleteManyBaseModel.ts +32 -14
- package/Server/Types/Workflow/Components/BaseModel/DeleteOneBaseModel.ts +31 -13
- package/Server/Types/Workflow/Components/BaseModel/FindManyBaseModel.ts +29 -20
- package/Server/Types/Workflow/Components/BaseModel/FindOneBaseModel.ts +28 -21
- package/Server/Types/Workflow/Components/BaseModel/LogComponentError.ts +89 -0
- package/Server/Types/Workflow/Components/BaseModel/ModelArguments.ts +208 -0
- package/Server/Types/Workflow/Components/BaseModel/OnTriggerBaseModel.ts +11 -0
- package/Server/Types/Workflow/Components/BaseModel/UpdateManyBaseModel.ts +41 -18
- package/Server/Types/Workflow/Components/BaseModel/UpdateOneBaseModel.ts +45 -19
- package/Server/Types/Workflow/Components/Discord/SendMessageToChannel.ts +16 -9
- package/Server/Types/Workflow/Components/IncomingWebhookUtils.ts +66 -0
- package/Server/Types/Workflow/Components/MicrosoftTeams/SendMessageToChannel.ts +15 -9
- package/Server/Types/Workflow/Components/Slack/SendMessageToChannel.ts +17 -0
- package/Server/Types/Workflow/TriggerCode.ts +12 -0
- package/Server/Types/Workflow/Workflow.ts +5 -0
- package/Server/Utils/AI/Chat/ObservabilityChatPrompt.ts +1 -1
- package/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.ts +171 -0
- package/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.ts +3 -3
- package/Server/Utils/AI/SRE/Insights/FixRouting.ts +3 -2
- package/Server/Utils/AI/SRE/TelemetryImprovementTaskTrigger.ts +1 -1
- package/Server/Utils/AI/Toolbox/CodeWriteTools.ts +6 -6
- package/Server/Utils/CodeRepository/GitHub/GitHub.ts +43 -5
- package/Server/Utils/DataSource/EgressGuard.ts +176 -16
- package/Server/Utils/DataSource/HttpFetch.ts +6 -45
- package/Server/Utils/Execute.ts +8 -0
- package/Server/Utils/InlineImageAccessTokenSync.ts +23 -0
- package/Server/Utils/LLM/LLMService.ts +57 -12
- package/Server/Utils/Monitor/MonitorAlert.ts +40 -0
- package/Server/Utils/Monitor/MonitorDependencySuppression.ts +192 -0
- package/Server/Utils/Monitor/MonitorIncident.ts +40 -0
- package/Server/Utils/Monitor/MonitorResource.ts +36 -0
- package/Server/Utils/Response.ts +142 -6
- package/Server/Utils/SSRFProtection.ts +273 -60
- package/Server/Utils/StartServer.ts +8 -0
- package/Server/Utils/Telemetry/InventoryEntityRegistry.ts +689 -0
- package/Server/Utils/VM/VMAPI.ts +56 -8
- package/Server/Utils/VM/VMRunner.ts +88 -1
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +555 -49
- package/Server/Utils/Workspace/Slack/Slack.ts +25 -2
- package/Server/Utils/Workspace/WorkspaceBase.ts +6 -0
- package/Tests/App/Dashboard/DangerZone.test.tsx +334 -0
- package/Tests/App/Dashboard/DashboardVariableAllContract.test.tsx +539 -0
- package/Tests/App/Dashboard/DashboardVariableSelector.test.tsx +678 -0
- package/Tests/App/Dashboard/DashboardVariablesDiscard.test.tsx +706 -0
- package/Tests/App/Dashboard/DashboardVariablesModal.test.tsx +508 -0
- package/Tests/App/Dashboard/MonitorCriteriaAttributeFilter.test.tsx +574 -0
- package/Tests/App/PublicDashboard/DashboardVariableSelector.test.tsx +470 -0
- package/Tests/App/StatusPage/StatusPageDetailPagesNotFound.test.tsx +308 -0
- package/Tests/Models/DatabaseModels/DeletedProjectModel.test.ts +251 -0
- package/Tests/Models/DatabaseModels/SavedViewJSONColumnTuples.test.ts +115 -0
- package/Tests/Server/API/FileAPIAccessControl.test.ts +316 -0
- package/Tests/Server/API/ProjectAPI.test.ts +299 -1
- package/Tests/Server/API/ProjectAPIAdjustBalance.test.ts +459 -0
- package/Tests/Server/API/ProjectAPIAdjustBalanceBillingDisabled.test.ts +177 -0
- package/Tests/Server/API/UserProjectsAPI.test.ts +478 -4
- package/Tests/Server/Services/DatabaseServiceDeletionReason.test.ts +123 -0
- package/Tests/Server/Services/DeletedProjectService.test.ts +415 -0
- package/Tests/Server/Services/DeletedProjectServiceSelfHosted.test.ts +70 -0
- package/Tests/Server/Services/DomainSubdomainHooks.test.ts +94 -0
- package/Tests/Server/Services/FileIsPublicBooleanMigration.test.ts +244 -0
- package/Tests/Server/Services/FileServiceMimeType.test.ts +89 -0
- package/Tests/Server/Services/MonitorServiceDependencyValidation.test.ts +702 -0
- package/Tests/Server/Services/ProjectServiceAdjustBalance.test.ts +615 -0
- package/Tests/Server/Services/ProjectServiceDeleteAudit.test.ts +406 -0
- package/Tests/Server/Services/PublishTimeImageVisibility.test.ts +450 -0
- package/Tests/Server/Services/TeamMemberAutoAcceptInvitation.test.ts +669 -0
- package/Tests/Server/Services/TelemetryEntityManualCreate.test.ts +248 -0
- package/Tests/Server/Services/UserWebhookSSRF.test.ts +174 -0
- package/Tests/Server/Services/WebPushEndpointAllowlist.test.ts +133 -0
- package/Tests/Server/Services/WorkspaceProjectAuthTokenRepoint.test.ts +618 -0
- package/Tests/Server/Types/Workflow/Components/ApiComponentErrorPort.test.ts +26 -1
- package/Tests/Server/Types/Workflow/Components/ApiComponentHeaders.test.ts +192 -0
- package/Tests/Server/Types/Workflow/Components/ApiComponentSsrf.test.ts +215 -0
- package/Tests/Server/Types/Workflow/Components/BaseModelDatabaseComponents.test.ts +742 -0
- package/Tests/Server/Types/Workflow/Components/ChatWebhookComponents.test.ts +256 -0
- package/Tests/Server/Types/Workflow/Components/ModelArguments.test.ts +371 -0
- package/Tests/Server/Utils/AI/CodeAgentCommandGuard.test.ts +204 -0
- package/Tests/Server/Utils/AI/CodeAgentWriteLimits.test.ts +213 -0
- package/Tests/Server/Utils/AI/CodeWriteTools.test.ts +52 -5
- package/Tests/Server/Utils/AI/LLMServiceBaseUrl.test.ts +3 -0
- package/Tests/Server/Utils/AI/LLMServiceEgressGuard.test.ts +315 -0
- package/Tests/Server/Utils/AI/LLMServiceModelCompatibility.test.ts +3 -0
- package/Tests/Server/Utils/AI/LLMServiceRequestPolicy.test.ts +17 -5
- package/Tests/Server/Utils/AI/LLMServiceToolCalling.test.ts +14 -1
- package/Tests/Server/Utils/AI/ObservabilityChatPrompt.test.ts +35 -0
- package/Tests/Server/Utils/AI/StubLLMEgressGuard.ts +25 -0
- package/Tests/Server/Utils/AnalyticsDatabase/QuerySettingsHelper.test.ts +152 -0
- package/Tests/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.test.ts +62 -7
- package/Tests/Server/Utils/DataSource/EgressGuard.test.ts +69 -0
- package/Tests/Server/Utils/DataSource/EgressGuardPinning.test.ts +330 -0
- package/Tests/Server/Utils/GitHubCreatePullRequestWithToken.test.ts +393 -0
- package/Tests/Server/Utils/InlineImageAccessTokenSync.test.ts +202 -0
- package/Tests/Server/Utils/Monitor/MonitorDependencySuppression.test.ts +811 -0
- package/Tests/Server/Utils/Monitor/MonitorDependencySuppressionCreatorSkip.test.ts +604 -0
- package/Tests/Server/Utils/ResponseSendFileResponse.test.ts +192 -0
- package/Tests/Server/Utils/SSRFProtectionBypasses.test.ts +406 -0
- package/Tests/Server/Utils/Telemetry/InventoryEntityRegistry.test.ts +322 -0
- package/Tests/Server/Utils/VM/VMAPISubstitution.test.ts +243 -0
- package/Tests/Server/Utils/VM/VMRunnerSsrf.test.ts +194 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsChannelSend.test.ts +1169 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsChannelsList.test.ts +2 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsTeamInstalls.test.ts +1605 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsTenantResolution.test.ts +1218 -0
- package/Tests/Types/AI/AIChatMessageStatus.test.ts +79 -0
- package/Tests/Types/AI/AIInsightStatus.test.ts +40 -0
- package/Tests/Types/API/HostnameAuthorityParsing.test.ts +157 -0
- package/Tests/Types/Dashboard/DashboardTemplateInvariants.test.ts +27 -0
- package/Tests/Types/DataSource/DataSourceLimits.test.ts +71 -0
- package/Tests/Types/DataSource/DataSourceType.test.ts +181 -0
- package/Tests/Types/DomainSubdomainValidation.test.ts +90 -0
- package/Tests/Types/JSONFunctions.test.ts +252 -1
- package/Tests/Types/Monitor/SnmpMonitor/SnmpAuthProtocol.test.ts +61 -0
- package/Tests/Types/Monitor/SnmpMonitor/SnmpPrivProtocol.test.ts +62 -0
- package/Tests/Types/Monitor/SnmpMonitor/SnmpSecurityLevel.test.ts +68 -0
- package/Tests/Types/Monitor/SnmpMonitor/SnmpVersion.test.ts +51 -0
- package/Tests/Types/SerializableObjectDictionaryImportCycle.test.ts +197 -0
- package/Tests/Types/Telemetry/EntityTypeGroups.test.ts +140 -0
- package/Tests/Types/Workflow/StepTrace.test.ts +235 -0
- package/Tests/Types/Workflow/TemplateSyntax.test.ts +379 -0
- package/Tests/Types/Workflow/Templates.test.ts +403 -0
- package/Tests/UI/Components/404.test.tsx +1 -1
- package/Tests/UI/Components/Alert.test.tsx +1 -1
- package/Tests/UI/Components/Badge.test.tsx +1 -1
- package/Tests/UI/Components/BasicForm.test.tsx +39 -10
- package/Tests/UI/Components/Button.test.tsx +1 -1
- package/Tests/UI/Components/Card.test.tsx +1 -1
- package/Tests/UI/Components/Charts/AxisTickColor.test.tsx +1 -1
- package/Tests/UI/Components/ColorViewer.test.tsx +1 -1
- package/Tests/UI/Components/ComponentsModal.test.tsx +7 -1
- package/Tests/UI/Components/CustomTimeRangeModal.test.tsx +459 -0
- package/Tests/UI/Components/DictionaryAttributeFilterRow.test.tsx +477 -0
- package/Tests/UI/Components/DictionaryOfStrings.test.tsx +1 -1
- package/Tests/UI/Components/Dropdown.test.tsx +1 -1
- package/Tests/UI/Components/FilePicker.test.tsx +1 -1
- package/Tests/UI/Components/Forms/AnchoredFieldPopupKeyboard.test.tsx +382 -0
- package/Tests/UI/Components/Forms/ColorPickerPicking.test.tsx +569 -0
- package/Tests/UI/Components/Forms/ValidationJSON.test.ts +241 -0
- package/Tests/UI/Components/HiddenText.test.tsx +1 -1
- package/Tests/UI/Components/Input.test.tsx +1 -1
- package/Tests/UI/Components/Loader.test.tsx +1 -1
- package/Tests/UI/Components/LogTimeRangePicker.test.tsx +43 -1
- package/Tests/UI/Components/MasterPage.test.tsx +1 -1
- package/Tests/UI/Components/ModalPortalDismissal.test.tsx +579 -0
- package/Tests/UI/Components/ModelDelete.test.tsx +214 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableBulkSelectAll.test.tsx +1 -1
- package/Tests/UI/Components/ModelTable/BaseModelTableColumnCustomization.test.tsx +1 -1
- package/Tests/UI/Components/ModelTable/BaseModelTableSearchLabels.test.tsx +1 -1
- package/Tests/UI/Components/ModelTable/BaseModelTableUrlState.test.tsx +1 -1
- package/Tests/UI/Components/ModelTable/CustomFieldColumns.test.tsx +1 -1
- package/Tests/UI/Components/NavBar.test.tsx +1 -1
- package/Tests/UI/Components/OperatorSelectorKeyboard.test.tsx +1 -1
- package/Tests/UI/Components/Pagination.test.tsx +1 -1
- package/Tests/UI/Components/Pill.test.tsx +1 -1
- package/Tests/UI/Components/Probe.test.tsx +1 -1
- package/Tests/UI/Components/ProgressBar.test.tsx +1 -1
- package/Tests/UI/Components/RadioButtons.test.tsx +1 -1
- package/Tests/UI/Components/SideMenuItem.test.tsx +1 -1
- package/Tests/UI/Components/SideOver.test.tsx +500 -6
- package/Tests/UI/Components/Tabs.test.tsx +1 -1
- package/Tests/UI/Components/TelemetrySearchBar.test.tsx +1 -1
- package/Tests/UI/Components/TelemetryTimeRangePicker.test.tsx +50 -8
- package/Tests/UI/Components/TextArea.test.tsx +1 -1
- package/Tests/UI/Components/TimeRangePickerDropdown.test.tsx +325 -0
- package/Tests/UI/Components/Toast.test.tsx +1 -1
- package/Tests/UI/Components/Toggle.test.tsx +1 -1
- package/Tests/UI/Components/TopSection.test.tsx +1 -1
- package/Tests/UI/Components/UseLiveLogsRefresh.test.tsx +1 -1
- package/Tests/UI/Components/Workflow/GraphLint.test.ts +821 -0
- package/Tests/UI/Components/Workflow/ModelColumnEditor.test.ts +287 -0
- package/Tests/UI/Components/Workflow/ModelColumnEditorServerContract.test.ts +185 -0
- package/Tests/UI/Components/Workflow/ModelSchema.test.ts +174 -0
- package/Tests/UI/Components/Workflow/RunStatusWatcher.test.ts +152 -0
- package/Tests/UI/Components/Workflow/Utils.test.ts +192 -0
- package/Tests/UI/Monitor/MonitorStepCriteriaView.test.tsx +432 -0
- package/Tests/UI/Rum/ReplayScrubber.test.tsx +1 -1
- package/Tests/UI/Rum/ReplayStage.test.tsx +1 -1
- package/Tests/UI/Telemetry/TelemetrySnapshotWindowAlert.test.tsx +1 -1
- package/Tests/UI/Utils/LocalStorageArrayRoundTrip.test.ts +72 -0
- package/Tests/Utils/Dashboard/HtmlWidgetDocument.test.ts +19 -2
- package/Tests/Utils/Dashboard/ModelQueryVariableInterpolation.test.ts +44 -0
- package/Tests/Utils/Dashboard/VariableInterpolation.test.ts +288 -5
- package/Tests/Utils/Dashboard/VariableUrlState.test.ts +42 -0
- package/Tests/Utils/DataSource/DataSourceQueryText.test.ts +27 -0
- package/Tests/Utils/LegacySerializedArray.test.ts +139 -0
- package/Tests/Utils/Monitor/MonitorDependencyRule.test.ts +190 -0
- package/Tests/Utils/Monitor/NetworkDeviceRoleUtil.test.ts +514 -0
- package/Tests/Utils/Monitor/NetworkTopologyUtil.test.ts +240 -0
- package/Tests/Utils/Realtime.test.ts +78 -0
- package/Tests/Utils/Schema/AnalyticsModelSchema.test.ts +469 -0
- package/Tests/Utils/Schema/ModelSchema.test.ts +268 -0
- package/Tests/Utils/Telemetry/EntityKeyNonTelemetry.test.ts +193 -0
- package/Tests/Utils/Telemetry/SavedViewFilters.test.ts +246 -0
- package/Tests/__mocks__/i18next-browser-languagedetector.js +21 -0
- package/Types/AI/FixPullRequestCiStatus.ts +1 -1
- package/Types/AI/FixVerificationStatus.ts +2 -2
- package/Types/API/Hostname.ts +92 -4
- package/Types/API/URL.ts +43 -25
- package/Types/Billing/BalanceAdjustmentType.ts +14 -0
- package/Types/Billing/ProjectBalanceType.ts +13 -0
- package/Types/Domain.ts +26 -0
- package/Types/File/MimeType.ts +11 -0
- package/Types/JSONFunctions.ts +15 -0
- package/Types/Monitor/SnmpMonitor/NetworkTopology.ts +31 -0
- package/Types/SerializableObjectDictionary.ts +133 -39
- package/Types/Telemetry/EntitySource.ts +40 -0
- package/Types/Telemetry/EntityType.ts +27 -0
- package/Types/Telemetry/EntityTypeGroups.ts +65 -0
- package/Types/Telemetry/TelemetrySavedViewState.ts +9 -1
- package/Types/Workflow/Component.ts +29 -0
- package/Types/Workflow/Components/API.ts +35 -0
- package/Types/Workflow/Components/BaseModel.ts +96 -28
- package/Types/Workflow/StepTrace.ts +181 -0
- package/Types/Workflow/TemplateSyntax.ts +499 -0
- package/Types/Workflow/Templates.ts +316 -0
- package/Typings/Index.d.ts +12 -0
- package/UI/Components/Date/CustomTimeRangeModal.tsx +278 -0
- package/UI/Components/Date/TimeRangePickerDropdown.tsx +250 -0
- package/UI/Components/Dictionary/Dictionary.tsx +23 -6
- package/UI/Components/Forms/Fields/ColorPicker.tsx +66 -10
- package/UI/Components/Forms/Fields/IconPicker.tsx +48 -10
- package/UI/Components/Forms/Types/Field.ts +7 -0
- package/UI/Components/Forms/Validation.ts +63 -1
- package/UI/Components/GanttChart/ChartContainer.tsx +4 -3
- package/UI/Components/Input/Input.tsx +31 -3
- package/UI/Components/LogsViewer/components/LogTimeRangePicker.tsx +11 -216
- package/UI/Components/Modal/ConfirmModal.tsx +10 -5
- package/UI/Components/Modal/Modal.tsx +64 -51
- package/UI/Components/ModelDelete/ModelDelete.tsx +23 -6
- package/UI/Components/SideOver/SideOver.tsx +195 -68
- package/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.tsx +11 -210
- package/UI/Components/Workflow/ArgumentsForm.tsx +194 -7
- package/UI/Components/Workflow/Component.tsx +28 -26
- package/UI/Components/Workflow/ComponentSettingsModal.tsx +69 -8
- package/UI/Components/Workflow/GraphLint.ts +591 -0
- package/UI/Components/Workflow/ModelColumnEditor.tsx +396 -0
- package/UI/Components/Workflow/ModelSchema.ts +196 -0
- package/UI/Components/Workflow/RunForm.tsx +41 -7
- package/UI/Components/Workflow/RunStatusWatcher.ts +122 -0
- package/UI/Components/Workflow/StepTraceViewer.tsx +186 -0
- package/UI/Components/Workflow/Utils.ts +93 -1
- package/UI/Components/Workflow/Workflow.tsx +77 -4
- package/UI/Types/LayeredDismissal.ts +31 -0
- package/UI/Types/UseAnchoredFieldPopup.ts +99 -0
- package/UI/Utils/PageScrollLock.ts +66 -0
- package/Utils/Dashboard/HtmlWidgetDocument.ts +4 -2
- package/Utils/Dashboard/VariableInterpolation.ts +19 -1
- package/Utils/LegacySerializedArray.ts +60 -0
- package/Utils/Monitor/MonitorDependencyRule.ts +88 -0
- package/Utils/Monitor/NetworkDeviceRoleUtil.ts +533 -0
- package/Utils/Monitor/NetworkTopologyUtil.ts +45 -7
- package/Utils/Telemetry/EntityKey.ts +66 -0
- package/Utils/Telemetry/SavedViewFilters.ts +88 -0
- package/build/dist/Models/DatabaseModels/AIInsight.js +1 -1
- package/build/dist/Models/DatabaseModels/AIInsight.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DatabaseBaseModel/FileModel.js +2 -3
- package/build/dist/Models/DatabaseModels/DatabaseBaseModel/FileModel.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DeletedProject.js +640 -0
- package/build/dist/Models/DatabaseModels/DeletedProject.js.map +1 -0
- package/build/dist/Models/DatabaseModels/Index.js +2 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Monitor.js +106 -0
- package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Project.js +3 -3
- package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TelemetryEntity.js +47 -0
- package/build/dist/Models/DatabaseModels/TelemetryEntity.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TelemetryEntityRelationship.js +27 -0
- package/build/dist/Models/DatabaseModels/TelemetryEntityRelationship.js.map +1 -1
- package/build/dist/Models/DatabaseModels/WorkflowLog.js +39 -0
- package/build/dist/Models/DatabaseModels/WorkflowLog.js.map +1 -1
- package/build/dist/Models/DatabaseModels/WorkspaceProjectAuthToken.js.map +1 -1
- package/build/dist/Server/API/FileAPI.js +14 -2
- package/build/dist/Server/API/FileAPI.js.map +1 -1
- package/build/dist/Server/API/MicrosoftTeamsAPI.js +6 -1
- package/build/dist/Server/API/MicrosoftTeamsAPI.js.map +1 -1
- package/build/dist/Server/API/ProjectAPI.js +157 -4
- package/build/dist/Server/API/ProjectAPI.js.map +1 -1
- package/build/dist/Server/API/StatusPageAPI.js +27 -3
- package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
- package/build/dist/Server/API/UserAPI.js +16 -1
- package/build/dist/Server/API/UserAPI.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786446545142-MigrationName.js +34 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786446545142-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786449497966-AddMonitorDependency.js +30 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786449497966-AddMonitorDependency.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786461136170-AddDeletedProjectTable.js +20 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786461136170-AddDeletedProjectTable.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786551733814-MigrationName.js +20 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786551733814-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786559879134-AddWorkflowLogStepTrace.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786559879134-AddWorkflowLogStepTrace.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +10 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/MasterAdminAuthorization.js +11 -6
- package/build/dist/Server/Middleware/MasterAdminAuthorization.js.map +1 -1
- package/build/dist/Server/Services/AIAgentService.js +17 -0
- package/build/dist/Server/Services/AIAgentService.js.map +1 -1
- package/build/dist/Server/Services/DashboardDomainService.js +55 -18
- package/build/dist/Server/Services/DashboardDomainService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +1 -0
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/DeletedProjectService.js +124 -0
- package/build/dist/Server/Services/DeletedProjectService.js.map +1 -0
- package/build/dist/Server/Services/FileService.js +52 -0
- package/build/dist/Server/Services/FileService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodePublicNoteService.js +10 -1
- package/build/dist/Server/Services/IncidentEpisodePublicNoteService.js.map +1 -1
- package/build/dist/Server/Services/IncidentPublicNoteService.js +10 -1
- package/build/dist/Server/Services/IncidentPublicNoteService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +2 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +232 -0
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/ProbeService.js +17 -0
- package/build/dist/Server/Services/ProbeService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +228 -6
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/PushNotificationService.js +56 -0
- package/build/dist/Server/Services/PushNotificationService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js +10 -1
- package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageAnnouncementService.js +54 -0
- package/build/dist/Server/Services/StatusPageAnnouncementService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageDomainService.js +55 -18
- package/build/dist/Server/Services/StatusPageDomainService.js.map +1 -1
- package/build/dist/Server/Services/TeamMemberService.js +97 -6
- package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryEntityRelationshipService.js +3 -0
- package/build/dist/Server/Services/TelemetryEntityRelationshipService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryEntityService.js +91 -1
- package/build/dist/Server/Services/TelemetryEntityService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryIngestionKeyService.js +1 -0
- package/build/dist/Server/Services/TelemetryIngestionKeyService.js.map +1 -1
- package/build/dist/Server/Services/UserWebhookService.js +31 -87
- package/build/dist/Server/Services/UserWebhookService.js.map +1 -1
- package/build/dist/Server/Services/WorkspaceNotificationRuleService.js +65 -0
- package/build/dist/Server/Services/WorkspaceNotificationRuleService.js.map +1 -1
- package/build/dist/Server/Services/WorkspaceProjectAuthTokenService.js +23 -0
- package/build/dist/Server/Services/WorkspaceProjectAuthTokenService.js.map +1 -1
- package/build/dist/Server/Types/Domain.js +37 -0
- package/build/dist/Server/Types/Domain.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Delete.js +2 -1
- package/build/dist/Server/Types/Workflow/Components/API/Delete.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Get.js +2 -1
- package/build/dist/Server/Types/Workflow/Components/API/Get.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Patch.js +2 -1
- package/build/dist/Server/Types/Workflow/Components/API/Patch.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Post.js +2 -1
- package/build/dist/Server/Types/Workflow/Components/API/Post.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Put.js +2 -1
- package/build/dist/Server/Types/Workflow/Components/API/Put.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Utils.js +63 -2
- package/build/dist/Server/Types/Workflow/Components/API/Utils.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/BaseModel/CreateManyBaseModel.js +15 -11
- package/build/dist/Server/Types/Workflow/Components/BaseModel/CreateManyBaseModel.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/BaseModel/CreateOneBaseModel.js +2 -3
- package/build/dist/Server/Types/Workflow/Components/BaseModel/CreateOneBaseModel.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/BaseModel/DeleteManyBaseModel.js +21 -10
- package/build/dist/Server/Types/Workflow/Components/BaseModel/DeleteManyBaseModel.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/BaseModel/DeleteOneBaseModel.js +21 -10
- package/build/dist/Server/Types/Workflow/Components/BaseModel/DeleteOneBaseModel.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/BaseModel/FindManyBaseModel.js +18 -13
- package/build/dist/Server/Types/Workflow/Components/BaseModel/FindManyBaseModel.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/BaseModel/FindOneBaseModel.js +18 -13
- package/build/dist/Server/Types/Workflow/Components/BaseModel/FindOneBaseModel.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/BaseModel/LogComponentError.js +43 -0
- package/build/dist/Server/Types/Workflow/Components/BaseModel/LogComponentError.js.map +1 -0
- package/build/dist/Server/Types/Workflow/Components/BaseModel/ModelArguments.js +116 -0
- package/build/dist/Server/Types/Workflow/Components/BaseModel/ModelArguments.js.map +1 -0
- package/build/dist/Server/Types/Workflow/Components/BaseModel/OnTriggerBaseModel.js +7 -0
- package/build/dist/Server/Types/Workflow/Components/BaseModel/OnTriggerBaseModel.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/BaseModel/UpdateManyBaseModel.js +24 -13
- package/build/dist/Server/Types/Workflow/Components/BaseModel/UpdateManyBaseModel.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/BaseModel/UpdateOneBaseModel.js +27 -13
- package/build/dist/Server/Types/Workflow/Components/BaseModel/UpdateOneBaseModel.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/Discord/SendMessageToChannel.js +14 -6
- package/build/dist/Server/Types/Workflow/Components/Discord/SendMessageToChannel.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/IncomingWebhookUtils.js +42 -0
- package/build/dist/Server/Types/Workflow/Components/IncomingWebhookUtils.js.map +1 -0
- package/build/dist/Server/Types/Workflow/Components/MicrosoftTeams/SendMessageToChannel.js +15 -6
- package/build/dist/Server/Types/Workflow/Components/MicrosoftTeams/SendMessageToChannel.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/Slack/SendMessageToChannel.js +10 -2
- package/build/dist/Server/Types/Workflow/Components/Slack/SendMessageToChannel.js.map +1 -1
- package/build/dist/Server/Types/Workflow/TriggerCode.js.map +1 -1
- package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js +1 -1
- package/build/dist/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.js +141 -0
- package/build/dist/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/Insights/FixRouting.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/TelemetryImprovementTaskTrigger.js +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/CodeWriteTools.js +6 -6
- package/build/dist/Server/Utils/AI/Toolbox/CodeWriteTools.js.map +1 -1
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHub.js +39 -5
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHub.js.map +1 -1
- package/build/dist/Server/Utils/DataSource/EgressGuard.js +94 -10
- package/build/dist/Server/Utils/DataSource/EgressGuard.js.map +1 -1
- package/build/dist/Server/Utils/DataSource/HttpFetch.js +1 -19
- package/build/dist/Server/Utils/DataSource/HttpFetch.js.map +1 -1
- package/build/dist/Server/Utils/Execute.js +2 -2
- package/build/dist/Server/Utils/Execute.js.map +1 -1
- package/build/dist/Server/Utils/InlineImageAccessTokenSync.js +13 -0
- package/build/dist/Server/Utils/InlineImageAccessTokenSync.js.map +1 -1
- package/build/dist/Server/Utils/LLM/LLMService.js +43 -12
- package/build/dist/Server/Utils/LLM/LLMService.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js +44 -24
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorDependencySuppression.js +158 -0
- package/build/dist/Server/Utils/Monitor/MonitorDependencySuppression.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js +50 -30
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorResource.js +32 -0
- package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
- package/build/dist/Server/Utils/Response.js +112 -5
- package/build/dist/Server/Utils/Response.js.map +1 -1
- package/build/dist/Server/Utils/SSRFProtection.js +219 -53
- package/build/dist/Server/Utils/SSRFProtection.js.map +1 -1
- package/build/dist/Server/Utils/StartServer.js +7 -0
- package/build/dist/Server/Utils/StartServer.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/InventoryEntityRegistry.js +507 -0
- package/build/dist/Server/Utils/Telemetry/InventoryEntityRegistry.js.map +1 -0
- package/build/dist/Server/Utils/VM/VMAPI.js +51 -4
- package/build/dist/Server/Utils/VM/VMAPI.js.map +1 -1
- package/build/dist/Server/Utils/VM/VMRunner.js +73 -1
- package/build/dist/Server/Utils/VM/VMRunner.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +445 -43
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/Slack/Slack.js +18 -1
- package/build/dist/Server/Utils/Workspace/Slack/Slack.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/WorkspaceBase.js.map +1 -1
- package/build/dist/Types/AI/FixPullRequestCiStatus.js +1 -1
- package/build/dist/Types/AI/FixVerificationStatus.js +2 -2
- package/build/dist/Types/API/Hostname.js +73 -4
- package/build/dist/Types/API/Hostname.js.map +1 -1
- package/build/dist/Types/API/URL.js +42 -24
- package/build/dist/Types/API/URL.js.map +1 -1
- package/build/dist/Types/Billing/BalanceAdjustmentType.js +15 -0
- package/build/dist/Types/Billing/BalanceAdjustmentType.js.map +1 -0
- package/build/dist/Types/Billing/ProjectBalanceType.js +14 -0
- package/build/dist/Types/Billing/ProjectBalanceType.js.map +1 -0
- package/build/dist/Types/Domain.js +22 -0
- package/build/dist/Types/Domain.js.map +1 -1
- package/build/dist/Types/File/MimeType.js +11 -0
- package/build/dist/Types/File/MimeType.js.map +1 -1
- package/build/dist/Types/JSONFunctions.js +14 -0
- package/build/dist/Types/JSONFunctions.js.map +1 -1
- package/build/dist/Types/SerializableObjectDictionary.js +133 -39
- package/build/dist/Types/SerializableObjectDictionary.js.map +1 -1
- package/build/dist/Types/Telemetry/EntitySource.js +39 -0
- package/build/dist/Types/Telemetry/EntitySource.js.map +1 -0
- package/build/dist/Types/Telemetry/EntityType.js +27 -0
- package/build/dist/Types/Telemetry/EntityType.js.map +1 -1
- package/build/dist/Types/Telemetry/EntityTypeGroups.js +57 -0
- package/build/dist/Types/Telemetry/EntityTypeGroups.js.map +1 -0
- package/build/dist/Types/Workflow/Component.js +21 -0
- package/build/dist/Types/Workflow/Component.js.map +1 -1
- package/build/dist/Types/Workflow/Components/API.js +35 -0
- package/build/dist/Types/Workflow/Components/API.js.map +1 -1
- package/build/dist/Types/Workflow/Components/BaseModel.js +87 -28
- package/build/dist/Types/Workflow/Components/BaseModel.js.map +1 -1
- package/build/dist/Types/Workflow/StepTrace.js +104 -0
- package/build/dist/Types/Workflow/StepTrace.js.map +1 -0
- package/build/dist/Types/Workflow/TemplateSyntax.js +326 -0
- package/build/dist/Types/Workflow/TemplateSyntax.js.map +1 -0
- package/build/dist/Types/Workflow/Templates.js +218 -0
- package/build/dist/Types/Workflow/Templates.js.map +1 -0
- package/build/dist/UI/Components/Date/CustomTimeRangeModal.js +126 -0
- package/build/dist/UI/Components/Date/CustomTimeRangeModal.js.map +1 -0
- package/build/dist/UI/Components/Date/TimeRangePickerDropdown.js +123 -0
- package/build/dist/UI/Components/Date/TimeRangePickerDropdown.js.map +1 -0
- package/build/dist/UI/Components/Dictionary/Dictionary.js +22 -6
- package/build/dist/UI/Components/Dictionary/Dictionary.js.map +1 -1
- package/build/dist/UI/Components/Forms/Fields/ColorPicker.js +52 -13
- package/build/dist/UI/Components/Forms/Fields/ColorPicker.js.map +1 -1
- package/build/dist/UI/Components/Forms/Fields/IconPicker.js +28 -12
- package/build/dist/UI/Components/Forms/Fields/IconPicker.js.map +1 -1
- package/build/dist/UI/Components/Forms/Validation.js +44 -0
- package/build/dist/UI/Components/Forms/Validation.js.map +1 -1
- package/build/dist/UI/Components/GanttChart/ChartContainer.js +4 -3
- package/build/dist/UI/Components/GanttChart/ChartContainer.js.map +1 -1
- package/build/dist/UI/Components/Input/Input.js +12 -4
- package/build/dist/UI/Components/Input/Input.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogTimeRangePicker.js +5 -108
- package/build/dist/UI/Components/LogsViewer/components/LogTimeRangePicker.js.map +1 -1
- package/build/dist/UI/Components/Modal/ConfirmModal.js +3 -1
- package/build/dist/UI/Components/Modal/ConfirmModal.js.map +1 -1
- package/build/dist/UI/Components/Modal/Modal.js +55 -39
- package/build/dist/UI/Components/Modal/Modal.js.map +1 -1
- package/build/dist/UI/Components/ModelDelete/ModelDelete.js +11 -6
- package/build/dist/UI/Components/ModelDelete/ModelDelete.js.map +1 -1
- package/build/dist/UI/Components/SideOver/SideOver.js +105 -30
- package/build/dist/UI/Components/SideOver/SideOver.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.js +5 -105
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ArgumentsForm.js +140 -11
- package/build/dist/UI/Components/Workflow/ArgumentsForm.js.map +1 -1
- package/build/dist/UI/Components/Workflow/Component.js +20 -19
- package/build/dist/UI/Components/Workflow/Component.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ComponentSettingsModal.js +31 -3
- package/build/dist/UI/Components/Workflow/ComponentSettingsModal.js.map +1 -1
- package/build/dist/UI/Components/Workflow/GraphLint.js +396 -0
- package/build/dist/UI/Components/Workflow/GraphLint.js.map +1 -0
- package/build/dist/UI/Components/Workflow/ModelColumnEditor.js +225 -0
- package/build/dist/UI/Components/Workflow/ModelColumnEditor.js.map +1 -0
- package/build/dist/UI/Components/Workflow/ModelSchema.js +118 -0
- package/build/dist/UI/Components/Workflow/ModelSchema.js.map +1 -0
- package/build/dist/UI/Components/Workflow/RunForm.js +22 -6
- package/build/dist/UI/Components/Workflow/RunForm.js.map +1 -1
- package/build/dist/UI/Components/Workflow/RunStatusWatcher.js +76 -0
- package/build/dist/UI/Components/Workflow/RunStatusWatcher.js.map +1 -0
- package/build/dist/UI/Components/Workflow/StepTraceViewer.js +76 -0
- package/build/dist/UI/Components/Workflow/StepTraceViewer.js.map +1 -0
- package/build/dist/UI/Components/Workflow/Utils.js +73 -1
- package/build/dist/UI/Components/Workflow/Utils.js.map +1 -1
- package/build/dist/UI/Components/Workflow/Workflow.js +51 -6
- package/build/dist/UI/Components/Workflow/Workflow.js.map +1 -1
- package/build/dist/UI/Types/LayeredDismissal.js +21 -0
- package/build/dist/UI/Types/LayeredDismissal.js.map +1 -0
- package/build/dist/UI/Types/UseAnchoredFieldPopup.js +74 -1
- package/build/dist/UI/Types/UseAnchoredFieldPopup.js.map +1 -1
- package/build/dist/UI/Utils/PageScrollLock.js +52 -0
- package/build/dist/UI/Utils/PageScrollLock.js.map +1 -0
- package/build/dist/Utils/Dashboard/HtmlWidgetDocument.js +4 -2
- package/build/dist/Utils/Dashboard/HtmlWidgetDocument.js.map +1 -1
- package/build/dist/Utils/Dashboard/VariableInterpolation.js +19 -1
- package/build/dist/Utils/Dashboard/VariableInterpolation.js.map +1 -1
- package/build/dist/Utils/LegacySerializedArray.js +51 -0
- package/build/dist/Utils/LegacySerializedArray.js.map +1 -0
- package/build/dist/Utils/Monitor/MonitorDependencyRule.js +47 -0
- package/build/dist/Utils/Monitor/MonitorDependencyRule.js.map +1 -0
- package/build/dist/Utils/Monitor/NetworkDeviceRoleUtil.js +386 -0
- package/build/dist/Utils/Monitor/NetworkDeviceRoleUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +35 -6
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
- package/build/dist/Utils/Telemetry/EntityKey.js +52 -0
- package/build/dist/Utils/Telemetry/EntityKey.js.map +1 -1
- package/build/dist/Utils/Telemetry/SavedViewFilters.js +52 -0
- package/build/dist/Utils/Telemetry/SavedViewFilters.js.map +1 -0
- package/jest.config.json +3 -0
- package/package.json +1 -1
- package/tsconfig.json +3 -1
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* A row-based editor for the two workflow arguments that are keyed on a
|
|
3
|
+
* model's columns: the Query that picks which records a component acts on,
|
|
4
|
+
* and the record of values a create/update writes.
|
|
5
|
+
*
|
|
6
|
+
* Both were bare JSON editors, with the column names — and, for a query, the
|
|
7
|
+
* operator syntax — left entirely to memory. The description on those
|
|
8
|
+
* arguments had to carry a hint about "_id" versus "id" precisely because
|
|
9
|
+
* nothing else told the builder what the columns were called.
|
|
10
|
+
*
|
|
11
|
+
* Everything needed to do better already existed: /model-schema/:tableName
|
|
12
|
+
* knows the columns, and DictionaryForm's operator mode emits exactly the
|
|
13
|
+
* {_type, value} shape that JSONFunctions.deserialize hydrates on the server
|
|
14
|
+
* (FindManyBaseModel and friends). This wires the two together, and keeps a
|
|
15
|
+
* JSON escape hatch for the values rows cannot express.
|
|
16
|
+
*/
|
|
17
|
+
import CodeEditor from "../CodeEditor/CodeEditor";
|
|
18
|
+
import ComponentLoader from "../ComponentLoader/ComponentLoader";
|
|
19
|
+
import DictionaryForm, { ValueType } from "../Dictionary/Dictionary";
|
|
20
|
+
import Icon from "../Icon/Icon";
|
|
21
|
+
import { findColumn, useModelSchema, } from "./ModelSchema";
|
|
22
|
+
import CodeType from "../../../Types/Code/CodeType";
|
|
23
|
+
import IconProp from "../../../Types/Icon/IconProp";
|
|
24
|
+
import { ObjectType } from "../../../Types/JSON";
|
|
25
|
+
import React, { useMemo, useRef, useState, } from "react";
|
|
26
|
+
export var ModelColumnEditorMode;
|
|
27
|
+
(function (ModelColumnEditorMode) {
|
|
28
|
+
/** Conditions that select records: column, operator, value. */
|
|
29
|
+
ModelColumnEditorMode["Query"] = "Query";
|
|
30
|
+
/** Values to write: column, value. No operators — you cannot save a ">". */
|
|
31
|
+
ModelColumnEditorMode["Record"] = "Record";
|
|
32
|
+
})(ModelColumnEditorMode || (ModelColumnEditorMode = {}));
|
|
33
|
+
/*
|
|
34
|
+
* Operator wrappers the row editor can show. Anything else in a stored query
|
|
35
|
+
* (an InBetween, a relation sub-object, a raw QueryHelper construct) keeps the
|
|
36
|
+
* JSON editor rather than being silently flattened.
|
|
37
|
+
*/
|
|
38
|
+
const REPRESENTABLE_OPERATOR_TYPES = [
|
|
39
|
+
ObjectType.EqualTo,
|
|
40
|
+
ObjectType.NotEqual,
|
|
41
|
+
ObjectType.Search,
|
|
42
|
+
ObjectType.NotContains,
|
|
43
|
+
ObjectType.StartsWith,
|
|
44
|
+
ObjectType.EndsWith,
|
|
45
|
+
ObjectType.GreaterThan,
|
|
46
|
+
ObjectType.GreaterThanOrEqual,
|
|
47
|
+
ObjectType.LessThan,
|
|
48
|
+
ObjectType.LessThanOrEqual,
|
|
49
|
+
ObjectType.IsNull,
|
|
50
|
+
ObjectType.NotNull,
|
|
51
|
+
ObjectType.Includes,
|
|
52
|
+
ObjectType.IncludesNone,
|
|
53
|
+
];
|
|
54
|
+
const normalizeInitialValue = (value) => {
|
|
55
|
+
if (value === null || value === undefined || value === "") {
|
|
56
|
+
return { text: "", parsed: {} };
|
|
57
|
+
}
|
|
58
|
+
if (typeof value === "object" && !Array.isArray(value)) {
|
|
59
|
+
return { text: JSON.stringify(value, null, 2), parsed: value };
|
|
60
|
+
}
|
|
61
|
+
if (typeof value !== "string") {
|
|
62
|
+
return { text: String(value), parsed: null };
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
const parsed = JSON.parse(value);
|
|
66
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
67
|
+
return { text: value, parsed: parsed };
|
|
68
|
+
}
|
|
69
|
+
return { text: value, parsed: null };
|
|
70
|
+
}
|
|
71
|
+
catch (_a) {
|
|
72
|
+
return { text: value, parsed: null };
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* Can this value be shown as rows without losing anything?
|
|
77
|
+
*
|
|
78
|
+
* Deliberately conservative: when in doubt the JSON editor stays, because a
|
|
79
|
+
* value silently rewritten into something that means something else is far
|
|
80
|
+
* worse than one the builder has to keep editing as text.
|
|
81
|
+
*/
|
|
82
|
+
export const classifyColumnValueCompatibility = (parsed, columns, mode) => {
|
|
83
|
+
if (parsed === null) {
|
|
84
|
+
return {
|
|
85
|
+
compatible: false,
|
|
86
|
+
reasons: ["The current value isn't a JSON object."],
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
const reasons = [];
|
|
90
|
+
for (const key of Object.keys(parsed)) {
|
|
91
|
+
/*
|
|
92
|
+
* Columns are only checked when the schema actually loaded. An unknown key
|
|
93
|
+
* is worth saying out loud — it is the "id" versus "_id" mistake — but it
|
|
94
|
+
* does not force the JSON editor, since the runner accepts column names
|
|
95
|
+
* this endpoint does not surface.
|
|
96
|
+
*/
|
|
97
|
+
if (columns.length > 0 && !findColumn(columns, key)) {
|
|
98
|
+
reasons.push(`"${key}" isn't a known column on this model.`);
|
|
99
|
+
}
|
|
100
|
+
const value = parsed[key];
|
|
101
|
+
if (value === null) {
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
if (typeof value === "string" ||
|
|
105
|
+
typeof value === "number" ||
|
|
106
|
+
typeof value === "boolean") {
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
if (Array.isArray(value)) {
|
|
110
|
+
reasons.push(`"${key}" holds a list. Use the "is any of" operator instead, or keep editing as JSON.`);
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
if (typeof value === "object") {
|
|
114
|
+
const objectType = value["_type"];
|
|
115
|
+
if (mode === ModelColumnEditorMode.Query &&
|
|
116
|
+
typeof objectType === "string" &&
|
|
117
|
+
REPRESENTABLE_OPERATOR_TYPES.includes(objectType)) {
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
if (typeof objectType === "string") {
|
|
121
|
+
reasons.push(`"${key}" uses ${objectType}, which the rows can't show.`);
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
reasons.push(`"${key}" holds a nested record, which the rows can't show.`);
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
reasons.push(`"${key}" has an unexpected value.`);
|
|
128
|
+
}
|
|
129
|
+
/*
|
|
130
|
+
* An unknown column name is a warning, not a reason to lock the editor —
|
|
131
|
+
* the builder can still fix it in the row that shows it.
|
|
132
|
+
*/
|
|
133
|
+
const blocking = reasons.filter((reason) => {
|
|
134
|
+
return !reason.includes("isn't a known column");
|
|
135
|
+
});
|
|
136
|
+
return { compatible: blocking.length === 0, reasons: reasons };
|
|
137
|
+
};
|
|
138
|
+
/**
|
|
139
|
+
* The rows, as the string stored on the workflow argument.
|
|
140
|
+
*
|
|
141
|
+
* Empty collapses to "" rather than "{}" so a required argument still reads as
|
|
142
|
+
* empty to form validation and to the graph linter.
|
|
143
|
+
*/
|
|
144
|
+
export const buildColumnValueJson = (value) => {
|
|
145
|
+
const entries = {};
|
|
146
|
+
for (const key of Object.keys(value)) {
|
|
147
|
+
if (key.trim() === "") {
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
entries[key] = value[key];
|
|
151
|
+
}
|
|
152
|
+
if (Object.keys(entries).length === 0) {
|
|
153
|
+
return "";
|
|
154
|
+
}
|
|
155
|
+
/*
|
|
156
|
+
* The operator wrappers serialize themselves through toJSON() into
|
|
157
|
+
* {_type, value}, which is exactly what the server rehydrates with
|
|
158
|
+
* JSONFunctions.deserialize.
|
|
159
|
+
*/
|
|
160
|
+
return JSON.stringify(entries);
|
|
161
|
+
};
|
|
162
|
+
const ModelColumnEditor = (props) => {
|
|
163
|
+
const schema = useModelSchema(props.tableName);
|
|
164
|
+
const isQuery = props.mode === ModelColumnEditorMode.Query;
|
|
165
|
+
const initial = useMemo(() => {
|
|
166
|
+
return normalizeInitialValue(props.initialValue);
|
|
167
|
+
}, []);
|
|
168
|
+
const [jsonText, setJsonText] = useState(initial.text);
|
|
169
|
+
const [viewMode, setViewMode] = useState("builder");
|
|
170
|
+
/*
|
|
171
|
+
* The row editor is uncontrolled after mount (DictionaryForm seeds itself
|
|
172
|
+
* once), so the initial value is captured rather than recomputed.
|
|
173
|
+
*/
|
|
174
|
+
const initialRows = useRef((initial.parsed || {}));
|
|
175
|
+
const compatibility = useMemo(() => {
|
|
176
|
+
return classifyColumnValueCompatibility(initial.parsed, schema.columns || [], props.mode);
|
|
177
|
+
}, [schema.columns, props.mode]);
|
|
178
|
+
const columnKeys = useMemo(() => {
|
|
179
|
+
return (schema.columns || []).map((column) => {
|
|
180
|
+
return column.id;
|
|
181
|
+
});
|
|
182
|
+
}, [schema.columns]);
|
|
183
|
+
if (schema.isLoading) {
|
|
184
|
+
return React.createElement(ComponentLoader, null);
|
|
185
|
+
}
|
|
186
|
+
const isLockedToJson = !compatibility.compatible;
|
|
187
|
+
const effectiveMode = isLockedToJson ? "json" : viewMode;
|
|
188
|
+
const onJsonChange = (value) => {
|
|
189
|
+
setJsonText(value);
|
|
190
|
+
props.onChange(value);
|
|
191
|
+
};
|
|
192
|
+
const onRowsChange = (value) => {
|
|
193
|
+
const asJson = buildColumnValueJson(value);
|
|
194
|
+
setJsonText(asJson);
|
|
195
|
+
props.onChange(asJson);
|
|
196
|
+
};
|
|
197
|
+
return (React.createElement("div", null,
|
|
198
|
+
schema.error && (React.createElement("p", { className: "text-sm text-amber-600 mb-2" },
|
|
199
|
+
"Couldn't load this model's columns (",
|
|
200
|
+
schema.error,
|
|
201
|
+
"). You can still write the query as JSON.")),
|
|
202
|
+
isLockedToJson && compatibility.reasons.length > 0 && (React.createElement("div", { className: "mb-2 rounded-md border border-amber-200 bg-amber-50 p-3" },
|
|
203
|
+
React.createElement("p", { className: "text-sm text-amber-800" }, "Editing as JSON, because:"),
|
|
204
|
+
React.createElement("ul", { className: "mt-1 list-disc pl-5 text-sm text-amber-700" }, compatibility.reasons.map((reason, i) => {
|
|
205
|
+
return React.createElement("li", { key: i }, reason);
|
|
206
|
+
})))),
|
|
207
|
+
!isLockedToJson && compatibility.reasons.length > 0 && (React.createElement("div", { className: "mb-2 rounded-md border border-amber-200 bg-amber-50 p-3" },
|
|
208
|
+
React.createElement("ul", { className: "list-disc pl-5 text-sm text-amber-700" }, compatibility.reasons.map((reason, i) => {
|
|
209
|
+
return React.createElement("li", { key: i }, reason);
|
|
210
|
+
})))),
|
|
211
|
+
effectiveMode === "builder" ? (React.createElement(DictionaryForm, { keys: columnKeys, enableOperators: isQuery, valueTypes: [ValueType.Text, ValueType.Number, ValueType.Boolean], addButtonSuffix: isQuery ? "condition" : "field", keyPlaceholder: "Column", valuePlaceholder: "Value", initialValue: initialRows.current, onChange: onRowsChange })) : (React.createElement(CodeEditor, { type: CodeType.JSON, tabIndex: props.tabIndex, error: props.error, initialValue: initial.text, value: jsonText, placeholder: props.placeholder, onChange: onJsonChange })),
|
|
212
|
+
!isLockedToJson && (React.createElement("div", { className: "mt-2" },
|
|
213
|
+
React.createElement("button", { type: "button", className: "text-sm underline text-blue-500 hover:text-blue-600 cursor-pointer inline-flex items-center gap-1", onClick: () => {
|
|
214
|
+
setViewMode(effectiveMode === "builder" ? "json" : "builder");
|
|
215
|
+
} },
|
|
216
|
+
React.createElement(Icon, { icon: IconProp.Code, className: "h-3.5 w-3.5" }),
|
|
217
|
+
effectiveMode === "builder"
|
|
218
|
+
? "Edit as JSON"
|
|
219
|
+
: isQuery
|
|
220
|
+
? "Back to conditions"
|
|
221
|
+
: "Back to fields"))),
|
|
222
|
+
props.error && effectiveMode === "builder" && (React.createElement("p", { className: "mt-1 text-sm text-red-400" }, props.error))));
|
|
223
|
+
};
|
|
224
|
+
export default ModelColumnEditor;
|
|
225
|
+
//# sourceMappingURL=ModelColumnEditor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModelColumnEditor.js","sourceRoot":"","sources":["../../../../../UI/Components/Workflow/ModelColumnEditor.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Shared access to the workflow /model-schema/:tableName endpoint.
|
|
3
|
+
*
|
|
4
|
+
* Three builder inputs are backed by a model's column list — the field picker
|
|
5
|
+
* for Select arguments, the query builder for Query arguments, and the record
|
|
6
|
+
* form for create/update arguments — and all three want the same fetch, the
|
|
7
|
+
* same loading and error handling, and the same column shape.
|
|
8
|
+
*/
|
|
9
|
+
import HTTPErrorResponse from "../../../Types/API/HTTPErrorResponse";
|
|
10
|
+
import URL from "../../../Types/API/URL";
|
|
11
|
+
import { WORKFLOW_URL } from "../../Config";
|
|
12
|
+
import API from "../../Utils/API/API";
|
|
13
|
+
import { useEffect, useState } from "react";
|
|
14
|
+
export const fetchModelSchema = async (tableName) => {
|
|
15
|
+
const url = URL.fromString(WORKFLOW_URL.toString()).addRoute(`/model-schema/${encodeURIComponent(tableName)}`);
|
|
16
|
+
const result = await API.get({ url });
|
|
17
|
+
if (result instanceof HTTPErrorResponse) {
|
|
18
|
+
throw result;
|
|
19
|
+
}
|
|
20
|
+
const data = result.data;
|
|
21
|
+
return data["columns"] || [];
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Load a model's columns, once per table name.
|
|
25
|
+
*
|
|
26
|
+
* Never throws: a failure leaves `columns` as an empty array and puts the
|
|
27
|
+
* message in `error`, so a caller can fall back to its JSON editor rather than
|
|
28
|
+
* showing the builder a blank panel.
|
|
29
|
+
*/
|
|
30
|
+
export const useModelSchema = (tableName) => {
|
|
31
|
+
const [columns, setColumns] = useState(null);
|
|
32
|
+
const [isLoading, setIsLoading] = useState(Boolean(tableName));
|
|
33
|
+
const [error, setError] = useState(null);
|
|
34
|
+
useEffect(() => {
|
|
35
|
+
if (!tableName) {
|
|
36
|
+
setColumns([]);
|
|
37
|
+
setIsLoading(false);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
let cancelled = false;
|
|
41
|
+
const load = async () => {
|
|
42
|
+
setIsLoading(true);
|
|
43
|
+
setError(null);
|
|
44
|
+
try {
|
|
45
|
+
const loaded = await fetchModelSchema(tableName);
|
|
46
|
+
if (cancelled) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
setColumns(loaded);
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
if (cancelled) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
setError(API.getFriendlyMessage(err));
|
|
56
|
+
setColumns([]);
|
|
57
|
+
}
|
|
58
|
+
finally {
|
|
59
|
+
if (!cancelled) {
|
|
60
|
+
setIsLoading(false);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
void load();
|
|
65
|
+
return () => {
|
|
66
|
+
cancelled = true;
|
|
67
|
+
};
|
|
68
|
+
}, [tableName]);
|
|
69
|
+
return { columns: columns, isLoading: isLoading, error: error };
|
|
70
|
+
};
|
|
71
|
+
/*
|
|
72
|
+
* Column types that hold a single scalar the builder can sensibly type into a
|
|
73
|
+
* box. Everything else (relations, JSON blobs, buffers) needs the JSON editor.
|
|
74
|
+
*/
|
|
75
|
+
const SCALAR_COLUMN_TYPES = [
|
|
76
|
+
"ShortText",
|
|
77
|
+
"LongText",
|
|
78
|
+
"VeryLongText",
|
|
79
|
+
"Slug",
|
|
80
|
+
"Email",
|
|
81
|
+
"Phone",
|
|
82
|
+
"Color",
|
|
83
|
+
"Domain",
|
|
84
|
+
"Name",
|
|
85
|
+
"Description",
|
|
86
|
+
"ObjectID",
|
|
87
|
+
"Number",
|
|
88
|
+
"PositiveNumber",
|
|
89
|
+
"Boolean",
|
|
90
|
+
"Date",
|
|
91
|
+
"Password",
|
|
92
|
+
"HashedString",
|
|
93
|
+
"Port",
|
|
94
|
+
"Hostname",
|
|
95
|
+
"URL",
|
|
96
|
+
"Route",
|
|
97
|
+
"IP",
|
|
98
|
+
"Version",
|
|
99
|
+
"Markdown",
|
|
100
|
+
"HTML",
|
|
101
|
+
"JavaScript",
|
|
102
|
+
"CSS",
|
|
103
|
+
];
|
|
104
|
+
export const isScalarColumn = (column) => {
|
|
105
|
+
return !column.isRelation && SCALAR_COLUMN_TYPES.includes(column.type);
|
|
106
|
+
};
|
|
107
|
+
export const isNumericColumn = (column) => {
|
|
108
|
+
return column.type === "Number" || column.type === "PositiveNumber";
|
|
109
|
+
};
|
|
110
|
+
export const isBooleanColumn = (column) => {
|
|
111
|
+
return column.type === "Boolean";
|
|
112
|
+
};
|
|
113
|
+
export const findColumn = (columns, columnId) => {
|
|
114
|
+
return columns.find((column) => {
|
|
115
|
+
return column.id === columnId;
|
|
116
|
+
});
|
|
117
|
+
};
|
|
118
|
+
//# sourceMappingURL=ModelSchema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModelSchema.js","sourceRoot":"","sources":["../../../../../UI/Components/Workflow/ModelSchema.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import ErrorMessage from "../ErrorMessage/ErrorMessage";
|
|
2
2
|
import BasicForm from "../Forms/BasicForm";
|
|
3
|
-
import { componentInputTypeToFormFieldType } from "./Utils";
|
|
3
|
+
import { componentInputTypeToFormFieldType, parseStringDictionaryValue, } from "./Utils";
|
|
4
|
+
import { ComponentInputType, } from "../../../Types/Workflow/Component";
|
|
4
5
|
import React, { useEffect, useRef, useState, } from "react";
|
|
5
6
|
const RunForm = (props) => {
|
|
6
7
|
const formRef = useRef(null);
|
|
@@ -12,6 +13,23 @@ const RunForm = (props) => {
|
|
|
12
13
|
useEffect(() => {
|
|
13
14
|
props.onFormChange(component);
|
|
14
15
|
}, [component]);
|
|
16
|
+
/*
|
|
17
|
+
* Same hydration ArgumentsForm does: a StringDictionary renders as key/value
|
|
18
|
+
* rows, and those need a real object rather than the JSON string older
|
|
19
|
+
* workflows stored. The field type is chosen from the same value, so the two
|
|
20
|
+
* cannot disagree about which editor is on screen.
|
|
21
|
+
*/
|
|
22
|
+
const formInitialValues = Object.assign({}, (component.arguments || {}));
|
|
23
|
+
for (const argument of component.metadata.runWorkflowManuallyArguments ||
|
|
24
|
+
[]) {
|
|
25
|
+
if (argument.type !== ComponentInputType.StringDictionary) {
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
const parsed = parseStringDictionaryValue(formInitialValues[argument.id]);
|
|
29
|
+
if (parsed !== null) {
|
|
30
|
+
formInitialValues[argument.id] = parsed;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
15
33
|
return (React.createElement("div", { className: "mb-3 mt-3" },
|
|
16
34
|
React.createElement("div", { className: "mt-5 mb-5" },
|
|
17
35
|
React.createElement("h2", { className: "text-base font-medium text-gray-500" },
|
|
@@ -21,18 +39,16 @@ const RunForm = (props) => {
|
|
|
21
39
|
component.metadata.runWorkflowManuallyArguments &&
|
|
22
40
|
component.metadata.runWorkflowManuallyArguments.length === 0 && (React.createElement(ErrorMessage, { message: 'This workflow trigger does not take any values. You can run it by clicking the "Run" button below.' })),
|
|
23
41
|
component.metadata.runWorkflowManuallyArguments &&
|
|
24
|
-
component.metadata.runWorkflowManuallyArguments.length > 0 && (React.createElement(BasicForm, { hideSubmitButton: true, ref: formRef, initialValues: Object.assign({},
|
|
42
|
+
component.metadata.runWorkflowManuallyArguments.length > 0 && (React.createElement(BasicForm, { hideSubmitButton: true, ref: formRef, initialValues: Object.assign({}, formInitialValues), onChange: (values) => {
|
|
25
43
|
setComponent(Object.assign(Object.assign({}, component), { arguments: Object.assign(Object.assign({}, (component.arguments || {})), (values || {})) }));
|
|
26
44
|
}, onFormValidationErrorChanged: (hasError) => {
|
|
27
45
|
setHasFormValidationErrors(hasError);
|
|
28
46
|
}, fields: component.metadata.runWorkflowManuallyArguments &&
|
|
29
47
|
component.metadata.runWorkflowManuallyArguments.map((argument) => {
|
|
48
|
+
var _a;
|
|
30
49
|
return Object.assign({ title: `${argument.name}`, description: `${argument.required ? "Required" : "Optional"}. ${argument.description}`, field: {
|
|
31
50
|
[argument.id]: true,
|
|
32
|
-
}, required: argument.required, placeholder: argument.placeholder }, componentInputTypeToFormFieldType(argument.type,
|
|
33
|
-
component.returnValues[argument.id]
|
|
34
|
-
? component.returnValues[argument.id]
|
|
35
|
-
: null));
|
|
51
|
+
}, required: argument.required, placeholder: argument.placeholder }, componentInputTypeToFormFieldType(argument.type, (_a = formInitialValues[argument.id]) !== null && _a !== void 0 ? _a : null));
|
|
36
52
|
}) })))));
|
|
37
53
|
};
|
|
38
54
|
export default RunForm;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RunForm.js","sourceRoot":"","sources":["../../../../../UI/Components/Workflow/RunForm.tsx"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,8BAA8B,CAAC;AACxD,OAAO,SAAwB,MAAM,oBAAoB,CAAC;AAE1D,OAAO,
|
|
1
|
+
{"version":3,"file":"RunForm.js","sourceRoot":"","sources":["../../../../../UI/Components/Workflow/RunForm.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Pure helpers behind the builder's "what happened to the run I just started"
|
|
3
|
+
* strip.
|
|
4
|
+
*
|
|
5
|
+
* Triggering a run from the builder used to end at a modal saying the workflow
|
|
6
|
+
* had been scheduled and that the Logs tab would know more. That left the one
|
|
7
|
+
* question the builder actually has — did it work — to a different page, a
|
|
8
|
+
* table, and a text blob. The runner does not hand back a log id at enqueue
|
|
9
|
+
* time (RunWorkflow creates the WorkflowLog itself once it picks the job up),
|
|
10
|
+
* so the builder watches for the run instead of being told about it.
|
|
11
|
+
*
|
|
12
|
+
* The logic that decides when to stop watching lives here, separate from the
|
|
13
|
+
* page, because it is the part worth testing.
|
|
14
|
+
*/
|
|
15
|
+
import WorkflowStatus from "../../../Types/Workflow/WorkflowStatus";
|
|
16
|
+
/**
|
|
17
|
+
* Statuses a run never moves on from. Waiting is not one of them — a Sleep
|
|
18
|
+
* step parks a run for as long as it likes and it carries on afterwards.
|
|
19
|
+
*/
|
|
20
|
+
const TERMINAL_STATUSES = [
|
|
21
|
+
WorkflowStatus.Success,
|
|
22
|
+
WorkflowStatus.Error,
|
|
23
|
+
WorkflowStatus.Timeout,
|
|
24
|
+
WorkflowStatus.WorkflowCountExceeded,
|
|
25
|
+
];
|
|
26
|
+
export const isTerminalRunStatus = (status) => {
|
|
27
|
+
if (!status) {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
return TERMINAL_STATUSES.includes(status);
|
|
31
|
+
};
|
|
32
|
+
export const isFailedRunStatus = (status) => {
|
|
33
|
+
return (status === WorkflowStatus.Error ||
|
|
34
|
+
status === WorkflowStatus.Timeout ||
|
|
35
|
+
status === WorkflowStatus.WorkflowCountExceeded);
|
|
36
|
+
};
|
|
37
|
+
/*
|
|
38
|
+
* How long to keep watching. A run that suspends on a Sleep step can outlive
|
|
39
|
+
* any sensible watch, so the strip stops following it and points at the Logs
|
|
40
|
+
* tab rather than polling for hours.
|
|
41
|
+
*/
|
|
42
|
+
export const MAX_RUN_WATCH_POLLS = 60;
|
|
43
|
+
export const RUN_WATCH_POLL_INTERVAL_MS = 2000;
|
|
44
|
+
/**
|
|
45
|
+
* What the strip should say, and whether to keep looking.
|
|
46
|
+
*/
|
|
47
|
+
export const decideRunWatch = (params) => {
|
|
48
|
+
if (params.pollCount >= MAX_RUN_WATCH_POLLS) {
|
|
49
|
+
return {
|
|
50
|
+
shouldContinue: false,
|
|
51
|
+
message: "This run is taking a while. Open the Logs tab to follow it from there.",
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
if (!params.run) {
|
|
55
|
+
return { shouldContinue: true, message: "Starting run…" };
|
|
56
|
+
}
|
|
57
|
+
if (isTerminalRunStatus(params.run.status)) {
|
|
58
|
+
return {
|
|
59
|
+
shouldContinue: false,
|
|
60
|
+
message: isFailedRunStatus(params.run.status)
|
|
61
|
+
? `Run ${params.run.status.toLowerCase()}. Open the Logs tab to see why.`
|
|
62
|
+
: "Run finished successfully.",
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
if (params.run.status === WorkflowStatus.Waiting) {
|
|
66
|
+
return {
|
|
67
|
+
shouldContinue: false,
|
|
68
|
+
message: "This run is sleeping and will carry on by itself. Follow it in the Logs tab.",
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
shouldContinue: true,
|
|
73
|
+
message: `Run ${params.run.status.toLowerCase()}…`,
|
|
74
|
+
};
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=RunStatusWatcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RunStatusWatcher.js","sourceRoot":"","sources":["../../../../../UI/Components/Workflow/RunStatusWatcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,cAAc,MAAM,wCAAwC,CAAC;AAEpE;;;GAGG;AACH,MAAM,iBAAiB,GAA0B;IAC/C,cAAc,CAAC,OAAO;IACtB,cAAc,CAAC,KAAK;IACpB,cAAc,CAAC,OAAO;IACtB,cAAc,CAAC,qBAAqB;CACrC,CAAC;AAMF,MAAM,CAAC,MAAM,mBAAmB,GAAgC,CAC9D,MAAyC,EAChC,EAAE;IACX,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC5C,CAAC,CAAC;AAMF,MAAM,CAAC,MAAM,iBAAiB,GAA8B,CAC1D,MAAyC,EAChC,EAAE;IACX,OAAO,CACL,MAAM,KAAK,cAAc,CAAC,KAAK;QAC/B,MAAM,KAAK,cAAc,CAAC,OAAO;QACjC,MAAM,KAAK,cAAc,CAAC,qBAAqB,CAChD,CAAC;AACJ,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAW,EAAE,CAAC;AAC9C,MAAM,CAAC,MAAM,0BAA0B,GAAW,IAAI,CAAC;AAmBvD;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAA2B,CAAC,MAGtD,EAAoB,EAAE;IACrB,IAAI,MAAM,CAAC,SAAS,IAAI,mBAAmB,EAAE,CAAC;QAC5C,OAAO;YACL,cAAc,EAAE,KAAK;YACrB,OAAO,EACL,wEAAwE;SAC3E,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QAChB,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC;IAC5D,CAAC;IAED,IAAI,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3C,OAAO;YACL,cAAc,EAAE,KAAK;YACrB,OAAO,EAAE,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;gBAC3C,CAAC,CAAC,OAAO,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,iCAAiC;gBACzE,CAAC,CAAC,4BAA4B;SACjC,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,KAAK,cAAc,CAAC,OAAO,EAAE,CAAC;QACjD,OAAO;YACL,cAAc,EAAE,KAAK;YACrB,OAAO,EACL,8EAA8E;SACjF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,cAAc,EAAE,IAAI;QACpB,OAAO,EAAE,OAAO,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,GAAG;KACnD,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* A workflow run, read as the list of steps it actually took.
|
|
3
|
+
*
|
|
4
|
+
* The raw log is still there and still useful — it carries the component's own
|
|
5
|
+
* log lines and the warnings the runner emits — but "what did this step
|
|
6
|
+
* receive, what did it return, and where did it go next" is a question about
|
|
7
|
+
* structure, and answering it by scanning a newline-joined blob was the whole
|
|
8
|
+
* problem.
|
|
9
|
+
*/
|
|
10
|
+
import Icon from "../Icon/Icon";
|
|
11
|
+
import IconProp from "../../../Types/Icon/IconProp";
|
|
12
|
+
import { WorkflowStepStatus, } from "../../../Types/Workflow/StepTrace";
|
|
13
|
+
import React, { useState } from "react";
|
|
14
|
+
export const formatStepDuration = (durationInMs) => {
|
|
15
|
+
if (durationInMs < 1000) {
|
|
16
|
+
return `${durationInMs}ms`;
|
|
17
|
+
}
|
|
18
|
+
if (durationInMs < 60000) {
|
|
19
|
+
return `${(durationInMs / 1000).toFixed(1)}s`;
|
|
20
|
+
}
|
|
21
|
+
const minutes = Math.floor(durationInMs / 60000);
|
|
22
|
+
const seconds = Math.round((durationInMs % 60000) / 1000);
|
|
23
|
+
return `${minutes}m ${seconds}s`;
|
|
24
|
+
};
|
|
25
|
+
const ValueBlock = (props) => {
|
|
26
|
+
const keys = Object.keys(props.values || {});
|
|
27
|
+
return (React.createElement("div", null,
|
|
28
|
+
React.createElement("p", { className: "text-[11px] font-semibold uppercase tracking-wider text-gray-500 mb-1" }, props.title),
|
|
29
|
+
keys.length === 0 ? (React.createElement("p", { className: "text-sm text-gray-400" }, "None")) : (React.createElement("dl", { className: "space-y-1" }, keys.map((key) => {
|
|
30
|
+
const value = props.values[key];
|
|
31
|
+
const text = typeof value === "string"
|
|
32
|
+
? value
|
|
33
|
+
: JSON.stringify(value, null, 2);
|
|
34
|
+
return (React.createElement("div", { key: key, className: "text-sm" },
|
|
35
|
+
React.createElement("dt", { className: "text-gray-500 font-medium" }, key),
|
|
36
|
+
React.createElement("dd", { className: "text-gray-800 font-mono text-xs whitespace-pre-wrap break-all" }, text)));
|
|
37
|
+
})))));
|
|
38
|
+
};
|
|
39
|
+
const StepRow = (props) => {
|
|
40
|
+
const [isOpen, setIsOpen] = useState(props.step.status === WorkflowStepStatus.Error);
|
|
41
|
+
const isError = props.step.status === WorkflowStepStatus.Error;
|
|
42
|
+
return (React.createElement("div", { className: `rounded-md border ${isError ? "border-red-200 bg-red-50" : "border-gray-200 bg-white"}` },
|
|
43
|
+
React.createElement("button", { type: "button", "aria-expanded": isOpen, className: "w-full text-left p-3 flex items-center gap-3 cursor-pointer", onClick: () => {
|
|
44
|
+
setIsOpen(!isOpen);
|
|
45
|
+
} },
|
|
46
|
+
React.createElement("span", { className: "text-xs text-gray-400 w-5 shrink-0" }, props.index + 1),
|
|
47
|
+
React.createElement(Icon, { icon: isError ? IconProp.Alert : IconProp.CheckCircle, className: `h-4 w-4 shrink-0 ${isError ? "text-red-500" : "text-green-500"}` }),
|
|
48
|
+
React.createElement("span", { className: "flex-1 min-w-0" },
|
|
49
|
+
React.createElement("span", { className: "block text-sm font-medium text-gray-900 truncate" }, props.step.title),
|
|
50
|
+
React.createElement("span", { className: "block text-xs text-gray-500 truncate" }, props.step.componentId)),
|
|
51
|
+
React.createElement("span", { className: "text-xs text-gray-500 shrink-0" }, formatStepDuration(props.step.durationInMs)),
|
|
52
|
+
props.step.executedPort && (React.createElement("span", { className: "text-xs text-gray-500 shrink-0 hidden sm:inline" },
|
|
53
|
+
"\u2192 ",
|
|
54
|
+
props.step.executedPort))),
|
|
55
|
+
isOpen && (React.createElement("div", { className: "border-t border-gray-200 p-3 space-y-3" },
|
|
56
|
+
props.step.errorMessage && (React.createElement("p", { className: "text-sm text-red-700" }, props.step.errorMessage)),
|
|
57
|
+
React.createElement(ValueBlock, { title: "Received", values: props.step.argumentValues }),
|
|
58
|
+
React.createElement(ValueBlock, { title: "Returned", values: props.step.returnValues })))));
|
|
59
|
+
};
|
|
60
|
+
const StepTraceViewer = (props) => {
|
|
61
|
+
var _a;
|
|
62
|
+
const steps = ((_a = props.trace) === null || _a === void 0 ? void 0 : _a.steps) || [];
|
|
63
|
+
if (steps.length === 0) {
|
|
64
|
+
return (React.createElement("p", { className: "text-sm text-gray-500" }, "This run has no recorded steps. Runs from before step recording was added show only the log below."));
|
|
65
|
+
}
|
|
66
|
+
return (React.createElement("div", { className: "space-y-2" },
|
|
67
|
+
props.trace.truncated && (React.createElement("p", { className: "text-sm text-amber-700" },
|
|
68
|
+
"Only the last ",
|
|
69
|
+
steps.length,
|
|
70
|
+
" steps of this run were kept.")),
|
|
71
|
+
steps.map((step, index) => {
|
|
72
|
+
return React.createElement(StepRow, { key: index, step: step, index: index });
|
|
73
|
+
})));
|
|
74
|
+
};
|
|
75
|
+
export default StepTraceViewer;
|
|
76
|
+
//# sourceMappingURL=StepTraceViewer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StepTraceViewer.js","sourceRoot":"","sources":["../../../../../UI/Components/Workflow/StepTraceViewer.tsx"],"names":[],"mappings":"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"}
|