@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,65 @@
|
|
|
1
|
+
import EntityType from "./EntityType";
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* Partitions of the EntityType vocabulary by who creates and owns a row of
|
|
5
|
+
* that type. Isomorphic (plain Types, no server imports) because all three
|
|
6
|
+
* consumers need the same answer: the service enforcing what a user may
|
|
7
|
+
* create, the dashboard populating the type dropdown, and the tests pinning
|
|
8
|
+
* that the prune sweep cannot reach a type nothing re-bumps.
|
|
9
|
+
*
|
|
10
|
+
* Deliberately expressed as explicit sets rather than a string-prefix test.
|
|
11
|
+
* Prefix matching would silently absorb any future `external.*` or
|
|
12
|
+
* `*.device` type into the set that is exempt from pruning, which is the
|
|
13
|
+
* kind of default that goes unnoticed until a registry fills with rows
|
|
14
|
+
* nothing can ever reap.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Types a user may create by hand. These describe things OneUptime cannot
|
|
19
|
+
* observe — a third-party API, a vendor-managed database, an appliance —
|
|
20
|
+
* so nothing will ever discover them and nothing will ever bump their
|
|
21
|
+
* `lastSeenAt`.
|
|
22
|
+
*
|
|
23
|
+
* Manual creation is confined to these on purpose. A hand-made row of an
|
|
24
|
+
* observable type (say `service`) would mint an entity key from the manual
|
|
25
|
+
* identity attribute, which by construction differs from the key ingest
|
|
26
|
+
* derives from `service.name` — so the manual row would sit beside the
|
|
27
|
+
* discovered one as a permanent near-duplicate rather than merging with it.
|
|
28
|
+
*/
|
|
29
|
+
export const MANUAL_ENTITY_TYPES: ReadonlySet<EntityType> = new Set<EntityType>(
|
|
30
|
+
[
|
|
31
|
+
EntityType.ExternalService,
|
|
32
|
+
EntityType.ExternalDatabase,
|
|
33
|
+
EntityType.Appliance,
|
|
34
|
+
],
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Types mirrored from a OneUptime inventory table. The owning row is the
|
|
39
|
+
* source of truth for both identity and liveness; the registry row is a
|
|
40
|
+
* projection kept in step by that table's create/delete hooks.
|
|
41
|
+
*/
|
|
42
|
+
export const INVENTORY_ENTITY_TYPES: ReadonlySet<EntityType> =
|
|
43
|
+
new Set<EntityType>([
|
|
44
|
+
EntityType.NetworkDevice,
|
|
45
|
+
EntityType.CloudResource,
|
|
46
|
+
EntityType.ServerlessFunction,
|
|
47
|
+
EntityType.RumApplication,
|
|
48
|
+
EntityType.IoTDevice,
|
|
49
|
+
EntityType.DockerHost,
|
|
50
|
+
EntityType.PodmanHost,
|
|
51
|
+
]);
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* True for types whose rows have no telemetry heartbeat, and which are
|
|
55
|
+
* therefore never eligible for `lastSeenAt`-based pruning. The prune job
|
|
56
|
+
* enforces this through the `source` column instead (a row's source is the
|
|
57
|
+
* authority, not its type); this predicate is what the tests assert the TTL
|
|
58
|
+
* map against, so a newly added type cannot quietly acquire a TTL.
|
|
59
|
+
*/
|
|
60
|
+
export function isNonTelemetryEntityType(entityType: EntityType): boolean {
|
|
61
|
+
return (
|
|
62
|
+
MANUAL_ENTITY_TYPES.has(entityType) ||
|
|
63
|
+
INVENTORY_ENTITY_TYPES.has(entityType)
|
|
64
|
+
);
|
|
65
|
+
}
|
|
@@ -19,7 +19,15 @@ export interface TelemetrySavedViewTimeRange {
|
|
|
19
19
|
export default interface TelemetrySavedViewState {
|
|
20
20
|
// Submitted search string from the explorer search bar.
|
|
21
21
|
search?: string | undefined;
|
|
22
|
-
|
|
22
|
+
/*
|
|
23
|
+
* Active facet filters as [facetKey, value] tuples.
|
|
24
|
+
*
|
|
25
|
+
* Read these with readSavedViewFilters (Common/Utils/Telemetry/
|
|
26
|
+
* SavedViewFilters) rather than destructuring them. Rows written before
|
|
27
|
+
* JSONFunctions.serializeValue learned to preserve nested arrays hold
|
|
28
|
+
* { "0": facetKey, "1": value } instead, and destructuring one of those
|
|
29
|
+
* throws — which is what this type asserting otherwise once cost us.
|
|
30
|
+
*/
|
|
23
31
|
filters?: Array<[string, string]> | undefined;
|
|
24
32
|
// Selected time range.
|
|
25
33
|
timeRange?: TelemetrySavedViewTimeRange | undefined;
|
|
@@ -30,6 +30,35 @@ export enum ComponentInputType {
|
|
|
30
30
|
WorkflowSelect = "Workflow Select",
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
+
/*
|
|
34
|
+
* Argument types whose value is a JSON document but is read with
|
|
35
|
+
* JSONFunctions.parse — that is, JSON5 — rather than JSON.parse. Unquoted keys,
|
|
36
|
+
* single quotes and trailing commas therefore work in these, and a workflow
|
|
37
|
+
* written that way runs fine today.
|
|
38
|
+
*
|
|
39
|
+
* The distinction matters wherever a JSON document is checked for syntax
|
|
40
|
+
* before it runs: applying JSON.parse's rules to one of these would report a
|
|
41
|
+
* mistake in a workflow that does not have one. The strict set is everything
|
|
42
|
+
* else — RunWorkflow.getComponentArguments calls JSON.parse directly on
|
|
43
|
+
* JSON, Query and Select, so those really must be JSON.
|
|
44
|
+
*/
|
|
45
|
+
const JSON5_TOLERANT_INPUT_TYPES: Array<ComponentInputType> = [
|
|
46
|
+
ComponentInputType.StringDictionary,
|
|
47
|
+
ComponentInputType.JSONArray,
|
|
48
|
+
ComponentInputType.BaseModel,
|
|
49
|
+
ComponentInputType.BaseModelArray,
|
|
50
|
+
];
|
|
51
|
+
|
|
52
|
+
export type IsJSON5ToleratedInputTypeFunction = (
|
|
53
|
+
type: ComponentInputType,
|
|
54
|
+
) => boolean;
|
|
55
|
+
|
|
56
|
+
export const isJSON5ToleratedInputType: IsJSON5ToleratedInputTypeFunction = (
|
|
57
|
+
type: ComponentInputType,
|
|
58
|
+
): boolean => {
|
|
59
|
+
return JSON5_TOLERANT_INPUT_TYPES.includes(type);
|
|
60
|
+
};
|
|
61
|
+
|
|
33
62
|
export enum ComponentType {
|
|
34
63
|
Trigger = "Trigger",
|
|
35
64
|
Component = "Component",
|
|
@@ -37,6 +37,13 @@ const components: Array<ComponentMetadata> = [
|
|
|
37
37
|
type: ComponentInputType.StringDictionary,
|
|
38
38
|
required: false,
|
|
39
39
|
isAdvanced: true,
|
|
40
|
+
/*
|
|
41
|
+
* Headers are where an Authorization bearer token gets typed, and
|
|
42
|
+
* without this the resolved value is written verbatim into the
|
|
43
|
+
* WorkflowLog for anyone with read access to the project. Only values
|
|
44
|
+
* that came from a variable marked secret were ever scrubbed.
|
|
45
|
+
*/
|
|
46
|
+
isSensitive: true,
|
|
40
47
|
placeholder:
|
|
41
48
|
'Example: {"header1": "value1", "header2": "value2", ....}',
|
|
42
49
|
},
|
|
@@ -123,6 +130,13 @@ const components: Array<ComponentMetadata> = [
|
|
|
123
130
|
type: ComponentInputType.StringDictionary,
|
|
124
131
|
required: false,
|
|
125
132
|
isAdvanced: true,
|
|
133
|
+
/*
|
|
134
|
+
* Headers are where an Authorization bearer token gets typed, and
|
|
135
|
+
* without this the resolved value is written verbatim into the
|
|
136
|
+
* WorkflowLog for anyone with read access to the project. Only values
|
|
137
|
+
* that came from a variable marked secret were ever scrubbed.
|
|
138
|
+
*/
|
|
139
|
+
isSensitive: true,
|
|
126
140
|
placeholder:
|
|
127
141
|
'Example: {"header1": "value1", "header2": "value2", ....}',
|
|
128
142
|
},
|
|
@@ -209,6 +223,13 @@ const components: Array<ComponentMetadata> = [
|
|
|
209
223
|
type: ComponentInputType.StringDictionary,
|
|
210
224
|
required: false,
|
|
211
225
|
isAdvanced: true,
|
|
226
|
+
/*
|
|
227
|
+
* Headers are where an Authorization bearer token gets typed, and
|
|
228
|
+
* without this the resolved value is written verbatim into the
|
|
229
|
+
* WorkflowLog for anyone with read access to the project. Only values
|
|
230
|
+
* that came from a variable marked secret were ever scrubbed.
|
|
231
|
+
*/
|
|
232
|
+
isSensitive: true,
|
|
212
233
|
placeholder:
|
|
213
234
|
'Example: {"header1": "value1", "header2": "value2", ....}',
|
|
214
235
|
},
|
|
@@ -295,6 +316,13 @@ const components: Array<ComponentMetadata> = [
|
|
|
295
316
|
type: ComponentInputType.StringDictionary,
|
|
296
317
|
required: false,
|
|
297
318
|
isAdvanced: true,
|
|
319
|
+
/*
|
|
320
|
+
* Headers are where an Authorization bearer token gets typed, and
|
|
321
|
+
* without this the resolved value is written verbatim into the
|
|
322
|
+
* WorkflowLog for anyone with read access to the project. Only values
|
|
323
|
+
* that came from a variable marked secret were ever scrubbed.
|
|
324
|
+
*/
|
|
325
|
+
isSensitive: true,
|
|
298
326
|
placeholder:
|
|
299
327
|
'Example: {"header1": "value1", "header2": "value2", ....}',
|
|
300
328
|
},
|
|
@@ -381,6 +409,13 @@ const components: Array<ComponentMetadata> = [
|
|
|
381
409
|
type: ComponentInputType.StringDictionary,
|
|
382
410
|
required: false,
|
|
383
411
|
isAdvanced: true,
|
|
412
|
+
/*
|
|
413
|
+
* Headers are where an Authorization bearer token gets typed, and
|
|
414
|
+
* without this the resolved value is written verbatim into the
|
|
415
|
+
* WorkflowLog for anyone with read access to the project. Only values
|
|
416
|
+
* that came from a variable marked secret were ever scrubbed.
|
|
417
|
+
*/
|
|
418
|
+
isSensitive: true,
|
|
384
419
|
placeholder:
|
|
385
420
|
'Example: {"header1": "value1", "header2": "value2", ....}',
|
|
386
421
|
},
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import BaseModel from "../../../Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel";
|
|
2
|
+
import Route from "../../API/Route";
|
|
2
3
|
import IconProp from "../../Icon/IconProp";
|
|
3
4
|
import Text from "../../Text";
|
|
4
5
|
import ComponentMetadata, {
|
|
@@ -14,6 +15,33 @@ export default class BaseModelComponent {
|
|
|
14
15
|
return [];
|
|
15
16
|
}
|
|
16
17
|
|
|
18
|
+
/*
|
|
19
|
+
* Every one of these arguments is keyed on column names, and the single
|
|
20
|
+
* most common way to get one wrong is to write "id" - which is what an ID
|
|
21
|
+
* is called everywhere else in the product - when the column is "_id".
|
|
22
|
+
* Both spellings work.
|
|
23
|
+
*
|
|
24
|
+
* Query and record arguments now get a row editor backed by the model's
|
|
25
|
+
* real column list (ModelColumnEditor), so the names are offered rather
|
|
26
|
+
* than remembered. The hint stays because that editor keeps a JSON escape
|
|
27
|
+
* hatch for the queries rows cannot express, and because it is still the
|
|
28
|
+
* only thing explaining the two spellings.
|
|
29
|
+
*/
|
|
30
|
+
const columnHint: string = `Keys are column names on ${model.singularName}. The ID column is "_id" (the "id" spelling is accepted too).`;
|
|
31
|
+
|
|
32
|
+
const queryDescription: string = `Query that selects which ${model.pluralName} this component acts on. ${columnHint}`;
|
|
33
|
+
|
|
34
|
+
const queryPlaceholder: string =
|
|
35
|
+
'Example: {"_id": "00000000-0000-0000-0000-000000000000"}';
|
|
36
|
+
|
|
37
|
+
const selectPlaceholder: string = 'Example: {"_id": true, "name": true}';
|
|
38
|
+
|
|
39
|
+
const dataDescription: string = `${model.singularName} fields to write, as a JSON object. ${columnHint}`;
|
|
40
|
+
|
|
41
|
+
const documentationLink: Route = Route.fromString(
|
|
42
|
+
"/workflow/docs/DatabaseComponents.md",
|
|
43
|
+
);
|
|
44
|
+
|
|
17
45
|
if (model.enableWorkflowOn.read) {
|
|
18
46
|
components.push({
|
|
19
47
|
id: `${Text.pascalCaseToDashes(model.tableName!)}-find-one`,
|
|
@@ -23,22 +51,23 @@ export default class BaseModelComponent {
|
|
|
23
51
|
iconProp: IconProp.ArrowCircleDown,
|
|
24
52
|
tableName: model.tableName!,
|
|
25
53
|
componentType: ComponentType.Component,
|
|
54
|
+
documentationLink: documentationLink,
|
|
26
55
|
arguments: [
|
|
27
56
|
{
|
|
28
57
|
type: ComponentInputType.Query,
|
|
29
58
|
name: "Query",
|
|
30
|
-
description:
|
|
59
|
+
description: queryDescription,
|
|
31
60
|
required: true,
|
|
32
61
|
id: "query",
|
|
33
|
-
placeholder:
|
|
62
|
+
placeholder: queryPlaceholder,
|
|
34
63
|
},
|
|
35
64
|
{
|
|
36
65
|
type: ComponentInputType.Select,
|
|
37
66
|
name: "Select Fields",
|
|
38
|
-
description: `
|
|
67
|
+
description: `Fields to read from ${model.singularName}. ${columnHint}`,
|
|
39
68
|
required: true,
|
|
40
69
|
id: "select",
|
|
41
|
-
placeholder:
|
|
70
|
+
placeholder: selectPlaceholder,
|
|
42
71
|
},
|
|
43
72
|
],
|
|
44
73
|
returnValues: [
|
|
@@ -82,22 +111,23 @@ export default class BaseModelComponent {
|
|
|
82
111
|
iconProp: IconProp.ArrowCircleDown,
|
|
83
112
|
tableName: model.tableName!,
|
|
84
113
|
componentType: ComponentType.Component,
|
|
114
|
+
documentationLink: documentationLink,
|
|
85
115
|
arguments: [
|
|
86
116
|
{
|
|
87
117
|
type: ComponentInputType.Query,
|
|
88
118
|
name: "Query",
|
|
89
|
-
description:
|
|
119
|
+
description: queryDescription,
|
|
90
120
|
required: true,
|
|
91
121
|
id: "query",
|
|
92
|
-
placeholder:
|
|
122
|
+
placeholder: queryPlaceholder,
|
|
93
123
|
},
|
|
94
124
|
{
|
|
95
125
|
type: ComponentInputType.Select,
|
|
96
126
|
name: "Select Fields",
|
|
97
|
-
description: `
|
|
127
|
+
description: `Fields to read from ${model.singularName}. ${columnHint}`,
|
|
98
128
|
required: true,
|
|
99
129
|
id: "select",
|
|
100
|
-
placeholder:
|
|
130
|
+
placeholder: selectPlaceholder,
|
|
101
131
|
},
|
|
102
132
|
{
|
|
103
133
|
type: ComponentInputType.Number,
|
|
@@ -196,17 +226,26 @@ export default class BaseModelComponent {
|
|
|
196
226
|
iconProp: IconProp.Trash,
|
|
197
227
|
tableName: model.tableName!,
|
|
198
228
|
componentType: ComponentType.Component,
|
|
229
|
+
documentationLink: documentationLink,
|
|
199
230
|
arguments: [
|
|
200
231
|
{
|
|
201
232
|
type: ComponentInputType.Query,
|
|
202
233
|
name: "Delete by",
|
|
203
|
-
description:
|
|
234
|
+
description: queryDescription,
|
|
204
235
|
required: true,
|
|
205
236
|
id: "query",
|
|
206
|
-
placeholder:
|
|
237
|
+
placeholder: queryPlaceholder,
|
|
238
|
+
},
|
|
239
|
+
],
|
|
240
|
+
returnValues: [
|
|
241
|
+
{
|
|
242
|
+
id: "items-deleted",
|
|
243
|
+
name: "Items Deleted",
|
|
244
|
+
description: `How many ${model.pluralName} the query matched and deleted. Zero is not an error - it means nothing matched.`,
|
|
245
|
+
type: ComponentInputType.Number,
|
|
246
|
+
required: false,
|
|
207
247
|
},
|
|
208
248
|
],
|
|
209
|
-
returnValues: [],
|
|
210
249
|
inPorts: [
|
|
211
250
|
{
|
|
212
251
|
title: "In",
|
|
@@ -239,14 +278,15 @@ export default class BaseModelComponent {
|
|
|
239
278
|
iconProp: IconProp.Trash,
|
|
240
279
|
tableName: model.tableName!,
|
|
241
280
|
componentType: ComponentType.Component,
|
|
281
|
+
documentationLink: documentationLink,
|
|
242
282
|
arguments: [
|
|
243
283
|
{
|
|
244
284
|
type: ComponentInputType.Query,
|
|
245
285
|
name: "Delete by",
|
|
246
|
-
description:
|
|
286
|
+
description: queryDescription,
|
|
247
287
|
required: true,
|
|
248
288
|
id: "query",
|
|
249
|
-
placeholder:
|
|
289
|
+
placeholder: queryPlaceholder,
|
|
250
290
|
},
|
|
251
291
|
{
|
|
252
292
|
type: ComponentInputType.Number,
|
|
@@ -263,7 +303,15 @@ export default class BaseModelComponent {
|
|
|
263
303
|
id: "limit",
|
|
264
304
|
},
|
|
265
305
|
],
|
|
266
|
-
returnValues: [
|
|
306
|
+
returnValues: [
|
|
307
|
+
{
|
|
308
|
+
id: "items-deleted",
|
|
309
|
+
name: "Items Deleted",
|
|
310
|
+
description: `How many ${model.pluralName} the query matched and deleted. Zero is not an error - it means nothing matched.`,
|
|
311
|
+
type: ComponentInputType.Number,
|
|
312
|
+
required: false,
|
|
313
|
+
},
|
|
314
|
+
],
|
|
267
315
|
inPorts: [
|
|
268
316
|
{
|
|
269
317
|
title: "In",
|
|
@@ -312,10 +360,10 @@ export default class BaseModelComponent {
|
|
|
312
360
|
{
|
|
313
361
|
type: ComponentInputType.Select,
|
|
314
362
|
name: "Select Fields",
|
|
315
|
-
description: `
|
|
363
|
+
description: `Fields to read from ${model.singularName}. ${columnHint}`,
|
|
316
364
|
required: true,
|
|
317
365
|
id: "select",
|
|
318
|
-
placeholder:
|
|
366
|
+
placeholder: selectPlaceholder,
|
|
319
367
|
},
|
|
320
368
|
],
|
|
321
369
|
returnValues: [
|
|
@@ -346,12 +394,13 @@ export default class BaseModelComponent {
|
|
|
346
394
|
iconProp: IconProp.Database,
|
|
347
395
|
tableName: model.tableName!,
|
|
348
396
|
componentType: ComponentType.Component,
|
|
397
|
+
documentationLink: documentationLink,
|
|
349
398
|
arguments: [
|
|
350
399
|
{
|
|
351
400
|
id: "json",
|
|
352
401
|
placeholder: 'Example: {"columnName": "value", ...}',
|
|
353
402
|
name: "JSON Object",
|
|
354
|
-
description: `${model.singularName} represented as JSON`,
|
|
403
|
+
description: `${model.singularName} represented as JSON. ${columnHint}`,
|
|
355
404
|
type: ComponentInputType.JSON,
|
|
356
405
|
required: true,
|
|
357
406
|
},
|
|
@@ -397,12 +446,13 @@ export default class BaseModelComponent {
|
|
|
397
446
|
iconProp: IconProp.Database,
|
|
398
447
|
tableName: model.tableName!,
|
|
399
448
|
componentType: ComponentType.Component,
|
|
449
|
+
documentationLink: documentationLink,
|
|
400
450
|
arguments: [
|
|
401
451
|
{
|
|
402
452
|
id: "json-array",
|
|
403
453
|
name: "JSON Array",
|
|
404
454
|
placeholder: 'Example: [{"columnName": "value", ...}, {...}]',
|
|
405
|
-
description:
|
|
455
|
+
description: `List of ${model.pluralName} represented as a JSON array. ${columnHint}`,
|
|
406
456
|
type: ComponentInputType.JSONArray,
|
|
407
457
|
required: true,
|
|
408
458
|
},
|
|
@@ -472,10 +522,10 @@ export default class BaseModelComponent {
|
|
|
472
522
|
{
|
|
473
523
|
type: ComponentInputType.Select,
|
|
474
524
|
name: "Select Fields",
|
|
475
|
-
description: `
|
|
525
|
+
description: `Fields to read from ${model.singularName}. ${columnHint}`,
|
|
476
526
|
required: true,
|
|
477
527
|
id: "select",
|
|
478
|
-
placeholder:
|
|
528
|
+
placeholder: selectPlaceholder,
|
|
479
529
|
},
|
|
480
530
|
],
|
|
481
531
|
returnValues: [
|
|
@@ -505,25 +555,34 @@ export default class BaseModelComponent {
|
|
|
505
555
|
iconProp: IconProp.ArrowCircleUp,
|
|
506
556
|
tableName: model.tableName!,
|
|
507
557
|
componentType: ComponentType.Component,
|
|
558
|
+
documentationLink: documentationLink,
|
|
508
559
|
arguments: [
|
|
509
560
|
{
|
|
510
561
|
type: ComponentInputType.Query,
|
|
511
562
|
name: "Query",
|
|
512
|
-
description:
|
|
563
|
+
description: queryDescription,
|
|
513
564
|
required: true,
|
|
514
565
|
id: "query",
|
|
515
|
-
placeholder:
|
|
566
|
+
placeholder: queryPlaceholder,
|
|
516
567
|
},
|
|
517
568
|
{
|
|
518
569
|
id: "data",
|
|
519
570
|
placeholder: 'Example: {"columnName": "value", ...}',
|
|
520
571
|
name: "Data (JSON Object)",
|
|
521
|
-
description:
|
|
572
|
+
description: dataDescription,
|
|
522
573
|
type: ComponentInputType.JSON,
|
|
523
574
|
required: true,
|
|
524
575
|
},
|
|
525
576
|
],
|
|
526
|
-
returnValues: [
|
|
577
|
+
returnValues: [
|
|
578
|
+
{
|
|
579
|
+
id: "items-updated",
|
|
580
|
+
name: "Items Updated",
|
|
581
|
+
description: `How many ${model.pluralName} the query matched and updated. Zero is not an error - it means nothing matched.`,
|
|
582
|
+
type: ComponentInputType.Number,
|
|
583
|
+
required: false,
|
|
584
|
+
},
|
|
585
|
+
],
|
|
527
586
|
inPorts: [
|
|
528
587
|
{
|
|
529
588
|
title: "In",
|
|
@@ -556,20 +615,21 @@ export default class BaseModelComponent {
|
|
|
556
615
|
iconProp: IconProp.ArrowCircleUp,
|
|
557
616
|
tableName: model.tableName!,
|
|
558
617
|
componentType: ComponentType.Component,
|
|
618
|
+
documentationLink: documentationLink,
|
|
559
619
|
arguments: [
|
|
560
620
|
{
|
|
561
621
|
type: ComponentInputType.Query,
|
|
562
622
|
name: "Query",
|
|
563
|
-
description:
|
|
623
|
+
description: queryDescription,
|
|
564
624
|
required: true,
|
|
565
625
|
id: "query",
|
|
566
|
-
placeholder:
|
|
626
|
+
placeholder: queryPlaceholder,
|
|
567
627
|
},
|
|
568
628
|
{
|
|
569
629
|
id: "data",
|
|
570
630
|
name: "Data (JSON Object)",
|
|
571
631
|
placeholder: 'Example: {"columnName": "value", ...}',
|
|
572
|
-
description:
|
|
632
|
+
description: dataDescription,
|
|
573
633
|
type: ComponentInputType.JSON,
|
|
574
634
|
required: true,
|
|
575
635
|
},
|
|
@@ -588,7 +648,15 @@ export default class BaseModelComponent {
|
|
|
588
648
|
id: "limit",
|
|
589
649
|
},
|
|
590
650
|
],
|
|
591
|
-
returnValues: [
|
|
651
|
+
returnValues: [
|
|
652
|
+
{
|
|
653
|
+
id: "items-updated",
|
|
654
|
+
name: "Items Updated",
|
|
655
|
+
description: `How many ${model.pluralName} the query matched and updated. Zero is not an error - it means nothing matched.`,
|
|
656
|
+
type: ComponentInputType.Number,
|
|
657
|
+
required: false,
|
|
658
|
+
},
|
|
659
|
+
],
|
|
592
660
|
inPorts: [
|
|
593
661
|
{
|
|
594
662
|
title: "In",
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* A structured record of what each step of a workflow run actually did.
|
|
3
|
+
*
|
|
4
|
+
* The runner has always known this — it logs the arguments it resolved, the
|
|
5
|
+
* values a component returned, and which out port it took — but it flattened
|
|
6
|
+
* all of it into one newline-joined string, so the only way to answer "what did
|
|
7
|
+
* step three receive" was to read the whole blob. Keeping the same information
|
|
8
|
+
* as data lets the run be read as a list of steps, and lets a step be matched
|
|
9
|
+
* back to the node it came from on the canvas.
|
|
10
|
+
*
|
|
11
|
+
* The shapes live in Common/Types because the runner writes them, the API
|
|
12
|
+
* returns them, and the dashboard renders them.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import { JSONObject, JSONValue } from "../JSON";
|
|
16
|
+
|
|
17
|
+
export enum WorkflowStepStatus {
|
|
18
|
+
Success = "Success",
|
|
19
|
+
Error = "Error",
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface WorkflowStepTraceEntry {
|
|
23
|
+
/** The step's user-facing id ("api-get-1") — matches a node on the canvas. */
|
|
24
|
+
componentId: string;
|
|
25
|
+
/** Which kind of component this was, e.g. "api-post". */
|
|
26
|
+
metadataId: string;
|
|
27
|
+
/** The component's title, so the trace reads without loading metadata. */
|
|
28
|
+
title: string;
|
|
29
|
+
status: WorkflowStepStatus;
|
|
30
|
+
startedAt: string;
|
|
31
|
+
completedAt: string;
|
|
32
|
+
durationInMs: number;
|
|
33
|
+
/** Resolved arguments, already redacted for sensitive fields. */
|
|
34
|
+
argumentValues: JSONObject;
|
|
35
|
+
/** Returned values, already redacted for sensitive fields. */
|
|
36
|
+
returnValues: JSONObject;
|
|
37
|
+
/** The out port taken, or null when the step ended the run. */
|
|
38
|
+
executedPort: string | null;
|
|
39
|
+
/** Present only on a failed step. */
|
|
40
|
+
errorMessage?: string | undefined;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export interface WorkflowStepTrace {
|
|
44
|
+
steps: Array<WorkflowStepTraceEntry>;
|
|
45
|
+
/**
|
|
46
|
+
* Set when steps were dropped to keep the row bounded. The dashboard says so
|
|
47
|
+
* rather than quietly showing a partial run as if it were complete.
|
|
48
|
+
*/
|
|
49
|
+
truncated?: boolean | undefined;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/*
|
|
53
|
+
* A run is bounded by cycle detection, but a workflow that suspends and resumes
|
|
54
|
+
* accumulates across resumes, and a single value can be an entire HTTP response
|
|
55
|
+
* body. Both are capped: the row is written on every status change, and an
|
|
56
|
+
* unbounded trace would turn each of those writes into a large one.
|
|
57
|
+
*/
|
|
58
|
+
export const MAX_TRACE_STEPS: number = 100;
|
|
59
|
+
export const MAX_TRACE_VALUE_LENGTH: number = 4000;
|
|
60
|
+
|
|
61
|
+
export const TRUNCATED_VALUE_SUFFIX: string = "… (truncated)";
|
|
62
|
+
|
|
63
|
+
export type TruncateTraceValueFunction = (value: JSONValue) => JSONValue;
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Shrink one recorded value to something a row can hold.
|
|
67
|
+
*
|
|
68
|
+
* Strings are cut; anything structured is measured by its JSON length and
|
|
69
|
+
* replaced wholesale when it is too big, because cutting a serialized object in
|
|
70
|
+
* half produces text that looks like data but cannot be parsed.
|
|
71
|
+
*/
|
|
72
|
+
export const truncateTraceValue: TruncateTraceValueFunction = (
|
|
73
|
+
value: JSONValue,
|
|
74
|
+
): JSONValue => {
|
|
75
|
+
if (typeof value === "string") {
|
|
76
|
+
if (value.length <= MAX_TRACE_VALUE_LENGTH) {
|
|
77
|
+
return value;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
return value.slice(0, MAX_TRACE_VALUE_LENGTH) + TRUNCATED_VALUE_SUFFIX;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if (value === null || value === undefined) {
|
|
84
|
+
return value;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
if (typeof value !== "object") {
|
|
88
|
+
return value;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
let serialized: string;
|
|
92
|
+
|
|
93
|
+
try {
|
|
94
|
+
serialized = JSON.stringify(value);
|
|
95
|
+
} catch {
|
|
96
|
+
// Circular or otherwise unserializable: say so rather than throwing.
|
|
97
|
+
return "[value could not be recorded]";
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
if (serialized.length <= MAX_TRACE_VALUE_LENGTH) {
|
|
101
|
+
return value;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return serialized.slice(0, MAX_TRACE_VALUE_LENGTH) + TRUNCATED_VALUE_SUFFIX;
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
export type TruncateTraceValuesFunction = (values: JSONObject) => JSONObject;
|
|
108
|
+
|
|
109
|
+
export const truncateTraceValues: TruncateTraceValuesFunction = (
|
|
110
|
+
values: JSONObject,
|
|
111
|
+
): JSONObject => {
|
|
112
|
+
const truncated: JSONObject = {};
|
|
113
|
+
|
|
114
|
+
for (const key of Object.keys(values || {})) {
|
|
115
|
+
truncated[key] = truncateTraceValue(values[key] as JSONValue);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
return truncated;
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
export type AppendTraceStepFunction = (
|
|
122
|
+
trace: WorkflowStepTrace,
|
|
123
|
+
entry: WorkflowStepTraceEntry,
|
|
124
|
+
) => WorkflowStepTrace;
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Add a step, keeping the trace within its cap.
|
|
128
|
+
*
|
|
129
|
+
* When the cap is reached the OLDEST steps are dropped: a run that failed is
|
|
130
|
+
* read from the end, and the step that broke it is the last one.
|
|
131
|
+
*/
|
|
132
|
+
export const appendTraceStep: AppendTraceStepFunction = (
|
|
133
|
+
trace: WorkflowStepTrace,
|
|
134
|
+
entry: WorkflowStepTraceEntry,
|
|
135
|
+
): WorkflowStepTrace => {
|
|
136
|
+
const steps: Array<WorkflowStepTraceEntry> = [...(trace.steps || []), entry];
|
|
137
|
+
|
|
138
|
+
if (steps.length <= MAX_TRACE_STEPS) {
|
|
139
|
+
return { ...trace, steps: steps };
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
return {
|
|
143
|
+
...trace,
|
|
144
|
+
steps: steps.slice(steps.length - MAX_TRACE_STEPS),
|
|
145
|
+
truncated: true,
|
|
146
|
+
};
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
export type EmptyTraceFunction = () => WorkflowStepTrace;
|
|
150
|
+
|
|
151
|
+
export const emptyTrace: EmptyTraceFunction = (): WorkflowStepTrace => {
|
|
152
|
+
return { steps: [] };
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
export type ParseTraceFunction = (value: JSONValue) => WorkflowStepTrace;
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Read a trace back off a row, tolerating anything that is not one.
|
|
159
|
+
*
|
|
160
|
+
* Old runs predate the column and rows can be written by an older build, so
|
|
161
|
+
* this never throws — a trace it cannot understand reads as an empty one and
|
|
162
|
+
* the viewer falls back to the raw log.
|
|
163
|
+
*/
|
|
164
|
+
export const parseTrace: ParseTraceFunction = (
|
|
165
|
+
value: JSONValue,
|
|
166
|
+
): WorkflowStepTrace => {
|
|
167
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
168
|
+
return emptyTrace();
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
const steps: JSONValue | undefined = (value as JSONObject)["steps"];
|
|
172
|
+
|
|
173
|
+
if (!Array.isArray(steps)) {
|
|
174
|
+
return emptyTrace();
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
return {
|
|
178
|
+
steps: steps as unknown as Array<WorkflowStepTraceEntry>,
|
|
179
|
+
truncated: Boolean((value as JSONObject)["truncated"]),
|
|
180
|
+
};
|
|
181
|
+
};
|