@oneuptime/common 12.0.6 → 12.0.7
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/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/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/Index.ts +6 -0
- 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/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 +41 -2
- 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/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/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/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/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/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/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/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/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/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/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/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 +1 -1
- package/Tests/UI/Components/MasterPage.test.tsx +1 -1
- package/Tests/UI/Components/ModalPortalDismissal.test.tsx +489 -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 +1 -1
- package/Tests/UI/Components/TextArea.test.tsx +1 -1
- 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/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/Realtime.test.ts +78 -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/Telemetry/TelemetrySavedViewState.ts +9 -1
- package/Types/Workflow/Components/BaseModel.ts +92 -28
- package/Typings/Index.d.ts +12 -0
- package/UI/Components/GanttChart/ChartContainer.tsx +4 -3
- package/UI/Components/Modal/ConfirmModal.tsx +10 -5
- package/UI/Components/Modal/Modal.tsx +27 -47
- package/UI/Components/ModelDelete/ModelDelete.tsx +23 -6
- package/UI/Components/SideOver/SideOver.tsx +195 -68
- 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/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/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/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/Index.js +6 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.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/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 +35 -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/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/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/Workflow/Components/BaseModel.js +83 -28
- package/build/dist/Types/Workflow/Components/BaseModel.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/Modal/ConfirmModal.js +3 -1
- package/build/dist/UI/Components/Modal/ConfirmModal.js.map +1 -1
- package/build/dist/UI/Components/Modal/Modal.js +24 -34
- 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/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/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
package/Server/Types/Domain.ts
CHANGED
|
@@ -4,8 +4,49 @@ import { PromiseRejectErrorFunction } from "../../Types/FunctionTypes";
|
|
|
4
4
|
import dns from "dns";
|
|
5
5
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
6
6
|
import BadDataException from "../../Types/Exception/BadDataException";
|
|
7
|
+
import HTTPErrorResponse from "../../Types/API/HTTPErrorResponse";
|
|
8
|
+
import HTTPResponse from "../../Types/API/HTTPResponse";
|
|
9
|
+
import { JSONObject } from "../../Types/JSON";
|
|
10
|
+
import URL from "../../Types/API/URL";
|
|
11
|
+
import API from "../../Utils/API";
|
|
12
|
+
import DataSourceEgressGuard from "../Utils/DataSource/EgressGuard";
|
|
7
13
|
|
|
8
14
|
export default class Domain extends DomainCommon {
|
|
15
|
+
/*
|
|
16
|
+
* GET a domain-verification URL built from a tenant-supplied domain.
|
|
17
|
+
*
|
|
18
|
+
* Both the status page and the dashboard build these URLs by interpolating
|
|
19
|
+
* a customer domain into a string, and the certificate cron re-fetches them
|
|
20
|
+
* unattended every 15 minutes — so the target has to be validated on every
|
|
21
|
+
* call, not just when the row was written. The address that was validated
|
|
22
|
+
* is pinned into the socket, and redirects are refused so a 3xx cannot
|
|
23
|
+
* bounce the request to a host that was never checked. (The callers try
|
|
24
|
+
* http first and https second, so the ordinary http→https redirect a
|
|
25
|
+
* customer proxy emits is still covered by the https attempt.)
|
|
26
|
+
*
|
|
27
|
+
* Private ranges stay reachable on self-hosted installs, where a status page
|
|
28
|
+
* domain legitimately resolves inside the corporate network.
|
|
29
|
+
*/
|
|
30
|
+
@CaptureSpan()
|
|
31
|
+
public static async getForDomainVerification(data: {
|
|
32
|
+
url: string;
|
|
33
|
+
targetLabel: string;
|
|
34
|
+
}): Promise<HTTPErrorResponse | HTTPResponse<JSONObject>> {
|
|
35
|
+
const { httpAgent, httpsAgent } =
|
|
36
|
+
await DataSourceEgressGuard.assertUrlAllowedAndPin(data.url, {
|
|
37
|
+
targetLabel: data.targetLabel,
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
return API.get<JSONObject>({
|
|
41
|
+
url: URL.fromString(data.url),
|
|
42
|
+
options: {
|
|
43
|
+
doNotFollowRedirects: true,
|
|
44
|
+
httpAgent,
|
|
45
|
+
httpsAgent,
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
|
|
9
50
|
@CaptureSpan()
|
|
10
51
|
public static getCnameRecords(data: { domain: string }): Promise<string[]> {
|
|
11
52
|
return new Promise(
|
|
@@ -37,7 +37,7 @@ export default class ApiDelete extends ComponentCode {
|
|
|
37
37
|
options: RunOptions,
|
|
38
38
|
): Promise<RunReturnType> {
|
|
39
39
|
const result: { args: JSONObject; successPort: Port; errorPort: Port } =
|
|
40
|
-
ApiComponentUtils.sanitizeArgs(this.getMetadata(), args, options);
|
|
40
|
+
await ApiComponentUtils.sanitizeArgs(this.getMetadata(), args, options);
|
|
41
41
|
|
|
42
42
|
let apiResult: HTTPResponse<JSONObject> | HTTPErrorResponse | null = null;
|
|
43
43
|
|
|
@@ -46,6 +46,7 @@ export default class ApiDelete extends ComponentCode {
|
|
|
46
46
|
url: args["url"] as URL,
|
|
47
47
|
data: args["request-body"] as JSONObject,
|
|
48
48
|
headers: args["request-headers"] as Dictionary<string>,
|
|
49
|
+
options: ApiComponentUtils.requestOptions,
|
|
49
50
|
});
|
|
50
51
|
|
|
51
52
|
/*
|
|
@@ -37,7 +37,7 @@ export default class ApiGet extends ComponentCode {
|
|
|
37
37
|
options: RunOptions,
|
|
38
38
|
): Promise<RunReturnType> {
|
|
39
39
|
const result: { args: JSONObject; successPort: Port; errorPort: Port } =
|
|
40
|
-
ApiComponentUtils.sanitizeArgs(this.getMetadata(), args, options);
|
|
40
|
+
await ApiComponentUtils.sanitizeArgs(this.getMetadata(), args, options);
|
|
41
41
|
|
|
42
42
|
let apiResult: HTTPResponse<JSONObject> | HTTPErrorResponse | null = null;
|
|
43
43
|
|
|
@@ -46,6 +46,7 @@ export default class ApiGet extends ComponentCode {
|
|
|
46
46
|
url: args["url"] as URL,
|
|
47
47
|
data: args["request-body"] as JSONObject,
|
|
48
48
|
headers: args["request-headers"] as Dictionary<string>,
|
|
49
|
+
options: ApiComponentUtils.requestOptions,
|
|
49
50
|
});
|
|
50
51
|
|
|
51
52
|
/*
|
|
@@ -37,7 +37,7 @@ export default class ApiPut extends ComponentCode {
|
|
|
37
37
|
options: RunOptions,
|
|
38
38
|
): Promise<RunReturnType> {
|
|
39
39
|
const result: { args: JSONObject; successPort: Port; errorPort: Port } =
|
|
40
|
-
ApiComponentUtils.sanitizeArgs(this.getMetadata(), args, options);
|
|
40
|
+
await ApiComponentUtils.sanitizeArgs(this.getMetadata(), args, options);
|
|
41
41
|
|
|
42
42
|
let apiResult: HTTPResponse<JSONObject> | HTTPErrorResponse | null = null;
|
|
43
43
|
|
|
@@ -46,6 +46,7 @@ export default class ApiPut extends ComponentCode {
|
|
|
46
46
|
url: args["url"] as URL,
|
|
47
47
|
data: args["request-body"] as JSONObject,
|
|
48
48
|
headers: args["request-headers"] as Dictionary<string>,
|
|
49
|
+
options: ApiComponentUtils.requestOptions,
|
|
49
50
|
});
|
|
50
51
|
|
|
51
52
|
/*
|
|
@@ -38,7 +38,7 @@ export default class ApiPost extends ComponentCode {
|
|
|
38
38
|
options: RunOptions,
|
|
39
39
|
): Promise<RunReturnType> {
|
|
40
40
|
const result: { args: JSONObject; successPort: Port; errorPort: Port } =
|
|
41
|
-
ApiComponentUtils.sanitizeArgs(this.getMetadata(), args, options);
|
|
41
|
+
await ApiComponentUtils.sanitizeArgs(this.getMetadata(), args, options);
|
|
42
42
|
|
|
43
43
|
let apiResult: HTTPResponse<JSONObject> | HTTPErrorResponse | null = null;
|
|
44
44
|
|
|
@@ -77,6 +77,7 @@ export default class ApiPost extends ComponentCode {
|
|
|
77
77
|
url: args["url"] as URL,
|
|
78
78
|
data: args["request-body"] as JSONObject,
|
|
79
79
|
headers: args["request-headers"] as Dictionary<string>,
|
|
80
|
+
options: ApiComponentUtils.requestOptions,
|
|
80
81
|
});
|
|
81
82
|
|
|
82
83
|
logger.debug("API Post Component is done.", workflowLogAttributes);
|
|
@@ -37,7 +37,7 @@ export default class ApiPut extends ComponentCode {
|
|
|
37
37
|
options: RunOptions,
|
|
38
38
|
): Promise<RunReturnType> {
|
|
39
39
|
const result: { args: JSONObject; successPort: Port; errorPort: Port } =
|
|
40
|
-
ApiComponentUtils.sanitizeArgs(this.getMetadata(), args, options);
|
|
40
|
+
await ApiComponentUtils.sanitizeArgs(this.getMetadata(), args, options);
|
|
41
41
|
|
|
42
42
|
let apiResult: HTTPResponse<JSONObject> | HTTPErrorResponse | null = null;
|
|
43
43
|
|
|
@@ -46,6 +46,7 @@ export default class ApiPut extends ComponentCode {
|
|
|
46
46
|
url: args["url"] as URL,
|
|
47
47
|
data: args["request-body"] as JSONObject,
|
|
48
48
|
headers: args["request-headers"] as Dictionary<string>,
|
|
49
|
+
options: ApiComponentUtils.requestOptions,
|
|
49
50
|
});
|
|
50
51
|
|
|
51
52
|
/*
|
|
@@ -3,14 +3,27 @@ import HTTPErrorResponse from "../../../../../Types/API/HTTPErrorResponse";
|
|
|
3
3
|
import HTTPResponse from "../../../../../Types/API/HTTPResponse";
|
|
4
4
|
import URL from "../../../../../Types/API/URL";
|
|
5
5
|
import BadDataException from "../../../../../Types/Exception/BadDataException";
|
|
6
|
+
import Exception from "../../../../../Types/Exception/Exception";
|
|
6
7
|
import { JSONObject } from "../../../../../Types/JSON";
|
|
7
8
|
import JSONFunctions from "../../../../../Types/JSONFunctions";
|
|
8
9
|
import ComponentMetadata, {
|
|
9
10
|
Port,
|
|
10
11
|
} from "../../../../../Types/Workflow/Component";
|
|
12
|
+
import { RequestOptions } from "../../../../../Utils/API";
|
|
13
|
+
import SSRFProtection from "../../../../Utils/SSRFProtection";
|
|
11
14
|
import CaptureSpan from "../../../../Utils/Telemetry/CaptureSpan";
|
|
12
15
|
|
|
13
16
|
export class ApiComponentUtils {
|
|
17
|
+
/*
|
|
18
|
+
* Every API component sends its request with these. Redirects MUST stay off:
|
|
19
|
+
* sanitizeArgs validates the URL before the request is dispatched, and a
|
|
20
|
+
* validated public host that answers 302 -> http://169.254.169.254/ would
|
|
21
|
+
* otherwise walk the server straight past that check.
|
|
22
|
+
*/
|
|
23
|
+
public static readonly requestOptions: RequestOptions = {
|
|
24
|
+
doNotFollowRedirects: true,
|
|
25
|
+
};
|
|
26
|
+
|
|
14
27
|
@CaptureSpan()
|
|
15
28
|
public static getReturnValues(
|
|
16
29
|
response: HTTPResponse<JSONObject> | HTTPErrorResponse,
|
|
@@ -33,11 +46,11 @@ export class ApiComponentUtils {
|
|
|
33
46
|
}
|
|
34
47
|
|
|
35
48
|
@CaptureSpan()
|
|
36
|
-
public static sanitizeArgs(
|
|
49
|
+
public static async sanitizeArgs(
|
|
37
50
|
metadata: ComponentMetadata,
|
|
38
51
|
args: JSONObject,
|
|
39
52
|
options: RunOptions,
|
|
40
|
-
): { args: JSONObject; successPort: Port; errorPort: Port } {
|
|
53
|
+
): Promise<{ args: JSONObject; successPort: Port; errorPort: Port }> {
|
|
41
54
|
const successPort: Port | undefined = metadata.outPorts.find((p: Port) => {
|
|
42
55
|
return p.id === "success";
|
|
43
56
|
});
|
|
@@ -77,6 +90,32 @@ export class ApiComponentUtils {
|
|
|
77
90
|
throw options.onError(new BadDataException("URL is not type of string"));
|
|
78
91
|
}
|
|
79
92
|
|
|
93
|
+
/*
|
|
94
|
+
* The URL is authored by whoever built the workflow - i.e. any member of
|
|
95
|
+
* any project - and the request goes out from the server, which sits
|
|
96
|
+
* inside the cluster and next to the cloud metadata endpoint. Without this
|
|
97
|
+
* check the API components are an authenticated request proxy into the
|
|
98
|
+
* private network: GET http://169.254.169.254/latest/meta-data/iam/... and
|
|
99
|
+
* the credentials come back in the component's "response-body" return
|
|
100
|
+
* value, in plain sight in the workflow log. Resolve and blocklist the
|
|
101
|
+
* target the same way outbound webhooks already do.
|
|
102
|
+
*
|
|
103
|
+
* Validate the RAW string, before URL.fromString - that parser defaults an
|
|
104
|
+
* unrecognized scheme to https, so "file:///etc/passwd" would reach the
|
|
105
|
+
* check already rewritten as host "file".
|
|
106
|
+
*/
|
|
107
|
+
try {
|
|
108
|
+
await SSRFProtection.validateWebhookTargetIsSafe(args["url"] as string);
|
|
109
|
+
} catch (err) {
|
|
110
|
+
throw options.onError(
|
|
111
|
+
new BadDataException(
|
|
112
|
+
err instanceof Exception
|
|
113
|
+
? err.message
|
|
114
|
+
: "URL points to an address that is not allowed.",
|
|
115
|
+
),
|
|
116
|
+
);
|
|
117
|
+
}
|
|
118
|
+
|
|
80
119
|
args["url"] = URL.fromString(args["url"] as string);
|
|
81
120
|
|
|
82
121
|
return { args, successPort, errorPort };
|
|
@@ -10,6 +10,7 @@ import ComponentMetadata, {
|
|
|
10
10
|
} from "../../../../../Types/Workflow/Component";
|
|
11
11
|
import BaseModelComponents from "../../../../../Types/Workflow/Components/BaseModel";
|
|
12
12
|
import CaptureSpan from "../../../../Utils/Telemetry/CaptureSpan";
|
|
13
|
+
import { applyTenantColumn } from "./ModelArguments";
|
|
13
14
|
|
|
14
15
|
export default class CreateManyBaseModel<
|
|
15
16
|
TBaseModel extends BaseModel,
|
|
@@ -91,25 +92,30 @@ export default class CreateManyBaseModel<
|
|
|
91
92
|
|
|
92
93
|
const array: Array<TBaseModel> = [];
|
|
93
94
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
95
|
+
/*
|
|
96
|
+
* This loop used to sit inside an `if (getTenantColumn())` check that
|
|
97
|
+
* was only meant to guard the projectId stamping, so a model without a
|
|
98
|
+
* tenant column created nothing at all and still reported success.
|
|
99
|
+
*/
|
|
100
|
+
for (const item of args["json-array"]) {
|
|
101
|
+
const json: JSONObject = applyTenantColumn(
|
|
102
|
+
(item as JSONObject) || {},
|
|
103
|
+
this.modelService.getModel(),
|
|
104
|
+
options.projectId,
|
|
105
|
+
);
|
|
106
|
+
|
|
107
|
+
array.push(
|
|
108
|
+
(await this.modelService.create({
|
|
109
|
+
data: BaseModel.fromJSON<TBaseModel>(
|
|
110
|
+
json,
|
|
111
|
+
this.modelService.modelType,
|
|
112
|
+
) as TBaseModel,
|
|
113
|
+
props: {
|
|
114
|
+
isRoot: true,
|
|
115
|
+
tenantId: options.projectId,
|
|
116
|
+
},
|
|
117
|
+
})) as TBaseModel,
|
|
118
|
+
);
|
|
113
119
|
}
|
|
114
120
|
|
|
115
121
|
return {
|
|
@@ -12,6 +12,7 @@ import ComponentMetadata, {
|
|
|
12
12
|
} from "../../../../../Types/Workflow/Component";
|
|
13
13
|
import BaseModelComponents from "../../../../../Types/Workflow/Components/BaseModel";
|
|
14
14
|
import CaptureSpan from "../../../../Utils/Telemetry/CaptureSpan";
|
|
15
|
+
import { applyTenantColumn } from "./ModelArguments";
|
|
15
16
|
|
|
16
17
|
export default class CreateOneBaseModel<
|
|
17
18
|
TBaseModel extends BaseModel,
|
|
@@ -90,11 +91,11 @@ export default class CreateOneBaseModel<
|
|
|
90
91
|
);
|
|
91
92
|
}
|
|
92
93
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
94
|
+
args["json"] = applyTenantColumn(
|
|
95
|
+
args["json"] as JSONObject,
|
|
96
|
+
this.modelService.getModel(),
|
|
97
|
+
options.projectId,
|
|
98
|
+
);
|
|
98
99
|
|
|
99
100
|
const model: TBaseModel = (await this.modelService.create({
|
|
100
101
|
data: BaseModel.fromJSON<TBaseModel>(
|
|
@@ -12,6 +12,8 @@ import ComponentMetadata, {
|
|
|
12
12
|
Port,
|
|
13
13
|
} from "../../../../../Types/Workflow/Component";
|
|
14
14
|
import BaseModelComponents from "../../../../../Types/Workflow/Components/BaseModel";
|
|
15
|
+
import { normalizeModelKeys } from "./ModelArguments";
|
|
16
|
+
import logComponentError from "./LogComponentError";
|
|
15
17
|
|
|
16
18
|
export default class DeleteManyBaseModel<
|
|
17
19
|
TBaseModel extends BaseModel,
|
|
@@ -114,22 +116,26 @@ export default class DeleteManyBaseModel<
|
|
|
114
116
|
args["limit"] = LIMIT_PER_PROJECT;
|
|
115
117
|
}
|
|
116
118
|
|
|
119
|
+
const query: Query<TBaseModel> = JSONFunctions.deserialize(
|
|
120
|
+
normalizeModelKeys(
|
|
121
|
+
args["query"] as JSONObject,
|
|
122
|
+
this.modelService.getModel(),
|
|
123
|
+
),
|
|
124
|
+
) as Query<TBaseModel>;
|
|
125
|
+
|
|
126
|
+
/*
|
|
127
|
+
* The tenant column goes on the deserialized query, not on args["query"]
|
|
128
|
+
* - JSONFunctions.deserialize returns a new object, so anything written
|
|
129
|
+
* to args after it runs never reaches the database.
|
|
130
|
+
*/
|
|
117
131
|
if (this.modelService.getModel().getTenantColumn()) {
|
|
118
|
-
(
|
|
132
|
+
(query as JSONObject)[
|
|
119
133
|
this.modelService.getModel().getTenantColumn() as string
|
|
120
134
|
] = options.projectId;
|
|
121
135
|
}
|
|
122
136
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
if (query) {
|
|
126
|
-
query = JSONFunctions.deserialize(
|
|
127
|
-
args["query"] as JSONObject,
|
|
128
|
-
) as Query<TBaseModel>;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
await this.modelService.deleteBy({
|
|
132
|
-
query: query || {},
|
|
137
|
+
const itemsDeleted: number = await this.modelService.deleteBy({
|
|
138
|
+
query: query,
|
|
133
139
|
limit: new PositiveNumber(args["limit"] as number),
|
|
134
140
|
skip: new PositiveNumber(args["skip"] as number),
|
|
135
141
|
props: {
|
|
@@ -138,13 +144,25 @@ export default class DeleteManyBaseModel<
|
|
|
138
144
|
},
|
|
139
145
|
});
|
|
140
146
|
|
|
147
|
+
options.log(
|
|
148
|
+
`Deleted ${itemsDeleted} ${
|
|
149
|
+
this.modelService.getModel().singularName || "record"
|
|
150
|
+
}(s).`,
|
|
151
|
+
);
|
|
152
|
+
|
|
141
153
|
return {
|
|
142
|
-
returnValues: {
|
|
154
|
+
returnValues: {
|
|
155
|
+
"items-deleted": itemsDeleted,
|
|
156
|
+
},
|
|
143
157
|
executePort: successPort,
|
|
144
158
|
};
|
|
145
159
|
} catch (err: any) {
|
|
146
|
-
|
|
147
|
-
|
|
160
|
+
logComponentError({
|
|
161
|
+
error: err,
|
|
162
|
+
model: this.modelService?.getModel() || null,
|
|
163
|
+
log: options.log,
|
|
164
|
+
});
|
|
165
|
+
|
|
148
166
|
return {
|
|
149
167
|
returnValues: {},
|
|
150
168
|
executePort: errorPort,
|
|
@@ -11,6 +11,8 @@ import ComponentMetadata, {
|
|
|
11
11
|
} from "../../../../../Types/Workflow/Component";
|
|
12
12
|
import BaseModelComponents from "../../../../../Types/Workflow/Components/BaseModel";
|
|
13
13
|
import CaptureSpan from "../../../../Utils/Telemetry/CaptureSpan";
|
|
14
|
+
import { normalizeModelKeys } from "./ModelArguments";
|
|
15
|
+
import logComponentError from "./LogComponentError";
|
|
14
16
|
|
|
15
17
|
export default class DeleteOneBaseModel<
|
|
16
18
|
TBaseModel extends BaseModel,
|
|
@@ -89,35 +91,51 @@ export default class DeleteOneBaseModel<
|
|
|
89
91
|
);
|
|
90
92
|
}
|
|
91
93
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
if (query) {
|
|
95
|
-
query = JSONFunctions.deserialize(
|
|
94
|
+
const query: Query<TBaseModel> = JSONFunctions.deserialize(
|
|
95
|
+
normalizeModelKeys(
|
|
96
96
|
args["query"] as JSONObject,
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
97
|
+
this.modelService.getModel(),
|
|
98
|
+
),
|
|
99
|
+
) as Query<TBaseModel>;
|
|
100
|
+
|
|
101
|
+
/*
|
|
102
|
+
* The tenant column goes on the deserialized query, not on args["query"]
|
|
103
|
+
* - JSONFunctions.deserialize returns a new object, so anything written
|
|
104
|
+
* to args after it runs never reaches the database.
|
|
105
|
+
*/
|
|
100
106
|
if (this.modelService.getModel().getTenantColumn()) {
|
|
101
|
-
(
|
|
107
|
+
(query as JSONObject)[
|
|
102
108
|
this.modelService.getModel().getTenantColumn() as string
|
|
103
109
|
] = options.projectId;
|
|
104
110
|
}
|
|
105
111
|
|
|
106
|
-
await this.modelService.deleteOneBy({
|
|
107
|
-
query:
|
|
112
|
+
const itemsDeleted: number = await this.modelService.deleteOneBy({
|
|
113
|
+
query: query,
|
|
108
114
|
props: {
|
|
109
115
|
isRoot: true,
|
|
110
116
|
tenantId: options.projectId,
|
|
111
117
|
},
|
|
112
118
|
});
|
|
113
119
|
|
|
120
|
+
options.log(
|
|
121
|
+
`Deleted ${itemsDeleted} ${
|
|
122
|
+
this.modelService.getModel().singularName || "record"
|
|
123
|
+
}(s).`,
|
|
124
|
+
);
|
|
125
|
+
|
|
114
126
|
return {
|
|
115
|
-
returnValues: {
|
|
127
|
+
returnValues: {
|
|
128
|
+
"items-deleted": itemsDeleted,
|
|
129
|
+
},
|
|
116
130
|
executePort: successPort,
|
|
117
131
|
};
|
|
118
132
|
} catch (err: any) {
|
|
119
|
-
|
|
120
|
-
|
|
133
|
+
logComponentError({
|
|
134
|
+
error: err,
|
|
135
|
+
model: this.modelService?.getModel() || null,
|
|
136
|
+
log: options.log,
|
|
137
|
+
});
|
|
138
|
+
|
|
121
139
|
return {
|
|
122
140
|
returnValues: {},
|
|
123
141
|
executePort: errorPort,
|
|
@@ -14,6 +14,8 @@ import ComponentMetadata, {
|
|
|
14
14
|
} from "../../../../../Types/Workflow/Component";
|
|
15
15
|
import BaseModelComponents from "../../../../../Types/Workflow/Components/BaseModel";
|
|
16
16
|
import CaptureSpan from "../../../../Utils/Telemetry/CaptureSpan";
|
|
17
|
+
import { normalizeModelKeys } from "./ModelArguments";
|
|
18
|
+
import logComponentError from "./LogComponentError";
|
|
17
19
|
|
|
18
20
|
export default class FindManyBaseModel<
|
|
19
21
|
TBaseModel extends BaseModel,
|
|
@@ -92,12 +94,6 @@ export default class FindManyBaseModel<
|
|
|
92
94
|
);
|
|
93
95
|
}
|
|
94
96
|
|
|
95
|
-
if (this.modelService.getModel().getTenantColumn()) {
|
|
96
|
-
(args["query"] as JSONObject)[
|
|
97
|
-
this.modelService.getModel().getTenantColumn() as string
|
|
98
|
-
] = options.projectId;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
97
|
if (!args["select"]) {
|
|
102
98
|
throw options.onError(
|
|
103
99
|
new BadDataException("Select Fields is undefined."),
|
|
@@ -139,24 +135,33 @@ export default class FindManyBaseModel<
|
|
|
139
135
|
args["limit"] = LIMIT_PER_PROJECT;
|
|
140
136
|
}
|
|
141
137
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
if (query) {
|
|
145
|
-
query = JSONFunctions.deserialize(
|
|
138
|
+
const query: Query<TBaseModel> = JSONFunctions.deserialize(
|
|
139
|
+
normalizeModelKeys(
|
|
146
140
|
args["query"] as JSONObject,
|
|
147
|
-
|
|
141
|
+
this.modelService.getModel(),
|
|
142
|
+
),
|
|
143
|
+
) as Query<TBaseModel>;
|
|
144
|
+
|
|
145
|
+
/*
|
|
146
|
+
* The tenant column goes on the deserialized query, not on args["query"]
|
|
147
|
+
* - JSONFunctions.deserialize returns a new object, so anything written
|
|
148
|
+
* to args after it runs never reaches the database.
|
|
149
|
+
*/
|
|
150
|
+
if (this.modelService.getModel().getTenantColumn()) {
|
|
151
|
+
(query as JSONObject)[
|
|
152
|
+
this.modelService.getModel().getTenantColumn() as string
|
|
153
|
+
] = options.projectId;
|
|
148
154
|
}
|
|
149
155
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
if (select) {
|
|
153
|
-
select = JSONFunctions.deserialize(
|
|
156
|
+
const select: Select<TBaseModel> = JSONFunctions.deserialize(
|
|
157
|
+
normalizeModelKeys(
|
|
154
158
|
args["select"] as JSONObject,
|
|
155
|
-
|
|
156
|
-
|
|
159
|
+
this.modelService.getModel(),
|
|
160
|
+
),
|
|
161
|
+
) as Select<TBaseModel>;
|
|
157
162
|
|
|
158
163
|
const models: Array<TBaseModel> = await this.modelService.findBy({
|
|
159
|
-
query: query
|
|
164
|
+
query: query,
|
|
160
165
|
select: select,
|
|
161
166
|
limit: new PositiveNumber(args["limit"] as number),
|
|
162
167
|
skip: new PositiveNumber(args["skip"] as number),
|
|
@@ -173,8 +178,12 @@ export default class FindManyBaseModel<
|
|
|
173
178
|
executePort: successPort,
|
|
174
179
|
};
|
|
175
180
|
} catch (err: any) {
|
|
176
|
-
|
|
177
|
-
|
|
181
|
+
logComponentError({
|
|
182
|
+
error: err,
|
|
183
|
+
model: this.modelService?.getModel() || null,
|
|
184
|
+
log: options.log,
|
|
185
|
+
});
|
|
186
|
+
|
|
178
187
|
return {
|
|
179
188
|
returnValues: {},
|
|
180
189
|
executePort: errorPort,
|
|
@@ -12,6 +12,8 @@ import ComponentMetadata, {
|
|
|
12
12
|
} from "../../../../../Types/Workflow/Component";
|
|
13
13
|
import BaseModelComponents from "../../../../../Types/Workflow/Components/BaseModel";
|
|
14
14
|
import CaptureSpan from "../../../../Utils/Telemetry/CaptureSpan";
|
|
15
|
+
import { normalizeModelKeys } from "./ModelArguments";
|
|
16
|
+
import logComponentError from "./LogComponentError";
|
|
15
17
|
|
|
16
18
|
export default class FindOneBaseModel<
|
|
17
19
|
TBaseModel extends BaseModel,
|
|
@@ -90,12 +92,6 @@ export default class FindOneBaseModel<
|
|
|
90
92
|
);
|
|
91
93
|
}
|
|
92
94
|
|
|
93
|
-
if (this.modelService.getModel().getTenantColumn()) {
|
|
94
|
-
(args["query"] as JSONObject)[
|
|
95
|
-
this.modelService.getModel().getTenantColumn() as string
|
|
96
|
-
] = options.projectId;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
95
|
if (!args["select"]) {
|
|
100
96
|
throw options.onError(
|
|
101
97
|
new BadDataException("Select Fields is undefined."),
|
|
@@ -112,24 +108,33 @@ export default class FindOneBaseModel<
|
|
|
112
108
|
);
|
|
113
109
|
}
|
|
114
110
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
if (query) {
|
|
118
|
-
query = JSONFunctions.deserialize(
|
|
111
|
+
const query: Query<TBaseModel> = JSONFunctions.deserialize(
|
|
112
|
+
normalizeModelKeys(
|
|
119
113
|
args["query"] as JSONObject,
|
|
120
|
-
|
|
114
|
+
this.modelService.getModel(),
|
|
115
|
+
),
|
|
116
|
+
) as Query<TBaseModel>;
|
|
117
|
+
|
|
118
|
+
/*
|
|
119
|
+
* The tenant column goes on the deserialized query, not on args["query"]
|
|
120
|
+
* - JSONFunctions.deserialize returns a new object, so anything written
|
|
121
|
+
* to args after it runs never reaches the database.
|
|
122
|
+
*/
|
|
123
|
+
if (this.modelService.getModel().getTenantColumn()) {
|
|
124
|
+
(query as JSONObject)[
|
|
125
|
+
this.modelService.getModel().getTenantColumn() as string
|
|
126
|
+
] = options.projectId;
|
|
121
127
|
}
|
|
122
128
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
if (select) {
|
|
126
|
-
select = JSONFunctions.deserialize(
|
|
129
|
+
const select: Select<TBaseModel> = JSONFunctions.deserialize(
|
|
130
|
+
normalizeModelKeys(
|
|
127
131
|
args["select"] as JSONObject,
|
|
128
|
-
|
|
129
|
-
|
|
132
|
+
this.modelService.getModel(),
|
|
133
|
+
),
|
|
134
|
+
) as Select<TBaseModel>;
|
|
130
135
|
|
|
131
136
|
const model: TBaseModel | null = await this.modelService.findOneBy({
|
|
132
|
-
query: query
|
|
137
|
+
query: query,
|
|
133
138
|
select: select,
|
|
134
139
|
props: {
|
|
135
140
|
isRoot: true,
|
|
@@ -146,9 +151,11 @@ export default class FindOneBaseModel<
|
|
|
146
151
|
executePort: successPort,
|
|
147
152
|
};
|
|
148
153
|
} catch (err: any) {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
154
|
+
logComponentError({
|
|
155
|
+
error: err,
|
|
156
|
+
model: this.modelService?.getModel() || null,
|
|
157
|
+
log: options.log,
|
|
158
|
+
});
|
|
152
159
|
|
|
153
160
|
return {
|
|
154
161
|
returnValues: {},
|