From d62fce05bbfc18e044c490f1403ed22eb8d29ec2 Mon Sep 17 00:00:00 2001 From: Charlie Kolb Date: Wed, 16 Sep 2026 10:25:34 +0200 Subject: [PATCH] refactor(core): Move UrlService into @n8n/backend-services (no-changelog) UrlService only needs GlobalConfig. Nine backend modules import it. Co-Authored-By: Claude Fable 5.1 --- packages/@n8n/backend-services/package.json | 9 ++++++--- packages/@n8n/backend-services/src/index.ts | 1 + .../src/services/__tests__/url.service.test.ts | 0 .../backend-services}/src/services/url.service.ts | 0 packages/@n8n/backend-services/tsconfig.json | 4 +++- .../__tests__/workflow-execute-additional-data.test.ts | 2 +- .../__tests__/auth-service-browser-id-whitelist.test.ts | 2 +- packages/cli/src/auth/__tests__/auth.service.test.ts | 2 +- packages/cli/src/auth/auth.service.ts | 3 +-- packages/cli/src/commands/start.ts | 2 +- .../src/controllers/__tests__/users.controller.test.ts | 2 +- packages/cli/src/controllers/users.controller.ts | 3 +-- .../__tests__/execute-error-workflow.test.ts | 2 +- .../src/execution-lifecycle/execute-error-workflow.ts | 2 +- .../__tests__/subworkflow-policy-checker.test.ts | 2 +- .../pre-execution-checks/subworkflow-policy-checker.ts | 2 +- packages/cli/src/license/license.controller.ts | 3 +-- packages/cli/src/license/license.service.ts | 3 +-- .../__tests__/chat-integration.service.test.ts | 2 +- .../__tests__/helpers/telegram/replay-test-context.ts | 3 +-- .../__tests__/slack-app-setup.service.test.ts | 2 +- .../integrations/__tests__/slack-methods.service.test.ts | 2 +- .../agents/integrations/chat-integration.service.ts | 2 +- .../platforms/__tests__/telegram/integration.test.ts | 3 +-- .../platforms/slack/slack-methods.service.ts | 3 +-- .../integrations/platforms/telegram-integration.ts | 4 +--- .../__tests__/dynamic-credentials.controller.test.ts | 2 +- .../__tests__/workflow-status.controller.test.ts | 2 +- .../dynamic-credentials.controller.ts | 3 +-- .../__tests__/credential-check-proxy.service.test.ts | 2 +- .../services/credential-check-proxy.service.ts | 2 +- .../dynamic-credentials.ee/workflow-status.controller.ts | 3 +-- .../instance-ai-browser-session.service.test.ts | 2 +- .../instance-ai/__tests__/instance-ai.controller.test.ts | 2 +- .../browser/instance-ai-browser-session.service.ts | 2 +- .../src/modules/instance-ai/instance-ai.controller.ts | 2 +- .../cli/src/modules/instance-ai/instance-ai.service.ts | 3 +-- .../modules/mcp/__tests__/agent-tools.service.test.ts | 3 +-- .../mcp/__tests__/create-workflow-from-code.tool.test.ts | 3 +-- .../modules/mcp/__tests__/mcp-protected-resource.test.ts | 2 +- .../cli/src/modules/mcp/__tests__/mcp-scopes.test.ts | 2 +- .../cli/src/modules/mcp/__tests__/mcp.service.test.ts | 2 +- .../modules/mcp/__tests__/update-workflow.tool.test.ts | 3 +-- packages/cli/src/modules/mcp/mcp-protected-resource.ts | 2 +- packages/cli/src/modules/mcp/mcp.service.ts | 2 +- .../src/modules/mcp/tools/agents/agent-tools.service.ts | 3 +-- .../workflow-builder/create-workflow-from-code.tool.ts | 2 +- .../mcp/tools/workflow-builder/update-workflow.tool.ts | 2 +- .../__tests__/oauth-jwe-decrypt.service.test.ts | 3 +-- .../src/modules/oauth-jwe/oauth-jwe-decrypt.service.ts | 2 +- .../__tests__/chat-trigger-resource.resolver.api.test.ts | 2 +- .../chat-trigger-test-resource.resolver.api.test.ts | 2 +- .../__tests__/form-trigger-resource.resolver.api.test.ts | 2 +- .../form-trigger-test-resource.resolver.api.test.ts | 2 +- .../__tests__/oauth-consent.controller.api.test.ts | 2 +- .../oauth-server/__tests__/oauth-consent.service.test.ts | 3 +-- .../__tests__/oauth-flow.service.api.test.ts | 2 +- .../oauth-server/__tests__/oauth-server.service.test.ts | 2 +- .../oauth-server/__tests__/oauth-token.service.test.ts | 2 +- .../oauth-server/__tests__/oauth.controller.api.test.ts | 2 +- .../oauth-server/__tests__/oauth.controller.test.ts | 2 +- .../__tests__/test-trigger-resource-lifetime.api.test.ts | 2 +- ...rkflow-mcp-test-trigger-resource.resolver.api.test.ts | 2 +- .../workflow-mcp-trigger-authorization.api.test.ts | 2 +- .../workflow-mcp-trigger-resource.resolver.api.test.ts | 2 +- ...ow-webhook-test-trigger-resource.resolver.api.test.ts | 2 +- ...orkflow-webhook-trigger-resource.resolver.api.test.ts | 2 +- .../src/modules/oauth-server/oauth-consent.service.ts | 3 +-- .../cli/src/modules/oauth-server/oauth-flow.service.ts | 2 +- .../cli/src/modules/oauth-server/oauth-server.service.ts | 3 +-- .../cli/src/modules/oauth-server/oauth.controller.ts | 2 +- .../chat-trigger-resource.resolver.ts | 2 +- .../chat-trigger-test-resource.resolver.ts | 2 +- .../form-trigger-resource.resolver.ts | 2 +- .../form-trigger-test-resource.resolver.ts | 2 +- .../workflow-mcp-test-trigger-resource.resolver.ts | 2 +- .../workflow-mcp-trigger-resource.resolver.ts | 2 +- .../workflow-webhook-test-trigger-resource.resolver.ts | 2 +- .../workflow-webhook-trigger-resource.resolver.ts | 2 +- .../sso-oidc/__tests__/oidc.controller.ee.test.ts | 2 +- .../modules/sso-oidc/__tests__/oidc.service.ee.test.ts | 2 +- packages/cli/src/modules/sso-oidc/oidc.controller.ee.ts | 3 +-- packages/cli/src/modules/sso-oidc/oidc.service.ee.ts | 3 +-- .../src/modules/sso-saml/__tests__/saml-helpers.test.ts | 3 +-- .../sso-saml/__tests__/saml.controller.ee.test.ts | 2 +- .../modules/sso-saml/__tests__/saml.service.ee.test.ts | 2 +- packages/cli/src/modules/sso-saml/saml.controller.ee.ts | 3 +-- packages/cli/src/modules/sso-saml/saml.service.ee.ts | 3 +-- packages/cli/src/modules/sso-saml/service-provider.ee.ts | 3 +-- .../controllers/__tests__/embed-auth.controller.test.ts | 2 +- .../token-exchange/controllers/embed-auth.controller.ts | 2 +- .../oauth/__tests__/oauth.service.integration.test.ts | 2 +- packages/cli/src/oauth/__tests__/oauth.service.test.ts | 3 +-- packages/cli/src/oauth/oauth.service.ts | 3 +-- packages/cli/src/public-api/index.ts | 2 +- .../src/services/__tests__/ai-gateway.service.test.ts | 2 +- .../__tests__/ai-workflow-builder.service.test.ts | 2 +- .../cli/src/services/__tests__/frontend.service.test.ts | 2 +- packages/cli/src/services/__tests__/user.service.test.ts | 3 +-- packages/cli/src/services/ai-gateway.service.ts | 3 +-- packages/cli/src/services/ai-workflow-builder.service.ts | 2 +- packages/cli/src/services/frontend.service.ts | 2 +- packages/cli/src/services/user.service.ts | 2 +- .../email/__tests__/user-management-mailer.test.ts | 2 +- .../src/user-management/email/user-management-mailer.ts | 3 +-- packages/cli/src/workflow-execute-additional-data.ts | 2 +- .../form-trigger-submit-gate.api.test.ts | 2 +- pnpm-lock.yaml | 9 +++++++++ 108 files changed, 121 insertions(+), 137 deletions(-) rename packages/{cli => @n8n/backend-services}/src/services/__tests__/url.service.test.ts (100%) rename packages/{cli => @n8n/backend-services}/src/services/url.service.ts (100%) diff --git a/packages/@n8n/backend-services/package.json b/packages/@n8n/backend-services/package.json index 84f22ba60c9..6d3a42cbb14 100644 --- a/packages/@n8n/backend-services/package.json +++ b/packages/@n8n/backend-services/package.json @@ -12,8 +12,8 @@ "lint": "eslint . --quiet", "lint:fix": "eslint . --fix", "watch": "tsc -p tsconfig.build.json --watch", - "test": "vitest run --passWithNoTests", - "test:unit": "vitest run --passWithNoTests", + "test": "vitest run", + "test:unit": "vitest run", "test:dev": "vitest --silent=false" }, "main": "dist/index.js", @@ -24,6 +24,8 @@ ], "dependencies": { "@n8n/api-types": "workspace:*", + "@n8n/config": "workspace:*", + "@n8n/di": "workspace:*", "n8n-workflow": "workspace:*" }, "devDependencies": { @@ -33,7 +35,8 @@ "@vitest/coverage-v8": "catalog:", "eslint": "catalog:", "typescript": "catalog:typescript", - "vitest": "catalog:" + "vitest": "catalog:", + "vitest-mock-extended": "catalog:" }, "license": "LicenseRef-n8n-sustainable-use" } diff --git a/packages/@n8n/backend-services/src/index.ts b/packages/@n8n/backend-services/src/index.ts index a07793c96d8..0485b91dec0 100644 --- a/packages/@n8n/backend-services/src/index.ts +++ b/packages/@n8n/backend-services/src/index.ts @@ -16,3 +16,4 @@ export { UnauthenticatedError } from './errors/response-errors/unauthenticated.e export { UnprocessableRequestError } from './errors/response-errors/unprocessable.error'; export { UnsupportedMediaTypeError } from './errors/response-errors/unsupported-media-type.error'; export { WorkflowPublishBlockedError } from './errors/response-errors/workflow-publish-blocked.error'; +export { UrlService } from './services/url.service'; diff --git a/packages/cli/src/services/__tests__/url.service.test.ts b/packages/@n8n/backend-services/src/services/__tests__/url.service.test.ts similarity index 100% rename from packages/cli/src/services/__tests__/url.service.test.ts rename to packages/@n8n/backend-services/src/services/__tests__/url.service.test.ts diff --git a/packages/cli/src/services/url.service.ts b/packages/@n8n/backend-services/src/services/url.service.ts similarity index 100% rename from packages/cli/src/services/url.service.ts rename to packages/@n8n/backend-services/src/services/url.service.ts diff --git a/packages/@n8n/backend-services/tsconfig.json b/packages/@n8n/backend-services/tsconfig.json index 1a279f87993..fa540b74a6a 100644 --- a/packages/@n8n/backend-services/tsconfig.json +++ b/packages/@n8n/backend-services/tsconfig.json @@ -8,6 +8,8 @@ "include": ["src/**/*.ts"], "references": [ { "path": "../../workflow/tsconfig.build.cjs.json" }, - { "path": "../api-types/tsconfig.build.json" } + { "path": "../api-types/tsconfig.build.json" }, + { "path": "../config/tsconfig.build.json" }, + { "path": "../di/tsconfig.build.json" } ] } diff --git a/packages/cli/src/__tests__/workflow-execute-additional-data.test.ts b/packages/cli/src/__tests__/workflow-execute-additional-data.test.ts index 44881935153..2c0fe30a8bf 100644 --- a/packages/cli/src/__tests__/workflow-execute-additional-data.test.ts +++ b/packages/cli/src/__tests__/workflow-execute-additional-data.test.ts @@ -1,3 +1,4 @@ +import { UrlService } from '@n8n/backend-services'; import { mockInstance } from '@n8n/backend-test-utils'; import { ExecutionsConfig, GlobalConfig, WorkflowsConfig } from '@n8n/config'; import type { WorkflowEntity, Project, WorkflowHistory } from '@n8n/db'; @@ -42,7 +43,6 @@ import { hashAgentSandboxPrincipal } from '@/modules/agents/agent-sandbox-princi import { AgentWorkflowExecutionService } from '@/modules/agents/agent-workflow-execution.service'; import { DataTableProxyService } from '@/modules/data-table/data-table-proxy.service'; import { OwnershipService } from '@/services/ownership.service'; -import { UrlService } from '@/services/url.service'; import { WorkflowStatisticsService } from '@/services/workflow-statistics.service'; import { Telemetry } from '@/telemetry'; import { diff --git a/packages/cli/src/auth/__tests__/auth-service-browser-id-whitelist.test.ts b/packages/cli/src/auth/__tests__/auth-service-browser-id-whitelist.test.ts index 3580d541263..350144600d7 100644 --- a/packages/cli/src/auth/__tests__/auth-service-browser-id-whitelist.test.ts +++ b/packages/cli/src/auth/__tests__/auth-service-browser-id-whitelist.test.ts @@ -1,3 +1,4 @@ +import type { UrlService } from '@n8n/backend-services'; import type { GlobalConfig } from '@n8n/config'; import type { InvalidAuthTokenRepository, UserRepository } from '@n8n/db'; import { mock } from 'vitest-mock-extended'; @@ -5,7 +6,6 @@ import { mock } from 'vitest-mock-extended'; import { AuthService } from '@/auth/auth.service'; import type { MfaService } from '@/mfa/mfa.service'; import type { JwtService } from '@/services/jwt.service'; -import type { UrlService } from '@/services/url.service'; describe('AuthService Browser ID Whitelist', () => { let authService: AuthService; diff --git a/packages/cli/src/auth/__tests__/auth.service.test.ts b/packages/cli/src/auth/__tests__/auth.service.test.ts index b72d5cb0e13..035423fe569 100644 --- a/packages/cli/src/auth/__tests__/auth.service.test.ts +++ b/packages/cli/src/auth/__tests__/auth.service.test.ts @@ -1,4 +1,5 @@ import type { Logger } from '@n8n/backend-common'; +import type { UrlService } from '@n8n/backend-services'; import type { GlobalConfig } from '@n8n/config'; import { Time } from '@n8n/constants'; import type { @@ -17,7 +18,6 @@ import { AUTH_COOKIE_NAME } from '@/constants'; import type { License } from '@/license'; import type { MfaService } from '@/mfa/mfa.service'; import { JwtService } from '@/services/jwt.service'; -import type { UrlService } from '@/services/url.service'; describe('AuthService', () => { const browserId = 'test-browser-id'; diff --git a/packages/cli/src/auth/auth.service.ts b/packages/cli/src/auth/auth.service.ts index cf379706941..36e55b9cca3 100644 --- a/packages/cli/src/auth/auth.service.ts +++ b/packages/cli/src/auth/auth.service.ts @@ -1,5 +1,5 @@ import { Logger } from '@n8n/backend-common'; -import { AuthError, ForbiddenError } from '@n8n/backend-services'; +import { AuthError, ForbiddenError, UrlService } from '@n8n/backend-services'; import { GlobalConfig } from '@n8n/config'; import { Time } from '@n8n/constants'; import type { AuthenticatedRequest, User } from '@n8n/db'; @@ -15,7 +15,6 @@ import { AUTH_COOKIE_NAME, RESPONSE_ERROR_MESSAGES } from '@/constants'; import { License } from '@/license'; import { MfaService } from '@/mfa/mfa.service'; import { JwtService } from '@/services/jwt.service'; -import { UrlService } from '@/services/url.service'; interface AuthJwtPayload { /** User Id */ diff --git a/packages/cli/src/commands/start.ts b/packages/cli/src/commands/start.ts index 9349e34024a..4e2a895c529 100644 --- a/packages/cli/src/commands/start.ts +++ b/packages/cli/src/commands/start.ts @@ -1,5 +1,6 @@ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ +import { UrlService } from '@n8n/backend-services'; import { HTML_NONCE_PLACEHOLDER, LICENSE_FEATURES } from '@n8n/constants'; import { AuthRolesService, @@ -43,7 +44,6 @@ import { Server } from '@/server'; import { JwtService } from '@/services/jwt.service'; import { ExecutionsPruningService } from '@/services/pruning/executions-pruning.service'; import { WorkflowHistoryCompactionService } from '@/services/pruning/workflow-history-compaction.service'; -import { UrlService } from '@/services/url.service'; import { WorkflowStatisticsRollupService } from '@/services/workflow-statistics-rollup.service'; import { WaitTracker } from '@/wait-tracker'; diff --git a/packages/cli/src/controllers/__tests__/users.controller.test.ts b/packages/cli/src/controllers/__tests__/users.controller.test.ts index d18699f24ce..b7bfb0631cd 100644 --- a/packages/cli/src/controllers/__tests__/users.controller.test.ts +++ b/packages/cli/src/controllers/__tests__/users.controller.test.ts @@ -1,3 +1,4 @@ +import type { UrlService } from '@n8n/backend-services'; import { NotFoundError } from '@n8n/backend-services'; import type { AuthenticatedRequest, User, UserRepository } from '@n8n/db'; import type { Response } from 'express'; @@ -5,7 +6,6 @@ import { mock } from 'vitest-mock-extended'; import type { UserRequest } from '@/requests'; import type { JwtService } from '@/services/jwt.service'; -import type { UrlService } from '@/services/url.service'; import type { UserService } from '@/services/user.service'; import { UsersController } from '../users.controller'; diff --git a/packages/cli/src/controllers/users.controller.ts b/packages/cli/src/controllers/users.controller.ts index b30e3478d4d..addb1c568bf 100644 --- a/packages/cli/src/controllers/users.controller.ts +++ b/packages/cli/src/controllers/users.controller.ts @@ -6,7 +6,7 @@ import { UsersListFilterDto, usersListSchema, } from '@n8n/api-types'; -import { ForbiddenError, NotFoundError } from '@n8n/backend-services'; +import { ForbiddenError, NotFoundError, UrlService } from '@n8n/backend-services'; import type { PublicUser } from '@n8n/db'; import { User, @@ -33,7 +33,6 @@ import { Response } from 'express'; import { AuthService } from '@/auth/auth.service'; import { UserRequest } from '@/requests'; import { JwtService } from '@/services/jwt.service'; -import { UrlService } from '@/services/url.service'; import { UserService } from '@/services/user.service'; @RestController('/users') diff --git a/packages/cli/src/execution-lifecycle/__tests__/execute-error-workflow.test.ts b/packages/cli/src/execution-lifecycle/__tests__/execute-error-workflow.test.ts index 49d101b3197..03dfc163e58 100644 --- a/packages/cli/src/execution-lifecycle/__tests__/execute-error-workflow.test.ts +++ b/packages/cli/src/execution-lifecycle/__tests__/execute-error-workflow.test.ts @@ -1,4 +1,5 @@ import { Logger } from '@n8n/backend-common'; +import { UrlService } from '@n8n/backend-services'; import { mockInstance } from '@n8n/backend-test-utils'; import { GlobalConfig } from '@n8n/config'; import { Container } from '@n8n/di'; @@ -9,7 +10,6 @@ import { mock } from 'vitest-mock-extended'; import { PolicyViolationError } from '@/policy/policy-violation.error'; import { OwnershipService } from '@/services/ownership.service'; -import { UrlService } from '@/services/url.service'; import { WorkflowExecutionService } from '@/workflows/workflow-execution.service'; import { executeErrorWorkflow } from '../execute-error-workflow'; diff --git a/packages/cli/src/execution-lifecycle/execute-error-workflow.ts b/packages/cli/src/execution-lifecycle/execute-error-workflow.ts index 3ebfc040d42..3179f65a1a5 100644 --- a/packages/cli/src/execution-lifecycle/execute-error-workflow.ts +++ b/packages/cli/src/execution-lifecycle/execute-error-workflow.ts @@ -1,4 +1,5 @@ import { Logger } from '@n8n/backend-common'; +import { UrlService } from '@n8n/backend-services'; import { GlobalConfig } from '@n8n/config'; import { Container } from '@n8n/di'; import { ErrorReporter } from 'n8n-core'; @@ -7,7 +8,6 @@ import type { IRun, IWorkflowBase, WorkflowExecuteMode } from 'n8n-workflow'; import type { IWorkflowErrorData } from '@/interfaces'; import { isPolicyRefusal } from '@/policy/policy-violation.error'; import { OwnershipService } from '@/services/ownership.service'; -import { UrlService } from '@/services/url.service'; /** * Resolved lazily. A static import would close the cycle diff --git a/packages/cli/src/executions/pre-execution-checks/__tests__/subworkflow-policy-checker.test.ts b/packages/cli/src/executions/pre-execution-checks/__tests__/subworkflow-policy-checker.test.ts index 55122ef2857..2e8ead9afa2 100644 --- a/packages/cli/src/executions/pre-execution-checks/__tests__/subworkflow-policy-checker.test.ts +++ b/packages/cli/src/executions/pre-execution-checks/__tests__/subworkflow-policy-checker.test.ts @@ -1,3 +1,4 @@ +import type { UrlService } from '@n8n/backend-services'; import { mockInstance } from '@n8n/backend-test-utils'; import type { GlobalConfig } from '@n8n/config'; import type { Project, User, WorkflowEntity } from '@n8n/db'; @@ -12,7 +13,6 @@ import { } from '@/errors/subworkflow-policy-denial.error'; import type { AccessService } from '@/services/access.service'; import { OwnershipService } from '@/services/ownership.service'; -import type { UrlService } from '@/services/url.service'; import { SubworkflowPolicyChecker } from '../subworkflow-policy-checker'; diff --git a/packages/cli/src/executions/pre-execution-checks/subworkflow-policy-checker.ts b/packages/cli/src/executions/pre-execution-checks/subworkflow-policy-checker.ts index 6fe1087b0fc..721bbc462bb 100644 --- a/packages/cli/src/executions/pre-execution-checks/subworkflow-policy-checker.ts +++ b/packages/cli/src/executions/pre-execution-checks/subworkflow-policy-checker.ts @@ -1,4 +1,5 @@ import { Logger } from '@n8n/backend-common'; +import { UrlService } from '@n8n/backend-services'; import { GlobalConfig } from '@n8n/config'; import type { Project } from '@n8n/db'; import { Service } from '@n8n/di'; @@ -7,7 +8,6 @@ import { type INode, type IWorkflowBase, type WorkflowSettings } from 'n8n-workf import { SubworkflowPolicyDenialError } from '@/errors/subworkflow-policy-denial.error'; import { AccessService } from '@/services/access.service'; import { OwnershipService } from '@/services/ownership.service'; -import { UrlService } from '@/services/url.service'; type Policy = WorkflowSettings.CallerPolicy; type DenialPolicy = Exclude; diff --git a/packages/cli/src/license/license.controller.ts b/packages/cli/src/license/license.controller.ts index 3bbdb4453c4..cc00f1141ea 100644 --- a/packages/cli/src/license/license.controller.ts +++ b/packages/cli/src/license/license.controller.ts @@ -1,12 +1,11 @@ import { CommunityRegisteredRequestDto } from '@n8n/api-types'; -import { BadRequestError } from '@n8n/backend-services'; +import { BadRequestError, UrlService } from '@n8n/backend-services'; import { AuthenticatedRequest } from '@n8n/db'; import { Get, Post, RestController, GlobalScope, Body } from '@n8n/decorators'; import type { AxiosError } from 'axios'; import { InstanceSettings } from 'n8n-core'; import { LicenseRequest } from '@/requests'; -import { UrlService } from '@/services/url.service'; import { LicenseService } from './license.service'; diff --git a/packages/cli/src/license/license.service.ts b/packages/cli/src/license/license.service.ts index 59a556117d5..fac983dbb35 100644 --- a/packages/cli/src/license/license.service.ts +++ b/packages/cli/src/license/license.service.ts @@ -1,6 +1,6 @@ import { LicenseState, Logger } from '@n8n/backend-common'; import { OutboundHttp, type HttpRequestClient, isHttpRequestError } from '@n8n/backend-network'; -import { BadRequestError } from '@n8n/backend-services'; +import { BadRequestError, UrlService } from '@n8n/backend-services'; import { Time } from '@n8n/constants'; import type { User } from '@n8n/db'; import { WorkflowRepository } from '@n8n/db'; @@ -10,7 +10,6 @@ import { ensureError } from '@n8n/utils/errors/ensure-error'; import { LicenseEulaRequiredError } from '@/errors/response-errors/license-eula-required.error'; import { EventService } from '@/events/event.service'; import { License } from '@/license'; -import { UrlService } from '@/services/url.service'; const REQUEST_TIMEOUT_MS = 30 * Time.seconds.toMilliseconds; diff --git a/packages/cli/src/modules/agents/integrations/__tests__/chat-integration.service.test.ts b/packages/cli/src/modules/agents/integrations/__tests__/chat-integration.service.test.ts index 2890cc65c5a..83482febcc3 100644 --- a/packages/cli/src/modules/agents/integrations/__tests__/chat-integration.service.test.ts +++ b/packages/cli/src/modules/agents/integrations/__tests__/chat-integration.service.test.ts @@ -1,3 +1,4 @@ +import type { UrlService } from '@n8n/backend-services'; import type { Mock, MockInstance } from 'vitest'; import type { Logger } from '@n8n/backend-common'; import { mockLogger } from '@n8n/backend-test-utils'; @@ -10,7 +11,6 @@ import type { StateAdapter } from 'chat'; import type { CredentialsService } from '@/credentials/credentials.service'; import type { Publisher } from '@/scaling/pubsub/publisher.service'; -import type { UrlService } from '@/services/url.service'; import { AgentExecutionOrchestratorService } from '../../agent-execution-orchestrator.service'; import type { Agent } from '../../entities/agent.entity'; diff --git a/packages/cli/src/modules/agents/integrations/__tests__/helpers/telegram/replay-test-context.ts b/packages/cli/src/modules/agents/integrations/__tests__/helpers/telegram/replay-test-context.ts index b63e3669f6e..5b096c937eb 100644 --- a/packages/cli/src/modules/agents/integrations/__tests__/helpers/telegram/replay-test-context.ts +++ b/packages/cli/src/modules/agents/integrations/__tests__/helpers/telegram/replay-test-context.ts @@ -2,12 +2,11 @@ import type { StreamChunk } from '@n8n/agents'; import type { AgentIntegrationConfig } from '@n8n/api-types'; import type { Logger as BackendLogger } from '@n8n/backend-common'; import type { OutboundHttp } from '@n8n/backend-network'; +import type { UrlService } from '@n8n/backend-services'; import type { InstanceSettings } from 'n8n-core'; import type { Mock } from 'vitest'; import { mock } from 'vitest-mock-extended'; -import type { UrlService } from '@/services/url.service'; - import type { AgentRepository } from '../../../../repositories/agent.repository'; import type { ChatInstance } from '../../../chat-integration.service'; import { ComponentMapper } from '../../../component-mapper'; diff --git a/packages/cli/src/modules/agents/integrations/__tests__/slack-app-setup.service.test.ts b/packages/cli/src/modules/agents/integrations/__tests__/slack-app-setup.service.test.ts index 2da8970bf7e..8c7cb294ba4 100644 --- a/packages/cli/src/modules/agents/integrations/__tests__/slack-app-setup.service.test.ts +++ b/packages/cli/src/modules/agents/integrations/__tests__/slack-app-setup.service.test.ts @@ -1,3 +1,4 @@ +import type { UrlService } from '@n8n/backend-services'; import { BadRequestError } from '@n8n/backend-services'; import type { Mock, Mocked } from 'vitest'; import type { Logger } from '@n8n/backend-common'; @@ -11,7 +12,6 @@ import type { CredentialsFinderService } from '@/credentials/credentials-finder. import type { CredentialsOverwrites } from '@/credentials-overwrites'; import type { CacheService } from '@/services/cache/cache.service'; import type { ProjectService } from '@/services/project.service.ee'; -import type { UrlService } from '@/services/url.service'; import type { AgentIntegrationManagementService } from '../../agent-integration-management.service'; import type { AgentRepository } from '../../repositories/agent.repository'; diff --git a/packages/cli/src/modules/agents/integrations/__tests__/slack-methods.service.test.ts b/packages/cli/src/modules/agents/integrations/__tests__/slack-methods.service.test.ts index 00c15e09dfa..0f1de61cd8c 100644 --- a/packages/cli/src/modules/agents/integrations/__tests__/slack-methods.service.test.ts +++ b/packages/cli/src/modules/agents/integrations/__tests__/slack-methods.service.test.ts @@ -1,12 +1,12 @@ /* eslint-disable @typescript-eslint/unbound-method -- mock-based tests intentionally reference unbound methods */ import type { Logger } from '@n8n/backend-common'; import type { OutboundHttp } from '@n8n/backend-network'; +import type { UrlService } from '@n8n/backend-services'; import type { Cipher } from 'n8n-core'; import { mock } from 'vitest-mock-extended'; import type { CredentialsService } from '@/credentials/credentials.service'; import type { CacheService } from '@/services/cache/cache.service'; -import type { UrlService } from '@/services/url.service'; import type { AgentIntegrationManagementService } from '../../agent-integration-management.service'; import type { Agent } from '../../entities/agent.entity'; diff --git a/packages/cli/src/modules/agents/integrations/chat-integration.service.ts b/packages/cli/src/modules/agents/integrations/chat-integration.service.ts index 73f9f20add4..313d66999db 100644 --- a/packages/cli/src/modules/agents/integrations/chat-integration.service.ts +++ b/packages/cli/src/modules/agents/integrations/chat-integration.service.ts @@ -1,5 +1,6 @@ import { AgentIntegrationConfig, type AgentIntegrationSettings } from '@n8n/api-types'; import { Logger } from '@n8n/backend-common'; +import { UrlService } from '@n8n/backend-services'; import { GlobalConfig } from '@n8n/config'; import { OnLeaderStepdown, OnPubSubEvent } from '@n8n/decorators'; import { Container, Service } from '@n8n/di'; @@ -11,7 +12,6 @@ import { OperationalError, UnexpectedError } from 'n8n-workflow'; import { CredentialsService } from '@/credentials/credentials.service'; import { Publisher } from '@/scaling/pubsub/publisher.service'; import type { PubSubCommandMap } from '@/scaling/pubsub/pubsub.event-map'; -import { UrlService } from '@/services/url.service'; import { AgentChatBridge } from './agent-chat-bridge'; import { diff --git a/packages/cli/src/modules/agents/integrations/platforms/__tests__/telegram/integration.test.ts b/packages/cli/src/modules/agents/integrations/platforms/__tests__/telegram/integration.test.ts index ee0c5f19d2f..9815ab97f3d 100644 --- a/packages/cli/src/modules/agents/integrations/platforms/__tests__/telegram/integration.test.ts +++ b/packages/cli/src/modules/agents/integrations/platforms/__tests__/telegram/integration.test.ts @@ -1,4 +1,5 @@ /* eslint-disable @typescript-eslint/unbound-method -- mock-based tests intentionally reference unbound methods */ +import type { UrlService } from '@n8n/backend-services'; import { BadRequestError, ConflictError } from '@n8n/backend-services'; import type { Mock, Mocked, MockedFunction } from 'vitest'; import type { Logger } from '@n8n/backend-common'; @@ -8,8 +9,6 @@ import { createHmac } from 'crypto'; import { mock } from 'vitest-mock-extended'; import type { InstanceSettings } from 'n8n-core'; -import type { UrlService } from '@/services/url.service'; - import type { Agent } from '../../../../entities/agent.entity'; import type { AgentRepository } from '../../../../repositories/agent.repository'; import type { AgentChatIntegrationContext } from '../../../agent-chat-integration'; diff --git a/packages/cli/src/modules/agents/integrations/platforms/slack/slack-methods.service.ts b/packages/cli/src/modules/agents/integrations/platforms/slack/slack-methods.service.ts index ea2589bb201..c3f374cc9f7 100644 --- a/packages/cli/src/modules/agents/integrations/platforms/slack/slack-methods.service.ts +++ b/packages/cli/src/modules/agents/integrations/platforms/slack/slack-methods.service.ts @@ -5,7 +5,7 @@ import type { } from '@n8n/api-types'; import { Logger } from '@n8n/backend-common'; import { OutboundHttp } from '@n8n/backend-network'; -import { BadRequestError, NotFoundError } from '@n8n/backend-services'; +import { BadRequestError, NotFoundError, UrlService } from '@n8n/backend-services'; import type { User } from '@n8n/db'; import { Service } from '@n8n/di'; import { isRecord } from '@n8n/utils/is-record'; @@ -13,7 +13,6 @@ import { Cipher } from 'n8n-core'; import { CredentialsService } from '@/credentials/credentials.service'; import { CacheService } from '@/services/cache/cache.service'; -import { UrlService } from '@/services/url.service'; import { managedSlackAppCacheKey, diff --git a/packages/cli/src/modules/agents/integrations/platforms/telegram-integration.ts b/packages/cli/src/modules/agents/integrations/platforms/telegram-integration.ts index 4aebb9707d8..58a6e88e440 100644 --- a/packages/cli/src/modules/agents/integrations/platforms/telegram-integration.ts +++ b/packages/cli/src/modules/agents/integrations/platforms/telegram-integration.ts @@ -2,7 +2,7 @@ import { AgentIntegrationConfig } from '@n8n/api-types'; import type { RichCardComponentType } from '@n8n/api-types'; import { Logger } from '@n8n/backend-common'; import { OutboundHttp } from '@n8n/backend-network'; -import { BadRequestError } from '@n8n/backend-services'; +import { BadRequestError, UrlService } from '@n8n/backend-services'; import { Service } from '@n8n/di'; import { isRecord } from '@n8n/utils/is-record'; import type { Thread, Author } from 'chat'; @@ -10,8 +10,6 @@ import { createHmac } from 'crypto'; import { InstanceSettings } from 'n8n-core'; import { UnexpectedError } from 'n8n-workflow'; -import { UrlService } from '@/services/url.service'; - import { AgentRepository } from '../../repositories/agent.repository'; import { AgentChatIntegration, diff --git a/packages/cli/src/modules/dynamic-credentials.ee/__tests__/dynamic-credentials.controller.test.ts b/packages/cli/src/modules/dynamic-credentials.ee/__tests__/dynamic-credentials.controller.test.ts index afb350ca0d3..8108b61e8bf 100644 --- a/packages/cli/src/modules/dynamic-credentials.ee/__tests__/dynamic-credentials.controller.test.ts +++ b/packages/cli/src/modules/dynamic-credentials.ee/__tests__/dynamic-credentials.controller.test.ts @@ -1,4 +1,5 @@ import { Logger } from '@n8n/backend-common'; +import { UrlService } from '@n8n/backend-services'; import { mockInstance } from '@n8n/backend-test-utils'; import { type AuthenticatedRequest, type CredentialsEntity } from '@n8n/db'; import { Container } from '@n8n/di'; @@ -19,7 +20,6 @@ import { DynamicCredentialService, } from '@/modules/dynamic-credentials.ee/services'; import { OauthService } from '@/oauth/oauth.service'; -import { UrlService } from '@/services/url.service'; import { DynamicCredentialWebService } from '../services/dynamic-credential-web.service'; diff --git a/packages/cli/src/modules/dynamic-credentials.ee/__tests__/workflow-status.controller.test.ts b/packages/cli/src/modules/dynamic-credentials.ee/__tests__/workflow-status.controller.test.ts index e408b354138..c1ca28aad87 100644 --- a/packages/cli/src/modules/dynamic-credentials.ee/__tests__/workflow-status.controller.test.ts +++ b/packages/cli/src/modules/dynamic-credentials.ee/__tests__/workflow-status.controller.test.ts @@ -1,3 +1,4 @@ +import type { UrlService } from '@n8n/backend-services'; import { BadRequestError, NotFoundError } from '@n8n/backend-services'; import type { Mocked } from 'vitest'; import { mock } from 'vitest-mock-extended'; @@ -7,7 +8,6 @@ import type { DynamicCredentialCorsService } from '../services/dynamic-credentia import type { DynamicCredentialWebService } from '../services/dynamic-credential-web.service'; import { WorkflowStatusController } from '../workflow-status.controller'; import type { CredentialResolverWorkflowService } from '../services/credential-resolver-workflow.service'; -import type { UrlService } from '@/services/url.service'; import type { WorkflowFinderService } from '@/workflows/workflow-finder.service'; import type { GlobalConfig } from '@n8n/config'; diff --git a/packages/cli/src/modules/dynamic-credentials.ee/dynamic-credentials.controller.ts b/packages/cli/src/modules/dynamic-credentials.ee/dynamic-credentials.controller.ts index 3ebd5dff80d..d8d19c9cfae 100644 --- a/packages/cli/src/modules/dynamic-credentials.ee/dynamic-credentials.controller.ts +++ b/packages/cli/src/modules/dynamic-credentials.ee/dynamic-credentials.controller.ts @@ -1,4 +1,4 @@ -import { BadRequestError, NotFoundError } from '@n8n/backend-services'; +import { BadRequestError, NotFoundError, UrlService } from '@n8n/backend-services'; import { Time } from '@n8n/constants'; import { CredentialsEntity, AuthenticatedRequest, isAuthenticatedRequest } from '@n8n/db'; import { Delete, Get, Options, Param, Post, RestController } from '@n8n/decorators'; @@ -12,7 +12,6 @@ import { CredentialsFinderService } from '@/credentials/credentials-finder.servi import { EnterpriseCredentialsService } from '@/credentials/credentials.service.ee'; import { EventService } from '@/events/event.service'; import { CreateCsrfStateData, OauthService } from '@/oauth/oauth.service'; -import { UrlService } from '@/services/url.service'; import { DynamicCredentialResolverRepository } from './database/repositories/credential-resolver.repository'; import { DynamicCredentialsConfig } from './dynamic-credentials.config'; diff --git a/packages/cli/src/modules/dynamic-credentials.ee/services/__tests__/credential-check-proxy.service.test.ts b/packages/cli/src/modules/dynamic-credentials.ee/services/__tests__/credential-check-proxy.service.test.ts index 9f6e72ba034..0fa22527cc1 100644 --- a/packages/cli/src/modules/dynamic-credentials.ee/services/__tests__/credential-check-proxy.service.test.ts +++ b/packages/cli/src/modules/dynamic-credentials.ee/services/__tests__/credential-check-proxy.service.test.ts @@ -1,3 +1,4 @@ +import type { UrlService } from '@n8n/backend-services'; import type { Mocked } from 'vitest'; import type { GlobalConfig } from '@n8n/config'; import type { @@ -12,7 +13,6 @@ import type { import type { CredentialTypes } from '@/credential-types'; import type { EnterpriseCredentialsService } from '@/credentials/credentials.service.ee'; import type { NodeTypes } from '@/node-types'; -import type { UrlService } from '@/services/url.service'; import type { ExecutionContextService } from 'n8n-core'; import { CredentialsEntity } from '@n8n/db'; diff --git a/packages/cli/src/modules/dynamic-credentials.ee/services/credential-check-proxy.service.ts b/packages/cli/src/modules/dynamic-credentials.ee/services/credential-check-proxy.service.ts index a9d21255093..f52654adddb 100644 --- a/packages/cli/src/modules/dynamic-credentials.ee/services/credential-check-proxy.service.ts +++ b/packages/cli/src/modules/dynamic-credentials.ee/services/credential-check-proxy.service.ts @@ -1,3 +1,4 @@ +import { UrlService } from '@n8n/backend-services'; import { GlobalConfig } from '@n8n/config'; import { Service } from '@n8n/di'; import type { @@ -13,7 +14,6 @@ import type { import { CredentialTypes } from '@/credential-types'; import { EnterpriseCredentialsService } from '@/credentials/credentials.service.ee'; import { NodeTypes } from '@/node-types'; -import { UrlService } from '@/services/url.service'; import { ExecutionContextService } from 'n8n-core'; import { AuthorizeIntentService } from './authorize-intent.service'; diff --git a/packages/cli/src/modules/dynamic-credentials.ee/workflow-status.controller.ts b/packages/cli/src/modules/dynamic-credentials.ee/workflow-status.controller.ts index e817a171bc6..ad364e783dc 100644 --- a/packages/cli/src/modules/dynamic-credentials.ee/workflow-status.controller.ts +++ b/packages/cli/src/modules/dynamic-credentials.ee/workflow-status.controller.ts @@ -1,5 +1,5 @@ import { WorkflowExecutionStatus } from '@n8n/api-types'; -import { BadRequestError, NotFoundError } from '@n8n/backend-services'; +import { BadRequestError, NotFoundError, UrlService } from '@n8n/backend-services'; import { GlobalConfig } from '@n8n/config'; import { Time } from '@n8n/constants'; import { isAuthenticatedRequest } from '@n8n/db'; @@ -7,7 +7,6 @@ import { Get, Options, RestController } from '@n8n/decorators'; import { Container } from '@n8n/di'; import { Request, Response } from 'express'; -import { UrlService } from '@/services/url.service'; import { WorkflowFinderService } from '@/workflows/workflow-finder.service'; import { DynamicCredentialsConfig } from './dynamic-credentials.config'; diff --git a/packages/cli/src/modules/instance-ai/__tests__/instance-ai-browser-session.service.test.ts b/packages/cli/src/modules/instance-ai/__tests__/instance-ai-browser-session.service.test.ts index 34fcdbfee2e..52b2b3f36b3 100644 --- a/packages/cli/src/modules/instance-ai/__tests__/instance-ai-browser-session.service.test.ts +++ b/packages/cli/src/modules/instance-ai/__tests__/instance-ai-browser-session.service.test.ts @@ -1,3 +1,4 @@ +import type { UrlService } from '@n8n/backend-services'; import type { Mock } from 'vitest'; import type { Logger } from '@n8n/backend-common'; import type { GlobalConfig } from '@n8n/config'; @@ -6,7 +7,6 @@ import { mock } from 'vitest-mock-extended'; import type { CredentialsService } from '@/credentials/credentials.service'; import type { Push } from '@/push'; -import type { UrlService } from '@/services/url.service'; import type { Telemetry } from '@/telemetry'; import { diff --git a/packages/cli/src/modules/instance-ai/__tests__/instance-ai.controller.test.ts b/packages/cli/src/modules/instance-ai/__tests__/instance-ai.controller.test.ts index 755abeb5557..8bd9873b815 100644 --- a/packages/cli/src/modules/instance-ai/__tests__/instance-ai.controller.test.ts +++ b/packages/cli/src/modules/instance-ai/__tests__/instance-ai.controller.test.ts @@ -1,3 +1,4 @@ +import type { UrlService } from '@n8n/backend-services'; import { BadRequestError, ConflictError, @@ -79,7 +80,6 @@ import type { CredentialsService } from '@/credentials/credentials.service'; import type { Push } from '@/push'; import type { Publisher } from '@/scaling/pubsub/publisher.service'; import type { ProjectService } from '@/services/project.service.ee'; -import type { UrlService } from '@/services/url.service'; import type { InstanceAiBrowserSessionService } from '../browser/instance-ai-browser-session.service'; import type { EvalAgentExecutionService } from '../eval/agent-execution.service'; diff --git a/packages/cli/src/modules/instance-ai/browser/instance-ai-browser-session.service.ts b/packages/cli/src/modules/instance-ai/browser/instance-ai-browser-session.service.ts index 90330e6662d..e05b53a5e9c 100644 --- a/packages/cli/src/modules/instance-ai/browser/instance-ai-browser-session.service.ts +++ b/packages/cli/src/modules/instance-ai/browser/instance-ai-browser-session.service.ts @@ -4,6 +4,7 @@ import type { ToolCategory, } from '@n8n/api-types'; import { Logger } from '@n8n/backend-common'; +import { UrlService } from '@n8n/backend-services'; import { GlobalConfig } from '@n8n/config'; import { UserRepository } from '@n8n/db'; import { Service } from '@n8n/di'; @@ -24,7 +25,6 @@ import { join } from 'node:path'; import { CredentialsService } from '@/credentials/credentials.service'; import { Push } from '@/push'; -import { UrlService } from '@/services/url.service'; import { Telemetry } from '@/telemetry'; import { BrowserLocalMcpServer } from './browser-local-mcp-server'; diff --git a/packages/cli/src/modules/instance-ai/instance-ai.controller.ts b/packages/cli/src/modules/instance-ai/instance-ai.controller.ts index f92b2a1a50f..12fc8f8642d 100644 --- a/packages/cli/src/modules/instance-ai/instance-ai.controller.ts +++ b/packages/cli/src/modules/instance-ai/instance-ai.controller.ts @@ -32,6 +32,7 @@ import { ConflictError, ForbiddenError, NotFoundError, + UrlService, } from '@n8n/backend-services'; import { GlobalConfig } from '@n8n/config'; import { AuthenticatedRequest, User, UserRepository } from '@n8n/db'; @@ -85,7 +86,6 @@ import { CredentialsService } from '@/credentials/credentials.service'; import { Push } from '@/push'; import { Publisher } from '@/scaling/pubsub/publisher.service'; import { ProjectService } from '@/services/project.service.ee'; -import { UrlService } from '@/services/url.service'; type FlushableResponse = Response & { flush?: () => void }; diff --git a/packages/cli/src/modules/instance-ai/instance-ai.service.ts b/packages/cli/src/modules/instance-ai/instance-ai.service.ts index cd2c5b8f353..5141fa38c07 100644 --- a/packages/cli/src/modules/instance-ai/instance-ai.service.ts +++ b/packages/cli/src/modules/instance-ai/instance-ai.service.ts @@ -31,7 +31,7 @@ import { } from '@n8n/api-types'; import { Logger, ModuleRegistry } from '@n8n/backend-common'; import { SsrfProtectionService } from '@n8n/backend-network'; -import { BadRequestError, ForbiddenError } from '@n8n/backend-services'; +import { BadRequestError, ForbiddenError, UrlService } from '@n8n/backend-services'; import { GlobalConfig, SsrfProtectionConfig, @@ -144,7 +144,6 @@ import { AiPreferenceService, renderAiPreferencesBlock } from '@/services/ai-pre import { AiService } from '@/services/ai.service'; import { InstanceWriteAccessService } from '@/services/instance-write-access.service'; import { ProxyTokenManager } from '@/services/proxy-token-manager'; -import { UrlService } from '@/services/url.service'; import { Telemetry } from '@/telemetry'; import { assertNever } from '@/utils'; diff --git a/packages/cli/src/modules/mcp/__tests__/agent-tools.service.test.ts b/packages/cli/src/modules/mcp/__tests__/agent-tools.service.test.ts index eba1508a869..de50d462f70 100644 --- a/packages/cli/src/modules/mcp/__tests__/agent-tools.service.test.ts +++ b/packages/cli/src/modules/mcp/__tests__/agent-tools.service.test.ts @@ -1,7 +1,7 @@ import { zodToJsonSchema } from '@n8n/ai-utilities/json-schema'; import { APPROVAL_RESUME_SCHEMA } from '@n8n/agents/tool'; import type { AgentJsonConfig } from '@n8n/api-types'; -import { ConflictError } from '@n8n/backend-services'; +import { ConflictError, UrlService } from '@n8n/backend-services'; import { mockInstance, mockLogger } from '@n8n/backend-test-utils'; import { OutboundHttp } from '@n8n/backend-network'; import { User, type WorkflowRepository } from '@n8n/db'; @@ -59,7 +59,6 @@ import { NodeTypes } from '@/node-types'; import { OauthService } from '@/oauth/oauth.service'; import { userHasScopes } from '@/permissions.ee/check-access'; import { ProjectScopeService } from '@/permissions.ee/project-scope.service'; -import { UrlService } from '@/services/url.service'; import { Telemetry } from '@/telemetry'; import { AGENT_TOOLS, TOOLS_BY_SCOPE } from '../mcp-scopes'; diff --git a/packages/cli/src/modules/mcp/__tests__/create-workflow-from-code.tool.test.ts b/packages/cli/src/modules/mcp/__tests__/create-workflow-from-code.tool.test.ts index 15a8236b3ae..a966b519aa1 100644 --- a/packages/cli/src/modules/mcp/__tests__/create-workflow-from-code.tool.test.ts +++ b/packages/cli/src/modules/mcp/__tests__/create-workflow-from-code.tool.test.ts @@ -1,4 +1,4 @@ -import { NotFoundError } from '@n8n/backend-services'; +import { NotFoundError, UrlService } from '@n8n/backend-services'; import { mockInstance } from '@n8n/backend-test-utils'; import { ProjectRepository, User, WorkflowEntity } from '@n8n/db'; import { NodeConnectionTypes, type INode } from 'n8n-workflow'; @@ -9,7 +9,6 @@ import { z } from 'zod'; import { CredentialsService } from '@/credentials/credentials.service'; import { NodeTypes } from '@/node-types'; import type { AiGatewayService } from '@/services/ai-gateway.service'; -import { UrlService } from '@/services/url.service'; import { Telemetry } from '@/telemetry'; import { WorkflowCreationService } from '@/workflows/workflow-creation.service'; import { WorkflowFinderService } from '@/workflows/workflow-finder.service'; diff --git a/packages/cli/src/modules/mcp/__tests__/mcp-protected-resource.test.ts b/packages/cli/src/modules/mcp/__tests__/mcp-protected-resource.test.ts index 585606f4b4e..b3ca4c7dde2 100644 --- a/packages/cli/src/modules/mcp/__tests__/mcp-protected-resource.test.ts +++ b/packages/cli/src/modules/mcp/__tests__/mcp-protected-resource.test.ts @@ -1,10 +1,10 @@ import type { LicenseState, ModuleRegistry } from '@n8n/backend-common'; +import type { UrlService } from '@n8n/backend-services'; import type { GlobalConfig } from '@n8n/config'; import { mock } from 'vitest-mock-extended'; import type { McpConfig } from '../mcp.config'; import type { McpSettingsService } from '../mcp.settings.service'; -import type { UrlService } from '@/services/url.service'; import { McpProtectedResource } from '../mcp-protected-resource'; 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 6c7631ba252..46409ec4958 100644 --- a/packages/cli/src/modules/mcp/__tests__/mcp-scopes.test.ts +++ b/packages/cli/src/modules/mcp/__tests__/mcp-scopes.test.ts @@ -1,4 +1,5 @@ import { LicenseState, ModuleRegistry } from '@n8n/backend-common'; +import { UrlService } 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'; @@ -22,7 +23,6 @@ import { NodeResourceExplorerService } from '@/services/node-resource-explorer.s import { ProjectService } from '@/services/project.service.ee'; import { RoleService } from '@/services/role.service'; import { TagService } from '@/services/tag.service'; -import { UrlService } from '@/services/url.service'; import { Telemetry } from '@/telemetry'; import { WorkflowRunner } from '@/workflow-runner'; import { WorkflowCreationService } from '@/workflows/workflow-creation.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 fad76b8a7c0..c6428dfb943 100644 --- a/packages/cli/src/modules/mcp/__tests__/mcp.service.test.ts +++ b/packages/cli/src/modules/mcp/__tests__/mcp.service.test.ts @@ -1,5 +1,6 @@ import { createMcpHandler, type McpServer } from '@modelcontextprotocol/server'; import { LicenseState, ModuleRegistry, type Logger } from '@n8n/backend-common'; +import { UrlService } 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'; @@ -35,7 +36,6 @@ import { NodeResourceExplorerService } from '@/services/node-resource-explorer.s import { ProjectService } from '@/services/project.service.ee'; import { RoleService } from '@/services/role.service'; import { TagService } from '@/services/tag.service'; -import { UrlService } from '@/services/url.service'; import { Telemetry } from '@/telemetry'; import { WorkflowRunner } from '@/workflow-runner'; import { WorkflowCreationService } from '@/workflows/workflow-creation.service'; diff --git a/packages/cli/src/modules/mcp/__tests__/update-workflow.tool.test.ts b/packages/cli/src/modules/mcp/__tests__/update-workflow.tool.test.ts index 049816ca1b4..05d081e7a7a 100644 --- a/packages/cli/src/modules/mcp/__tests__/update-workflow.tool.test.ts +++ b/packages/cli/src/modules/mcp/__tests__/update-workflow.tool.test.ts @@ -1,4 +1,4 @@ -import { NotFoundError } from '@n8n/backend-services'; +import { NotFoundError, UrlService } from '@n8n/backend-services'; import { mockInstance } from '@n8n/backend-test-utils'; import { GlobalConfig } from '@n8n/config'; import { SharedWorkflowRepository, User, WorkflowEntity, type Project } from '@n8n/db'; @@ -19,7 +19,6 @@ import type { AiGatewayService } from '@/services/ai-gateway.service'; import { SubworkflowPolicyChecker } from '@/executions/pre-execution-checks/subworkflow-policy-checker'; import { NodeTypes } from '@/node-types'; import { TagService } from '@/services/tag.service'; -import { UrlService } from '@/services/url.service'; import { Telemetry } from '@/telemetry'; import { WorkflowFinderService } from '@/workflows/workflow-finder.service'; import { WorkflowPublishedDataService } from '@/workflows/workflow-published-data.service'; diff --git a/packages/cli/src/modules/mcp/mcp-protected-resource.ts b/packages/cli/src/modules/mcp/mcp-protected-resource.ts index e8a10aa1f14..35c904247f9 100644 --- a/packages/cli/src/modules/mcp/mcp-protected-resource.ts +++ b/packages/cli/src/modules/mcp/mcp-protected-resource.ts @@ -1,12 +1,12 @@ import { MCP_AGENT_SCOPES, MCP_INSTANCE_SCOPES } from '@n8n/api-types'; import { LicenseState, ModuleRegistry } from '@n8n/backend-common'; +import { UrlService } from '@n8n/backend-services'; import { GlobalConfig } from '@n8n/config'; import { INSTANCE_MCP_RESOURCE_ID } from '@n8n/constants'; import type { User } from '@n8n/db'; import { Service } from '@n8n/di'; import type { ProtectedResource } from '@/services/protected-resource.registry'; -import { UrlService } from '@/services/url.service'; import { BUILDER_TOOLS, FOLDER_FEATURE_TOOLS, TOOLS_BY_SCOPE } from './mcp-scopes'; import { areAgentToolsAvailable } from './mcp-tool-availability'; diff --git a/packages/cli/src/modules/mcp/mcp.service.ts b/packages/cli/src/modules/mcp/mcp.service.ts index 82ea2ddd3a6..aaddb977a51 100644 --- a/packages/cli/src/modules/mcp/mcp.service.ts +++ b/packages/cli/src/modules/mcp/mcp.service.ts @@ -8,6 +8,7 @@ import { CONTEXT_PREFERENCES_FLAG, } from '@n8n/api-types'; import { LicenseState, Logger, ModuleRegistry } from '@n8n/backend-common'; +import { UrlService } 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'; @@ -46,7 +47,6 @@ import { NodeResourceExplorerService } from '@/services/node-resource-explorer.s import { ProjectService } from '@/services/project.service.ee'; import { RoleService } from '@/services/role.service'; import { TagService } from '@/services/tag.service'; -import { UrlService } from '@/services/url.service'; import { Telemetry } from '@/telemetry'; import { WorkflowRunner } from '@/workflow-runner'; import { WorkflowCreationService } from '@/workflows/workflow-creation.service'; diff --git a/packages/cli/src/modules/mcp/tools/agents/agent-tools.service.ts b/packages/cli/src/modules/mcp/tools/agents/agent-tools.service.ts index a177ed1d73a..5e43455e15c 100644 --- a/packages/cli/src/modules/mcp/tools/agents/agent-tools.service.ts +++ b/packages/cli/src/modules/mcp/tools/agents/agent-tools.service.ts @@ -20,7 +20,7 @@ import { type AgentJsonConfig, } from '@n8n/api-types'; import { OutboundHttp } from '@n8n/backend-network'; -import { ConflictError, ForbiddenError } from '@n8n/backend-services'; +import { ConflictError, ForbiddenError, UrlService } from '@n8n/backend-services'; import type { User } from '@n8n/db'; import { Service } from '@n8n/di'; import type { Scope } from '@n8n/permissions'; @@ -60,7 +60,6 @@ import { NodeTypes } from '@/node-types'; import { OauthService } from '@/oauth/oauth.service'; import { userHasScopes } from '@/permissions.ee/check-access'; import { ProjectScopeService } from '@/permissions.ee/project-scope.service'; -import { UrlService } from '@/services/url.service'; import { Telemetry } from '@/telemetry'; import { createAiMcpFetch } from '@/utils/ai-proxy-fetch'; diff --git a/packages/cli/src/modules/mcp/tools/workflow-builder/create-workflow-from-code.tool.ts b/packages/cli/src/modules/mcp/tools/workflow-builder/create-workflow-from-code.tool.ts index ed4d49a1c92..2b2bc8d7e78 100644 --- a/packages/cli/src/modules/mcp/tools/workflow-builder/create-workflow-from-code.tool.ts +++ b/packages/cli/src/modules/mcp/tools/workflow-builder/create-workflow-from-code.tool.ts @@ -1,3 +1,4 @@ +import type { UrlService } from '@n8n/backend-services'; import { NotFoundError } from '@n8n/backend-services'; import { type Folder, @@ -37,7 +38,6 @@ import type { CredentialsService } from '@/credentials/credentials.service'; import type { DataTableUserOperations } from '@/modules/data-table/data-table-proxy.service'; import type { NodeTypes } from '@/node-types'; import type { AiGatewayService } from '@/services/ai-gateway.service'; -import type { UrlService } from '@/services/url.service'; import type { Telemetry } from '@/telemetry'; import { dropInvalidWorkflowGroups, diff --git a/packages/cli/src/modules/mcp/tools/workflow-builder/update-workflow.tool.ts b/packages/cli/src/modules/mcp/tools/workflow-builder/update-workflow.tool.ts index 033d4981074..cd9805e6668 100644 --- a/packages/cli/src/modules/mcp/tools/workflow-builder/update-workflow.tool.ts +++ b/packages/cli/src/modules/mcp/tools/workflow-builder/update-workflow.tool.ts @@ -1,4 +1,5 @@ import type { ValidationWarning } from '@n8n/ai-workflow-builder'; +import type { UrlService } from '@n8n/backend-services'; import type { GlobalConfig } from '@n8n/config'; import { type User, type SharedWorkflowRepository, WorkflowEntity } from '@n8n/db'; import { hasGlobalScope } from '@n8n/permissions'; @@ -13,7 +14,6 @@ import type { DataTableUserOperations } from '@/modules/data-table/data-table-pr import type { NodeTypes } from '@/node-types'; import type { AiGatewayService } from '@/services/ai-gateway.service'; import type { TagService } from '@/services/tag.service'; -import type { UrlService } from '@/services/url.service'; import type { Telemetry } from '@/telemetry'; import { dropInvalidWorkflowGroups, diff --git a/packages/cli/src/modules/oauth-jwe/__tests__/oauth-jwe-decrypt.service.test.ts b/packages/cli/src/modules/oauth-jwe/__tests__/oauth-jwe-decrypt.service.test.ts index 4aa7d44b0bf..4816ce4192c 100644 --- a/packages/cli/src/modules/oauth-jwe/__tests__/oauth-jwe-decrypt.service.test.ts +++ b/packages/cli/src/modules/oauth-jwe/__tests__/oauth-jwe-decrypt.service.test.ts @@ -1,10 +1,9 @@ +import type { UrlService } from '@n8n/backend-services'; import { CompactEncrypt, generateKeyPair } from 'jose'; import type { CryptoKey } from 'jose'; import { UnexpectedError, UserError } from 'n8n-workflow'; import { mock } from 'vitest-mock-extended'; -import type { UrlService } from '@/services/url.service'; - import { OAuthJweDecryptService } from '../oauth-jwe-decrypt.service'; import type { OAuthJweKeyService } from '../oauth-jwe-key.service'; diff --git a/packages/cli/src/modules/oauth-jwe/oauth-jwe-decrypt.service.ts b/packages/cli/src/modules/oauth-jwe/oauth-jwe-decrypt.service.ts index 66f93cf12a5..277cf8bed5a 100644 --- a/packages/cli/src/modules/oauth-jwe/oauth-jwe-decrypt.service.ts +++ b/packages/cli/src/modules/oauth-jwe/oauth-jwe-decrypt.service.ts @@ -1,9 +1,9 @@ +import { UrlService } from '@n8n/backend-services'; import { Service } from '@n8n/di'; import type { IDataObject } from 'n8n-workflow'; import { UnexpectedError, UserError } from 'n8n-workflow'; import type { DcrJweFields } from '@/oauth/oauth-jwe-service.proxy'; -import { UrlService } from '@/services/url.service'; import { OAuthJweKeyService } from './oauth-jwe-key.service'; import { decryptJweToken, isJweToken } from './oauth-jwe.utils'; diff --git a/packages/cli/src/modules/oauth-server/__tests__/chat-trigger-resource.resolver.api.test.ts b/packages/cli/src/modules/oauth-server/__tests__/chat-trigger-resource.resolver.api.test.ts index c3809082539..3a5f8792ffa 100644 --- a/packages/cli/src/modules/oauth-server/__tests__/chat-trigger-resource.resolver.api.test.ts +++ b/packages/cli/src/modules/oauth-server/__tests__/chat-trigger-resource.resolver.api.test.ts @@ -1,3 +1,4 @@ +import { UrlService } from '@n8n/backend-services'; import { createWorkflowWithHistory, setActiveVersion, @@ -21,7 +22,6 @@ import { AUTH_COOKIE_NAME } from '@/constants'; import { OAuthTokenService } from '@/modules/oauth-server/oauth-token.service'; import { CacheService } from '@/services/cache/cache.service'; import { ProtectedResourceRegistry } from '@/services/protected-resource.registry'; -import { UrlService } from '@/services/url.service'; /** Root-level (no `/rest` prefix) agent authenticated as `user` — `authAgentFor` always * prefixes `/rest`, which 404s against root-level routes like `/oauth/authorize`. */ diff --git a/packages/cli/src/modules/oauth-server/__tests__/chat-trigger-test-resource.resolver.api.test.ts b/packages/cli/src/modules/oauth-server/__tests__/chat-trigger-test-resource.resolver.api.test.ts index 5cb10714d9e..f412595309c 100644 --- a/packages/cli/src/modules/oauth-server/__tests__/chat-trigger-test-resource.resolver.api.test.ts +++ b/packages/cli/src/modules/oauth-server/__tests__/chat-trigger-test-resource.resolver.api.test.ts @@ -1,3 +1,4 @@ +import { UrlService } from '@n8n/backend-services'; import { createWorkflowWithHistory, setActiveVersion, @@ -18,7 +19,6 @@ import { setupTestServer } from '@test-integration/utils'; import { OAuthTokenService } from '@/modules/oauth-server/oauth-token.service'; import { CacheService } from '@/services/cache/cache.service'; import { ProtectedResourceRegistry } from '@/services/protected-resource.registry'; -import { UrlService } from '@/services/url.service'; import { TestWebhookRegistrationsService } from '@/webhooks/test-webhook-registrations.service'; import { OAuthClientRepository } from '../database/repositories/oauth-client.repository'; diff --git a/packages/cli/src/modules/oauth-server/__tests__/form-trigger-resource.resolver.api.test.ts b/packages/cli/src/modules/oauth-server/__tests__/form-trigger-resource.resolver.api.test.ts index 54847ced843..bf97bd04e2a 100644 --- a/packages/cli/src/modules/oauth-server/__tests__/form-trigger-resource.resolver.api.test.ts +++ b/packages/cli/src/modules/oauth-server/__tests__/form-trigger-resource.resolver.api.test.ts @@ -1,3 +1,4 @@ +import { UrlService } from '@n8n/backend-services'; import { createWorkflowWithHistory, setActiveVersion, @@ -18,7 +19,6 @@ import { setupTestServer } from '@test-integration/utils'; import { OAuthTokenService } from '@/modules/oauth-server/oauth-token.service'; import { CacheService } from '@/services/cache/cache.service'; import { ProtectedResourceRegistry } from '@/services/protected-resource.registry'; -import { UrlService } from '@/services/url.service'; import { OAuthClientRepository } from '../database/repositories/oauth-client.repository'; diff --git a/packages/cli/src/modules/oauth-server/__tests__/form-trigger-test-resource.resolver.api.test.ts b/packages/cli/src/modules/oauth-server/__tests__/form-trigger-test-resource.resolver.api.test.ts index 86914af8266..bb2d2926b79 100644 --- a/packages/cli/src/modules/oauth-server/__tests__/form-trigger-test-resource.resolver.api.test.ts +++ b/packages/cli/src/modules/oauth-server/__tests__/form-trigger-test-resource.resolver.api.test.ts @@ -1,3 +1,4 @@ +import { UrlService } from '@n8n/backend-services'; import { createWorkflowWithHistory, setActiveVersion, @@ -19,7 +20,6 @@ import { OAuthClientRepository } from '../database/repositories/oauth-client.rep import { OAuthTokenService } from '@/modules/oauth-server/oauth-token.service'; import { CacheService } from '@/services/cache/cache.service'; import { ProtectedResourceRegistry } from '@/services/protected-resource.registry'; -import { UrlService } from '@/services/url.service'; import { TestWebhookRegistrationsService } from '@/webhooks/test-webhook-registrations.service'; const testServer = setupTestServer({ modules: ['oauth-server', 'mcp'], endpointGroups: ['mcp'] }); diff --git a/packages/cli/src/modules/oauth-server/__tests__/oauth-consent.controller.api.test.ts b/packages/cli/src/modules/oauth-server/__tests__/oauth-consent.controller.api.test.ts index ee2b30eea1d..5a9a7821617 100644 --- a/packages/cli/src/modules/oauth-server/__tests__/oauth-consent.controller.api.test.ts +++ b/packages/cli/src/modules/oauth-server/__tests__/oauth-consent.controller.api.test.ts @@ -1,3 +1,4 @@ +import { UrlService } from '@n8n/backend-services'; import { testDb } from '@n8n/backend-test-utils'; import type { User } from '@n8n/db'; import { Container } from '@n8n/di'; @@ -5,7 +6,6 @@ import { Container } from '@n8n/di'; import { McpSettingsService } from '@/modules/mcp/mcp.settings.service'; import { JwtService } from '@/services/jwt.service'; import { ProtectedResourceRegistry } from '@/services/protected-resource.registry'; -import { UrlService } from '@/services/url.service'; import { createOwner, createMember } from '@test-integration/db/users'; import { setupTestServer } from '@test-integration/utils'; diff --git a/packages/cli/src/modules/oauth-server/__tests__/oauth-consent.service.test.ts b/packages/cli/src/modules/oauth-server/__tests__/oauth-consent.service.test.ts index 90ea439e036..1a122d99043 100644 --- a/packages/cli/src/modules/oauth-server/__tests__/oauth-consent.service.test.ts +++ b/packages/cli/src/modules/oauth-server/__tests__/oauth-consent.service.test.ts @@ -1,4 +1,4 @@ -import { ForbiddenError } from '@n8n/backend-services'; +import { ForbiddenError, UrlService } from '@n8n/backend-services'; import type { Mocked } from 'vitest'; import { mockInstance } from '@n8n/backend-test-utils'; import { Logger } from '@n8n/backend-common'; @@ -15,7 +15,6 @@ import { ProtectedResourceRegistry, type ProtectedResource, } from '@/services/protected-resource.registry'; -import { UrlService } from '@/services/url.service'; import type { User } from '@n8n/db'; const issuer = 'https://n8n.example.com'; diff --git a/packages/cli/src/modules/oauth-server/__tests__/oauth-flow.service.api.test.ts b/packages/cli/src/modules/oauth-server/__tests__/oauth-flow.service.api.test.ts index 2472319007f..7e38395d964 100644 --- a/packages/cli/src/modules/oauth-server/__tests__/oauth-flow.service.api.test.ts +++ b/packages/cli/src/modules/oauth-server/__tests__/oauth-flow.service.api.test.ts @@ -1,3 +1,4 @@ +import { UrlService } from '@n8n/backend-services'; import { createWorkflowWithHistory, setActiveVersion, testDb } from '@n8n/backend-test-utils'; import { GlobalConfig } from '@n8n/config'; import type { User } from '@n8n/db'; @@ -13,7 +14,6 @@ import { import { randomUUID } from 'node:crypto'; import { CacheService } from '@/services/cache/cache.service'; -import { UrlService } from '@/services/url.service'; import { createOwner, createMember } from '@test-integration/db/users'; import { setupTestServer } from '@test-integration/utils'; diff --git a/packages/cli/src/modules/oauth-server/__tests__/oauth-server.service.test.ts b/packages/cli/src/modules/oauth-server/__tests__/oauth-server.service.test.ts index 2e496024886..4fa6b026868 100644 --- a/packages/cli/src/modules/oauth-server/__tests__/oauth-server.service.test.ts +++ b/packages/cli/src/modules/oauth-server/__tests__/oauth-server.service.test.ts @@ -3,6 +3,7 @@ import { InvalidTargetError, } from '@modelcontextprotocol/sdk/server/auth/errors.js'; import { Logger, type LicenseState, type ModuleRegistry } from '@n8n/backend-common'; +import type { UrlService } from '@n8n/backend-services'; import { mockInstance } from '@n8n/backend-test-utils'; import { GlobalConfig } from '@n8n/config'; import type { User } from '@n8n/db'; @@ -16,7 +17,6 @@ import { McpProtectedResource } from '@/modules/mcp/mcp-protected-resource'; import type { McpConfig } from '@/modules/mcp/mcp.config'; import type { McpSettingsService } from '@/modules/mcp/mcp.settings.service'; import { ProtectedResourceRegistry } from '@/services/protected-resource.registry'; -import type { UrlService } from '@/services/url.service'; import { UserManagementMailer } from '@/user-management/email'; import type { AuthorizationCode } from '../database/entities/oauth-authorization-code.entity'; diff --git a/packages/cli/src/modules/oauth-server/__tests__/oauth-token.service.test.ts b/packages/cli/src/modules/oauth-server/__tests__/oauth-token.service.test.ts index d0a03c90360..5a4b170c3ac 100644 --- a/packages/cli/src/modules/oauth-server/__tests__/oauth-token.service.test.ts +++ b/packages/cli/src/modules/oauth-server/__tests__/oauth-token.service.test.ts @@ -1,4 +1,5 @@ import { InvalidTargetError } from '@modelcontextprotocol/sdk/server/auth/errors.js'; +import type { UrlService } from '@n8n/backend-services'; import type { Mocked } from 'vitest'; import { Logger, type LicenseState, type ModuleRegistry } from '@n8n/backend-common'; import { mockInstance } from '@n8n/backend-test-utils'; @@ -19,7 +20,6 @@ import { McpProtectedResource } from '@/modules/mcp/mcp-protected-resource'; import type { McpConfig } from '@/modules/mcp/mcp.config'; import type { McpSettingsService } from '@/modules/mcp/mcp.settings.service'; import { ProtectedResourceRegistry } from '@/services/protected-resource.registry'; -import type { UrlService } from '@/services/url.service'; import type { WorkflowFinderService } from '@/workflows/workflow-finder.service'; const instanceSettings = mock({ encryptionKey: 'test-key' }); diff --git a/packages/cli/src/modules/oauth-server/__tests__/oauth.controller.api.test.ts b/packages/cli/src/modules/oauth-server/__tests__/oauth.controller.api.test.ts index ff503fff2a6..d71dfcf78ca 100644 --- a/packages/cli/src/modules/oauth-server/__tests__/oauth.controller.api.test.ts +++ b/packages/cli/src/modules/oauth-server/__tests__/oauth.controller.api.test.ts @@ -1,3 +1,4 @@ +import { UrlService } from '@n8n/backend-services'; import { testDb } from '@n8n/backend-test-utils'; import { GlobalConfig } from '@n8n/config'; import type { User } from '@n8n/db'; @@ -6,7 +7,6 @@ import { Container } from '@n8n/di'; import { McpSettingsService } from '@/modules/mcp/mcp.settings.service'; import { ProtectedResourceRegistry } from '@/services/protected-resource.registry'; -import { UrlService } from '@/services/url.service'; import { createOwner } from '@test-integration/db/users'; import { setupTestServer } from '@test-integration/utils'; diff --git a/packages/cli/src/modules/oauth-server/__tests__/oauth.controller.test.ts b/packages/cli/src/modules/oauth-server/__tests__/oauth.controller.test.ts index 2ed0bc0c415..b74c43ed4a7 100644 --- a/packages/cli/src/modules/oauth-server/__tests__/oauth.controller.test.ts +++ b/packages/cli/src/modules/oauth-server/__tests__/oauth.controller.test.ts @@ -1,4 +1,5 @@ import type { OAuthRegisteredClientsStore } from '@modelcontextprotocol/sdk/server/auth/clients.js'; +import type { UrlService } from '@n8n/backend-services'; import { mockInstance } from '@n8n/backend-test-utils'; import type { Request, Response } from 'express'; import { mock } from 'vitest-mock-extended'; @@ -7,7 +8,6 @@ import type { ProtectedResource, ProtectedResourceRegistry, } from '@/services/protected-resource.registry'; -import type { UrlService } from '@/services/url.service'; import { OAuthServerService } from '../oauth-server.service'; import type { OAuthController as OAuthControllerClass } from '../oauth.controller'; diff --git a/packages/cli/src/modules/oauth-server/__tests__/test-trigger-resource-lifetime.api.test.ts b/packages/cli/src/modules/oauth-server/__tests__/test-trigger-resource-lifetime.api.test.ts index 58b45e06823..00187b1bc6f 100644 --- a/packages/cli/src/modules/oauth-server/__tests__/test-trigger-resource-lifetime.api.test.ts +++ b/packages/cli/src/modules/oauth-server/__tests__/test-trigger-resource-lifetime.api.test.ts @@ -1,3 +1,4 @@ +import { UrlService } from '@n8n/backend-services'; import { createWorkflowWithHistory, testDb } from '@n8n/backend-test-utils'; import { GlobalConfig } from '@n8n/config'; import type { User } from '@n8n/db'; @@ -14,7 +15,6 @@ import { OAuthClientRepository } from '@/modules/oauth-server/database/repositor import { OAuthTokenService } from '@/modules/oauth-server/oauth-token.service'; import { CacheService } from '@/services/cache/cache.service'; import { ProtectedResourceRegistry } from '@/services/protected-resource.registry'; -import { UrlService } from '@/services/url.service'; import { TestWebhookRegistrationsService } from '@/webhooks/test-webhook-registrations.service'; /** diff --git a/packages/cli/src/modules/oauth-server/__tests__/workflow-mcp-test-trigger-resource.resolver.api.test.ts b/packages/cli/src/modules/oauth-server/__tests__/workflow-mcp-test-trigger-resource.resolver.api.test.ts index 4f838f9d14b..939597f2c5a 100644 --- a/packages/cli/src/modules/oauth-server/__tests__/workflow-mcp-test-trigger-resource.resolver.api.test.ts +++ b/packages/cli/src/modules/oauth-server/__tests__/workflow-mcp-test-trigger-resource.resolver.api.test.ts @@ -1,3 +1,4 @@ +import { UrlService } from '@n8n/backend-services'; import { createWorkflowWithHistory, setActiveVersion, testDb } from '@n8n/backend-test-utils'; import { GlobalConfig } from '@n8n/config'; import type { User } from '@n8n/db'; @@ -12,7 +13,6 @@ import { setupTestServer } from '@test-integration/utils'; import { MCP_TRIGGER_NODE_TYPE } from '@/constants'; import { OAuthTokenService } from '@/modules/oauth-server/oauth-token.service'; import { CacheService } from '@/services/cache/cache.service'; -import { UrlService } from '@/services/url.service'; import { TestWebhookRegistrationsService } from '@/webhooks/test-webhook-registrations.service'; const testServer = setupTestServer({ modules: ['oauth-server', 'mcp'], endpointGroups: ['mcp'] }); diff --git a/packages/cli/src/modules/oauth-server/__tests__/workflow-mcp-trigger-authorization.api.test.ts b/packages/cli/src/modules/oauth-server/__tests__/workflow-mcp-trigger-authorization.api.test.ts index 1ed4ba4d2ca..ac3d8af1081 100644 --- a/packages/cli/src/modules/oauth-server/__tests__/workflow-mcp-trigger-authorization.api.test.ts +++ b/packages/cli/src/modules/oauth-server/__tests__/workflow-mcp-trigger-authorization.api.test.ts @@ -1,3 +1,4 @@ +import { UrlService } from '@n8n/backend-services'; import { createWorkflowWithHistory, setActiveVersion, @@ -17,7 +18,6 @@ import { setupTestServer } from '@test-integration/utils'; import { MCP_TRIGGER_NODE_TYPE } from '@/constants'; import { OAuthTokenService } from '@/modules/oauth-server/oauth-token.service'; import { CacheService } from '@/services/cache/cache.service'; -import { UrlService } from '@/services/url.service'; import { JwtService } from '@/services/jwt.service'; import { OAuthClientRepository } from '../database/repositories/oauth-client.repository'; diff --git a/packages/cli/src/modules/oauth-server/__tests__/workflow-mcp-trigger-resource.resolver.api.test.ts b/packages/cli/src/modules/oauth-server/__tests__/workflow-mcp-trigger-resource.resolver.api.test.ts index 09ff5ca98fb..9a9ffe92769 100644 --- a/packages/cli/src/modules/oauth-server/__tests__/workflow-mcp-trigger-resource.resolver.api.test.ts +++ b/packages/cli/src/modules/oauth-server/__tests__/workflow-mcp-trigger-resource.resolver.api.test.ts @@ -1,3 +1,4 @@ +import { UrlService } from '@n8n/backend-services'; import { createWorkflowWithHistory, setActiveVersion, testDb } from '@n8n/backend-test-utils'; import { GlobalConfig } from '@n8n/config'; import type { User } from '@n8n/db'; @@ -13,7 +14,6 @@ import { MCP_TRIGGER_NODE_TYPE } from '@/constants'; import { OAuthTokenService } from '@/modules/oauth-server/oauth-token.service'; import { CacheService } from '@/services/cache/cache.service'; import { ProtectedResourceRegistry } from '@/services/protected-resource.registry'; -import { UrlService } from '@/services/url.service'; const testServer = setupTestServer({ modules: ['oauth-server', 'mcp'], endpointGroups: ['mcp'] }); diff --git a/packages/cli/src/modules/oauth-server/__tests__/workflow-webhook-test-trigger-resource.resolver.api.test.ts b/packages/cli/src/modules/oauth-server/__tests__/workflow-webhook-test-trigger-resource.resolver.api.test.ts index 7f5a0b129a4..7b9b898bbb0 100644 --- a/packages/cli/src/modules/oauth-server/__tests__/workflow-webhook-test-trigger-resource.resolver.api.test.ts +++ b/packages/cli/src/modules/oauth-server/__tests__/workflow-webhook-test-trigger-resource.resolver.api.test.ts @@ -1,3 +1,4 @@ +import { UrlService } from '@n8n/backend-services'; import { createWorkflowWithHistory, setActiveVersion, @@ -18,7 +19,6 @@ import { setupTestServer } from '@test-integration/utils'; import { OAuthTokenService } from '@/modules/oauth-server/oauth-token.service'; import { CacheService } from '@/services/cache/cache.service'; import { ProtectedResourceRegistry } from '@/services/protected-resource.registry'; -import { UrlService } from '@/services/url.service'; import { TestWebhookRegistrationsService } from '@/webhooks/test-webhook-registrations.service'; const testServer = setupTestServer({ modules: ['oauth-server', 'mcp'], endpointGroups: ['mcp'] }); diff --git a/packages/cli/src/modules/oauth-server/__tests__/workflow-webhook-trigger-resource.resolver.api.test.ts b/packages/cli/src/modules/oauth-server/__tests__/workflow-webhook-trigger-resource.resolver.api.test.ts index f56ec274548..a33971a7d3b 100644 --- a/packages/cli/src/modules/oauth-server/__tests__/workflow-webhook-trigger-resource.resolver.api.test.ts +++ b/packages/cli/src/modules/oauth-server/__tests__/workflow-webhook-trigger-resource.resolver.api.test.ts @@ -1,3 +1,4 @@ +import { UrlService } from '@n8n/backend-services'; import { createWorkflowWithHistory, setActiveVersion, @@ -19,7 +20,6 @@ import { OAuthServerService } from '@/modules/oauth-server/oauth-server.service' import { OAuthTokenService } from '@/modules/oauth-server/oauth-token.service'; import { CacheService } from '@/services/cache/cache.service'; import { ProtectedResourceRegistry } from '@/services/protected-resource.registry'; -import { UrlService } from '@/services/url.service'; const testServer = setupTestServer({ modules: ['oauth-server', 'mcp'], endpointGroups: ['mcp'] }); diff --git a/packages/cli/src/modules/oauth-server/oauth-consent.service.ts b/packages/cli/src/modules/oauth-server/oauth-consent.service.ts index c6e1a37f524..bebad432ba2 100644 --- a/packages/cli/src/modules/oauth-server/oauth-consent.service.ts +++ b/packages/cli/src/modules/oauth-server/oauth-consent.service.ts @@ -1,6 +1,6 @@ import type { ConsentUiHints } from '@n8n/api-types'; import { Logger } from '@n8n/backend-common'; -import { ForbiddenError } from '@n8n/backend-services'; +import { ForbiddenError, UrlService } from '@n8n/backend-services'; import type { User } from '@n8n/db'; import { Service } from '@n8n/di'; import { UserError } from 'n8n-workflow'; @@ -14,7 +14,6 @@ import { ProtectedResourceRegistry, type ProtectedResource, } from '@/services/protected-resource.registry'; -import { UrlService } from '@/services/url.service'; type ConsentDetailsResult = | { diff --git a/packages/cli/src/modules/oauth-server/oauth-flow.service.ts b/packages/cli/src/modules/oauth-server/oauth-flow.service.ts index fc6fdcd2513..5995eb26ac8 100644 --- a/packages/cli/src/modules/oauth-server/oauth-flow.service.ts +++ b/packages/cli/src/modules/oauth-server/oauth-flow.service.ts @@ -2,6 +2,7 @@ import { InvalidGrantError, InvalidTargetError, } from '@modelcontextprotocol/sdk/server/auth/errors.js'; +import { UrlService } from '@n8n/backend-services'; import { Time } from '@n8n/constants'; import { Service } from '@n8n/di'; import { UserError, type N8nOAuth2FlowResult, type N8nOAuth2RefreshResult } from 'n8n-workflow'; @@ -12,7 +13,6 @@ import { CacheService } from '@/services/cache/cache.service'; import { OAuthTokenVerifierProxy } from '@/services/oauth-token-verifier-proxy.service'; import type { N8nOAuth2Flow } from '@/services/oauth2-flow-proxy.service'; import { ProtectedResourceRegistry } from '@/services/protected-resource.registry'; -import { UrlService } from '@/services/url.service'; import { OAuthServerService } from './oauth-server.service'; diff --git a/packages/cli/src/modules/oauth-server/oauth-server.service.ts b/packages/cli/src/modules/oauth-server/oauth-server.service.ts index 1b5253687fb..eaad8d7a634 100644 --- a/packages/cli/src/modules/oauth-server/oauth-server.service.ts +++ b/packages/cli/src/modules/oauth-server/oauth-server.service.ts @@ -16,7 +16,7 @@ import type { import type { McpClientConnectedPeriod, McpClientTypeFilter } from '@n8n/api-types'; import { getMcpClientType, MCP_CLIENT_TYPE_FILTER_BUCKETS } from '@n8n/api-types'; import { Logger } from '@n8n/backend-common'; -import { ForbiddenError } from '@n8n/backend-services'; +import { ForbiddenError, UrlService } from '@n8n/backend-services'; import { GlobalConfig } from '@n8n/config'; import { INSTANCE_MCP_RESOURCE_ID } from '@n8n/constants'; import type { User } from '@n8n/db'; @@ -30,7 +30,6 @@ import { ProtectedResourceRegistry, type ProtectedResource, } from '@/services/protected-resource.registry'; -import { UrlService } from '@/services/url.service'; import { UserManagementMailer } from '@/user-management/email'; import { OAuthClient } from './database/entities/oauth-client.entity'; diff --git a/packages/cli/src/modules/oauth-server/oauth.controller.ts b/packages/cli/src/modules/oauth-server/oauth.controller.ts index 531cf786d50..0722959054b 100644 --- a/packages/cli/src/modules/oauth-server/oauth.controller.ts +++ b/packages/cli/src/modules/oauth-server/oauth.controller.ts @@ -3,6 +3,7 @@ import { clientRegistrationHandler } from '@modelcontextprotocol/sdk/server/auth import { revocationHandler } from '@modelcontextprotocol/sdk/server/auth/handlers/revoke.js'; import { tokenHandler } from '@modelcontextprotocol/sdk/server/auth/handlers/token.js'; import { Logger } from '@n8n/backend-common'; +import { UrlService } from '@n8n/backend-services'; import { GlobalConfig } from '@n8n/config'; import { Time } from '@n8n/constants'; import { @@ -17,7 +18,6 @@ import type { Response, Request, RequestHandler, Router } from 'express'; import type { ProtectedResource } from '@/services/protected-resource.registry'; import { ProtectedResourceRegistry } from '@/services/protected-resource.registry'; -import { UrlService } from '@/services/url.service'; import { OAuthServerConfig } from './oauth-server.config'; import { OAuthServerService } from './oauth-server.service'; diff --git a/packages/cli/src/modules/oauth-server/protected-resource-resolvers/chat-trigger-resource.resolver.ts b/packages/cli/src/modules/oauth-server/protected-resource-resolvers/chat-trigger-resource.resolver.ts index 870c36a676b..f845ecd63bd 100644 --- a/packages/cli/src/modules/oauth-server/protected-resource-resolvers/chat-trigger-resource.resolver.ts +++ b/packages/cli/src/modules/oauth-server/protected-resource-resolvers/chat-trigger-resource.resolver.ts @@ -1,9 +1,9 @@ import { Logger } from '@n8n/backend-common'; +import { UrlService } from '@n8n/backend-services'; import { GlobalConfig } from '@n8n/config'; import { WorkflowRepository } from '@n8n/db'; import { Service } from '@n8n/di'; -import { UrlService } from '@/services/url.service'; import { WebhookService } from '@/webhooks/webhook.service'; import { WorkflowFinderService } from '@/workflows/workflow-finder.service'; diff --git a/packages/cli/src/modules/oauth-server/protected-resource-resolvers/chat-trigger-test-resource.resolver.ts b/packages/cli/src/modules/oauth-server/protected-resource-resolvers/chat-trigger-test-resource.resolver.ts index afe8e75926b..366dece15e2 100644 --- a/packages/cli/src/modules/oauth-server/protected-resource-resolvers/chat-trigger-test-resource.resolver.ts +++ b/packages/cli/src/modules/oauth-server/protected-resource-resolvers/chat-trigger-test-resource.resolver.ts @@ -1,8 +1,8 @@ import { Logger } from '@n8n/backend-common'; +import { UrlService } from '@n8n/backend-services'; import { GlobalConfig } from '@n8n/config'; import { Service } from '@n8n/di'; -import { UrlService } from '@/services/url.service'; import { TestWebhookRegistrationsService } from '@/webhooks/test-webhook-registrations.service'; import { WorkflowFinderService } from '@/workflows/workflow-finder.service'; diff --git a/packages/cli/src/modules/oauth-server/protected-resource-resolvers/form-trigger-resource.resolver.ts b/packages/cli/src/modules/oauth-server/protected-resource-resolvers/form-trigger-resource.resolver.ts index ad16643dc7d..d7de252db35 100644 --- a/packages/cli/src/modules/oauth-server/protected-resource-resolvers/form-trigger-resource.resolver.ts +++ b/packages/cli/src/modules/oauth-server/protected-resource-resolvers/form-trigger-resource.resolver.ts @@ -1,11 +1,11 @@ import { Logger } from '@n8n/backend-common'; +import { UrlService } from '@n8n/backend-services'; import { GlobalConfig } from '@n8n/config'; import { WorkflowRepository } from '@n8n/db'; import { Service } from '@n8n/di'; import { FORM_TRIGGER_NODE_TYPE } from 'n8n-workflow'; import type { ProtectedResourceResolver } from '@/services/protected-resource.registry'; -import { UrlService } from '@/services/url.service'; import { WebhookService } from '@/webhooks/webhook.service'; import { WorkflowFinderService } from '@/workflows/workflow-finder.service'; diff --git a/packages/cli/src/modules/oauth-server/protected-resource-resolvers/form-trigger-test-resource.resolver.ts b/packages/cli/src/modules/oauth-server/protected-resource-resolvers/form-trigger-test-resource.resolver.ts index 8a633006f21..3558e11c852 100644 --- a/packages/cli/src/modules/oauth-server/protected-resource-resolvers/form-trigger-test-resource.resolver.ts +++ b/packages/cli/src/modules/oauth-server/protected-resource-resolvers/form-trigger-test-resource.resolver.ts @@ -1,10 +1,10 @@ import { Logger } from '@n8n/backend-common'; +import { UrlService } from '@n8n/backend-services'; import { GlobalConfig } from '@n8n/config'; import { Service } from '@n8n/di'; import { FORM_TRIGGER_NODE_TYPE } from 'n8n-workflow'; import type { ProtectedResourceResolver } from '@/services/protected-resource.registry'; -import { UrlService } from '@/services/url.service'; import { TestWebhookRegistrationsService } from '@/webhooks/test-webhook-registrations.service'; import { WorkflowFinderService } from '@/workflows/workflow-finder.service'; diff --git a/packages/cli/src/modules/oauth-server/protected-resource-resolvers/workflow-mcp-test-trigger-resource.resolver.ts b/packages/cli/src/modules/oauth-server/protected-resource-resolvers/workflow-mcp-test-trigger-resource.resolver.ts index a7b6d3a4e45..0d25cc71bbe 100644 --- a/packages/cli/src/modules/oauth-server/protected-resource-resolvers/workflow-mcp-test-trigger-resource.resolver.ts +++ b/packages/cli/src/modules/oauth-server/protected-resource-resolvers/workflow-mcp-test-trigger-resource.resolver.ts @@ -1,9 +1,9 @@ import { MCP_TRIGGER_NODE_TYPE } from '@/constants'; import type { ProtectedResourceResolver } from '@/services/protected-resource.registry'; -import { UrlService } from '@/services/url.service'; import { TestWebhookRegistrationsService } from '@/webhooks/test-webhook-registrations.service'; import { WorkflowFinderService } from '@/workflows/workflow-finder.service'; import { Logger } from '@n8n/backend-common'; +import { UrlService } from '@n8n/backend-services'; import { GlobalConfig } from '@n8n/config'; import { Service } from '@n8n/di'; diff --git a/packages/cli/src/modules/oauth-server/protected-resource-resolvers/workflow-mcp-trigger-resource.resolver.ts b/packages/cli/src/modules/oauth-server/protected-resource-resolvers/workflow-mcp-trigger-resource.resolver.ts index a7c80ade585..c378a474894 100644 --- a/packages/cli/src/modules/oauth-server/protected-resource-resolvers/workflow-mcp-trigger-resource.resolver.ts +++ b/packages/cli/src/modules/oauth-server/protected-resource-resolvers/workflow-mcp-trigger-resource.resolver.ts @@ -1,9 +1,9 @@ import { MCP_TRIGGER_NODE_TYPE } from '@/constants'; import type { ProtectedResourceResolver } from '@/services/protected-resource.registry'; -import { UrlService } from '@/services/url.service'; import { WebhookService } from '@/webhooks/webhook.service'; import { WorkflowFinderService } from '@/workflows/workflow-finder.service'; import { Logger } from '@n8n/backend-common'; +import { UrlService } from '@n8n/backend-services'; import { GlobalConfig } from '@n8n/config'; import { WorkflowRepository } from '@n8n/db'; import { Service } from '@n8n/di'; diff --git a/packages/cli/src/modules/oauth-server/protected-resource-resolvers/workflow-webhook-test-trigger-resource.resolver.ts b/packages/cli/src/modules/oauth-server/protected-resource-resolvers/workflow-webhook-test-trigger-resource.resolver.ts index 504ef8886dd..eeb6dc71218 100644 --- a/packages/cli/src/modules/oauth-server/protected-resource-resolvers/workflow-webhook-test-trigger-resource.resolver.ts +++ b/packages/cli/src/modules/oauth-server/protected-resource-resolvers/workflow-webhook-test-trigger-resource.resolver.ts @@ -1,4 +1,5 @@ import { Logger } from '@n8n/backend-common'; +import { UrlService } from '@n8n/backend-services'; import { GlobalConfig } from '@n8n/config'; import { Service } from '@n8n/di'; import { WEBHOOK_NODE_TYPE } from 'n8n-workflow'; @@ -9,7 +10,6 @@ import type { } from '@/services/protected-resource.registry'; import { triggerResourceGate } from '../resource-gate'; -import { UrlService } from '@/services/url.service'; import { TestWebhooks } from '@/webhooks/test-webhooks'; import type { TestWebhookRegistration } from '@/webhooks/test-webhook-registrations.service'; import { WorkflowFinderService } from '@/workflows/workflow-finder.service'; diff --git a/packages/cli/src/modules/oauth-server/protected-resource-resolvers/workflow-webhook-trigger-resource.resolver.ts b/packages/cli/src/modules/oauth-server/protected-resource-resolvers/workflow-webhook-trigger-resource.resolver.ts index c1ba01cde95..b138430ca28 100644 --- a/packages/cli/src/modules/oauth-server/protected-resource-resolvers/workflow-webhook-trigger-resource.resolver.ts +++ b/packages/cli/src/modules/oauth-server/protected-resource-resolvers/workflow-webhook-trigger-resource.resolver.ts @@ -1,4 +1,5 @@ import { Logger } from '@n8n/backend-common'; +import { UrlService } from '@n8n/backend-services'; import { GlobalConfig } from '@n8n/config'; import { WorkflowRepository } from '@n8n/db'; import { Service } from '@n8n/di'; @@ -8,7 +9,6 @@ import type { ProtectedResource, ProtectedResourceResolver, } from '@/services/protected-resource.registry'; -import { UrlService } from '@/services/url.service'; import { WebhookService } from '@/webhooks/webhook.service'; import { WorkflowFinderService } from '@/workflows/workflow-finder.service'; diff --git a/packages/cli/src/modules/sso-oidc/__tests__/oidc.controller.ee.test.ts b/packages/cli/src/modules/sso-oidc/__tests__/oidc.controller.ee.test.ts index f58da5caac6..6c577b99bad 100644 --- a/packages/cli/src/modules/sso-oidc/__tests__/oidc.controller.ee.test.ts +++ b/packages/cli/src/modules/sso-oidc/__tests__/oidc.controller.ee.test.ts @@ -1,4 +1,5 @@ import type { Logger } from '@n8n/backend-common'; +import type { UrlService } from '@n8n/backend-services'; import { ForbiddenError } from '@n8n/backend-services'; import type { GlobalConfig, InstanceSettingsLoaderConfig } from '@n8n/config'; import { Time } from '@n8n/constants'; @@ -11,7 +12,6 @@ import { OIDC_NONCE_COOKIE_NAME, OIDC_STATE_COOKIE_NAME } from '@/constants'; import type { EventService } from '@/events/event.service'; import { SsoAccessDeniedError } from '@/modules/provisioning.ee/errors/sso-access-denied.error'; import type { AuthlessRequest } from '@/requests'; -import type { UrlService } from '@/services/url.service'; import { isOidcCurrentAuthenticationMethod } from '@/sso.ee/sso-helpers'; diff --git a/packages/cli/src/modules/sso-oidc/__tests__/oidc.service.ee.test.ts b/packages/cli/src/modules/sso-oidc/__tests__/oidc.service.ee.test.ts index 37f9ac03093..eb988af78b7 100644 --- a/packages/cli/src/modules/sso-oidc/__tests__/oidc.service.ee.test.ts +++ b/packages/cli/src/modules/sso-oidc/__tests__/oidc.service.ee.test.ts @@ -1,3 +1,4 @@ +import type { UrlService } from '@n8n/backend-services'; import { BadRequestError, ForbiddenError } from '@n8n/backend-services'; import type { Mock, Mocked } from 'vitest'; import type { OidcConfigDto } from '@n8n/api-types'; @@ -26,7 +27,6 @@ vi.mock('openid-client', async (importOriginal) => { import { type ProvisioningService } from '@/modules/provisioning.ee/provisioning.service.ee'; import { Publisher } from '@/scaling/pubsub/publisher.service'; import type { JwtService } from '@/services/jwt.service'; -import type { UrlService } from '@/services/url.service'; import * as ssoHelpers from '@/sso.ee/sso-helpers'; import { OIDC_PREFERENCES_DB_KEY } from '../constants'; diff --git a/packages/cli/src/modules/sso-oidc/oidc.controller.ee.ts b/packages/cli/src/modules/sso-oidc/oidc.controller.ee.ts index eb4622683d9..ade83e16e2f 100644 --- a/packages/cli/src/modules/sso-oidc/oidc.controller.ee.ts +++ b/packages/cli/src/modules/sso-oidc/oidc.controller.ee.ts @@ -1,6 +1,6 @@ import { OidcConfigDto } from '@n8n/api-types'; import { Logger } from '@n8n/backend-common'; -import { BadRequestError, ForbiddenError } from '@n8n/backend-services'; +import { BadRequestError, ForbiddenError, UrlService } from '@n8n/backend-services'; import { GlobalConfig, InstanceSettingsLoaderConfig } from '@n8n/config'; import { Time } from '@n8n/constants'; import { AuthenticatedRequest } from '@n8n/db'; @@ -16,7 +16,6 @@ import { } from '@/modules/provisioning.ee/constants'; import { SsoAccessDeniedError } from '@/modules/provisioning.ee/errors/sso-access-denied.error'; import { AuthlessRequest } from '@/requests'; -import { UrlService } from '@/services/url.service'; import { isOidcCurrentAuthenticationMethod } from '@/sso.ee/sso-helpers'; import { diff --git a/packages/cli/src/modules/sso-oidc/oidc.service.ee.ts b/packages/cli/src/modules/sso-oidc/oidc.service.ee.ts index 4b170e9aea4..6fd296011e4 100644 --- a/packages/cli/src/modules/sso-oidc/oidc.service.ee.ts +++ b/packages/cli/src/modules/sso-oidc/oidc.service.ee.ts @@ -1,7 +1,7 @@ import { OidcConfigDto } from '@n8n/api-types'; import { Logger } from '@n8n/backend-common'; import { OutboundHttp } from '@n8n/backend-network'; -import { BadRequestError, ForbiddenError } from '@n8n/backend-services'; +import { BadRequestError, ForbiddenError, UrlService } from '@n8n/backend-services'; import { GlobalConfig } from '@n8n/config'; import { AuthIdentity, @@ -23,7 +23,6 @@ import { inspect } from 'util'; import { buildOidcClaimsContext } from '@/modules/provisioning.ee/claims-context.builder'; import { ProvisioningService } from '@/modules/provisioning.ee/provisioning.service.ee'; import { JwtService } from '@/services/jwt.service'; -import { UrlService } from '@/services/url.service'; import { assertAuthenticationMethodCanBeEnabled, getCurrentAuthenticationMethod, diff --git a/packages/cli/src/modules/sso-saml/__tests__/saml-helpers.test.ts b/packages/cli/src/modules/sso-saml/__tests__/saml-helpers.test.ts index efe4d240639..2dda17352bf 100644 --- a/packages/cli/src/modules/sso-saml/__tests__/saml-helpers.test.ts +++ b/packages/cli/src/modules/sso-saml/__tests__/saml-helpers.test.ts @@ -1,10 +1,9 @@ +import { UrlService } from '@n8n/backend-services'; import { mockInstance } from '@n8n/backend-test-utils'; import type { AuthIdentity } from '@n8n/db'; import { generateNanoId, User, AuthIdentityRepository, UserRepository } from '@n8n/db'; import { Container } from '@n8n/di'; -import { UrlService } from '@/services/url.service'; - import * as helpers from '../saml-helpers'; import type { SamlUserAttributes } from '../types'; diff --git a/packages/cli/src/modules/sso-saml/__tests__/saml.controller.ee.test.ts b/packages/cli/src/modules/sso-saml/__tests__/saml.controller.ee.test.ts index 791ef22ad89..4d2be0b6086 100644 --- a/packages/cli/src/modules/sso-saml/__tests__/saml.controller.ee.test.ts +++ b/packages/cli/src/modules/sso-saml/__tests__/saml.controller.ee.test.ts @@ -1,3 +1,4 @@ +import type { UrlService } from '@n8n/backend-services'; import type { InstanceSettingsLoaderConfig } from '@n8n/config'; import { GLOBAL_OWNER_ROLE, type AuthenticatedRequest, type User } from '@n8n/db'; import { ControllerRegistryMetadata, type Controller } from '@n8n/decorators'; @@ -10,7 +11,6 @@ import type { AuthService } from '@/auth/auth.service'; import type { EventService } from '@/events/event.service'; import { SsoAccessDeniedError } from '@/modules/provisioning.ee/errors/sso-access-denied.error'; import type { AuthlessRequest } from '@/requests'; -import type { UrlService } from '@/services/url.service'; import { isSamlLicensedAndEnabled } from '@/sso.ee/sso-helpers'; import { extractTestIdFromRelayState, isConnectionTestRequest } from '../saml-helpers'; diff --git a/packages/cli/src/modules/sso-saml/__tests__/saml.service.ee.test.ts b/packages/cli/src/modules/sso-saml/__tests__/saml.service.ee.test.ts index 46f772f931e..e9c32556816 100644 --- a/packages/cli/src/modules/sso-saml/__tests__/saml.service.ee.test.ts +++ b/packages/cli/src/modules/sso-saml/__tests__/saml.service.ee.test.ts @@ -1,3 +1,4 @@ +import type { UrlService } from '@n8n/backend-services'; import { BadRequestError, ForbiddenError } from '@n8n/backend-services'; import type { Mock, Mocked } from 'vitest'; import type { SamlPreferences } from '@n8n/api-types'; @@ -16,7 +17,6 @@ import type { IdentityProviderInstance, ServiceProviderInstance } from 'samlify' import type { ProvisioningService } from '@/modules/provisioning.ee/provisioning.service.ee'; import { Publisher } from '@/scaling/pubsub/publisher.service'; import type { CacheService } from '@/services/cache/cache.service'; -import type { UrlService } from '@/services/url.service'; import * as ssoHelpers from '@/sso.ee/sso-helpers'; import { SAML_PREFERENCES_DB_KEY } from '../constants'; diff --git a/packages/cli/src/modules/sso-saml/saml.controller.ee.ts b/packages/cli/src/modules/sso-saml/saml.controller.ee.ts index 17ea7236815..921c6699ce5 100644 --- a/packages/cli/src/modules/sso-saml/saml.controller.ee.ts +++ b/packages/cli/src/modules/sso-saml/saml.controller.ee.ts @@ -1,5 +1,5 @@ import { SamlAcsDto, SamlPreferences, SamlToggleDto } from '@n8n/api-types'; -import { AuthError, ForbiddenError } from '@n8n/backend-services'; +import { AuthError, ForbiddenError, UrlService } from '@n8n/backend-services'; import { InstanceSettingsLoaderConfig } from '@n8n/config'; import { AuthenticatedRequest } from '@n8n/db'; import { Get, Post, RestController, GlobalScope, Body } from '@n8n/decorators'; @@ -15,7 +15,6 @@ import { SSO_ACCESS_DENIED_REDIRECT_PATH } from '@/modules/provisioning.ee/const import { SsoAccessDeniedError } from '@/modules/provisioning.ee/errors/sso-access-denied.error'; import { AuthlessRequest } from '@/requests'; import { sendErrorResponse } from '@/response-helper'; -import { UrlService } from '@/services/url.service'; import { isSamlLicensedAndEnabled } from '@/sso.ee/sso-helpers'; import { validateRedirectUrl } from '@/utils/validate-redirect-url'; diff --git a/packages/cli/src/modules/sso-saml/saml.service.ee.ts b/packages/cli/src/modules/sso-saml/saml.service.ee.ts index b5aa10331f7..bfbb0467707 100644 --- a/packages/cli/src/modules/sso-saml/saml.service.ee.ts +++ b/packages/cli/src/modules/sso-saml/saml.service.ee.ts @@ -1,7 +1,7 @@ import type { SamlPreferences, SamlPreferencesAttributeMapping } from '@n8n/api-types'; import { Logger } from '@n8n/backend-common'; import { OutboundHttp } from '@n8n/backend-network'; -import { AuthError, BadRequestError } from '@n8n/backend-services'; +import { AuthError, BadRequestError, UrlService } from '@n8n/backend-services'; import { GlobalConfig } from '@n8n/config'; import type { Settings, User } from '@n8n/db'; import { isValidEmail, SettingsRepository, UserRepository } from '@n8n/db'; @@ -21,7 +21,6 @@ import type { import { buildSamlClaimsContext } from '@/modules/provisioning.ee/claims-context.builder'; import { ProvisioningService } from '@/modules/provisioning.ee/provisioning.service.ee'; import { CacheService } from '@/services/cache/cache.service'; -import { UrlService } from '@/services/url.service'; import { getSamlLoginLabel, isSamlLicensedAndEnabled, diff --git a/packages/cli/src/modules/sso-saml/service-provider.ee.ts b/packages/cli/src/modules/sso-saml/service-provider.ee.ts index 2fa82eda0ae..b8a3e39fd46 100644 --- a/packages/cli/src/modules/sso-saml/service-provider.ee.ts +++ b/packages/cli/src/modules/sso-saml/service-provider.ee.ts @@ -1,9 +1,8 @@ import type { SamlPreferences } from '@n8n/api-types'; +import { UrlService } from '@n8n/backend-services'; import { Container } from '@n8n/di'; import type { ServiceProviderInstance } from 'samlify'; -import { UrlService } from '@/services/url.service'; - let serviceProviderInstance: ServiceProviderInstance | undefined; export function getServiceProviderEntityId(): string { diff --git a/packages/cli/src/modules/token-exchange/controllers/__tests__/embed-auth.controller.test.ts b/packages/cli/src/modules/token-exchange/controllers/__tests__/embed-auth.controller.test.ts index a0d91f4eb00..2ddaebb0a25 100644 --- a/packages/cli/src/modules/token-exchange/controllers/__tests__/embed-auth.controller.test.ts +++ b/packages/cli/src/modules/token-exchange/controllers/__tests__/embed-auth.controller.test.ts @@ -1,4 +1,5 @@ import { EmbedLoginBodyDto, EmbedLoginQueryDto } from '@n8n/api-types'; +import type { UrlService } from '@n8n/backend-services'; import { GLOBAL_MEMBER_ROLE, type User } from '@n8n/db'; import type { Response } from 'express'; import { mock } from 'vitest-mock-extended'; @@ -6,7 +7,6 @@ import { mock } from 'vitest-mock-extended'; import type { AuthService } from '@/auth/auth.service'; import type { EventService } from '@/events/event.service'; import type { AuthlessRequest } from '@/requests'; -import type { UrlService } from '@/services/url.service'; import type { TokenExchangeService } from '../../services/token-exchange.service'; import type { TokenExchangeConfig } from '../../token-exchange.config'; diff --git a/packages/cli/src/modules/token-exchange/controllers/embed-auth.controller.ts b/packages/cli/src/modules/token-exchange/controllers/embed-auth.controller.ts index 66980778918..1ce3da40e68 100644 --- a/packages/cli/src/modules/token-exchange/controllers/embed-auth.controller.ts +++ b/packages/cli/src/modules/token-exchange/controllers/embed-auth.controller.ts @@ -1,4 +1,5 @@ import { EmbedLoginBodyDto, EmbedLoginQueryDto } from '@n8n/api-types'; +import { UrlService } from '@n8n/backend-services'; import { Time } from '@n8n/constants'; import { Body, Get, Post, Query, RestController } from '@n8n/decorators'; import { Container } from '@n8n/di'; @@ -7,7 +8,6 @@ import type { Response } from 'express'; import { AuthService } from '@/auth/auth.service'; import { EventService } from '@/events/event.service'; import { AuthlessRequest } from '@/requests'; -import { UrlService } from '@/services/url.service'; import { validateRedirectUrl } from '@/utils/validate-redirect-url'; import { TokenExchangeService } from '../services/token-exchange.service'; diff --git a/packages/cli/src/oauth/__tests__/oauth.service.integration.test.ts b/packages/cli/src/oauth/__tests__/oauth.service.integration.test.ts index 7750f0abf7c..d117bf10bdf 100644 --- a/packages/cli/src/oauth/__tests__/oauth.service.integration.test.ts +++ b/packages/cli/src/oauth/__tests__/oauth.service.integration.test.ts @@ -1,6 +1,7 @@ import type { LockService, Logger } from '@n8n/backend-common'; import { OutboundHttp, type SsrfProtectionService } from '@n8n/backend-network'; import { type LocalServer, startServer } from '@n8n/backend-network/testing'; +import type { UrlService } from '@n8n/backend-services'; import type { GlobalConfig, SsrfProtectionConfig } from '@n8n/config'; import type { CredentialsRepository } from '@n8n/db'; import { mock } from 'vitest-mock-extended'; @@ -17,7 +18,6 @@ import type { OAuthBrowserBindingService } from '@/oauth/oauth-browser-binding.s import type { OAuthJweServiceProxy } from '@/oauth/oauth-jwe-service.proxy'; import { OauthService, type OAuth1CredentialData } from '@/oauth/oauth.service'; import type { CacheService } from '@/services/cache/cache.service'; -import type { UrlService } from '@/services/url.service'; interface Received { method?: string; diff --git a/packages/cli/src/oauth/__tests__/oauth.service.test.ts b/packages/cli/src/oauth/__tests__/oauth.service.test.ts index 7562a2c333f..3c4eb6fdb1d 100644 --- a/packages/cli/src/oauth/__tests__/oauth.service.test.ts +++ b/packages/cli/src/oauth/__tests__/oauth.service.test.ts @@ -1,6 +1,6 @@ import { LockAcquisitionTimeoutError, LockService, Logger } from '@n8n/backend-common'; import { OutboundHttp, SsrfProtectionService, type HttpRequestClient } from '@n8n/backend-network'; -import { AuthError, BadRequestError, NotFoundError } from '@n8n/backend-services'; +import { AuthError, BadRequestError, NotFoundError, UrlService } from '@n8n/backend-services'; import { mockInstance } from '@n8n/backend-test-utils'; import type { OAuth2CredentialData } from '@n8n/client-oauth2'; import { AuthError as OAuth2AuthError } from '@n8n/client-oauth2'; @@ -35,7 +35,6 @@ import { } from '@/oauth/oauth.service'; import type { OAuthRequest } from '@/requests'; import { CacheService } from '@/services/cache/cache.service'; -import { UrlService } from '@/services/url.service'; import * as WorkflowExecuteAdditionalData from '@/workflow-execute-additional-data'; vi.mock('@/workflow-execute-additional-data'); diff --git a/packages/cli/src/oauth/oauth.service.ts b/packages/cli/src/oauth/oauth.service.ts index 6e02f3c03c2..54bd8d41443 100644 --- a/packages/cli/src/oauth/oauth.service.ts +++ b/packages/cli/src/oauth/oauth.service.ts @@ -5,7 +5,7 @@ import { type HttpRequestClient, type SsrfBridge, } from '@n8n/backend-network'; -import { AuthError, BadRequestError, NotFoundError } from '@n8n/backend-services'; +import { AuthError, BadRequestError, NotFoundError, UrlService } from '@n8n/backend-services'; import { GlobalConfig, SsrfProtectionConfig } from '@n8n/config'; import type { AuthenticatedRequest, CredentialsEntity, ICredentialsDb } from '@n8n/db'; import { CredentialsRepository } from '@n8n/db'; @@ -27,7 +27,6 @@ import { CredentialsHelper } from '@/credentials-helper'; import type { OAuthRequest } from '@/requests'; import { extractAccountIdentifierFromData } from '@/oauth/account-identifier'; import { validateOAuthUrl } from '@/oauth/validate-oauth-url'; -import { UrlService } from '@/services/url.service'; import * as WorkflowExecuteAdditionalData from '@/workflow-execute-additional-data'; import { AuthError as OAuth2AuthError, diff --git a/packages/cli/src/public-api/index.ts b/packages/cli/src/public-api/index.ts index 35569de2b40..4f80c13363e 100644 --- a/packages/cli/src/public-api/index.ts +++ b/packages/cli/src/public-api/index.ts @@ -1,4 +1,5 @@ import { Logger } from '@n8n/backend-common'; +import { UrlService } from '@n8n/backend-services'; import { GlobalConfig } from '@n8n/config'; import type { AuthenticatedRequest } from '@n8n/db'; import { Container } from '@n8n/di'; @@ -19,7 +20,6 @@ import { License } from '@/license'; import { createN8nPackageMulterOptions } from '@/modules/n8n-packages/utils/import-package-upload'; import { AuthStrategyRegistry } from '@/services/auth-strategy.registry'; import { LastActiveAtService } from '@/services/last-active-at.service'; -import { UrlService } from '@/services/url.service'; import './v1/controllers'; diff --git a/packages/cli/src/services/__tests__/ai-gateway.service.test.ts b/packages/cli/src/services/__tests__/ai-gateway.service.test.ts index 5e78a276424..bde4dee1d82 100644 --- a/packages/cli/src/services/__tests__/ai-gateway.service.test.ts +++ b/packages/cli/src/services/__tests__/ai-gateway.service.test.ts @@ -1,5 +1,6 @@ import type { LicenseState } from '@n8n/backend-common'; import type { HttpRequestClient, OutboundHttp } from '@n8n/backend-network'; +import type { UrlService } from '@n8n/backend-services'; import { BadRequestError } from '@n8n/backend-services'; import type { GlobalConfig } from '@n8n/config'; import type { Project, User, UserRepository } from '@n8n/db'; @@ -13,7 +14,6 @@ import { FeatureNotLicensedError } from '@/errors/feature-not-licensed.error'; import type { License } from '@/license'; import { AiGatewayService } from '@/services/ai-gateway.service'; import type { OwnershipService } from '@/services/ownership.service'; -import type { UrlService } from '@/services/url.service'; const INSTANCE_BASE_URL = 'https://my-n8n.example.com'; diff --git a/packages/cli/src/services/__tests__/ai-workflow-builder.service.test.ts b/packages/cli/src/services/__tests__/ai-workflow-builder.service.test.ts index 91f8488b109..a5298228190 100644 --- a/packages/cli/src/services/__tests__/ai-workflow-builder.service.test.ts +++ b/packages/cli/src/services/__tests__/ai-workflow-builder.service.test.ts @@ -1,3 +1,4 @@ +import type { UrlService } from '@n8n/backend-services'; import type { Mock, MockedClass } from 'vitest'; import { AiWorkflowBuilderService } from '@n8n/ai-workflow-builder'; import type { Logger } from '@n8n/backend-common'; @@ -18,7 +19,6 @@ import type { WorkflowBuilderSessionRepository } from '@/modules/workflow-builde import type { Push } from '@/push'; import { WorkflowBuilderService } from '@/services/ai-workflow-builder.service'; import type { DynamicNodeParametersService } from '@/services/dynamic-node-parameters.service'; -import type { UrlService } from '@/services/url.service'; import type { Telemetry } from '@/telemetry'; vi.mock('@n8n/ai-workflow-builder', () => ({ diff --git a/packages/cli/src/services/__tests__/frontend.service.test.ts b/packages/cli/src/services/__tests__/frontend.service.test.ts index 021fbd7b014..a6c2160c974 100644 --- a/packages/cli/src/services/__tests__/frontend.service.test.ts +++ b/packages/cli/src/services/__tests__/frontend.service.test.ts @@ -1,3 +1,4 @@ +import type { UrlService } from '@n8n/backend-services'; import type { Mock } from 'vitest'; import type { LicenseState, Logger, ModuleRegistry } from '@n8n/backend-common'; import type { GlobalConfig, SecurityConfig } from '@n8n/config'; @@ -16,7 +17,6 @@ import { CommunityPackagesConfig } from '@/modules/community-packages/community- import type { PushConfig } from '@/push/push.config'; import type { AiUsageService } from '@/services/ai-usage.service'; import { FrontendService, type PublicFrontendSettings } from '@/services/frontend.service'; -import type { UrlService } from '@/services/url.service'; import type { WorkflowReviewPolicyService } from '@/services/workflow-review-policy.service'; import type { UserManagementMailer } from '@/user-management/email'; import type { OwnershipService } from '../ownership.service'; diff --git a/packages/cli/src/services/__tests__/user.service.test.ts b/packages/cli/src/services/__tests__/user.service.test.ts index a53719257eb..36f0e3e9214 100644 --- a/packages/cli/src/services/__tests__/user.service.test.ts +++ b/packages/cli/src/services/__tests__/user.service.test.ts @@ -1,5 +1,5 @@ import { InviteUsersRequestDto } from '@n8n/api-types'; -import { BadRequestError, ForbiddenError, NotFoundError } from '@n8n/backend-services'; +import { BadRequestError, ForbiddenError, NotFoundError, UrlService } from '@n8n/backend-services'; import { mockInstance } from '@n8n/backend-test-utils'; import { GlobalConfig } from '@n8n/config'; import { @@ -24,7 +24,6 @@ import type { EventService } from '@/events/event.service'; import type { ExternalHooks } from '@/external-hooks'; import type { License } from '@/license'; import type { ProvisioningService } from '@/modules/provisioning.ee/provisioning.service.ee'; -import { UrlService } from '@/services/url.service'; import { UserService } from '@/services/user.service'; import * as ssoHelpers from '@/sso.ee/sso-helpers'; import type { UserManagementMailer } from '@/user-management/email'; diff --git a/packages/cli/src/services/ai-gateway.service.ts b/packages/cli/src/services/ai-gateway.service.ts index 2ba7f6cb5e1..23cdcd2c77e 100644 --- a/packages/cli/src/services/ai-gateway.service.ts +++ b/packages/cli/src/services/ai-gateway.service.ts @@ -6,7 +6,7 @@ import { } from '@n8n/api-types'; import { LicenseState } from '@n8n/backend-common'; import { OutboundHttp } from '@n8n/backend-network'; -import { BadRequestError } from '@n8n/backend-services'; +import { BadRequestError, UrlService } from '@n8n/backend-services'; import { GlobalConfig } from '@n8n/config'; import { LICENSE_FEATURES } from '@n8n/constants'; import { UserRepository } from '@n8n/db'; @@ -20,7 +20,6 @@ import { FeatureNotLicensedError } from '@/errors/feature-not-licensed.error'; import { License } from '@/license'; import { checkAiGatewayEligibility } from '@/services/ai-gateway-eligibility'; import { OwnershipService } from '@/services/ownership.service'; -import { UrlService } from '@/services/url.service'; interface GatewayTokenResponse { token: string; diff --git a/packages/cli/src/services/ai-workflow-builder.service.ts b/packages/cli/src/services/ai-workflow-builder.service.ts index 16f175b919c..974d2a5e76e 100644 --- a/packages/cli/src/services/ai-workflow-builder.service.ts +++ b/packages/cli/src/services/ai-workflow-builder.service.ts @@ -6,6 +6,7 @@ import { } from '@n8n/ai-workflow-builder'; import { Logger } from '@n8n/backend-common'; import { OutboundHttp, SsrfProtectionService } from '@n8n/backend-network'; +import { UrlService } from '@n8n/backend-services'; import { GlobalConfig, SsrfProtectionConfig } from '@n8n/config'; import { BUILTIN_NODES_PACKAGES } from '@n8n/constants'; import { Service } from '@n8n/di'; @@ -27,7 +28,6 @@ import { LoadNodesAndCredentials } from '@/load-nodes-and-credentials'; import { WorkflowBuilderSessionRepository } from '@/modules/workflow-builder'; import { Push } from '@/push'; import { DynamicNodeParametersService } from '@/services/dynamic-node-parameters.service'; -import { UrlService } from '@/services/url.service'; import { Telemetry } from '@/telemetry'; import { createAiProxyFetch } from '@/utils/ai-proxy-fetch'; import { getBase } from '@/workflow-execute-additional-data'; diff --git a/packages/cli/src/services/frontend.service.ts b/packages/cli/src/services/frontend.service.ts index 505b467a96b..2c99bd4364e 100644 --- a/packages/cli/src/services/frontend.service.ts +++ b/packages/cli/src/services/frontend.service.ts @@ -1,5 +1,6 @@ import type { FrontendSettings, ITelemetrySettings, N8nEnvFeatFlags } from '@n8n/api-types'; import { LicenseState, Logger, ModuleRegistry } from '@n8n/backend-common'; +import { UrlService } from '@n8n/backend-services'; import { GlobalConfig, SecurityConfig } from '@n8n/config'; import { LICENSE_FEATURES, LICENSE_QUOTAS, Time } from '@n8n/constants'; import { WorkflowRepository } from '@n8n/db'; @@ -12,7 +13,6 @@ import type { ICredentialType, INodeTypeBaseDescription, INodeTypeDescription } import path from 'path'; import { AiUsageService } from './ai-usage.service'; -import { UrlService } from './url.service'; import { WorkflowReviewPolicyService } from './workflow-review-policy.service'; import config from '@/config'; diff --git a/packages/cli/src/services/user.service.ts b/packages/cli/src/services/user.service.ts index a0b9fd0cbb9..86ec3c175cd 100644 --- a/packages/cli/src/services/user.service.ts +++ b/packages/cli/src/services/user.service.ts @@ -5,6 +5,7 @@ import { ForbiddenError, InternalServerError, NotFoundError, + UrlService, } from '@n8n/backend-services'; import { GlobalConfig } from '@n8n/config'; import type { PublicUser } from '@n8n/db'; @@ -48,7 +49,6 @@ import type { Invitation } from '@/interfaces'; import { License } from '@/license'; import { PostHogClient } from '@/posthog'; import type { UserRequest } from '@/requests'; -import { UrlService } from '@/services/url.service'; import { isSsoCurrentAuthenticationMethod } from '@/sso.ee/sso-helpers'; import { UserManagementMailer } from '@/user-management/email'; diff --git a/packages/cli/src/user-management/email/__tests__/user-management-mailer.test.ts b/packages/cli/src/user-management/email/__tests__/user-management-mailer.test.ts index 86629e84c93..fe8335cf6f5 100644 --- a/packages/cli/src/user-management/email/__tests__/user-management-mailer.test.ts +++ b/packages/cli/src/user-management/email/__tests__/user-management-mailer.test.ts @@ -1,3 +1,4 @@ +import type { UrlService } from '@n8n/backend-services'; import { mockInstance } from '@n8n/backend-test-utils'; import type { GlobalConfig } from '@n8n/config'; import type { ApiKey, User, UserRepository } from '@n8n/db'; @@ -5,7 +6,6 @@ import { PROJECT_EDITOR_ROLE_SLUG, PROJECT_VIEWER_ROLE_SLUG } from '@n8n/permiss import type { IWorkflowBase } from 'n8n-workflow'; import { mock } from 'vitest-mock-extended'; -import type { UrlService } from '@/services/url.service'; import type { InviteEmailData, PasswordResetData } from '@/user-management/email/interfaces'; import { NodeMailer } from '@/user-management/email/node-mailer'; import { UserManagementMailer } from '@/user-management/email/user-management-mailer'; diff --git a/packages/cli/src/user-management/email/user-management-mailer.ts b/packages/cli/src/user-management/email/user-management-mailer.ts index dbc8c4cf4c7..6f62166d868 100644 --- a/packages/cli/src/user-management/email/user-management-mailer.ts +++ b/packages/cli/src/user-management/email/user-management-mailer.ts @@ -1,5 +1,5 @@ import { inTest, Logger } from '@n8n/backend-common'; -import { InternalServerError } from '@n8n/backend-services'; +import { InternalServerError, UrlService } from '@n8n/backend-services'; import { GlobalConfig } from '@n8n/config'; import type { ApiKey, User } from '@n8n/db'; import { UserRepository } from '@n8n/db'; @@ -22,7 +22,6 @@ import { NodeMailer } from './node-mailer'; import { EventService } from '@/events/event.service'; import type { RelayEventMap } from '@/events/maps/relay.event-map'; -import { UrlService } from '@/services/url.service'; import { toError } from '@/utils'; const REVOKED_AT_FORMATTER = new Intl.DateTimeFormat('en-GB', { diff --git a/packages/cli/src/workflow-execute-additional-data.ts b/packages/cli/src/workflow-execute-additional-data.ts index f67780316c5..9865721f234 100644 --- a/packages/cli/src/workflow-execute-additional-data.ts +++ b/packages/cli/src/workflow-execute-additional-data.ts @@ -3,6 +3,7 @@ import type { PushMessage, PushType } from '@n8n/api-types'; import { Logger, ModuleRegistry } from '@n8n/backend-common'; import { SsrfProtectionService } from '@n8n/backend-network'; +import { UrlService } from '@n8n/backend-services'; import { ExecutionsConfig, GlobalConfig, SsrfProtectionConfig, WorkflowsConfig } from '@n8n/config'; import { Time } from '@n8n/constants'; import { ExecutionRepository, WorkflowRepository } from '@n8n/db'; @@ -70,7 +71,6 @@ import { import type { UpdateExecutionPayload } from '@/interfaces'; import { NodeTypes } from '@/node-types'; import { Push } from '@/push'; -import { UrlService } from '@/services/url.service'; import { TaskRequester } from '@/task-runners/task-managers/task-requester'; import { findSubworkflowStart } from '@/utils'; import { objectToError } from '@/utils/object-to-error'; diff --git a/packages/cli/test/integration/dynamic-credentials.ee/form-trigger-submit-gate.api.test.ts b/packages/cli/test/integration/dynamic-credentials.ee/form-trigger-submit-gate.api.test.ts index 58471607959..82f01a321b1 100644 --- a/packages/cli/test/integration/dynamic-credentials.ee/form-trigger-submit-gate.api.test.ts +++ b/packages/cli/test/integration/dynamic-credentials.ee/form-trigger-submit-gate.api.test.ts @@ -1,3 +1,4 @@ +import { UrlService } from '@n8n/backend-services'; import { createWorkflowWithHistory, getPersonalProject, @@ -25,7 +26,6 @@ import { N8nResolverSeeder } from '@/modules/dynamic-credentials.ee/services/n8n import { OAuthClientRepository } from '@/modules/oauth-server/database/repositories/oauth-client.repository'; import { OAuthTokenService } from '@/modules/oauth-server/oauth-token.service'; import { CacheService } from '@/services/cache/cache.service'; -import { UrlService } from '@/services/url.service'; import { WebhookServer } from '@/webhooks/webhook-server'; import { createCredentials } from '../shared/db/credentials'; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 54ee608cd57..e188473bca4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1673,6 +1673,12 @@ importers: '@n8n/api-types': specifier: workspace:* version: link:../api-types + '@n8n/config': + specifier: workspace:* + version: link:../config + '@n8n/di': + specifier: workspace:* + version: link:../di n8n-workflow: specifier: workspace:* version: link:../../workflow @@ -1698,6 +1704,9 @@ importers: vitest: specifier: 'catalog:' version: 4.1.9(@opentelemetry/api@1.9.1)(@types/node@20.19.41)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(jsdom@23.0.1(bufferutil@4.0.9)(supports-color@8.1.1)(utf-8-validate@5.0.10))(vite@8.0.2(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3)) + vitest-mock-extended: + specifier: 'catalog:' + version: 3.1.0(typescript@7.0.2)(vitest@4.1.9) packages/@n8n/backend-test-utils: dependencies: