refactor(core): Move published workflow data into backend services (#41086)

This commit is contained in:
Charlie Kolb 2026-10-15 07:13:46 +00:00 committed by GitHub
parent 48edbef643
commit 338b0ca3fd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
25 changed files with 76 additions and 42 deletions

View File

@ -68,3 +68,9 @@ export {
API_KEY_PURPOSES,
LEGACY_UNBOUND_PURPOSES,
} from './services/token-purposes';
export {
WorkflowPublishedDataService,
type PublishedWorkflowData,
type PublishedWorkflowDataForExecution,
} from './workflows/workflow-published-data.service';

View File

@ -2,11 +2,11 @@ import type { Logger } from '@n8n/backend-common';
import type { WorkflowPublishedVersionRepository, WorkflowPublishedVersion } from '@n8n/db';
import { mock } from 'vitest-mock-extended';
import type { CacheService } from '@n8n/backend-services';
import type { CacheService } from '../../services/cache/cache.service';
import {
WorkflowPublishedDataService,
type PublishedWorkflowDataForExecution,
} from '@/workflows/workflow-published-data.service';
} from '../workflow-published-data.service';
describe('WorkflowPublishedDataService', () => {
const logger = mock<Logger>();

View File

@ -8,7 +8,7 @@ import {
import { Service } from '@n8n/di';
import { ensureError } from '@n8n/utils/errors/ensure-error';
import { CacheService } from '@n8n/backend-services';
import { CacheService } from '../services/cache/cache.service';
export type { PublishedWorkflowDataForExecution };

View File

@ -1,5 +1,5 @@
import { Logger, ModuleRegistry } from '@n8n/backend-common';
import { EventService, UrlService } from '@n8n/backend-services';
import { EventService, UrlService, WorkflowPublishedDataService } from '@n8n/backend-services';
import { mockInstance } from '@n8n/backend-test-utils';
import { ExecutionsConfig, GlobalConfig, type NodesConfig, WorkflowsConfig } from '@n8n/config';
import type { WorkflowEntity, Project, WorkflowHistory } from '@n8n/db';
@ -64,7 +64,7 @@ import * as WorkflowHelpers from '@/workflow-helpers';
import { WorkflowHookContextService } from '@/workflow-hook-context.service';
import { DeprecatedNodesError } from '@/errors/response-errors/deprecated-nodes.error';
import { DeprecatedNodesValidationService } from '@/workflows/deprecated-nodes-validation.service';
import { WorkflowPublishedDataService } from '@/workflows/workflow-published-data.service';
import { WorkflowStaticDataService } from '@/workflows/workflow-static-data.service';
const EXECUTION_ID = '123';

View File

@ -2,7 +2,7 @@ import type { WorkflowsConfig } from '@n8n/config';
import type { WorkflowEntity, WorkflowRepository } from '@n8n/db';
import { mock } from 'vitest-mock-extended';
import type { WorkflowPublishedDataService } from '@/workflows/workflow-published-data.service';
import type { WorkflowPublishedDataService } from '@n8n/backend-services';
import { WorkflowToolUnavailableError } from '../workflow-tool-unavailable-error';
import { WorkflowToolWorkflowLoader } from '../workflow-tool-workflow-loader.service';

View File

@ -2,7 +2,7 @@ import { WorkflowsConfig } from '@n8n/config';
import { type WorkflowEntity, WorkflowRepository } from '@n8n/db';
import { Service } from '@n8n/di';
import { WorkflowPublishedDataService } from '@/workflows/workflow-published-data.service';
import { WorkflowPublishedDataService } from '@n8n/backend-services';
import { WorkflowToolUnavailableError } from './workflow-tool-unavailable-error';

View File

@ -23,7 +23,7 @@ import { McpService } from '@/modules/mcp/mcp.service';
import { Telemetry } from '@/telemetry';
import { WorkflowRunner } from '@/workflow-runner';
import { WorkflowFinderService } from '@/workflows/workflow-finder.service';
import { WorkflowPublishedDataService } from '@/workflows/workflow-published-data.service';
import { WorkflowPublishedDataService } from '@n8n/backend-services';
describe('execute-workflow MCP tool', () => {
const user = Object.assign(new User(), { id: 'user-1' });

View File

@ -1,5 +1,11 @@
import { LicenseState, ModuleRegistry } from '@n8n/backend-common';
import { EventService, UrlService, RoleService, FolderFinderService } from '@n8n/backend-services';
import {
EventService,
UrlService,
RoleService,
FolderFinderService,
WorkflowPublishedDataService,
} from '@n8n/backend-services';
import { mockInstance, mockLogger } from '@n8n/backend-test-utils';
import { ExecutionsConfig, GlobalConfig, WorkflowsConfig } from '@n8n/config';
import { ExecutionRepository, ProjectRepository, SharedWorkflowRepository, User } from '@n8n/db';
@ -28,7 +34,7 @@ import { WorkflowCreationService } from '@/workflows/workflow-creation.service';
import { ErrorWorkflowValidationService } from '@/workflows/error-workflow-validation.service';
import { WorkflowFinderService } from '@/workflows/workflow-finder.service';
import { WorkflowHistoryService } from '@/workflows/workflow-history/workflow-history.service';
import { WorkflowPublishedDataService } from '@/workflows/workflow-published-data.service';
import { WorkflowService } from '@/workflows/workflow.service';
import { McpPostSaveMetricsService } from '../mcp-post-save-metrics.service';

View File

@ -1,6 +1,12 @@
import { INSTANCE_ACTIVITY_CONTEXT_FLAG } from '@n8n/api-types';
import { LicenseState, ModuleRegistry } from '@n8n/backend-common';
import { EventService, UrlService, RoleService, FolderFinderService } from '@n8n/backend-services';
import {
EventService,
UrlService,
RoleService,
FolderFinderService,
WorkflowPublishedDataService,
} from '@n8n/backend-services';
import { mockInstance, mockLogger } from '@n8n/backend-test-utils';
import { EndpointsConfig, ExecutionsConfig, GlobalConfig, WorkflowsConfig } from '@n8n/config';
import {
@ -56,7 +62,7 @@ import { WorkflowCreationService } from '@/workflows/workflow-creation.service';
import { WorkflowFinderService } from '@/workflows/workflow-finder.service';
import { WorkflowHistoryService } from '@/workflows/workflow-history/workflow-history.service';
import { ErrorWorkflowValidationService } from '@/workflows/error-workflow-validation.service';
import { WorkflowPublishedDataService } from '@/workflows/workflow-published-data.service';
import { WorkflowService } from '@/workflows/workflow.service';
vi.mock('@n8n/mcp-apps/server', async (importOriginal) => ({

View File

@ -9,7 +9,13 @@ import {
INSTANCE_ACTIVITY_CONTEXT_FLAG,
} from '@n8n/api-types';
import { LicenseState, ModuleRegistry, type Logger } from '@n8n/backend-common';
import { EventService, UrlService, RoleService, FolderFinderService } from '@n8n/backend-services';
import {
EventService,
UrlService,
RoleService,
FolderFinderService,
WorkflowPublishedDataService,
} from '@n8n/backend-services';
import { mockInstance, mockLogger } from '@n8n/backend-test-utils';
import { EndpointsConfig, ExecutionsConfig, GlobalConfig, WorkflowsConfig } from '@n8n/config';
import {
@ -49,7 +55,7 @@ import { WorkflowCreationService } from '@/workflows/workflow-creation.service';
import { WorkflowFinderService } from '@/workflows/workflow-finder.service';
import { WorkflowHistoryService } from '@/workflows/workflow-history/workflow-history.service';
import { ErrorWorkflowValidationService } from '@/workflows/error-workflow-validation.service';
import { WorkflowPublishedDataService } from '@/workflows/workflow-published-data.service';
import { WorkflowService } from '@/workflows/workflow.service';
import { registerWorkflowPreviewApp, WORKFLOW_PREVIEW_APP_URI } from '@n8n/mcp-apps/server';

View File

@ -24,11 +24,11 @@ import { SubworkflowPolicyChecker } from '@/executions/pre-execution-checks/subw
import { NodeTypes } from '@/node-types';
import type { AiGatewayService } from '@/services/ai-gateway.service';
import { TagService } from '@/services/tag.service';
import { UrlService } from '@n8n/backend-services';
import { UrlService, WorkflowPublishedDataService } from '@n8n/backend-services';
import { Telemetry } from '@/telemetry';
import { WorkflowFinderService } from '@/workflows/workflow-finder.service';
import { ErrorWorkflowValidationService } from '@/workflows/error-workflow-validation.service';
import { WorkflowPublishedDataService } from '@/workflows/workflow-published-data.service';
import { WorkflowService } from '@/workflows/workflow.service';
import { shapeToStandardSchema } from '../tool-schema.util';

View File

@ -7,7 +7,13 @@ import {
INSTANCE_ACTIVITY_CONTEXT_FLAG,
} from '@n8n/api-types';
import { LicenseState, Logger, ModuleRegistry } from '@n8n/backend-common';
import { EventService, UrlService, RoleService, FolderFinderService } from '@n8n/backend-services';
import {
EventService,
UrlService,
RoleService,
FolderFinderService,
WorkflowPublishedDataService,
} from '@n8n/backend-services';
import { ExecutionsConfig, GlobalConfig, WorkflowsConfig } from '@n8n/config';
import { ExecutionRepository, ProjectRepository, SharedWorkflowRepository, User } from '@n8n/db';
import { Container, Service } from '@n8n/di';
@ -47,7 +53,7 @@ import { ErrorWorkflowValidationService } from '@/workflows/error-workflow-valid
import { WorkflowCreationService } from '@/workflows/workflow-creation.service';
import { WorkflowFinderService } from '@/workflows/workflow-finder.service';
import { WorkflowHistoryService } from '@/workflows/workflow-history/workflow-history.service';
import { WorkflowPublishedDataService } from '@/workflows/workflow-published-data.service';
import { WorkflowService } from '@/workflows/workflow.service';
import { McpPostSaveMetricsService } from './mcp-post-save-metrics.service';

View File

@ -40,7 +40,7 @@ import type { McpService } from '@/modules/mcp/mcp.service';
import type { Telemetry } from '@/telemetry';
import type { WorkflowRunner } from '@/workflow-runner';
import type { WorkflowFinderService } from '@/workflows/workflow-finder.service';
import type { WorkflowPublishedDataService } from '@/workflows/workflow-published-data.service';
import type { WorkflowPublishedDataService } from '@n8n/backend-services';
export { type FoundWorkflow };

View File

@ -32,7 +32,7 @@ import * as WebhookHelpers from '@/webhooks/webhook-helpers';
import type { WebhookService } from '@/webhooks/webhook.service';
import type { WebhookRequest } from '@/webhooks/webhook.types';
import * as WorkflowExecuteAdditionalData from '@/workflow-execute-additional-data';
import type { WorkflowPublishedDataService } from '@/workflows/workflow-published-data.service';
import type { WorkflowPublishedDataService } from '@n8n/backend-services';
import type { WorkflowPublisherService } from '@/workflows/workflow-publisher.service';
import type { WorkflowStaticDataService } from '@/workflows/workflow-static-data.service';

View File

@ -19,7 +19,7 @@ import { NodeTypes } from '@/node-types';
import * as WebhookHelpers from '@/webhooks/webhook-helpers';
import { WebhookService } from '@/webhooks/webhook.service';
import * as WorkflowExecuteAdditionalData from '@/workflow-execute-additional-data';
import { WorkflowPublishedDataService } from '@/workflows/workflow-published-data.service';
import { WorkflowPublishedDataService } from '@n8n/backend-services';
import { WorkflowPublisherService } from '@/workflows/workflow-publisher.service';
import { WorkflowStaticDataService } from '@/workflows/workflow-static-data.service';

View File

@ -3,7 +3,7 @@
import type { PushMessage, PushType } from '@n8n/api-types';
import { Logger, ModuleRegistry } from '@n8n/backend-common';
import { SsrfProtectionService } from '@n8n/backend-network';
import { EventService, UrlService } from '@n8n/backend-services';
import { EventService, UrlService, WorkflowPublishedDataService } from '@n8n/backend-services';
import { ExecutionsConfig, GlobalConfig, SsrfProtectionConfig, WorkflowsConfig } from '@n8n/config';
import { Time } from '@n8n/constants';
import { ExecutionRepository, WorkflowRepository } from '@n8n/db';
@ -79,7 +79,6 @@ import { objectToError } from '@/utils/object-to-error';
import * as WorkflowHelpers from '@/workflow-helpers';
import { DeprecatedNodesValidationService } from '@/workflows/deprecated-nodes-validation.service';
import { getWorkflowProjectDetailsSafe } from '@/workflows/utils';
import { WorkflowPublishedDataService } from '@/workflows/workflow-published-data.service';
export function getRunData(
workflowData: IWorkflowBase,

View File

@ -12,10 +12,7 @@ import {
staticErrorWorkflowId,
} from '@/workflows/error-workflow-validation.service';
import type { WorkflowFinderService } from '@/workflows/workflow-finder.service';
import type {
PublishedWorkflowData,
WorkflowPublishedDataService,
} from '@/workflows/workflow-published-data.service';
import type { PublishedWorkflowData, WorkflowPublishedDataService } from '@n8n/backend-services';
const ERROR_TRIGGER_TYPE = 'n8n-nodes-base.errorTrigger';

View File

@ -1,5 +1,9 @@
import type { Logger } from '@n8n/backend-common';
import type { EventService, InstanceWriteAccessService } from '@n8n/backend-services';
import type {
EventService,
InstanceWriteAccessService,
WorkflowPublishedDataService,
} from '@n8n/backend-services';
import type { GlobalConfig, WorkflowsConfig } from '@n8n/config';
import type {
CreateExecutionPayload,
@ -42,7 +46,6 @@ import * as WorkflowExecuteAdditionalData from '@/workflow-execute-additional-da
import type { WorkflowRunner } from '@/workflow-runner';
import type { PollCursorService } from '@/workflows/triggers/poll-cursor.service';
import { WorkflowExecutionService } from '@/workflows/workflow-execution.service';
import type { WorkflowPublishedDataService } from '@/workflows/workflow-published-data.service';
const webhookNode: INode = {
name: 'Webhook',

View File

@ -5,7 +5,7 @@ import type { IWorkflowSettings } from 'n8n-workflow';
import { Workflow } from 'n8n-workflow';
import { WorkflowFinderService } from './workflow-finder.service';
import { WorkflowPublishedDataService } from './workflow-published-data.service';
import { WorkflowPublishedDataService } from '@n8n/backend-services';
import { SubworkflowPolicyDenialError } from '@/errors/subworkflow-policy-denial.error';
import { SubworkflowPolicyChecker } from '@/executions/pre-execution-checks/subworkflow-policy-checker';

View File

@ -24,7 +24,7 @@ import { WorkflowPublicationApplier } from '@/workflows/publication/workflow-pub
import type { DurableJobProvisioner } from '@/scheduling/durable-job-provisioner';
import type { WorkflowScheduledJobOwner } from '@/scheduling/workflow-scheduled-job-owner';
import type { WorkflowTriggerActivator } from '@/workflows/triggers/workflow-trigger-activator';
import type { WorkflowPublishedDataService } from '@/workflows/workflow-published-data.service';
import type { WorkflowPublishedDataService } from '@n8n/backend-services';
import type { WorkflowService } from '@/workflows/workflow.service';
describe('WorkflowPublicationApplier', () => {

View File

@ -44,7 +44,7 @@ import {
type TriggerOperationAbort,
type TriggerTeardownFailure,
} from '@/workflows/triggers/workflow-trigger-activator';
import { WorkflowPublishedDataService } from '@/workflows/workflow-published-data.service';
import { WorkflowPublishedDataService } from '@n8n/backend-services';
/** A node whose type this instance cannot load, with the loader's error. */
type UnresolvableNode = { node: INode; error: Error };

View File

@ -1,6 +1,10 @@
/* eslint-disable @typescript-eslint/unbound-method */
import type { Logger } from '@n8n/backend-common';
import type { EventService } from '@n8n/backend-services';
import type {
EventService,
PublishedWorkflowDataForExecution,
WorkflowPublishedDataService,
} from '@n8n/backend-services';
import type { Project, WorkflowEntity } from '@n8n/db';
import type { IDeferredPromise } from '@n8n/utils/promise/deferred-promise';
import { createDeferredPromise } from '@n8n/utils/promise/deferred-promise';
@ -42,10 +46,7 @@ import type { OwnershipService } from '@/services/ownership.service';
import type { WorkflowPublisherService } from '@/workflows/workflow-publisher.service';
import * as WorkflowExecuteAdditionalData from '@/workflow-execute-additional-data';
import type { WorkflowExecutionService } from '@/workflows/workflow-execution.service';
import type {
PublishedWorkflowDataForExecution,
WorkflowPublishedDataService,
} from '@/workflows/workflow-published-data.service';
import type { EngineV2Dispatcher } from '@/services/engine-v2-dispatcher.service';
import { EngineV2PayloadFiles } from '@/services/engine-v2-payload-files.service';
import { EngineV2ActiveTriggers } from '@/workflows/triggers/engine-v2-active-triggers';

View File

@ -1,5 +1,5 @@
import { Logger } from '@n8n/backend-common';
import { EventService } from '@n8n/backend-services';
import { EventService, WorkflowPublishedDataService } from '@n8n/backend-services';
import { Time } from '@n8n/constants';
import type { IWorkflowDb, PollerCursor, PollLeaseFence } from '@n8n/db';
import { Service } from '@n8n/di';
@ -46,7 +46,7 @@ import { EngineV2ActiveTriggers } from '@/workflows/triggers/engine-v2-active-tr
import { PollCursorService } from '@/workflows/triggers/poll-cursor.service';
import { getWorkflowProjectDetailsSafe } from '@/workflows/utils';
import { WorkflowExecutionService } from '@/workflows/workflow-execution.service';
import { WorkflowPublishedDataService } from '@/workflows/workflow-published-data.service';
import { WorkflowPublisherService } from '@/workflows/workflow-publisher.service';
import { WorkflowStaticDataService } from '@/workflows/workflow-static-data.service';

View File

@ -1,5 +1,9 @@
import { Logger } from '@n8n/backend-common';
import { EventService, InstanceWriteAccessService } from '@n8n/backend-services';
import {
EventService,
InstanceWriteAccessService,
WorkflowPublishedDataService,
} from '@n8n/backend-services';
import { GlobalConfig, WorkflowsConfig } from '@n8n/config';
import type {
Project,
@ -55,7 +59,7 @@ import * as WorkflowExecuteAdditionalData from '@/workflow-execute-additional-da
import { WorkflowRunner } from '@/workflow-runner';
import { PollCursorService } from '@/workflows/triggers/poll-cursor.service';
import { getWorkflowProjectDetailsSafe } from '@/workflows/utils';
import { WorkflowPublishedDataService } from '@/workflows/workflow-published-data.service';
import type { WorkflowRequest } from '@/workflows/workflow.request';
@Service()

View File

@ -4,7 +4,7 @@ import { Container } from '@n8n/di';
import type { INode } from 'n8n-workflow';
import { v4 as uuid } from 'uuid';
import { WorkflowPublishedDataService } from '@/workflows/workflow-published-data.service';
import { WorkflowPublishedDataService } from '@n8n/backend-services';
import { createOwner } from '../shared/db/users';
import { createWorkflowHistoryItem } from '../shared/db/workflow-history';