diff --git a/packages/cli/src/credentials/executing-user-identifier-proxy.ts b/packages/@n8n/backend-services/src/credentials/executing-user-identifier-proxy.ts similarity index 100% rename from packages/cli/src/credentials/executing-user-identifier-proxy.ts rename to packages/@n8n/backend-services/src/credentials/executing-user-identifier-proxy.ts diff --git a/packages/cli/src/credentials/executing-user-identifier.interface.ts b/packages/@n8n/backend-services/src/credentials/executing-user-identifier.interface.ts similarity index 100% rename from packages/cli/src/credentials/executing-user-identifier.interface.ts rename to packages/@n8n/backend-services/src/credentials/executing-user-identifier.interface.ts diff --git a/packages/cli/src/executions/__tests__/execution-redaction-proxy.service.test.ts b/packages/@n8n/backend-services/src/executions/__tests__/execution-redaction-proxy.service.test.ts similarity index 93% rename from packages/cli/src/executions/__tests__/execution-redaction-proxy.service.test.ts rename to packages/@n8n/backend-services/src/executions/__tests__/execution-redaction-proxy.service.test.ts index 9e8fdddb768..4e3114730c1 100644 --- a/packages/cli/src/executions/__tests__/execution-redaction-proxy.service.test.ts +++ b/packages/@n8n/backend-services/src/executions/__tests__/execution-redaction-proxy.service.test.ts @@ -5,8 +5,8 @@ import type { ExecutionRedaction, ExecutionRedactionOptions, RedactableExecution, -} from '@/executions/execution-redaction'; -import { ExecutionRedactionServiceProxy } from '@/executions/execution-redaction-proxy.service'; +} from '../execution-redaction'; +import { ExecutionRedactionServiceProxy } from '../execution-redaction-proxy.service'; describe('ExecutionRedactionServiceProxy', () => { let proxy: ExecutionRedactionServiceProxy; diff --git a/packages/cli/src/executions/execution-redaction-proxy.service.ts b/packages/@n8n/backend-services/src/executions/execution-redaction-proxy.service.ts similarity index 100% rename from packages/cli/src/executions/execution-redaction-proxy.service.ts rename to packages/@n8n/backend-services/src/executions/execution-redaction-proxy.service.ts diff --git a/packages/cli/src/executions/execution-redaction.ts b/packages/@n8n/backend-services/src/executions/execution-redaction.ts similarity index 100% rename from packages/cli/src/executions/execution-redaction.ts rename to packages/@n8n/backend-services/src/executions/execution-redaction.ts diff --git a/packages/@n8n/backend-services/src/index.ts b/packages/@n8n/backend-services/src/index.ts index 3ce50d6f8f2..09067bcba1c 100644 --- a/packages/@n8n/backend-services/src/index.ts +++ b/packages/@n8n/backend-services/src/index.ts @@ -74,3 +74,33 @@ export { type PublishedWorkflowData, type PublishedWorkflowDataForExecution, } from './workflows/workflow-published-data.service'; + +export { + RuntimeCredentialProxyService, + type RuntimeCredentialProvider, +} from './services/runtime-credential-proxy.service'; +export { + InstanceRegistryProxyService, + type InstanceRegistryProvider, +} from './services/instance-registry-proxy.service'; +export { ExecutingUserIdentifierProxy } from './credentials/executing-user-identifier-proxy'; +export type { IExecutingUserIdentifier } from './credentials/executing-user-identifier.interface'; +export { ExecutionRedactionServiceProxy } from './executions/execution-redaction-proxy.service'; +export { + isRedactableExecution, + type ExecutionRedactionOptions, + type ExecutionRedaction, + type RedactableExecution, +} from './executions/execution-redaction'; +export { + WorkflowMutationHooksProxy, + type WorkflowMutationHooks, +} from './workflows/workflow-mutation-hooks-proxy.service'; +export { + WorkflowPublishGuardProxy, + type WorkflowPublishGuard, +} from './workflows/workflow-publish-guard-proxy.service'; +export { + RestrictedNodeTypesProviderProxy, + type RestrictedNodeTypesProvider, +} from './workflows/restricted-node-types-provider-proxy.service'; diff --git a/packages/cli/src/services/__tests__/instance-registry-proxy.service.test.ts b/packages/@n8n/backend-services/src/services/__tests__/instance-registry-proxy.service.test.ts similarity index 100% rename from packages/cli/src/services/__tests__/instance-registry-proxy.service.test.ts rename to packages/@n8n/backend-services/src/services/__tests__/instance-registry-proxy.service.test.ts diff --git a/packages/cli/src/services/__tests__/runtime-credential-proxy.service.test.ts b/packages/@n8n/backend-services/src/services/__tests__/runtime-credential-proxy.service.test.ts similarity index 96% rename from packages/cli/src/services/__tests__/runtime-credential-proxy.service.test.ts rename to packages/@n8n/backend-services/src/services/__tests__/runtime-credential-proxy.service.test.ts index 2990ef39934..f4dd1c8cfe6 100644 --- a/packages/cli/src/services/__tests__/runtime-credential-proxy.service.test.ts +++ b/packages/@n8n/backend-services/src/services/__tests__/runtime-credential-proxy.service.test.ts @@ -3,7 +3,7 @@ import type { IRunExecutionData } from 'n8n-workflow'; import { RuntimeCredentialProxyService, type RuntimeCredentialProvider, -} from '@/services/runtime-credential-proxy.service'; +} from '../runtime-credential-proxy.service'; const runExecutionData = {} as IRunExecutionData; diff --git a/packages/cli/src/services/instance-registry-proxy.service.ts b/packages/@n8n/backend-services/src/services/instance-registry-proxy.service.ts similarity index 100% rename from packages/cli/src/services/instance-registry-proxy.service.ts rename to packages/@n8n/backend-services/src/services/instance-registry-proxy.service.ts diff --git a/packages/cli/src/services/runtime-credential-proxy.service.ts b/packages/@n8n/backend-services/src/services/runtime-credential-proxy.service.ts similarity index 100% rename from packages/cli/src/services/runtime-credential-proxy.service.ts rename to packages/@n8n/backend-services/src/services/runtime-credential-proxy.service.ts diff --git a/packages/cli/src/workflows/__tests__/workflow-mutation-hooks-proxy.service.test.ts b/packages/@n8n/backend-services/src/workflows/__tests__/workflow-mutation-hooks-proxy.service.test.ts similarity index 100% rename from packages/cli/src/workflows/__tests__/workflow-mutation-hooks-proxy.service.test.ts rename to packages/@n8n/backend-services/src/workflows/__tests__/workflow-mutation-hooks-proxy.service.test.ts diff --git a/packages/cli/src/workflows/__tests__/workflow-publish-guard-proxy.service.test.ts b/packages/@n8n/backend-services/src/workflows/__tests__/workflow-publish-guard-proxy.service.test.ts similarity index 100% rename from packages/cli/src/workflows/__tests__/workflow-publish-guard-proxy.service.test.ts rename to packages/@n8n/backend-services/src/workflows/__tests__/workflow-publish-guard-proxy.service.test.ts diff --git a/packages/cli/src/workflows/restricted-node-types-provider-proxy.service.ts b/packages/@n8n/backend-services/src/workflows/restricted-node-types-provider-proxy.service.ts similarity index 100% rename from packages/cli/src/workflows/restricted-node-types-provider-proxy.service.ts rename to packages/@n8n/backend-services/src/workflows/restricted-node-types-provider-proxy.service.ts diff --git a/packages/cli/src/workflows/workflow-mutation-hooks-proxy.service.ts b/packages/@n8n/backend-services/src/workflows/workflow-mutation-hooks-proxy.service.ts similarity index 100% rename from packages/cli/src/workflows/workflow-mutation-hooks-proxy.service.ts rename to packages/@n8n/backend-services/src/workflows/workflow-mutation-hooks-proxy.service.ts diff --git a/packages/cli/src/workflows/workflow-publish-guard-proxy.service.ts b/packages/@n8n/backend-services/src/workflows/workflow-publish-guard-proxy.service.ts similarity index 100% rename from packages/cli/src/workflows/workflow-publish-guard-proxy.service.ts rename to packages/@n8n/backend-services/src/workflows/workflow-publish-guard-proxy.service.ts diff --git a/packages/cli/src/evaluation.ee/__tests__/evaluation-dataset.service.test.ts b/packages/cli/src/evaluation.ee/__tests__/evaluation-dataset.service.test.ts index 8ed482721ab..9b2c1fd70ba 100644 --- a/packages/cli/src/evaluation.ee/__tests__/evaluation-dataset.service.test.ts +++ b/packages/cli/src/evaluation.ee/__tests__/evaluation-dataset.service.test.ts @@ -7,10 +7,13 @@ import type { IConnections, IRunData } from 'n8n-workflow'; import { BadRequestError, ForbiddenError, NotFoundError } from '@n8n/errors'; import type { ExecutionPersistence } from '@/executions/execution-persistence'; -import type { ExecutionRedactionServiceProxy } from '@/executions/execution-redaction-proxy.service'; +import type { + ExecutionRedactionServiceProxy, + InstanceWriteAccessService, +} from '@n8n/backend-services'; import type { DataTableColumn } from '@/modules/data-table/data-table-column.entity'; import type { DataTableService } from '@/modules/data-table/data-table.service'; -import type { InstanceWriteAccessService } from '@n8n/backend-services'; + import { userHasScopes } from '@/permissions.ee/check-access'; import { EvaluationDatasetService } from '../evaluation-dataset.service'; diff --git a/packages/cli/src/evaluation.ee/evaluation-dataset.service.ts b/packages/cli/src/evaluation.ee/evaluation-dataset.service.ts index b0965e3cb06..8f9a10a2272 100644 --- a/packages/cli/src/evaluation.ee/evaluation-dataset.service.ts +++ b/packages/cli/src/evaluation.ee/evaluation-dataset.service.ts @@ -25,11 +25,10 @@ import type { import { BadRequestError, ForbiddenError, NotFoundError } from '@n8n/errors'; import { ExecutionPersistence } from '@/executions/execution-persistence'; -import { ExecutionRedactionServiceProxy } from '@/executions/execution-redaction-proxy.service'; +import { ExecutionRedactionServiceProxy, InstanceWriteAccessService } from '@n8n/backend-services'; import type { DataTableColumn } from '@/modules/data-table/data-table-column.entity'; import { DataTableService } from '@/modules/data-table/data-table.service'; import { userHasScopes } from '@/permissions.ee/check-access'; -import { InstanceWriteAccessService } from '@n8n/backend-services'; /** First-item `json` of a node's last run output, keyed by field name. */ type FieldMap = IDataObject; diff --git a/packages/cli/src/execution-lifecycle/__tests__/execution-lifecycle-hooks.test.ts b/packages/cli/src/execution-lifecycle/__tests__/execution-lifecycle-hooks.test.ts index 2f4e294d290..c4b8c145f6f 100644 --- a/packages/cli/src/execution-lifecycle/__tests__/execution-lifecycle-hooks.test.ts +++ b/packages/cli/src/execution-lifecycle/__tests__/execution-lifecycle-hooks.test.ts @@ -1,6 +1,6 @@ import type { PushMessage } from '@n8n/api-types'; import { Logger } from '@n8n/backend-common'; -import { EventService } from '@n8n/backend-services'; +import { EventService, ExecutionRedactionServiceProxy } from '@n8n/backend-services'; import { mockInstance } from '@n8n/backend-test-utils'; import { ExecutionsConfig } from '@n8n/config'; import type { Project, User } from '@n8n/db'; @@ -39,7 +39,7 @@ import { } from '../execution-lifecycle-hooks'; import { ExecutionPersistence } from '@/executions/execution-persistence'; -import { ExecutionRedactionServiceProxy } from '@/executions/execution-redaction-proxy.service'; + import { ExternalHooks } from '@/external-hooks'; import { Push } from '@/push'; import { ExecutionMetadataService } from '@/services/execution-metadata.service'; diff --git a/packages/cli/src/execution-lifecycle/execution-lifecycle-hooks.ts b/packages/cli/src/execution-lifecycle/execution-lifecycle-hooks.ts index 82426d2bbd4..11d77e9f8e0 100644 --- a/packages/cli/src/execution-lifecycle/execution-lifecycle-hooks.ts +++ b/packages/cli/src/execution-lifecycle/execution-lifecycle-hooks.ts @@ -1,5 +1,9 @@ import { Logger } from '@n8n/backend-common'; -import { EventService } from '@n8n/backend-services'; +import { + EventService, + type RedactableExecution, + ExecutionRedactionServiceProxy, +} from '@n8n/backend-services'; import { ExecutionsConfig } from '@n8n/config'; import type { User } from '@n8n/db'; import { ExecutionRepository, UserRepository } from '@n8n/db'; @@ -37,8 +41,7 @@ import { import { type ExecutionSaveSettings, toSaveSettings } from './to-save-settings'; import { ExecutionPersistence } from '@/executions/execution-persistence'; -import type { RedactableExecution } from '@/executions/execution-redaction'; -import { ExecutionRedactionServiceProxy } from '@/executions/execution-redaction-proxy.service'; + import { ExternalHooks } from '@/external-hooks'; import { Push } from '@/push'; import { WorkflowStatisticsService } from '@/services/workflow-statistics.service'; diff --git a/packages/cli/src/executions/__tests__/execution.service.test.ts b/packages/cli/src/executions/__tests__/execution.service.test.ts index 89eaca6e425..17b35d7f334 100644 --- a/packages/cli/src/executions/__tests__/execution.service.test.ts +++ b/packages/cli/src/executions/__tests__/execution.service.test.ts @@ -1,5 +1,5 @@ import { DeleteExecutionsDto } from '@n8n/api-types'; -import type { EventService } from '@n8n/backend-services'; +import type { EventService, ExecutionRedactionServiceProxy } from '@n8n/backend-services'; import { mockInstance } from '@n8n/backend-test-utils'; import { GlobalConfig } from '@n8n/config'; import type { @@ -27,7 +27,7 @@ import { BadRequestError, NotFoundError } from '@n8n/errors'; import type { EngineV2ExecutionReader } from '@/executions/engine-v2-execution-reader.service'; import { MissingExecutionDataError } from '@/executions/execution-data/missing-execution-data.error'; import type { ExecutionPersistence } from '@/executions/execution-persistence'; -import type { ExecutionRedactionServiceProxy } from '@/executions/execution-redaction-proxy.service'; + import { ExecutionService } from '@/executions/execution.service'; import type { ExecutionRequest } from '@/executions/execution.types'; import type { ExecutionStopService } from '@/scaling/execution-stop.service'; diff --git a/packages/cli/src/executions/execution.service.ts b/packages/cli/src/executions/execution.service.ts index 698b8576941..aab1df4cbc1 100644 --- a/packages/cli/src/executions/execution.service.ts +++ b/packages/cli/src/executions/execution.service.ts @@ -1,7 +1,7 @@ import type { DeleteExecutionsDto } from '@n8n/api-types'; import { ExecutionRedactionQueryDtoSchema } from '@n8n/api-types'; import { Logger } from '@n8n/backend-common'; -import { EventService } from '@n8n/backend-services'; +import { EventService, ExecutionRedactionServiceProxy } from '@n8n/backend-services'; import { GlobalConfig } from '@n8n/config'; import type { CreateExecutionPayload, @@ -61,7 +61,7 @@ import { EngineV2ExecutionReader } from './engine-v2-execution-reader.service'; import { MissingExecutionDataError } from './execution-data/missing-execution-data.error'; import { isExecutionIdV2, type ExecutionIdV2 } from './execution-id'; import { ExecutionPersistence } from './execution-persistence'; -import { ExecutionRedactionServiceProxy } from './execution-redaction-proxy.service'; + import type { ExecutionRequest, StopResult } from './execution.types'; export const schemaGetExecutionsQueryFilter = { diff --git a/packages/cli/src/modules/chat-hub/__tests__/chat-hub-extractor.test.ts b/packages/cli/src/modules/chat-hub/__tests__/chat-hub-extractor.test.ts index 95a0e2e2ec9..d58fc8d9001 100644 --- a/packages/cli/src/modules/chat-hub/__tests__/chat-hub-extractor.test.ts +++ b/packages/cli/src/modules/chat-hub/__tests__/chat-hub-extractor.test.ts @@ -5,7 +5,7 @@ import type { INodeExecutionData, PlaintextExecutionContext } from 'n8n-workflow import type { Mocked } from 'vitest'; import { mock } from 'vitest-mock-extended'; -import type { ExecutingUserIdentifierProxy } from '@/credentials/executing-user-identifier-proxy'; +import type { ExecutingUserIdentifierProxy } from '@n8n/backend-services'; import { ChatHubExtractor } from '../chat-hub-extractor'; diff --git a/packages/cli/src/modules/chat-hub/chat-hub-extractor.ts b/packages/cli/src/modules/chat-hub/chat-hub-extractor.ts index 08a8bb403d4..97e0b52e3eb 100644 --- a/packages/cli/src/modules/chat-hub/chat-hub-extractor.ts +++ b/packages/cli/src/modules/chat-hub/chat-hub-extractor.ts @@ -14,7 +14,7 @@ import { type ICredentialContext, jsonParse } from 'n8n-workflow'; import { z } from 'zod'; import { AuthService } from '@/auth/auth.service'; -import { ExecutingUserIdentifierProxy } from '@/credentials/executing-user-identifier-proxy'; +import { ExecutingUserIdentifierProxy } from '@n8n/backend-services'; const EncryptedMetadataSchema = z.object({ encryptedMetadata: z.string(), diff --git a/packages/cli/src/modules/dynamic-credentials.ee/dynamic-credentials.module.ts b/packages/cli/src/modules/dynamic-credentials.ee/dynamic-credentials.module.ts index 4108dd51a12..6f5465f95fe 100644 --- a/packages/cli/src/modules/dynamic-credentials.ee/dynamic-credentials.module.ts +++ b/packages/cli/src/modules/dynamic-credentials.ee/dynamic-credentials.module.ts @@ -61,9 +61,7 @@ export class DynamicCredentialsModule implements ModuleInterface { // Register the executing-user identifier so the redaction layer can attribute // a run to its user from the established identity carrier — the same source // credential resolution uses. - const { ExecutingUserIdentifierProxy } = await import( - '../../credentials/executing-user-identifier-proxy.js' - ); + const { ExecutingUserIdentifierProxy } = await import('@n8n/backend-services'); const { N8NIdentifier } = await import('./credential-resolvers/identifiers/n8n-identifier.js'); Container.get(ExecutingUserIdentifierProxy).setProvider(Container.get(N8NIdentifier)); } diff --git a/packages/cli/src/modules/instance-ai/self-healing/__tests__/self-healing-result.service.integration.test.ts b/packages/cli/src/modules/instance-ai/self-healing/__tests__/self-healing-result.service.integration.test.ts index 8df7c62cb68..ade89e81f49 100644 --- a/packages/cli/src/modules/instance-ai/self-healing/__tests__/self-healing-result.service.integration.test.ts +++ b/packages/cli/src/modules/instance-ai/self-healing/__tests__/self-healing-result.service.integration.test.ts @@ -25,7 +25,7 @@ import { AuthHandlerRegistry } from '@/auth/auth-handler.registry'; import { CollaborationService } from '@/collaboration/collaboration.service'; import { ControllerRegistry } from '@/controller.registry'; import { WorkflowPublicationNotifier } from '@/workflows/publication/workflow-publication-notifier'; -import { WorkflowPublishGuardProxy } from '@/workflows/workflow-publish-guard-proxy.service'; +import { WorkflowPublishGuardProxy } from '@n8n/backend-services'; import { WorkflowValidationService } from '@/workflows/workflow-validation.service'; import { WorkflowService } from '@/workflows/workflow.service'; import { createExecution } from '@test-integration/db/executions'; diff --git a/packages/cli/src/modules/instance-ai/workflow-suggestions/__tests__/workflow-suggestion-actions.service.integration.test.ts b/packages/cli/src/modules/instance-ai/workflow-suggestions/__tests__/workflow-suggestion-actions.service.integration.test.ts index f5dc39787fa..c37f3ba7ae6 100644 --- a/packages/cli/src/modules/instance-ai/workflow-suggestions/__tests__/workflow-suggestion-actions.service.integration.test.ts +++ b/packages/cli/src/modules/instance-ai/workflow-suggestions/__tests__/workflow-suggestion-actions.service.integration.test.ts @@ -33,7 +33,7 @@ import { PolicyEnforcementService } from '@/policy/policy-enforcement.service'; import { WorkflowValidationService } from '@/workflows/workflow-validation.service'; import { WorkflowService } from '@/workflows/workflow.service'; import { WorkflowPublicationNotifier } from '@/workflows/publication/workflow-publication-notifier'; -import { WorkflowPublishGuardProxy } from '@/workflows/workflow-publish-guard-proxy.service'; +import { WorkflowPublishGuardProxy } from '@n8n/backend-services'; import { createAdmin, createUser } from '@test-integration/db/users'; import { initNodeTypes, setupTestServer } from '@test-integration/utils'; diff --git a/packages/cli/src/modules/instance-registry/instance-registry.module.ts b/packages/cli/src/modules/instance-registry/instance-registry.module.ts index 5ab89e1d5c1..143af5fc4f0 100644 --- a/packages/cli/src/modules/instance-registry/instance-registry.module.ts +++ b/packages/cli/src/modules/instance-registry/instance-registry.module.ts @@ -19,9 +19,7 @@ export class InstanceRegistryModule implements ModuleInterface { const instanceRegistryService = Container.get(InstanceRegistryService); await instanceRegistryService.init(); - const { InstanceRegistryProxyService } = await import( - '@/services/instance-registry-proxy.service.js' - ); + const { InstanceRegistryProxyService } = await import('@n8n/backend-services'); Container.get(InstanceRegistryProxyService).registerProvider(instanceRegistryService); await import('./checks/index.js'); diff --git a/packages/cli/src/modules/mcp/__tests__/execution-tools.scopes.integration.test.ts b/packages/cli/src/modules/mcp/__tests__/execution-tools.scopes.integration.test.ts index a0b0ba6673f..c85a112aed7 100644 --- a/packages/cli/src/modules/mcp/__tests__/execution-tools.scopes.integration.test.ts +++ b/packages/cli/src/modules/mcp/__tests__/execution-tools.scopes.integration.test.ts @@ -10,7 +10,7 @@ import { Container } from '@n8n/di'; import { mock } from 'vitest-mock-extended'; import { ExecutionListService } from '@/executions/execution-list.service'; -import { ExecutionRedactionServiceProxy } from '@/executions/execution-redaction-proxy.service'; +import { ExecutionRedactionServiceProxy } from '@n8n/backend-services'; import type { Telemetry } from '@/telemetry'; import { WorkflowFinderService } from '@/workflows/workflow-finder.service'; import { createSuccessfulExecution } from '@test-integration/db/executions'; diff --git a/packages/cli/src/modules/mcp/__tests__/get-execution.tool.test.ts b/packages/cli/src/modules/mcp/__tests__/get-execution.tool.test.ts index 6b4c6568b8d..7129be27532 100644 --- a/packages/cli/src/modules/mcp/__tests__/get-execution.tool.test.ts +++ b/packages/cli/src/modules/mcp/__tests__/get-execution.tool.test.ts @@ -7,7 +7,7 @@ import { USER_CALLED_MCP_TOOL_EVENT } from '../mcp.constants'; import { createGetExecutionTool } from '../tools/get-execution.tool'; import { ExecutionPersistence } from '@/executions/execution-persistence'; -import { ExecutionRedactionServiceProxy } from '@/executions/execution-redaction-proxy.service'; +import { ExecutionRedactionServiceProxy } from '@n8n/backend-services'; import { Telemetry } from '@/telemetry'; import { WorkflowFinderService } from '@/workflows/workflow-finder.service'; diff --git a/packages/cli/src/modules/mcp/__tests__/install-community-node.registration.test.ts b/packages/cli/src/modules/mcp/__tests__/install-community-node.registration.test.ts index 8f565ca4f4f..d78a5c98369 100644 --- a/packages/cli/src/modules/mcp/__tests__/install-community-node.registration.test.ts +++ b/packages/cli/src/modules/mcp/__tests__/install-community-node.registration.test.ts @@ -4,6 +4,7 @@ import { UrlService, RoleService, FolderFinderService, + ExecutionRedactionServiceProxy, WorkflowPublishedDataService, } from '@n8n/backend-services'; import { mockInstance, mockLogger } from '@n8n/backend-test-utils'; @@ -16,7 +17,7 @@ import { CollaborationService } from '@/collaboration/collaboration.service'; import { CredentialsService } from '@/credentials/credentials.service'; import { ExecutionService } from '@/executions/execution.service'; import { ExecutionListService } from '@/executions/execution-list.service'; -import { ExecutionRedactionServiceProxy } from '@/executions/execution-redaction-proxy.service'; + import { DataTableProxyService } from '@/modules/data-table/data-table-proxy.service'; import { NodeCatalogService } from '@/node-catalog'; import { NodeTypes } from '@/node-types'; diff --git a/packages/cli/src/modules/mcp/__tests__/mcp-scopes.test.ts b/packages/cli/src/modules/mcp/__tests__/mcp-scopes.test.ts index 1b0f5e38f70..8dbd4d8e6f8 100644 --- a/packages/cli/src/modules/mcp/__tests__/mcp-scopes.test.ts +++ b/packages/cli/src/modules/mcp/__tests__/mcp-scopes.test.ts @@ -5,6 +5,7 @@ import { UrlService, RoleService, FolderFinderService, + ExecutionRedactionServiceProxy, WorkflowPublishedDataService, } from '@n8n/backend-services'; import { mockInstance, mockLogger } from '@n8n/backend-test-utils'; @@ -36,7 +37,7 @@ import { ActiveExecutions } from '@/active-executions'; import { CollaborationService } from '@/collaboration/collaboration.service'; import { CredentialsService } from '@/credentials/credentials.service'; import { ExecutionListService } from '@/executions/execution-list.service'; -import { ExecutionRedactionServiceProxy } from '@/executions/execution-redaction-proxy.service'; + import { ExecutionService } from '@/executions/execution.service'; import { DataTableProxyService } from '@/modules/data-table/data-table-proxy.service'; import { InstanceContextService } from '@/modules/instance-ai/instance-context.service'; diff --git a/packages/cli/src/modules/mcp/__tests__/mcp.service.test.ts b/packages/cli/src/modules/mcp/__tests__/mcp.service.test.ts index 70b9d29af00..7e8aa4da631 100644 --- a/packages/cli/src/modules/mcp/__tests__/mcp.service.test.ts +++ b/packages/cli/src/modules/mcp/__tests__/mcp.service.test.ts @@ -14,6 +14,7 @@ import { UrlService, RoleService, FolderFinderService, + ExecutionRedactionServiceProxy, WorkflowPublishedDataService, } from '@n8n/backend-services'; import { mockInstance, mockLogger } from '@n8n/backend-test-utils'; @@ -36,7 +37,7 @@ import { ActiveExecutions } from '@/active-executions'; import { CollaborationService } from '@/collaboration/collaboration.service'; import { CredentialsService } from '@/credentials/credentials.service'; import { ExecutionListService } from '@/executions/execution-list.service'; -import { ExecutionRedactionServiceProxy } from '@/executions/execution-redaction-proxy.service'; + import { ExecutionService } from '@/executions/execution.service'; import { DataTableProxyService } from '@/modules/data-table/data-table-proxy.service'; import { NodeCatalogService } from '@/node-catalog'; diff --git a/packages/cli/src/modules/mcp/mcp.service.ts b/packages/cli/src/modules/mcp/mcp.service.ts index 250fe250cb1..fefd851a345 100644 --- a/packages/cli/src/modules/mcp/mcp.service.ts +++ b/packages/cli/src/modules/mcp/mcp.service.ts @@ -12,6 +12,7 @@ import { UrlService, RoleService, FolderFinderService, + ExecutionRedactionServiceProxy, WorkflowPublishedDataService, } from '@n8n/backend-services'; import { ExecutionsConfig, GlobalConfig, WorkflowsConfig } from '@n8n/config'; @@ -34,7 +35,7 @@ import { CollaborationService } from '@/collaboration/collaboration.service'; import { N8N_VERSION } from '@/constants'; import { CredentialsService } from '@/credentials/credentials.service'; import { ExecutionListService } from '@/executions/execution-list.service'; -import { ExecutionRedactionServiceProxy } from '@/executions/execution-redaction-proxy.service'; + import { ExecutionService } from '@/executions/execution.service'; import { DataTableProxyService } from '@/modules/data-table/data-table-proxy.service'; import { NodeCatalogService } from '@/node-catalog'; diff --git a/packages/cli/src/modules/mcp/tools/get-execution.tool.ts b/packages/cli/src/modules/mcp/tools/get-execution.tool.ts index 916e5dbb931..977edcfcf74 100644 --- a/packages/cli/src/modules/mcp/tools/get-execution.tool.ts +++ b/packages/cli/src/modules/mcp/tools/get-execution.tool.ts @@ -11,7 +11,7 @@ import type { ToolDefinition, UserCalledMCPToolEventPayload } from '../mcp.types import { getMcpWorkflow } from './workflow-validation.utils'; import { ExecutionPersistence } from '@/executions/execution-persistence'; -import type { ExecutionRedactionServiceProxy } from '@/executions/execution-redaction-proxy.service'; +import type { ExecutionRedactionServiceProxy } from '@n8n/backend-services'; import type { Telemetry } from '@/telemetry'; import type { WorkflowFinderService } from '@/workflows/workflow-finder.service'; diff --git a/packages/cli/src/modules/redaction/__tests__/dynamic-credentials-context-hook.test.ts b/packages/cli/src/modules/redaction/__tests__/dynamic-credentials-context-hook.test.ts index 53265ec74ae..3c4e5848608 100644 --- a/packages/cli/src/modules/redaction/__tests__/dynamic-credentials-context-hook.test.ts +++ b/packages/cli/src/modules/redaction/__tests__/dynamic-credentials-context-hook.test.ts @@ -5,7 +5,7 @@ import type { ICredentialContext, INode, PlaintextExecutionContext, Workflow } f import type { MockProxy } from 'vitest-mock-extended'; import { mock } from 'vitest-mock-extended'; -import type { ExecutingUserIdentifierProxy } from '@/credentials/executing-user-identifier-proxy'; +import type { ExecutingUserIdentifierProxy } from '@n8n/backend-services'; import { DynamicCredentialsContextHook } from '../dynamic-credentials-context-hook'; diff --git a/packages/cli/src/modules/redaction/__tests__/redaction.module.hook-registration.test.ts b/packages/cli/src/modules/redaction/__tests__/redaction.module.hook-registration.test.ts index b1a52a1d6a4..eb0d8f86bbd 100644 --- a/packages/cli/src/modules/redaction/__tests__/redaction.module.hook-registration.test.ts +++ b/packages/cli/src/modules/redaction/__tests__/redaction.module.hook-registration.test.ts @@ -6,7 +6,7 @@ import { ContextEstablishmentHookMetadata, ModuleMetadata } from '@n8n/decorator import { Container } from '@n8n/di'; import { mock } from 'vitest-mock-extended'; -import { ExecutionRedactionServiceProxy } from '@/executions/execution-redaction-proxy.service'; +import { ExecutionRedactionServiceProxy } from '@n8n/backend-services'; import { ExecutionRedactionService } from '../executions/execution-redaction.service'; // For the @BackendModule side effect. Importing the hook here would void the assertion. diff --git a/packages/cli/src/modules/redaction/__tests__/redaction.module.instance-types.test.ts b/packages/cli/src/modules/redaction/__tests__/redaction.module.instance-types.test.ts index be475ef4ead..fa9655ddd97 100644 --- a/packages/cli/src/modules/redaction/__tests__/redaction.module.instance-types.test.ts +++ b/packages/cli/src/modules/redaction/__tests__/redaction.module.instance-types.test.ts @@ -8,7 +8,7 @@ import { Container } from '@n8n/di'; import type { Mocked } from 'vitest'; import { mock } from 'vitest-mock-extended'; -import { ExecutionRedactionServiceProxy } from '@/executions/execution-redaction-proxy.service'; +import { ExecutionRedactionServiceProxy } from '@n8n/backend-services'; import { ExecutionRedactionService } from '../executions/execution-redaction.service'; // For the @BackendModule side effect. diff --git a/packages/cli/src/modules/redaction/__tests__/redaction.module.test.ts b/packages/cli/src/modules/redaction/__tests__/redaction.module.test.ts index 4f57620d660..e5e843b44ce 100644 --- a/packages/cli/src/modules/redaction/__tests__/redaction.module.test.ts +++ b/packages/cli/src/modules/redaction/__tests__/redaction.module.test.ts @@ -4,7 +4,7 @@ import { Container } from '@n8n/di'; import type { Mocked } from 'vitest'; import { mock } from 'vitest-mock-extended'; -import { ExecutionRedactionServiceProxy } from '@/executions/execution-redaction-proxy.service'; +import { ExecutionRedactionServiceProxy } from '@n8n/backend-services'; import { ExecutionRedactionService } from '../executions/execution-redaction.service'; import { RedactionModule } from '../redaction.module'; diff --git a/packages/cli/src/modules/redaction/dynamic-credentials-context-hook.ts b/packages/cli/src/modules/redaction/dynamic-credentials-context-hook.ts index 61dad4670c0..61e7851e219 100644 --- a/packages/cli/src/modules/redaction/dynamic-credentials-context-hook.ts +++ b/packages/cli/src/modules/redaction/dynamic-credentials-context-hook.ts @@ -9,7 +9,7 @@ import { } from '@n8n/decorators'; import type { PlaintextExecutionContext } from 'n8n-workflow'; -import { ExecutingUserIdentifierProxy } from '@/credentials/executing-user-identifier-proxy'; +import { ExecutingUserIdentifierProxy } from '@n8n/backend-services'; @ContextEstablishmentHook({ alwaysExecute: true, diff --git a/packages/cli/src/modules/redaction/executions/__tests__/execution-redaction.service.test.ts b/packages/cli/src/modules/redaction/executions/__tests__/execution-redaction.service.test.ts index 92bf1b3cc4c..a9c50d6bd89 100644 --- a/packages/cli/src/modules/redaction/executions/__tests__/execution-redaction.service.test.ts +++ b/packages/cli/src/modules/redaction/executions/__tests__/execution-redaction.service.test.ts @@ -1,5 +1,9 @@ import { LicenseState, Logger } from '@n8n/backend-common'; -import type { EventService } from '@n8n/backend-services'; +import type { + EventService, + ExecutionRedactionOptions, + RedactableExecution, +} from '@n8n/backend-services'; import { mockInstance } from '@n8n/backend-test-utils'; import type { User } from '@n8n/db'; import type { INode, IRunExecutionData, ITaskData, WorkflowExecuteMode } from 'n8n-workflow'; @@ -7,10 +11,7 @@ import { shouldRedactConsoleOutput } from 'n8n-workflow'; import { mock } from 'vitest-mock-extended'; import { ForbiddenError, ScopeForbiddenError } from '@n8n/errors'; -import type { - ExecutionRedactionOptions, - RedactableExecution, -} from '@/executions/execution-redaction'; + import { CredentialsPermissionChecker } from '@/executions/pre-execution-checks/credentials-permission-checker'; import { WorkflowFinderService } from '@/workflows/workflow-finder.service'; diff --git a/packages/cli/src/modules/redaction/executions/execution-redaction.interfaces.ts b/packages/cli/src/modules/redaction/executions/execution-redaction.interfaces.ts index bbb50797e61..3212ed3d6a4 100644 --- a/packages/cli/src/modules/redaction/executions/execution-redaction.interfaces.ts +++ b/packages/cli/src/modules/redaction/executions/execution-redaction.interfaces.ts @@ -1,6 +1,6 @@ import type { User } from '@n8n/db'; -import type { RedactableExecution } from '@/executions/execution-redaction'; +import type { RedactableExecution } from '@n8n/backend-services'; /** * Context passed to every redaction strategy by the orchestrator. diff --git a/packages/cli/src/modules/redaction/executions/execution-redaction.service.ts b/packages/cli/src/modules/redaction/executions/execution-redaction.service.ts index 0a437766ace..a283054969e 100644 --- a/packages/cli/src/modules/redaction/executions/execution-redaction.service.ts +++ b/packages/cli/src/modules/redaction/executions/execution-redaction.service.ts @@ -1,5 +1,10 @@ import { LicenseState, Logger } from '@n8n/backend-common'; -import { EventService } from '@n8n/backend-services'; +import { + EventService, + type ExecutionRedaction, + type ExecutionRedactionOptions, + type RedactableExecution, +} from '@n8n/backend-services'; import type { User } from '@n8n/db'; import { Service } from '@n8n/di'; import { @@ -12,11 +17,7 @@ import { import { isCredSharingEnabled } from '@/constants/credential-sharing'; import { ForbiddenError, ScopeForbiddenError } from '@n8n/errors'; -import type { - ExecutionRedaction, - ExecutionRedactionOptions, - RedactableExecution, -} from '@/executions/execution-redaction'; + import { CredentialsPermissionChecker } from '@/executions/pre-execution-checks/credentials-permission-checker'; import { WorkflowFinderService } from '@/workflows/workflow-finder.service'; diff --git a/packages/cli/src/modules/redaction/executions/strategies/__tests__/full-item-redaction.strategy.test.ts b/packages/cli/src/modules/redaction/executions/strategies/__tests__/full-item-redaction.strategy.test.ts index 637829d05dc..7773f083032 100644 --- a/packages/cli/src/modules/redaction/executions/strategies/__tests__/full-item-redaction.strategy.test.ts +++ b/packages/cli/src/modules/redaction/executions/strategies/__tests__/full-item-redaction.strategy.test.ts @@ -1,7 +1,7 @@ import type { IRunExecutionData } from 'n8n-workflow'; import { NodeApiError, NodeOperationError } from 'n8n-workflow'; -import type { RedactableExecution } from '@/executions/execution-redaction'; +import type { RedactableExecution } from '@n8n/backend-services'; import type { RedactionContext } from '../../execution-redaction.interfaces'; import { FullItemRedactionStrategy } from '../full-item-redaction.strategy'; diff --git a/packages/cli/src/modules/redaction/executions/strategies/__tests__/node-defined-field-redaction.strategy.test.ts b/packages/cli/src/modules/redaction/executions/strategies/__tests__/node-defined-field-redaction.strategy.test.ts index 9cf32df4a46..2f677127468 100644 --- a/packages/cli/src/modules/redaction/executions/strategies/__tests__/node-defined-field-redaction.strategy.test.ts +++ b/packages/cli/src/modules/redaction/executions/strategies/__tests__/node-defined-field-redaction.strategy.test.ts @@ -2,7 +2,7 @@ import { Logger } from '@n8n/backend-common'; import { mockInstance } from '@n8n/backend-test-utils'; import type { IRedactedFieldMarker } from 'n8n-workflow'; -import type { RedactableExecution } from '@/executions/execution-redaction'; +import type { RedactableExecution } from '@n8n/backend-services'; import { NodeTypes } from '@/node-types'; import type { RedactionContext } from '../../execution-redaction.interfaces'; diff --git a/packages/cli/src/modules/redaction/executions/strategies/full-item-redaction.strategy.ts b/packages/cli/src/modules/redaction/executions/strategies/full-item-redaction.strategy.ts index 596eac5b304..0c249535840 100644 --- a/packages/cli/src/modules/redaction/executions/strategies/full-item-redaction.strategy.ts +++ b/packages/cli/src/modules/redaction/executions/strategies/full-item-redaction.strategy.ts @@ -6,7 +6,7 @@ import type { ITaskDataConnections, } from 'n8n-workflow'; -import type { RedactableExecution } from '@/executions/execution-redaction'; +import type { RedactableExecution } from '@n8n/backend-services'; import type { IExecutionRedactionStrategy, diff --git a/packages/cli/src/modules/redaction/executions/strategies/node-defined-field-redaction.strategy.ts b/packages/cli/src/modules/redaction/executions/strategies/node-defined-field-redaction.strategy.ts index a8502154746..79c8d1a44b8 100644 --- a/packages/cli/src/modules/redaction/executions/strategies/node-defined-field-redaction.strategy.ts +++ b/packages/cli/src/modules/redaction/executions/strategies/node-defined-field-redaction.strategy.ts @@ -2,7 +2,7 @@ import { Logger } from '@n8n/backend-common'; import { Service } from '@n8n/di'; import type { INodeExecutionData, IRedactedFieldMarker, ITaskDataConnections } from 'n8n-workflow'; -import type { RedactableExecution } from '@/executions/execution-redaction'; +import type { RedactableExecution } from '@n8n/backend-services'; import { NodeTypes } from '@/node-types'; import type { diff --git a/packages/cli/src/modules/redaction/redaction.module.ts b/packages/cli/src/modules/redaction/redaction.module.ts index 8b47d30416c..37382676906 100644 --- a/packages/cli/src/modules/redaction/redaction.module.ts +++ b/packages/cli/src/modules/redaction/redaction.module.ts @@ -2,7 +2,7 @@ import type { ModuleInterface } from '@n8n/decorators'; import { BackendModule } from '@n8n/decorators'; import { Container } from '@n8n/di'; -import { ExecutionRedactionServiceProxy } from '@/executions/execution-redaction-proxy.service'; +import { ExecutionRedactionServiceProxy } from '@n8n/backend-services'; /** * Context is established by whichever instance runs the workflow — main, queue worker or diff --git a/packages/cli/src/modules/runtime-credentials/runtime-credentials-access.service.ts b/packages/cli/src/modules/runtime-credentials/runtime-credentials-access.service.ts index 0dfe9b704af..3d079341ec0 100644 --- a/packages/cli/src/modules/runtime-credentials/runtime-credentials-access.service.ts +++ b/packages/cli/src/modules/runtime-credentials/runtime-credentials-access.service.ts @@ -3,7 +3,7 @@ import { Cipher } from 'n8n-core'; import type { IDataObject, IRunExecutionData } from 'n8n-workflow'; import { toSecureArtifacts } from 'n8n-workflow'; -import { RuntimeCredentialProvider } from '@/services/runtime-credential-proxy.service'; +import { RuntimeCredentialProvider } from '@n8n/backend-services'; @Service() export class RuntimeCredentialsAccessService implements RuntimeCredentialProvider { diff --git a/packages/cli/src/modules/runtime-credentials/runtime-credentials.module.ts b/packages/cli/src/modules/runtime-credentials/runtime-credentials.module.ts index 7246a53f82b..0e8dcef7308 100644 --- a/packages/cli/src/modules/runtime-credentials/runtime-credentials.module.ts +++ b/packages/cli/src/modules/runtime-credentials/runtime-credentials.module.ts @@ -3,7 +3,7 @@ import type { ModuleInterface } from '@n8n/decorators'; import { BackendModule } from '@n8n/decorators'; import { Container } from '@n8n/di'; -import { RuntimeCredentialProxyService } from '@/services/runtime-credential-proxy.service'; +import { RuntimeCredentialProxyService } from '@n8n/backend-services'; @BackendModule({ name: 'runtime-credentials' }) export class RuntimeCredentialsModule implements ModuleInterface { diff --git a/packages/cli/src/modules/source-control.ee/__tests__/source-control-import.service.ee.test.ts b/packages/cli/src/modules/source-control.ee/__tests__/source-control-import.service.ee.test.ts index 105dc3d0de3..6a377d51481 100644 --- a/packages/cli/src/modules/source-control.ee/__tests__/source-control-import.service.ee.test.ts +++ b/packages/cli/src/modules/source-control.ee/__tests__/source-control-import.service.ee.test.ts @@ -49,8 +49,8 @@ import type { PolicyEnforcementService } from '@/policy/policy-enforcement.servi import { PolicyViolationError } from '@/policy/policy-violation.error'; import type { DeprecatedNodesValidationService } from '@/workflows/deprecated-nodes-validation.service'; import type { WorkflowHistoryService } from '@/workflows/workflow-history/workflow-history.service'; -import type { WorkflowMutationHooksProxy } from '@/workflows/workflow-mutation-hooks-proxy.service'; -import type { WorkflowPublishGuardProxy } from '@/workflows/workflow-publish-guard-proxy.service'; +import type { WorkflowMutationHooksProxy, WorkflowPublishGuardProxy } from '@n8n/backend-services'; + import type { WorkflowFinderService } from '@/workflows/workflow-finder.service'; import type { WorkflowService } from '@/workflows/workflow.service'; diff --git a/packages/cli/src/modules/source-control.ee/source-control-import.service.ee.ts b/packages/cli/src/modules/source-control.ee/source-control-import.service.ee.ts index b3fd2dcd451..4db03a049d5 100644 --- a/packages/cli/src/modules/source-control.ee/source-control-import.service.ee.ts +++ b/packages/cli/src/modules/source-control.ee/source-control-import.service.ee.ts @@ -59,8 +59,8 @@ import { validateWorkflowNodeGroups, sanitizeNodeGroupDescriptions } from '@/wor import { DeprecatedNodesValidationService } from '@/workflows/deprecated-nodes-validation.service'; import { WorkflowFinderService } from '@/workflows/workflow-finder.service'; import { WorkflowHistoryService } from '@/workflows/workflow-history/workflow-history.service'; -import { WorkflowMutationHooksProxy } from '@/workflows/workflow-mutation-hooks-proxy.service'; -import { WorkflowPublishGuardProxy } from '@/workflows/workflow-publish-guard-proxy.service'; +import { WorkflowMutationHooksProxy, WorkflowPublishGuardProxy } from '@n8n/backend-services'; + import { WorkflowService } from '@/workflows/workflow.service'; import { diff --git a/packages/cli/src/modules/type-availability-policies/__tests__/type-availability-policies.module.test.ts b/packages/cli/src/modules/type-availability-policies/__tests__/type-availability-policies.module.test.ts index c68eaa368aa..4e76ef5c707 100644 --- a/packages/cli/src/modules/type-availability-policies/__tests__/type-availability-policies.module.test.ts +++ b/packages/cli/src/modules/type-availability-policies/__tests__/type-availability-policies.module.test.ts @@ -3,7 +3,7 @@ import { ControllerRegistryMetadata, ModuleMetadata, PolicyCheckMetadata } from import { Container } from '@n8n/di'; import { mock } from 'vitest-mock-extended'; -import { RestrictedNodeTypesProviderProxy } from '@/workflows/restricted-node-types-provider-proxy.service'; +import { RestrictedNodeTypesProviderProxy } from '@n8n/backend-services'; import { NodeTypePolicyRestrictedTypesProvider } from '../restricted-node-types.provider'; // Importing the module runs the @BackendModule decorator, registering its metadata. diff --git a/packages/cli/src/modules/type-availability-policies/restricted-node-types.provider.ts b/packages/cli/src/modules/type-availability-policies/restricted-node-types.provider.ts index e406563455e..7b1a015a24c 100644 --- a/packages/cli/src/modules/type-availability-policies/restricted-node-types.provider.ts +++ b/packages/cli/src/modules/type-availability-policies/restricted-node-types.provider.ts @@ -5,7 +5,7 @@ import { Service } from '@n8n/di'; import { singleFlight } from '@n8n/utils/promise/single-flight'; import { PolicyEnforcementService } from '@/policy/policy-enforcement.service'; -import type { RestrictedNodeTypesProvider } from '@/workflows/restricted-node-types-provider-proxy.service'; +import type { RestrictedNodeTypesProvider } from '@n8n/backend-services'; import { NODE_TYPES_KIND } from './constants'; import type { diff --git a/packages/cli/src/modules/type-availability-policies/type-availability-policies.module.ts b/packages/cli/src/modules/type-availability-policies/type-availability-policies.module.ts index 9817ffe8ca6..9cd6edc4ee9 100644 --- a/packages/cli/src/modules/type-availability-policies/type-availability-policies.module.ts +++ b/packages/cli/src/modules/type-availability-policies/type-availability-policies.module.ts @@ -3,7 +3,7 @@ import type { ModuleInterface } from '@n8n/decorators'; import { BackendModule } from '@n8n/decorators'; import { Container } from '@n8n/di'; -import { RestrictedNodeTypesProviderProxy } from '@/workflows/restricted-node-types-provider-proxy.service'; +import { RestrictedNodeTypesProviderProxy } from '@n8n/backend-services'; /** * The module-level `licenseFlag` skips `init()` on an unlicensed instance, so neither the diff --git a/packages/cli/src/modules/workflow-reviews.ee/__tests__/workflow-review-lifecycle.integration.test.ts b/packages/cli/src/modules/workflow-reviews.ee/__tests__/workflow-review-lifecycle.integration.test.ts index 1bef79d7202..a14eb3be737 100644 --- a/packages/cli/src/modules/workflow-reviews.ee/__tests__/workflow-review-lifecycle.integration.test.ts +++ b/packages/cli/src/modules/workflow-reviews.ee/__tests__/workflow-review-lifecycle.integration.test.ts @@ -1,5 +1,5 @@ import type { SourceControlledFile } from '@n8n/api-types'; -import { EventService } from '@n8n/backend-services'; +import { EventService, WorkflowMutationHooksProxy } from '@n8n/backend-services'; import { createTeamProject, mockInstance, testDb } from '@n8n/backend-test-utils'; import { GlobalConfig } from '@n8n/config'; import type { Project, User } from '@n8n/db'; @@ -28,7 +28,7 @@ import { WorkflowReviewPolicyService } from '@/services/workflow-review-policy.s import { WorkflowPublicationNotifier } from '@/workflows/publication/workflow-publication-notifier'; import { WorkflowFinderService } from '@/workflows/workflow-finder.service'; import { WorkflowHistoryService } from '@/workflows/workflow-history/workflow-history.service'; -import { WorkflowMutationHooksProxy } from '@/workflows/workflow-mutation-hooks-proxy.service'; + import { WorkflowValidationService } from '@/workflows/workflow-validation.service'; import { WorkflowService } from '@/workflows/workflow.service'; import { EnterpriseWorkflowService } from '@/workflows/workflow.service.ee'; diff --git a/packages/cli/src/modules/workflow-reviews.ee/workflow-review-lifecycle.service.ts b/packages/cli/src/modules/workflow-reviews.ee/workflow-review-lifecycle.service.ts index dfd7899b1dd..7d2bfaff46f 100644 --- a/packages/cli/src/modules/workflow-reviews.ee/workflow-review-lifecycle.service.ts +++ b/packages/cli/src/modules/workflow-reviews.ee/workflow-review-lifecycle.service.ts @@ -1,5 +1,5 @@ import type { WorkflowReviewWorkflowCauseActivityType } from '@n8n/api-types'; -import { EventService } from '@n8n/backend-services'; +import { EventService, type WorkflowMutationHooks } from '@n8n/backend-services'; import type { OperationContext } from '@n8n/db'; import { Logger } from '@n8n/backend-common'; import { @@ -12,8 +12,6 @@ import { } from '@n8n/db'; import { Service } from '@n8n/di'; -import type { WorkflowMutationHooks } from '@/workflows/workflow-mutation-hooks-proxy.service'; - import { WorkflowReviewStateNotifier } from './workflow-review-state-notifier.service'; /** Review data captured before a workflow is deleted, keyed by workflow ID. */ diff --git a/packages/cli/src/modules/workflow-reviews.ee/workflow-review-publish-guard.service.ts b/packages/cli/src/modules/workflow-reviews.ee/workflow-review-publish-guard.service.ts index 8aa1022c965..4d13b157e58 100644 --- a/packages/cli/src/modules/workflow-reviews.ee/workflow-review-publish-guard.service.ts +++ b/packages/cli/src/modules/workflow-reviews.ee/workflow-review-publish-guard.service.ts @@ -3,7 +3,7 @@ import { WorkflowReviewRequestRepository } from '@n8n/db'; import { Service } from '@n8n/di'; import { WorkflowPublishBlockedError } from '@/errors/response-errors/workflow-publish-blocked.error'; -import type { WorkflowPublishGuard } from '@/workflows/workflow-publish-guard-proxy.service'; +import type { WorkflowPublishGuard } from '@n8n/backend-services'; import { WorkflowReviewFeatureGate } from './workflow-review-feature-gate.service'; diff --git a/packages/cli/src/modules/workflow-reviews.ee/workflow-reviews.module.ts b/packages/cli/src/modules/workflow-reviews.ee/workflow-reviews.module.ts index e94f7d659b1..4dbe8dfe6dc 100644 --- a/packages/cli/src/modules/workflow-reviews.ee/workflow-reviews.module.ts +++ b/packages/cli/src/modules/workflow-reviews.ee/workflow-reviews.module.ts @@ -3,8 +3,7 @@ import type { ModuleInterface } from '@n8n/decorators'; import { BackendModule } from '@n8n/decorators'; import { Container } from '@n8n/di'; -import { WorkflowMutationHooksProxy } from '@/workflows/workflow-mutation-hooks-proxy.service'; -import { WorkflowPublishGuardProxy } from '@/workflows/workflow-publish-guard-proxy.service'; +import { WorkflowMutationHooksProxy, WorkflowPublishGuardProxy } from '@n8n/backend-services'; @BackendModule({ name: 'workflow-reviews', licenseFlag: LICENSE_FEATURES.WORKFLOW_REVIEWS }) export class WorkflowReviewsModule implements ModuleInterface { diff --git a/packages/cli/src/public-api/v1/controllers/executions.public.controller.ts b/packages/cli/src/public-api/v1/controllers/executions.public.controller.ts index b5d86cbf276..1b89a94f6e4 100644 --- a/packages/cli/src/public-api/v1/controllers/executions.public.controller.ts +++ b/packages/cli/src/public-api/v1/controllers/executions.public.controller.ts @@ -15,7 +15,12 @@ import { StoppedExecutionsPublicDto, TagIdsPublicDto, } from '@n8n/api-types'; -import { EventService, WorkflowSharingService } from '@n8n/backend-services'; +import { + EventService, + WorkflowSharingService, + isRedactableExecution, + ExecutionRedactionServiceProxy, +} from '@n8n/backend-services'; import { ExecutionsConfig } from '@n8n/config'; import type { AuthenticatedRequest, IExecutionBase, IExecutionResponse } from '@n8n/db'; import { @@ -42,8 +47,7 @@ import { AbortedExecutionRetryError } from '@/errors/aborted-execution-retry.err import { MissingExecutionStopError } from '@/errors/missing-execution-stop.error'; import { QueuedExecutionRetryError } from '@/errors/queued-execution-retry.error'; import { BadRequestError, ConflictError, NotFoundError } from '@n8n/errors'; -import { isRedactableExecution } from '@/executions/execution-redaction'; -import { ExecutionRedactionServiceProxy } from '@/executions/execution-redaction-proxy.service'; + import { ExecutionService } from '@/executions/execution.service'; import type { StopResult } from '@/executions/execution.types'; import type { TracingContext } from '@/modules/otel/tracing-context'; diff --git a/packages/cli/src/workflow-execute-additional-data.ts b/packages/cli/src/workflow-execute-additional-data.ts index 71f5ed812f0..5da95025586 100644 --- a/packages/cli/src/workflow-execute-additional-data.ts +++ b/packages/cli/src/workflow-execute-additional-data.ts @@ -3,7 +3,12 @@ import type { PushMessage, PushType } from '@n8n/api-types'; import { Logger, ModuleRegistry } from '@n8n/backend-common'; import { SsrfProtectionService } from '@n8n/backend-network'; -import { EventService, UrlService, WorkflowPublishedDataService } from '@n8n/backend-services'; +import { + EventService, + UrlService, + RuntimeCredentialProxyService, + WorkflowPublishedDataService, +} from '@n8n/backend-services'; import { ExecutionsConfig, GlobalConfig, SsrfProtectionConfig, WorkflowsConfig } from '@n8n/config'; import { Time } from '@n8n/constants'; import { ExecutionRepository, WorkflowRepository } from '@n8n/db'; @@ -54,7 +59,6 @@ import { import type { PrepareWorkflowAgentForEval } from './modules/agents/agent-runtime-instrumentation'; import type { WorkflowAgentRunOptions } from './modules/agents/agent-workflow-execution.service'; import { createWorkflowAgentStreamObserver } from './modules/agents/workflow-agent-stream'; -import { RuntimeCredentialProxyService } from './services/runtime-credential-proxy.service'; import { ActiveExecutions } from '@/active-executions'; import { isCredSharingEnabled } from '@/constants/credential-sharing'; diff --git a/packages/cli/src/workflows/__tests__/workflow.service.ee.test.ts b/packages/cli/src/workflows/__tests__/workflow.service.ee.test.ts index 013490a720d..b58048c0053 100644 --- a/packages/cli/src/workflows/__tests__/workflow.service.ee.test.ts +++ b/packages/cli/src/workflows/__tests__/workflow.service.ee.test.ts @@ -15,7 +15,7 @@ import { WorkflowActivationError } from 'n8n-workflow'; import { mock } from 'vitest-mock-extended'; import type { ActiveWorkflowManager } from '@/active-workflow-manager'; -import type { CredentialsFinderService } from '@n8n/backend-services'; +import type { CredentialsFinderService, WorkflowMutationHooksProxy } from '@n8n/backend-services'; import type { CredentialsService } from '@/credentials/credentials.service'; import type { NodeTypes } from '@/node-types'; import type { CredentialsPermissionChecker } from '@/executions/pre-execution-checks/credentials-permission-checker'; @@ -23,7 +23,7 @@ import type { PolicyEnforcementService } from '@/policy/policy-enforcement.servi import type { OwnershipService } from '@/services/ownership.service'; import type { ProjectService } from '@/services/project.service.ee'; import type { WorkflowFinderService } from '@/workflows/workflow-finder.service'; -import type { WorkflowMutationHooksProxy } from '@/workflows/workflow-mutation-hooks-proxy.service'; + import { EnterpriseWorkflowService } from '@/workflows/workflow.service.ee'; const flags = { credSharingEnabled: false }; diff --git a/packages/cli/src/workflows/__tests__/workflow.service.test.ts b/packages/cli/src/workflows/__tests__/workflow.service.test.ts index 75ac0037829..864e629ccae 100644 --- a/packages/cli/src/workflows/__tests__/workflow.service.test.ts +++ b/packages/cli/src/workflows/__tests__/workflow.service.test.ts @@ -1,5 +1,11 @@ import type { LicenseState } from '@n8n/backend-common'; -import { type EventService, type RoleService } from '@n8n/backend-services'; +import type { + EventService, + RoleService, + WorkflowMutationHooksProxy, + WorkflowPublishGuardProxy, + RestrictedNodeTypesProviderProxy, +} from '@n8n/backend-services'; import type { GlobalConfig, WorkflowsConfig } from '@n8n/config'; import type { Transaction, @@ -55,11 +61,10 @@ import type { WorkflowHookContextService } from '@/workflow-hook-context.service import type { WorkflowFinderService } from '@/workflows/workflow-finder.service'; import type { WorkflowHistoryService } from '@/workflows/workflow-history/workflow-history.service'; import type { WorkflowPublicationStatusService } from '@/workflows/publication/workflow-publication-status.service'; -import type { WorkflowMutationHooksProxy } from '@/workflows/workflow-mutation-hooks-proxy.service'; -import type { WorkflowPublishGuardProxy } from '@/workflows/workflow-publish-guard-proxy.service'; + import type { WorkflowValidationService } from '@/workflows/workflow-validation.service'; import type { NodeGroupRulesFlagGate } from '@/workflows/node-group-rules-flag-gate'; -import type { RestrictedNodeTypesProviderProxy } from '@/workflows/restricted-node-types-provider-proxy.service'; + import { WorkflowService } from '@/workflows/workflow.service'; import { ALL_RULES_RELAXED, NO_RULES_RELAXED } from './node-group-rules.test-data'; diff --git a/packages/cli/src/workflows/workflow.service.ee.ts b/packages/cli/src/workflows/workflow.service.ee.ts index 16433b6059e..f6a116d5688 100644 --- a/packages/cli/src/workflows/workflow.service.ee.ts +++ b/packages/cli/src/workflows/workflow.service.ee.ts @@ -35,7 +35,7 @@ import { import { ActiveWorkflowManager } from '@/active-workflow-manager'; import { isCredSharingEnabled } from '@/constants/credential-sharing'; -import { CredentialsFinderService } from '@n8n/backend-services'; +import { CredentialsFinderService, WorkflowMutationHooksProxy } from '@n8n/backend-services'; import { CredentialsService } from '@/credentials/credentials.service'; import { EnterpriseCredentialsService } from '@/credentials/credentials.service.ee'; import { CredentialsPermissionChecker } from '@/executions/pre-execution-checks/credentials-permission-checker'; @@ -51,7 +51,6 @@ import { ProjectService } from '@/services/project.service.ee'; import { stripToolSuffix } from '@/utils'; import { WorkflowFinderService } from './workflow-finder.service'; -import { WorkflowMutationHooksProxy } from './workflow-mutation-hooks-proxy.service'; /** * Database workflows use their own project permissions at runtime. diff --git a/packages/cli/src/workflows/workflow.service.ts b/packages/cli/src/workflows/workflow.service.ts index 6c05db4dc80..07328e74312 100644 --- a/packages/cli/src/workflows/workflow.service.ts +++ b/packages/cli/src/workflows/workflow.service.ts @@ -6,7 +6,13 @@ import type { WorkflowListPublicationStatus, } from '@n8n/api-types'; import { LicenseState, Logger } from '@n8n/backend-common'; -import { EventService, RoleService } from '@n8n/backend-services'; +import { + EventService, + RoleService, + RestrictedNodeTypesProviderProxy, + WorkflowMutationHooksProxy, + WorkflowPublishGuardProxy, +} from '@n8n/backend-services'; import { GlobalConfig } from '@n8n/config'; import type { User, @@ -61,13 +67,12 @@ import { DeprecatedNodesValidationService } from './deprecated-nodes-validation. import { WorkflowPublicationNotifier } from './publication/workflow-publication-notifier'; import { WorkflowPublicationStatusService } from './publication/workflow-publication-status.service'; import { NodeGroupRulesFlagGate } from './node-group-rules-flag-gate'; -import { RestrictedNodeTypesProviderProxy } from './restricted-node-types-provider-proxy.service'; + import { getEnabledTriggerNodes } from './triggers/enabled-trigger-nodes'; import { getErrorDescription, getErrorNodeId, getRequiredRedactionScopes } from './utils'; import { WorkflowFinderService } from './workflow-finder.service'; import { WorkflowHistoryService } from './workflow-history/workflow-history.service'; -import { WorkflowMutationHooksProxy } from './workflow-mutation-hooks-proxy.service'; -import { WorkflowPublishGuardProxy } from './workflow-publish-guard-proxy.service'; + import { WorkflowValidationService } from './workflow-validation.service'; import { ActiveWorkflowManager } from '@/active-workflow-manager'; diff --git a/packages/cli/test/integration/mcp/get-execution.tool.test.ts b/packages/cli/test/integration/mcp/get-execution.tool.test.ts index 702f7fd9f33..0cd7f223af1 100644 --- a/packages/cli/test/integration/mcp/get-execution.tool.test.ts +++ b/packages/cli/test/integration/mcp/get-execution.tool.test.ts @@ -14,7 +14,7 @@ import { createEmptyRunExecutionData, type IRunExecutionData } from 'n8n-workflo import { createExecution } from '../shared/db/executions'; import { createMember, createOwner } from '../shared/db/users'; -import { ExecutionRedactionServiceProxy } from '@/executions/execution-redaction-proxy.service'; +import { ExecutionRedactionServiceProxy } from '@n8n/backend-services'; import { createGetExecutionTool } from '@/modules/mcp/tools/get-execution.tool'; import { RedactionModule } from '@/modules/redaction/redaction.module'; import { Telemetry } from '@/telemetry'; diff --git a/packages/cli/test/integration/workflows/workflow.service.test.ts b/packages/cli/test/integration/workflows/workflow.service.test.ts index 6b09fadbff3..ebd7ceaa4b8 100644 --- a/packages/cli/test/integration/workflows/workflow.service.test.ts +++ b/packages/cli/test/integration/workflows/workflow.service.test.ts @@ -37,7 +37,11 @@ import { NodeTypes } from '@/node-types'; import { PolicyEnforcementService } from '@/policy/policy-enforcement.service'; import { OwnershipService } from '@/services/ownership.service'; import { ProjectService } from '@/services/project.service.ee'; -import { RoleService } from '@n8n/backend-services'; +import { + RoleService, + RestrictedNodeTypesProviderProxy, + type WorkflowPublishGuardProxy, +} from '@n8n/backend-services'; import { Telemetry } from '@/telemetry'; import { WebhookService } from '@/webhooks/webhook.service'; import { WorkflowHookContextService } from '@/workflow-hook-context.service'; @@ -45,10 +49,10 @@ import { WorkflowPublishBlockedError } from '@/errors/response-errors/workflow-p import type { WorkflowPublicationNotifier } from '@/workflows/publication/workflow-publication-notifier'; import { WorkflowFinderService } from '@/workflows/workflow-finder.service'; import { NodeGroupRulesFlagGate } from '@/workflows/node-group-rules-flag-gate'; -import { RestrictedNodeTypesProviderProxy } from '@/workflows/restricted-node-types-provider-proxy.service'; + import { WorkflowPublicationStatusService } from '@/workflows/publication/workflow-publication-status.service'; import { WorkflowHistoryService } from '@/workflows/workflow-history/workflow-history.service'; -import type { WorkflowPublishGuardProxy } from '@/workflows/workflow-publish-guard-proxy.service'; + import { WorkflowValidationService } from '@/workflows/workflow-validation.service'; import { ErrorWorkflowValidationService } from '@/workflows/error-workflow-validation.service'; import { WorkflowService } from '@/workflows/workflow.service';