@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
|
@@ -1,16 +1,26 @@
|
|
|
1
1
|
import dns from "dns";
|
|
2
|
+
import http from "http";
|
|
3
|
+
import https from "https";
|
|
2
4
|
import net from "net";
|
|
3
5
|
import BadDataException from "../../../Types/Exception/BadDataException";
|
|
4
|
-
import { IsBillingEnabled } from "../../EnvironmentConfig";
|
|
5
6
|
|
|
6
7
|
/*
|
|
7
|
-
* SSRF egress guard for
|
|
8
|
+
* SSRF egress guard for outbound connections whose target is chosen by a
|
|
9
|
+
* tenant.
|
|
8
10
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* internal
|
|
13
|
-
*
|
|
11
|
+
* It started life guarding external Data Source connections — hence the
|
|
12
|
+
* file's home — but the same policy now covers every sink where a project
|
|
13
|
+
* member picks the host and a self-hosted install may legitimately point at
|
|
14
|
+
* something internal: LLM providers (self-hosted Ollama/vLLM), SMTP OAuth
|
|
15
|
+
* token endpoints, status page / dashboard domain verification, OIDC
|
|
16
|
+
* discovery and Runbook HTTP steps. Sinks that can only ever be third-party
|
|
17
|
+
* SaaS (Slack, Teams, subscriber webhooks) use SSRFProtection instead, which
|
|
18
|
+
* blocks private ranges unconditionally.
|
|
19
|
+
*
|
|
20
|
+
* Without a guard these turn the API server into an authenticated request
|
|
21
|
+
* proxy into whatever network it runs in (cloud metadata endpoints, internal
|
|
22
|
+
* services, sibling tenants' infrastructure). Every caller must validate its
|
|
23
|
+
* target through this guard before opening a socket.
|
|
14
24
|
*
|
|
15
25
|
* Policy:
|
|
16
26
|
* - ALWAYS blocked, in every deployment: loopback, link-local (cloud
|
|
@@ -51,8 +61,38 @@ export interface EgressGuardOptions {
|
|
|
51
61
|
blockPrivateAddresses?: boolean | undefined;
|
|
52
62
|
// Test seam for DNS. Undefined ⇒ dns.promises.lookup with a timeout.
|
|
53
63
|
resolveFunction?: EgressResolveFunction | undefined;
|
|
64
|
+
/*
|
|
65
|
+
* Noun used in error messages so a rejection names the thing the user was
|
|
66
|
+
* actually configuring ("LLM provider host ... is not allowed"). Defaults
|
|
67
|
+
* to "Data source".
|
|
68
|
+
*/
|
|
69
|
+
targetLabel?: string | undefined;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export interface PinnedAgents {
|
|
73
|
+
httpAgent: http.Agent;
|
|
74
|
+
httpsAgent: https.Agent;
|
|
54
75
|
}
|
|
55
76
|
|
|
77
|
+
/*
|
|
78
|
+
* dns.lookup's shape, as http.Agent / net.Socket call it. Declared locally
|
|
79
|
+
* rather than pulled from @types/node because the real declaration is a heavy
|
|
80
|
+
* overload set and every consumer here uses exactly this one shape.
|
|
81
|
+
*/
|
|
82
|
+
export type EgressLookupCallback = (
|
|
83
|
+
error: NodeJS.ErrnoException | null,
|
|
84
|
+
address: string | Array<{ address: string; family: number }>,
|
|
85
|
+
family?: number,
|
|
86
|
+
) => void;
|
|
87
|
+
|
|
88
|
+
export type EgressLookupFunction = (
|
|
89
|
+
hostname: string,
|
|
90
|
+
options: { all?: boolean | undefined; family?: number | undefined },
|
|
91
|
+
callback: EgressLookupCallback,
|
|
92
|
+
) => void;
|
|
93
|
+
|
|
94
|
+
const DEFAULT_TARGET_LABEL: string = "Data source";
|
|
95
|
+
|
|
56
96
|
export interface AddressVerdict {
|
|
57
97
|
blocked: boolean;
|
|
58
98
|
reason?: string | undefined;
|
|
@@ -93,7 +133,15 @@ export default class DataSourceEgressGuard {
|
|
|
93
133
|
if (process.env["DATA_SOURCE_BLOCK_PRIVATE_ADDRESSES"] === "true") {
|
|
94
134
|
return true;
|
|
95
135
|
}
|
|
96
|
-
|
|
136
|
+
/*
|
|
137
|
+
* Read BILLING_ENABLED at call time rather than the boot-time
|
|
138
|
+
* IsBillingEnabled const, so this policy is consistent with the env
|
|
139
|
+
* override checked above and can be exercised deterministically in tests
|
|
140
|
+
* (a self-hosted install with billing off must still be able to reach its
|
|
141
|
+
* own private ranges). In a running deployment the env is fixed at boot,
|
|
142
|
+
* so this is behaviourally identical to the const.
|
|
143
|
+
*/
|
|
144
|
+
return process.env["BILLING_ENABLED"] === "true";
|
|
97
145
|
}
|
|
98
146
|
|
|
99
147
|
private static ipv4ToInt(ip: string): number {
|
|
@@ -352,8 +400,10 @@ export default class DataSourceEgressGuard {
|
|
|
352
400
|
hostname: string,
|
|
353
401
|
options?: EgressGuardOptions,
|
|
354
402
|
): Promise<Array<ResolvedAddress>> {
|
|
403
|
+
const label: string = options?.targetLabel || DEFAULT_TARGET_LABEL;
|
|
404
|
+
|
|
355
405
|
if (!hostname) {
|
|
356
|
-
throw new BadDataException(
|
|
406
|
+
throw new BadDataException(`${label} host is required.`);
|
|
357
407
|
}
|
|
358
408
|
|
|
359
409
|
// Literal [::1] style hosts arrive with brackets from URL parsing.
|
|
@@ -363,7 +413,7 @@ export default class DataSourceEgressGuard {
|
|
|
363
413
|
const verdict: AddressVerdict = this.checkAddress(bareHostname, options);
|
|
364
414
|
if (verdict.blocked) {
|
|
365
415
|
throw new BadDataException(
|
|
366
|
-
|
|
416
|
+
`${label} host ${bareHostname} is not allowed: ${verdict.reason}.`,
|
|
367
417
|
);
|
|
368
418
|
}
|
|
369
419
|
return [{ address: bareHostname, family: net.isIP(bareHostname) }];
|
|
@@ -380,7 +430,7 @@ export default class DataSourceEgressGuard {
|
|
|
380
430
|
addresses = await resolveFunction(bareHostname);
|
|
381
431
|
} catch (error) {
|
|
382
432
|
throw new BadDataException(
|
|
383
|
-
`Could not resolve
|
|
433
|
+
`Could not resolve ${label.toLowerCase()} host ${bareHostname}: ${
|
|
384
434
|
error instanceof Error ? error.message : String(error)
|
|
385
435
|
}`,
|
|
386
436
|
);
|
|
@@ -388,7 +438,7 @@ export default class DataSourceEgressGuard {
|
|
|
388
438
|
|
|
389
439
|
if (addresses.length === 0) {
|
|
390
440
|
throw new BadDataException(
|
|
391
|
-
`Could not resolve
|
|
441
|
+
`Could not resolve ${label.toLowerCase()} host ${bareHostname}.`,
|
|
392
442
|
);
|
|
393
443
|
}
|
|
394
444
|
|
|
@@ -399,7 +449,7 @@ export default class DataSourceEgressGuard {
|
|
|
399
449
|
);
|
|
400
450
|
if (verdict.blocked) {
|
|
401
451
|
throw new BadDataException(
|
|
402
|
-
|
|
452
|
+
`${label} host ${bareHostname} resolves to ${resolved.address}, which is not allowed: ${verdict.reason}.`,
|
|
403
453
|
);
|
|
404
454
|
}
|
|
405
455
|
}
|
|
@@ -416,20 +466,24 @@ export default class DataSourceEgressGuard {
|
|
|
416
466
|
urlString: string,
|
|
417
467
|
options?: EgressGuardOptions,
|
|
418
468
|
): Promise<{ url: URL; addresses: Array<ResolvedAddress> }> {
|
|
469
|
+
const label: string = options?.targetLabel || DEFAULT_TARGET_LABEL;
|
|
470
|
+
|
|
419
471
|
if (!urlString) {
|
|
420
|
-
throw new BadDataException(
|
|
472
|
+
throw new BadDataException(`${label} URL is required.`);
|
|
421
473
|
}
|
|
422
474
|
|
|
423
475
|
let url: URL;
|
|
424
476
|
try {
|
|
425
477
|
url = new URL(urlString);
|
|
426
478
|
} catch {
|
|
427
|
-
throw new BadDataException(
|
|
479
|
+
throw new BadDataException(
|
|
480
|
+
`Invalid ${label.toLowerCase()} URL: ${urlString}`,
|
|
481
|
+
);
|
|
428
482
|
}
|
|
429
483
|
|
|
430
484
|
if (url.protocol !== "http:" && url.protocol !== "https:") {
|
|
431
485
|
throw new BadDataException(
|
|
432
|
-
|
|
486
|
+
`${label} URL must use http or https (got ${url.protocol.replace(
|
|
433
487
|
":",
|
|
434
488
|
"",
|
|
435
489
|
)}).`,
|
|
@@ -443,4 +497,110 @@ export default class DataSourceEgressGuard {
|
|
|
443
497
|
|
|
444
498
|
return { url, addresses };
|
|
445
499
|
}
|
|
500
|
+
|
|
501
|
+
/*
|
|
502
|
+
* A dns.lookup-shaped function that always answers with the already
|
|
503
|
+
* validated addresses. Handing this to an http(s).Agent makes the address
|
|
504
|
+
* that was checked the address that gets dialed, closing the DNS-rebind
|
|
505
|
+
* window between validation and connect. TLS still verifies against the
|
|
506
|
+
* original hostname because SNI is taken from the URL, not from here.
|
|
507
|
+
*/
|
|
508
|
+
public static createPinnedLookup(
|
|
509
|
+
addresses: Array<ResolvedAddress>,
|
|
510
|
+
): EgressLookupFunction {
|
|
511
|
+
return (
|
|
512
|
+
_hostname: string,
|
|
513
|
+
lookupOptions: { all?: boolean | undefined },
|
|
514
|
+
callback: EgressLookupCallback,
|
|
515
|
+
): void => {
|
|
516
|
+
if (lookupOptions && lookupOptions.all) {
|
|
517
|
+
callback(
|
|
518
|
+
null,
|
|
519
|
+
addresses.map((resolved: ResolvedAddress) => {
|
|
520
|
+
return { address: resolved.address, family: resolved.family };
|
|
521
|
+
}),
|
|
522
|
+
);
|
|
523
|
+
return;
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
const first: ResolvedAddress = addresses[0]!;
|
|
527
|
+
callback(null, first.address, first.family);
|
|
528
|
+
};
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
// http/https agent pair that dials only the given validated addresses.
|
|
532
|
+
public static createPinnedAgents(
|
|
533
|
+
addresses: Array<ResolvedAddress>,
|
|
534
|
+
): PinnedAgents {
|
|
535
|
+
const lookup: EgressLookupFunction = this.createPinnedLookup(addresses);
|
|
536
|
+
|
|
537
|
+
return {
|
|
538
|
+
httpAgent: new http.Agent({ lookup: lookup as never }),
|
|
539
|
+
httpsAgent: new https.Agent({ lookup: lookup as never }),
|
|
540
|
+
};
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
/*
|
|
544
|
+
* Validate a URL and return agents pinned to what it resolved to — the
|
|
545
|
+
* one-call form for HTTP callers. Pair with maxRedirects 0 /
|
|
546
|
+
* doNotFollowRedirects: pinning only covers the host that was validated, so
|
|
547
|
+
* a 3xx to an unvalidated host would otherwise walk straight around it.
|
|
548
|
+
*/
|
|
549
|
+
public static async assertUrlAllowedAndPin(
|
|
550
|
+
urlString: string,
|
|
551
|
+
options?: EgressGuardOptions,
|
|
552
|
+
): Promise<{ url: URL; addresses: Array<ResolvedAddress> } & PinnedAgents> {
|
|
553
|
+
const { url, addresses } = await this.assertUrlAllowed(urlString, options);
|
|
554
|
+
|
|
555
|
+
return { url, addresses, ...this.createPinnedAgents(addresses) };
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
/*
|
|
559
|
+
* A dns.lookup-shaped function that validates every hostname it is asked
|
|
560
|
+
* about and then answers with the addresses it just checked.
|
|
561
|
+
*
|
|
562
|
+
* For libraries that build their own request URLs from documents they
|
|
563
|
+
* fetched (openid-client adopts token_endpoint/userinfo_endpoint/jwks_uri
|
|
564
|
+
* from the discovery document), pre-validating the one URL we know about
|
|
565
|
+
* fixes nothing. Installing this as the library's lookup puts the guard on
|
|
566
|
+
* every socket the library opens, whichever URL it decided to call.
|
|
567
|
+
*/
|
|
568
|
+
public static createGuardedLookup(
|
|
569
|
+
options?: EgressGuardOptions,
|
|
570
|
+
): EgressLookupFunction {
|
|
571
|
+
return (
|
|
572
|
+
hostname: string,
|
|
573
|
+
lookupOptions: { all?: boolean | undefined; family?: number | undefined },
|
|
574
|
+
callback: EgressLookupCallback,
|
|
575
|
+
): void => {
|
|
576
|
+
this.assertHostnameAllowed(hostname, options)
|
|
577
|
+
.then((addresses: Array<ResolvedAddress>) => {
|
|
578
|
+
const wantedFamily: number | undefined =
|
|
579
|
+
lookupOptions && lookupOptions.family
|
|
580
|
+
? lookupOptions.family
|
|
581
|
+
: undefined;
|
|
582
|
+
|
|
583
|
+
const usable: Array<ResolvedAddress> =
|
|
584
|
+
wantedFamily === 4 || wantedFamily === 6
|
|
585
|
+
? addresses.filter((resolved: ResolvedAddress) => {
|
|
586
|
+
return resolved.family === wantedFamily;
|
|
587
|
+
})
|
|
588
|
+
: addresses;
|
|
589
|
+
|
|
590
|
+
if (usable.length === 0) {
|
|
591
|
+
const error: NodeJS.ErrnoException = new Error(
|
|
592
|
+
`No IPv${wantedFamily} address for ${hostname}`,
|
|
593
|
+
);
|
|
594
|
+
error.code = "ENOTFOUND";
|
|
595
|
+
callback(error, "");
|
|
596
|
+
return;
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
this.createPinnedLookup(usable)(hostname, lookupOptions, callback);
|
|
600
|
+
})
|
|
601
|
+
.catch((error: Error) => {
|
|
602
|
+
callback(error as NodeJS.ErrnoException, "");
|
|
603
|
+
});
|
|
604
|
+
};
|
|
605
|
+
}
|
|
446
606
|
}
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import http from "http";
|
|
2
|
-
import https from "https";
|
|
3
1
|
import axios, { AxiosRequestConfig, AxiosResponse } from "axios";
|
|
4
2
|
import API from "../../../Utils/API";
|
|
5
3
|
import Dictionary from "../../../Types/Dictionary";
|
|
@@ -8,10 +6,7 @@ import {
|
|
|
8
6
|
DATA_SOURCE_MAX_RESPONSE_SIZE_IN_BYTES,
|
|
9
7
|
DATA_SOURCE_QUERY_TIMEOUT_IN_MS,
|
|
10
8
|
} from "../../../Types/DataSource/DataSourceLimits";
|
|
11
|
-
import DataSourceEgressGuard, {
|
|
12
|
-
EgressGuardOptions,
|
|
13
|
-
ResolvedAddress,
|
|
14
|
-
} from "./EgressGuard";
|
|
9
|
+
import DataSourceEgressGuard, { EgressGuardOptions } from "./EgressGuard";
|
|
15
10
|
import { DataSourceConnectionSettings } from "./Types";
|
|
16
11
|
|
|
17
12
|
/*
|
|
@@ -54,12 +49,6 @@ export interface DataSourceHttpResponse {
|
|
|
54
49
|
bodyJson: unknown;
|
|
55
50
|
}
|
|
56
51
|
|
|
57
|
-
type LookupCallback = (
|
|
58
|
-
error: NodeJS.ErrnoException | null,
|
|
59
|
-
address: string | Array<{ address: string; family: number }>,
|
|
60
|
-
family?: number,
|
|
61
|
-
) => void;
|
|
62
|
-
|
|
63
52
|
export default class DataSourceHttpFetch {
|
|
64
53
|
/*
|
|
65
54
|
* Standard auth headers for a data source: Bearer token wins, else HTTP
|
|
@@ -92,44 +81,16 @@ export default class DataSourceHttpFetch {
|
|
|
92
81
|
public static async fetch(
|
|
93
82
|
request: DataSourceHttpRequest,
|
|
94
83
|
): Promise<DataSourceHttpResponse> {
|
|
95
|
-
const { url, addresses } = await DataSourceEgressGuard.assertUrlAllowed(
|
|
96
|
-
request.url,
|
|
97
|
-
request.egressOptions,
|
|
98
|
-
);
|
|
99
|
-
|
|
100
84
|
/*
|
|
101
85
|
* Pin the validated addresses: whatever getaddrinfo said at validation
|
|
102
86
|
* time is what the socket dials, even if DNS answers differently a
|
|
103
87
|
* millisecond later.
|
|
104
88
|
*/
|
|
105
|
-
const
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
_hostname: string,
|
|
111
|
-
options: { all?: boolean },
|
|
112
|
-
callback: LookupCallback,
|
|
113
|
-
): void => {
|
|
114
|
-
const first: ResolvedAddress = addresses[0]!;
|
|
115
|
-
if (options && options.all) {
|
|
116
|
-
callback(
|
|
117
|
-
null,
|
|
118
|
-
addresses.map((resolved: ResolvedAddress) => {
|
|
119
|
-
return { address: resolved.address, family: resolved.family };
|
|
120
|
-
}),
|
|
121
|
-
);
|
|
122
|
-
return;
|
|
123
|
-
}
|
|
124
|
-
callback(null, first.address, first.family);
|
|
125
|
-
};
|
|
126
|
-
|
|
127
|
-
const httpAgent: http.Agent = new http.Agent({
|
|
128
|
-
lookup: pinnedLookup as never,
|
|
129
|
-
});
|
|
130
|
-
const httpsAgent: https.Agent = new https.Agent({
|
|
131
|
-
lookup: pinnedLookup as never,
|
|
132
|
-
});
|
|
89
|
+
const { url, httpAgent, httpsAgent } =
|
|
90
|
+
await DataSourceEgressGuard.assertUrlAllowedAndPin(
|
|
91
|
+
request.url,
|
|
92
|
+
request.egressOptions,
|
|
93
|
+
);
|
|
133
94
|
|
|
134
95
|
const headers: Dictionary<string> = { ...(request.headers || {}) };
|
|
135
96
|
|
package/Server/Utils/Execute.ts
CHANGED
|
@@ -74,6 +74,13 @@ export default class Execute {
|
|
|
74
74
|
* (e.g. `git log` over a huge full-history repo) can never hang the caller.
|
|
75
75
|
*/
|
|
76
76
|
timeoutInMS?: number | undefined;
|
|
77
|
+
/*
|
|
78
|
+
* Environment for the child. Replaces this process's environment entirely
|
|
79
|
+
* when given, so a caller can hand a secret to ONE child (a git askpass
|
|
80
|
+
* token) without putting it in process.env, where every other child —
|
|
81
|
+
* including an AI agent's shell commands — would inherit it.
|
|
82
|
+
*/
|
|
83
|
+
env?: NodeJS.ProcessEnv | undefined;
|
|
77
84
|
}): Promise<string> {
|
|
78
85
|
return new Promise(
|
|
79
86
|
(
|
|
@@ -89,6 +96,7 @@ export default class Execute {
|
|
|
89
96
|
...(data.timeoutInMS
|
|
90
97
|
? { timeout: data.timeoutInMS, killSignal: "SIGKILL" }
|
|
91
98
|
: {}),
|
|
99
|
+
...(data.env ? { env: data.env } : {}),
|
|
92
100
|
},
|
|
93
101
|
(
|
|
94
102
|
err: ExecFileException | null,
|
|
@@ -81,3 +81,26 @@ export const setIsPublicForMarkdownImages: (
|
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
83
|
};
|
|
84
|
+
|
|
85
|
+
/*
|
|
86
|
+
* Best-effort variant used by the publish paths (public notes,
|
|
87
|
+
* announcements). Failing to flip an inline image must never fail the
|
|
88
|
+
* write the user actually asked for, so errors are logged and swallowed.
|
|
89
|
+
*/
|
|
90
|
+
export const syncIsPublicForMarkdownImages: (
|
|
91
|
+
markdown: string | null | undefined,
|
|
92
|
+
isPublic: boolean,
|
|
93
|
+
context: string,
|
|
94
|
+
) => Promise<void> = async (
|
|
95
|
+
markdown: string | null | undefined,
|
|
96
|
+
isPublic: boolean,
|
|
97
|
+
context: string,
|
|
98
|
+
): Promise<void> => {
|
|
99
|
+
try {
|
|
100
|
+
await setIsPublicForMarkdownImages(markdown, isPublic);
|
|
101
|
+
} catch (err) {
|
|
102
|
+
logger.error(
|
|
103
|
+
`Failed to sync inline image visibility for ${context}: ${String(err)}`,
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
};
|
|
@@ -4,11 +4,12 @@ import Headers from "../../../Types/API/Headers";
|
|
|
4
4
|
import URL from "../../../Types/API/URL";
|
|
5
5
|
import { JSONArray, JSONObject } from "../../../Types/JSON";
|
|
6
6
|
import JSONFunctions from "../../../Types/JSONFunctions";
|
|
7
|
-
import API from "../../../Utils/API";
|
|
7
|
+
import API, { RequestOptions } from "../../../Utils/API";
|
|
8
8
|
import LlmType from "../../../Types/LLM/LlmType";
|
|
9
9
|
import BadDataException from "../../../Types/Exception/BadDataException";
|
|
10
10
|
import logger, { LogAttributes } from "../Logger";
|
|
11
11
|
import CaptureSpan from "../Telemetry/CaptureSpan";
|
|
12
|
+
import DataSourceEgressGuard from "../DataSource/EgressGuard";
|
|
12
13
|
|
|
13
14
|
export interface LLMToolDefinition {
|
|
14
15
|
name: string;
|
|
@@ -653,6 +654,38 @@ export default class LLMService {
|
|
|
653
654
|
* the offending parameter in the 400 — one parameter per response, hence the
|
|
654
655
|
* loop.
|
|
655
656
|
*/
|
|
657
|
+
/*
|
|
658
|
+
* Request options for a call to a tenant-configured LLM endpoint.
|
|
659
|
+
*
|
|
660
|
+
* LlmProvider.baseUrl is writable by any project member while reading the
|
|
661
|
+
* apiKey is Owner/Admin-only, so an unguarded request lets a member repoint
|
|
662
|
+
* a provider at a host they control and collect the decrypted key out of the
|
|
663
|
+
* auth header — and, because provider error bodies are reflected back
|
|
664
|
+
* through the LLM provider API, use the same lever as a blind-free read
|
|
665
|
+
* primitive against the internal network.
|
|
666
|
+
*
|
|
667
|
+
* The address the guard checked is pinned into the socket, and redirects are
|
|
668
|
+
* refused: pinning covers only the validated host, so a 3xx would walk
|
|
669
|
+
* around it. Private ranges stay reachable on self-hosted installs, because
|
|
670
|
+
* a self-hosted Ollama on 10.x is the documented deployment.
|
|
671
|
+
*/
|
|
672
|
+
private static async buildGuardedRequestOptions(
|
|
673
|
+
requestUrl: string,
|
|
674
|
+
options: RequestOptions,
|
|
675
|
+
): Promise<RequestOptions> {
|
|
676
|
+
const { httpAgent, httpsAgent } =
|
|
677
|
+
await DataSourceEgressGuard.assertUrlAllowedAndPin(requestUrl, {
|
|
678
|
+
targetLabel: "LLM provider",
|
|
679
|
+
});
|
|
680
|
+
|
|
681
|
+
return {
|
|
682
|
+
...options,
|
|
683
|
+
doNotFollowRedirects: true,
|
|
684
|
+
httpAgent,
|
|
685
|
+
httpsAgent,
|
|
686
|
+
};
|
|
687
|
+
}
|
|
688
|
+
|
|
656
689
|
private static async postOpenAIChatCompletion(data: {
|
|
657
690
|
requestUrl: string;
|
|
658
691
|
headers: Headers;
|
|
@@ -674,6 +707,18 @@ export default class LLMService {
|
|
|
674
707
|
*/
|
|
675
708
|
const attemptedTokenLimitParams: Set<TokenLimitParam> = new Set();
|
|
676
709
|
|
|
710
|
+
/*
|
|
711
|
+
* Validated once, before the first request: the adaptation loop below
|
|
712
|
+
* re-posts to the same URL, so re-resolving per attempt would only add
|
|
713
|
+
* DNS round trips (and a rebind window between them).
|
|
714
|
+
*/
|
|
715
|
+
const requestOptions: RequestOptions =
|
|
716
|
+
await this.buildGuardedRequestOptions(data.requestUrl, {
|
|
717
|
+
retries: data.request.requestRetries ?? 2,
|
|
718
|
+
exponentialBackoff: true,
|
|
719
|
+
timeout: data.request.requestTimeoutInMs ?? 120000,
|
|
720
|
+
});
|
|
721
|
+
|
|
677
722
|
const post: () => Promise<
|
|
678
723
|
HTTPResponse<JSONObject> | HTTPErrorResponse
|
|
679
724
|
> = (): Promise<HTTPResponse<JSONObject> | HTTPErrorResponse> => {
|
|
@@ -693,11 +738,7 @@ export default class LLMService {
|
|
|
693
738
|
url: URL.fromString(data.requestUrl),
|
|
694
739
|
data: body,
|
|
695
740
|
headers: data.headers,
|
|
696
|
-
options:
|
|
697
|
-
retries: data.request.requestRetries ?? 2,
|
|
698
|
-
exponentialBackoff: true,
|
|
699
|
-
timeout: data.request.requestTimeoutInMs ?? 120000,
|
|
700
|
-
},
|
|
741
|
+
options: requestOptions,
|
|
701
742
|
});
|
|
702
743
|
};
|
|
703
744
|
|
|
@@ -1214,20 +1255,22 @@ export default class LLMService {
|
|
|
1214
1255
|
requestData["tools"] = anthropicTools;
|
|
1215
1256
|
}
|
|
1216
1257
|
|
|
1258
|
+
const anthropicRequestUrl: string = `${baseUrl}/messages`;
|
|
1259
|
+
|
|
1217
1260
|
const response: HTTPErrorResponse | HTTPResponse<JSONObject> =
|
|
1218
1261
|
await API.post<JSONObject>({
|
|
1219
|
-
url: URL.fromString(
|
|
1262
|
+
url: URL.fromString(anthropicRequestUrl),
|
|
1220
1263
|
data: requestData,
|
|
1221
1264
|
headers: {
|
|
1222
1265
|
"x-api-key": config.apiKey,
|
|
1223
1266
|
"anthropic-version": "2023-06-01",
|
|
1224
1267
|
"Content-Type": "application/json",
|
|
1225
1268
|
},
|
|
1226
|
-
options: {
|
|
1269
|
+
options: await this.buildGuardedRequestOptions(anthropicRequestUrl, {
|
|
1227
1270
|
retries: request.requestRetries ?? 2,
|
|
1228
1271
|
exponentialBackoff: true,
|
|
1229
1272
|
timeout: request.requestTimeoutInMs ?? 120000,
|
|
1230
|
-
},
|
|
1273
|
+
}),
|
|
1231
1274
|
});
|
|
1232
1275
|
|
|
1233
1276
|
const anthropicLogAttributes: LogAttributes = {
|
|
@@ -1355,18 +1398,20 @@ export default class LLMService {
|
|
|
1355
1398
|
requestData["tools"] = this.toOpenAITools(request.tools);
|
|
1356
1399
|
}
|
|
1357
1400
|
|
|
1401
|
+
const ollamaRequestUrl: string = `${config.baseUrl}/api/chat`;
|
|
1402
|
+
|
|
1358
1403
|
const response: HTTPErrorResponse | HTTPResponse<JSONObject> =
|
|
1359
1404
|
await API.post<JSONObject>({
|
|
1360
|
-
url: URL.fromString(
|
|
1405
|
+
url: URL.fromString(ollamaRequestUrl),
|
|
1361
1406
|
data: requestData,
|
|
1362
1407
|
headers: {
|
|
1363
1408
|
"Content-Type": "application/json",
|
|
1364
1409
|
},
|
|
1365
|
-
options: {
|
|
1410
|
+
options: await this.buildGuardedRequestOptions(ollamaRequestUrl, {
|
|
1366
1411
|
retries: request.requestRetries ?? 2,
|
|
1367
1412
|
exponentialBackoff: true,
|
|
1368
1413
|
timeout: request.requestTimeoutInMs ?? 300000, // Ollama may be slower
|
|
1369
|
-
},
|
|
1414
|
+
}),
|
|
1370
1415
|
});
|
|
1371
1416
|
|
|
1372
1417
|
const ollamaLogAttributes: LogAttributes = {
|
|
@@ -36,6 +36,9 @@ import MonitorClusterContextUtil, {
|
|
|
36
36
|
MonitorClusterContext,
|
|
37
37
|
} from "./MonitorClusterContext";
|
|
38
38
|
import MonitorTemplateUtil from "./MonitorTemplateUtil";
|
|
39
|
+
import MonitorDependencySuppression, {
|
|
40
|
+
DependencySuppressionResult,
|
|
41
|
+
} from "./MonitorDependencySuppression";
|
|
39
42
|
import { JSONObject } from "../../../Types/JSON";
|
|
40
43
|
import OneUptimeDate from "../../../Types/Date";
|
|
41
44
|
import MonitorEvaluationSummary from "../../../Types/Monitor/MonitorEvaluationSummary";
|
|
@@ -240,6 +243,14 @@ export default class MonitorAlert {
|
|
|
240
243
|
* evaluating. See MonitorMaintenanceSuppression.
|
|
241
244
|
*/
|
|
242
245
|
suppressedSeriesFingerprints?: Set<string> | undefined;
|
|
246
|
+
/**
|
|
247
|
+
* Alert-dependency suppression: when set and isSuppressed, a parent
|
|
248
|
+
* monitor this monitor depends on is currently in a suppressing
|
|
249
|
+
* status, so ALL alert creation for this evaluation is skipped. Only
|
|
250
|
+
* creation — already-open alerts still follow the normal resolve
|
|
251
|
+
* path above. See MonitorDependencySuppression.
|
|
252
|
+
*/
|
|
253
|
+
dependencySuppression?: DependencySuppressionResult | undefined;
|
|
243
254
|
/**
|
|
244
255
|
* Event-driven monitors (incoming-request / webhook fan-out) must not
|
|
245
256
|
* use the metric snapshot model where a series absent from this tick's
|
|
@@ -288,6 +299,35 @@ export default class MonitorAlert {
|
|
|
288
299
|
return;
|
|
289
300
|
}
|
|
290
301
|
|
|
302
|
+
/*
|
|
303
|
+
* Alert-dependency suppression: a parent monitor is in a suppressing
|
|
304
|
+
* status (offline by default), so skip creating any alert for this
|
|
305
|
+
* evaluation. Placed after the open-alert resolve pass above on
|
|
306
|
+
* purpose — an alert raised before the parent went down must still
|
|
307
|
+
* resolve normally; only new creation is silenced.
|
|
308
|
+
*/
|
|
309
|
+
if (input.dependencySuppression?.isSuppressed) {
|
|
310
|
+
const suppressionReason: string =
|
|
311
|
+
MonitorDependencySuppression.buildSuppressionReason(
|
|
312
|
+
input.dependencySuppression.suppressingParents,
|
|
313
|
+
);
|
|
314
|
+
|
|
315
|
+
logger.debug(
|
|
316
|
+
`${input.monitor.id?.toString()} - Skipping alert creation: ${suppressionReason}.`,
|
|
317
|
+
alertLogAttributes,
|
|
318
|
+
);
|
|
319
|
+
|
|
320
|
+
input.evaluationSummary?.events.push({
|
|
321
|
+
type: "alert-skipped",
|
|
322
|
+
title: "Alert suppressed by monitor dependency",
|
|
323
|
+
message: `Skipped creating alerts because ${suppressionReason}. This monitor's status still updates normally; open alerts still auto-resolve.`,
|
|
324
|
+
relatedCriteriaId: input.criteriaInstance.data?.id,
|
|
325
|
+
at: OneUptimeDate.getCurrentDate(),
|
|
326
|
+
});
|
|
327
|
+
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
|
|
291
331
|
/*
|
|
292
332
|
* Proxmox/Ceph monitors: resolve the monitored cluster once per
|
|
293
333
|
* evaluation (lookup-only, from the step config's clusterIdentifier)
|