From 499d64181afb1fe50fcf34a1116fcc3f9b396245 Mon Sep 17 00:00:00 2001 From: Charlie Kolb Date: Tue, 29 Sep 2026 12:55:05 +0000 Subject: [PATCH] refactor(core): Move shared cache infrastructure to backend services (no-changelog) (#39851) --- knip.ts | 4 ++ packages/@n8n/backend-services/README.md | 6 ++- .../@n8n/backend-services/eslint.config.mjs | 2 - .../@n8n/backend-services/oxlint.config.mts | 11 ------ packages/@n8n/backend-services/package.json | 13 ++++++- .../cache-errors/uncacheable-value.error.ts | 0 packages/@n8n/backend-services/src/index.ts | 4 ++ .../__tests__/redis-client.service.test.ts | 12 +++--- .../__tests__/cache-mock.service.test.ts | 2 +- .../cache/__tests__/cache.service.test.ts | 10 ++--- .../src/services/cache/cache.constants.ts | 0 .../src/services/cache/cache.service.ts | 21 +++++----- .../src/services/cache/cache.types.ts | 2 +- .../src/services/cache/redis.cache-manager.ts | 0 .../src/services/redis-client.service.ts | 2 +- .../src/services}/redis.types.ts | 0 .../test/setup-test-folder.ts | 23 ----------- .../@n8n/backend-services/vitest.config.ts | 1 - packages/cli/package.json | 2 - packages/cli/src/activation-errors.service.ts | 2 +- .../__tests__/collaboration.state.test.ts | 2 +- .../src/collaboration/collaboration.state.ts | 2 +- .../cli/src/commands/__tests__/engine.test.ts | 2 +- .../src/commands/__tests__/webhook.test.ts | 2 +- .../cli/src/commands/__tests__/worker.test.ts | 2 +- .../cli/src/controllers/e2e.controller.ts | 2 +- .../variables.service.integration.test.ts | 3 +- .../variables/variables.service.ee.ts | 3 +- .../active-workflow-metrics.service.test.ts | 2 +- .../__tests__/cache-metrics.service.test.ts | 2 +- .../__tests__/cached-metric-query.test.ts | 2 +- .../scheduler-metrics.service.test.ts | 2 +- .../workflow-info-metrics.service.test.ts | 2 +- ...rkflow-publication-metrics.service.test.ts | 3 +- ...orkflow-statistics-metrics.service.test.ts | 2 +- .../active-workflow-metrics.service.ts | 2 +- .../prometheus/cache-metrics.service.ts | 2 +- .../metrics/prometheus/cached-metric-query.ts | 2 +- .../prometheus/scheduler-metrics.service.ts | 2 +- .../workflow-info-metrics.service.ts | 2 +- .../workflow-publication-metrics.service.ts | 3 +- .../workflow-statistics-metrics.service.ts | 2 +- .../cli/src/mfa/__tests__/mfa.service.test.ts | 2 +- packages/cli/src/mfa/mfa.service.ts | 2 +- .../__tests__/callback-store.test.ts | 2 +- .../__tests__/slack-app-setup.service.test.ts | 2 +- .../slack-manual-setup.service.test.ts | 2 +- .../__tests__/slack-methods.service.test.ts | 2 +- .../agents/integrations/agent-chat-bridge.ts | 2 +- .../agents/integrations/callback-store.ts | 2 +- .../slack/slack-managed-setup.service.ts | 2 +- .../slack/slack-manual-setup.service.ts | 2 +- .../platforms/slack/slack-methods.service.ts | 3 +- .../breaking-changes.service.test.ts | 2 +- .../breaking-changes.service.ts | 2 +- .../chat-hub-execution-store.service.test.ts | 2 +- .../chat-stream-state.service.test.ts | 2 +- .../chat-hub-execution-store.service.ts | 2 +- .../chat-hub/chat-stream-state.service.ts | 2 +- ...trospection-identifier.integration.test.ts | 2 +- .../oauth2-introspection-identifier.test.ts | 2 +- .../oauth2-metadata-http-client.test.ts | 2 +- ...h2-userinfo-identifier.integration.test.ts | 2 +- .../oauth2-userinfo-identifier.test.ts | 2 +- .../oauth2-introspection-identifier.ts | 2 +- .../oauth2-metadata-http-client.ts | 2 +- .../identifiers/oauth2-userinfo-identifier.ts | 2 +- .../authorize-intent.service.test.ts | 2 +- .../services/authorize-intent.service.ts | 2 +- .../__tests__/engine-v2.module.test.ts | 2 +- .../redis-execution-response-channel.ts | 6 +-- ...nce-ai-workflow-writes.integration.test.ts | 2 +- ...le-member-cleanup.task.integration.test.ts | 2 +- .../__tests__/redis-instance-storage.test.ts | 2 +- .../storage/redis-instance-storage.ts | 2 +- .../__tests__/mcp.settings.service.test.ts | 2 +- .../src/modules/mcp/mcp.settings.service.ts | 2 +- .../oauth-jwe-key.service.integration.test.ts | 2 +- .../__tests__/oauth-jwe-key.service.test.ts | 2 +- .../oauth-jwe/oauth-jwe-key.service.ts | 2 +- ...chat-trigger-resource.resolver.api.test.ts | 2 +- ...trigger-test-resource.resolver.api.test.ts | 2 +- ...form-trigger-resource.resolver.api.test.ts | 2 +- ...trigger-test-resource.resolver.api.test.ts | 2 +- .../__tests__/oauth-flow.service.api.test.ts | 2 +- ...test-trigger-resource-lifetime.api.test.ts | 2 +- ...test-trigger-resource.resolver.api.test.ts | 2 +- ...flow-mcp-trigger-authorization.api.test.ts | 2 +- ...-mcp-trigger-resource.resolver.api.test.ts | 2 +- ...test-trigger-resource.resolver.api.test.ts | 2 +- ...hook-trigger-resource.resolver.api.test.ts | 2 +- .../oauth-server/oauth-flow.service.ts | 3 +- ...ance-redaction-enforcement.service.test.ts | 2 +- .../instance-redaction-enforcement.service.ts | 2 +- .../__tests__/saml.service.ee.test.ts | 2 +- .../src/modules/sso-saml/saml.service.ee.ts | 3 +- .../type-availability-policy.service.test.ts | 2 +- .../type-availability-policy.service.ts | 3 +- .../oauth.service.integration.test.ts | 3 +- .../src/oauth/__tests__/oauth.service.test.ts | 3 +- packages/cli/src/oauth/oauth.service.ts | 3 +- .../__tests__/pool-config.service.ee.test.ts | 2 +- .../__tests__/redis-lock.service.test.ts | 2 +- .../scaling/__tests__/worker-server.test.ts | 2 +- .../cli/src/scaling/leader-election-client.ts | 2 +- .../cli/src/scaling/pool-config.service.ee.ts | 2 +- .../__tests__/publisher.service.test.ts | 2 +- .../__tests__/subscriber.service.test.ts | 2 +- .../src/scaling/pubsub/publisher.service.ts | 2 +- .../src/scaling/pubsub/subscriber.service.ts | 2 +- .../cli/src/scaling/redis-lock.service.ts | 2 +- packages/cli/src/scaling/scaling.service.ts | 2 +- packages/cli/src/scaling/worker-server.ts | 2 +- .../__tests__/ai-usage.service.test.ts | 2 +- .../__tests__/ownership.service.test.ts | 2 +- .../__tests__/role-cache.service.test.ts | 2 +- packages/cli/src/services/ai-usage.service.ts | 2 +- .../cli/src/services/ownership.service.ts | 3 +- .../cli/src/services/role-cache.service.ts | 2 +- .../task-broker-auth.controller.test.ts | 2 +- .../task-broker-auth.service.test.ts | 2 +- .../auth/task-broker-auth.service.ts | 2 +- ...test-webhook-registrations.service.test.ts | 2 +- .../__tests__/webhook.service.test.ts | 2 +- .../test-webhook-registrations.service.ts | 2 +- packages/cli/src/webhooks/webhook.service.ts | 2 +- .../workflow-published-data.service.test.ts | 2 +- .../workflow-published-data.service.ts | 2 +- .../activation-errors.service.test.ts | 2 +- ...chat-trigger-test-webhook-auth.api.test.ts | 2 +- .../collaboration.service.test.ts | 2 +- .../controllers/oauth/oauth1.api.test.ts | 2 +- .../controllers/oauth/oauth2.api.test.ts | 2 +- .../chat-trigger-test-run.api.test.ts | 2 +- .../form-trigger-submit-gate.api.test.ts | 2 +- .../integration/engine-v2-webhooks.test.ts | 2 +- .../cli/test/integration/mfa/mfa.api.test.ts | 2 +- .../policy/node-type-policy.fan-out.test.ts | 2 +- .../node-type-policy.store-reads.test.ts | 2 +- .../integration/policy/shared/policy-cache.ts | 2 +- .../integration/prometheus-metrics.test.ts | 3 +- .../public-api/security-policy.test.ts | 2 +- .../integration/shared/utils/test-server.ts | 2 +- .../cli/test/integration/variables.test.ts | 2 +- pnpm-lock.yaml | 39 ++++++++++++++++--- 145 files changed, 207 insertions(+), 214 deletions(-) rename packages/{cli => @n8n/backend-services}/src/errors/cache-errors/uncacheable-value.error.ts (100%) rename packages/{cli => @n8n/backend-services}/src/services/__tests__/redis-client.service.test.ts (97%) rename packages/{cli => @n8n/backend-services}/src/services/cache/__tests__/cache-mock.service.test.ts (97%) rename packages/{cli => @n8n/backend-services}/src/services/cache/__tests__/cache.service.test.ts (98%) rename packages/{cli => @n8n/backend-services}/src/services/cache/cache.constants.ts (100%) rename packages/{cli => @n8n/backend-services}/src/services/cache/cache.service.ts (94%) rename packages/{cli => @n8n/backend-services}/src/services/cache/cache.types.ts (79%) rename packages/{cli => @n8n/backend-services}/src/services/cache/redis.cache-manager.ts (100%) rename packages/{cli => @n8n/backend-services}/src/services/redis-client.service.ts (99%) rename packages/{cli/src/scaling/redis => @n8n/backend-services/src/services}/redis.types.ts (100%) delete mode 100644 packages/@n8n/backend-services/test/setup-test-folder.ts diff --git a/knip.ts b/knip.ts index 445f0d8bfa5..df6e7b37c2d 100644 --- a/knip.ts +++ b/knip.ts @@ -93,6 +93,10 @@ const config: KnipConfig = { '@types/psl', ], }), + 'packages/@n8n/backend-services': pkg({ + // ioredis-mock is loaded with vi.importActual, which knip does not link. + ignoreDependencies: ['ioredis-mock'], + }), 'packages/@n8n/instance-ai': pkg({ // psl is loaded with a dynamic import, which knip does not link to @types. ignoreDependencies: ['@types/psl'], diff --git a/packages/@n8n/backend-services/README.md b/packages/@n8n/backend-services/README.md index 58cad868f6d..b16b1c2b53d 100644 --- a/packages/@n8n/backend-services/README.md +++ b/packages/@n8n/backend-services/README.md @@ -29,9 +29,11 @@ and infrastructure services that need the persistence layer or that only - `EventService`: the shared, typed event bus. - `UrlService`: instance and webhook URLs. +- `CacheService`: application cache access. +- `RedisClientService`: shared Redis connections and support code. -The next PRs move `CacheService`, `RedisClientService`, `ProtectedResourceRegistry`, -`RoleService`, the finder services and the scope checks here, one area at a time. +The next PRs move `ProtectedResourceRegistry`, `RoleService`, the finder services +and the scope checks here, one area at a time. ### Register event payloads diff --git a/packages/@n8n/backend-services/eslint.config.mjs b/packages/@n8n/backend-services/eslint.config.mjs index 766d97365e7..d964293b6df 100644 --- a/packages/@n8n/backend-services/eslint.config.mjs +++ b/packages/@n8n/backend-services/eslint.config.mjs @@ -34,8 +34,6 @@ export default defineConfig( { files: ['./test/**/*.ts', './src/**/__tests__/**/*.ts'], rules: { - 'n8n-local-rules/misplaced-n8n-typeorm-import': 'off', - 'n8n-local-rules/no-type-unsafe-event-emitter': 'off', // `vi.importActual('x')` needs inline import types. '@typescript-eslint/consistent-type-imports': ['error', { disallowTypeAnnotations: false }], }, diff --git a/packages/@n8n/backend-services/oxlint.config.mts b/packages/@n8n/backend-services/oxlint.config.mts index e3175003eba..5a11f5a4451 100644 --- a/packages/@n8n/backend-services/oxlint.config.mts +++ b/packages/@n8n/backend-services/oxlint.config.mts @@ -30,15 +30,4 @@ export default defineConfig({ ], 'n8n-local-rules/no-type-unsafe-event-emitter': 'error', }, - overrides: [ - { - files: ['./test/**/*.ts', './src/**/__tests__/**/*.ts'], - // An override that names a jsPlugin rule must re-declare the plugin. - jsPlugins: ['@n8n/eslint-config/plugin'], - rules: { - 'n8n-local-rules/misplaced-n8n-typeorm-import': 'off', - 'n8n-local-rules/no-type-unsafe-event-emitter': 'off', - }, - }, - ], }); diff --git a/packages/@n8n/backend-services/package.json b/packages/@n8n/backend-services/package.json index 1ee30794149..f481d943421 100644 --- a/packages/@n8n/backend-services/package.json +++ b/packages/@n8n/backend-services/package.json @@ -25,14 +25,25 @@ "dependencies": { "@n8n/backend-common": "workspace:*", "@n8n/config": "workspace:*", - "@n8n/di": "workspace:*" + "@n8n/constants": "workspace:*", + "@n8n/decorators": "workspace:*", + "@n8n/di": "workspace:*", + "@n8n/errors": "workspace:*", + "@n8n/utils": "workspace:*", + "cache-manager": "catalog:", + "ioredis": "5.3.2", + "n8n-workflow": "workspace:*" }, "devDependencies": { "@n8n/eslint-config": "workspace:*", "@n8n/oxlint-config": "workspace:*", "@n8n/typescript-config": "workspace:*", "@n8n/vitest-config": "workspace:*", + "@types/lodash": "catalog:", "@vitest/coverage-v8": "catalog:", + "eslint": "catalog:", + "ioredis-mock": "^8.8.1", + "lodash": "catalog:", "oxlint": "catalog:", "oxlint-tsgolint": "catalog:", "typescript": "catalog:typescript", diff --git a/packages/cli/src/errors/cache-errors/uncacheable-value.error.ts b/packages/@n8n/backend-services/src/errors/cache-errors/uncacheable-value.error.ts similarity index 100% rename from packages/cli/src/errors/cache-errors/uncacheable-value.error.ts rename to packages/@n8n/backend-services/src/errors/cache-errors/uncacheable-value.error.ts diff --git a/packages/@n8n/backend-services/src/index.ts b/packages/@n8n/backend-services/src/index.ts index 9e6033295d3..b7e636552f0 100644 --- a/packages/@n8n/backend-services/src/index.ts +++ b/packages/@n8n/backend-services/src/index.ts @@ -1,2 +1,6 @@ export { EventService, type EventMap } from './events/event.service'; +export { UncacheableValueError } from './errors/cache-errors/uncacheable-value.error'; +export { CacheService } from './services/cache/cache.service'; +export { RedisClientService } from './services/redis-client.service'; +export type { RedisClientType } from './services/redis.types'; export { UrlService } from './services/url.service'; diff --git a/packages/cli/src/services/__tests__/redis-client.service.test.ts b/packages/@n8n/backend-services/src/services/__tests__/redis-client.service.test.ts similarity index 97% rename from packages/cli/src/services/__tests__/redis-client.service.test.ts rename to packages/@n8n/backend-services/src/services/__tests__/redis-client.service.test.ts index 7f70189bd4a..1e7ef7ae5cf 100644 --- a/packages/cli/src/services/__tests__/redis-client.service.test.ts +++ b/packages/@n8n/backend-services/src/services/__tests__/redis-client.service.test.ts @@ -1,10 +1,10 @@ -import { Logger } from '@n8n/backend-common'; -import { mockInstance } from '@n8n/backend-test-utils'; -import { GlobalConfig } from '@n8n/config'; +import type { Logger } from '@n8n/backend-common'; +import type { GlobalConfig } from '@n8n/config'; import Redis from 'ioredis'; import type { Mock } from 'vitest'; +import { mock } from 'vitest-mock-extended'; -import { RedisClientService } from '@/services/redis-client.service'; +import { RedisClientService } from '../redis-client.service'; type EventHandler = (...args: unknown[]) => void; @@ -27,10 +27,10 @@ vi.mock('ioredis', () => { }); describe('RedisClientService', () => { - const logger = mockInstance(Logger); + const logger = mock(); logger.scoped.mockReturnValue(logger); - const globalConfig = mockInstance(GlobalConfig, { + const globalConfig = mock({ queue: { bull: { redis: { diff --git a/packages/cli/src/services/cache/__tests__/cache-mock.service.test.ts b/packages/@n8n/backend-services/src/services/cache/__tests__/cache-mock.service.test.ts similarity index 97% rename from packages/cli/src/services/cache/__tests__/cache-mock.service.test.ts rename to packages/@n8n/backend-services/src/services/cache/__tests__/cache-mock.service.test.ts index be492fa6d5a..9b124495003 100644 --- a/packages/cli/src/services/cache/__tests__/cache-mock.service.test.ts +++ b/packages/@n8n/backend-services/src/services/cache/__tests__/cache-mock.service.test.ts @@ -1,7 +1,7 @@ import { Container } from '@n8n/di'; import { mock } from 'vitest-mock-extended'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService } from '../cache.service'; const cacheService = Container.get(CacheService); const store = mock['store']>({ isCacheable: () => true }); diff --git a/packages/cli/src/services/cache/__tests__/cache.service.test.ts b/packages/@n8n/backend-services/src/services/cache/__tests__/cache.service.test.ts similarity index 98% rename from packages/cli/src/services/cache/__tests__/cache.service.test.ts rename to packages/@n8n/backend-services/src/services/cache/__tests__/cache.service.test.ts index f91bac793fa..e44c84f8c7c 100644 --- a/packages/cli/src/services/cache/__tests__/cache.service.test.ts +++ b/packages/@n8n/backend-services/src/services/cache/__tests__/cache.service.test.ts @@ -3,11 +3,12 @@ import { Container } from '@n8n/di'; import { sleep } from '@n8n/utils/sleep'; import random from 'lodash/random'; -import config from '@/config'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService } from '../cache.service'; -vi.mock('ioredis', () => { - const Redis = require('ioredis-mock'); +vi.mock('ioredis', async () => { + const { default: Redis } = await vi.importActual<{ + default: new (...args: unknown[]) => unknown; + }>('ioredis-mock'); return { // Must be a function expression (not method shorthand) so it is @@ -33,7 +34,6 @@ for (const backend of ['memory', 'redis'] as const) { afterEach(async () => { await cacheService.reset(); - config.load(config.default); }); describe('init', () => { diff --git a/packages/cli/src/services/cache/cache.constants.ts b/packages/@n8n/backend-services/src/services/cache/cache.constants.ts similarity index 100% rename from packages/cli/src/services/cache/cache.constants.ts rename to packages/@n8n/backend-services/src/services/cache/cache.constants.ts diff --git a/packages/cli/src/services/cache/cache.service.ts b/packages/@n8n/backend-services/src/services/cache/cache.service.ts similarity index 94% rename from packages/cli/src/services/cache/cache.service.ts rename to packages/@n8n/backend-services/src/services/cache/cache.service.ts index 53ce6fd1c9a..d95b5680302 100644 --- a/packages/cli/src/services/cache/cache.service.ts +++ b/packages/@n8n/backend-services/src/services/cache/cache.service.ts @@ -2,18 +2,14 @@ import { TypedEmitter } from '@n8n/backend-common'; import { GlobalConfig } from '@n8n/config'; import { Time } from '@n8n/constants'; import { Container, Service } from '@n8n/di'; +import { isRecord } from '@n8n/utils/is-record'; import { caching } from 'cache-manager'; import { jsonStringify, UserError } from 'n8n-workflow'; -import { UncacheableValueError } from '@/errors/cache-errors/uncacheable-value.error'; -import { REDIS_TTL_KEY_MISSING } from '@/services/cache/cache.constants'; -import type { - TaggedRedisCache, - TaggedMemoryCache, - MaybeHash, - Hash, -} from '@/services/cache/cache.types'; -import { isObject } from '@/utils'; +import { UncacheableValueError } from '../../errors/cache-errors/uncacheable-value.error'; + +import { REDIS_TTL_KEY_MISSING } from './cache.constants'; +import type { TaggedRedisCache, TaggedMemoryCache, MaybeHash, Hash } from './cache.types'; type CacheEvents = { 'metrics.cache.hit': never; @@ -29,7 +25,8 @@ export class CacheService extends TypedEmitter { super(); } - private cache: TaggedRedisCache | TaggedMemoryCache; + // Set by `init()`, which every public method awaits before use. + private cache!: TaggedRedisCache | TaggedMemoryCache; async init() { const { backend } = this.globalConfig.cache; @@ -54,7 +51,7 @@ export class CacheService extends TypedEmitter { extraOptions: { keyPrefix: prefix }, }); - const { redisStoreUsingClient } = await import('@/services/cache/redis.cache-manager.js'); + const { redisStoreUsingClient } = await import('./redis.cache-manager.js'); const redisStore = redisStoreUsingClient(redisClient, { ttl: this.globalConfig.cache.redis.ttl, }); @@ -379,7 +376,7 @@ export class CacheService extends TypedEmitter { } const isEmptyArray = Array.isArray(value) && value.length === 0; - const isEmptyObject = isObject(value) && Object.keys(value).length === 0; + const isEmptyObject = isRecord(value) && Object.keys(value).length === 0; if (isEmptyArray || isEmptyObject) { // Redis adapters may return [] or {} for missing string or hash keys after restart. const keyExists = await this.doesRedisKeyExist(key); diff --git a/packages/cli/src/services/cache/cache.types.ts b/packages/@n8n/backend-services/src/services/cache/cache.types.ts similarity index 79% rename from packages/cli/src/services/cache/cache.types.ts rename to packages/@n8n/backend-services/src/services/cache/cache.types.ts index 8a798d355d0..3ba73641334 100644 --- a/packages/cli/src/services/cache/cache.types.ts +++ b/packages/@n8n/backend-services/src/services/cache/cache.types.ts @@ -1,6 +1,6 @@ import type { MemoryCache } from 'cache-manager'; -import type { RedisCache } from '@/services/cache/redis.cache-manager'; +import type { RedisCache } from './redis.cache-manager'; export type TaggedRedisCache = RedisCache & { kind: 'redis' }; diff --git a/packages/cli/src/services/cache/redis.cache-manager.ts b/packages/@n8n/backend-services/src/services/cache/redis.cache-manager.ts similarity index 100% rename from packages/cli/src/services/cache/redis.cache-manager.ts rename to packages/@n8n/backend-services/src/services/cache/redis.cache-manager.ts diff --git a/packages/cli/src/services/redis-client.service.ts b/packages/@n8n/backend-services/src/services/redis-client.service.ts similarity index 99% rename from packages/cli/src/services/redis-client.service.ts rename to packages/@n8n/backend-services/src/services/redis-client.service.ts index 50588135075..166a8d06bd5 100644 --- a/packages/cli/src/services/redis-client.service.ts +++ b/packages/@n8n/backend-services/src/services/redis-client.service.ts @@ -5,7 +5,7 @@ import { Service } from '@n8n/di'; import ioRedis from 'ioredis'; import type { Cluster, ClusterOptions, RedisOptions } from 'ioredis'; -import type { RedisClientType } from '../scaling/redis/redis.types'; +import type { RedisClientType } from './redis.types'; type RedisEventMap = { 'connection-lost': number; diff --git a/packages/cli/src/scaling/redis/redis.types.ts b/packages/@n8n/backend-services/src/services/redis.types.ts similarity index 100% rename from packages/cli/src/scaling/redis/redis.types.ts rename to packages/@n8n/backend-services/src/services/redis.types.ts diff --git a/packages/@n8n/backend-services/test/setup-test-folder.ts b/packages/@n8n/backend-services/test/setup-test-folder.ts deleted file mode 100644 index 6ec4522433a..00000000000 --- a/packages/@n8n/backend-services/test/setup-test-folder.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { mkdirSync, mkdtempSync, writeFileSync } from 'fs'; -import { tmpdir } from 'os'; -import { join } from 'path'; - -// Same instance setup as packages/cli/test/setup-test-folder.ts, so a moved test finds it. -process.env.N8N_ENCRYPTION_KEY = 'test_key'; - -const baseDir = join(tmpdir(), 'n8n-tests/'); -mkdirSync(baseDir, { recursive: true }); - -const testDir = mkdtempSync(baseDir); -mkdirSync(join(testDir, '.n8n')); -process.env.N8N_USER_FOLDER = testDir; -process.env.N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS = 'true'; - -writeFileSync( - join(testDir, '.n8n/config'), - JSON.stringify({ encryptionKey: 'test_key', instanceId: '123' }), - { - encoding: 'utf-8', - mode: 0o600, - }, -); diff --git a/packages/@n8n/backend-services/vitest.config.ts b/packages/@n8n/backend-services/vitest.config.ts index de9e7e14a17..aa666866549 100644 --- a/packages/@n8n/backend-services/vitest.config.ts +++ b/packages/@n8n/backend-services/vitest.config.ts @@ -5,7 +5,6 @@ export default mergeConfig(createVitestConfigWithDecorators(), { test: { // One fork per file: tests register mocks in the shared `@n8n/di` Container. pool: 'forks', - setupFiles: ['./test/setup-test-folder.ts'], // Vitest's default exclude does not cover dist; stale compiled tests there fail as CJS. exclude: [...configDefaults.exclude, '**/dist/**'], }, diff --git a/packages/cli/package.json b/packages/cli/package.json index 8ba91f998ea..e703e2d11a8 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -111,7 +111,6 @@ "concurrently": "^8.2.0", "esbuild": "catalog:", "form-data": "catalog:", - "ioredis-mock": "^8.8.1", "minifaker": "1.34.1", "mjml": "^4.15.3", "n8n-containers": "workspace:*", @@ -205,7 +204,6 @@ "ai": "catalog:", "bcryptjs": "2.4.3", "bull": "4.16.4", - "cache-manager": "catalog:", "change-case": "catalog:", "chat": "catalog:", "class-transformer": "0.5.1", diff --git a/packages/cli/src/activation-errors.service.ts b/packages/cli/src/activation-errors.service.ts index 1d1bb349aa6..a15a10e2dea 100644 --- a/packages/cli/src/activation-errors.service.ts +++ b/packages/cli/src/activation-errors.service.ts @@ -1,6 +1,6 @@ import { Service } from '@n8n/di'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService } from '@n8n/backend-services'; @Service() export class ActivationErrorsService { diff --git a/packages/cli/src/collaboration/__tests__/collaboration.state.test.ts b/packages/cli/src/collaboration/__tests__/collaboration.state.test.ts index 58f3a53caa6..815adc21fcf 100644 --- a/packages/cli/src/collaboration/__tests__/collaboration.state.test.ts +++ b/packages/cli/src/collaboration/__tests__/collaboration.state.test.ts @@ -1,7 +1,7 @@ import type { Mocked } from 'vitest'; import { mock } from 'vitest-mock-extended'; -import type { CacheService } from '@/services/cache/cache.service'; +import type { CacheService } from '@n8n/backend-services'; import { CollaborationState } from '../collaboration.state'; diff --git a/packages/cli/src/collaboration/collaboration.state.ts b/packages/cli/src/collaboration/collaboration.state.ts index ebb800e0009..ab210963304 100644 --- a/packages/cli/src/collaboration/collaboration.state.ts +++ b/packages/cli/src/collaboration/collaboration.state.ts @@ -5,7 +5,7 @@ import { Service } from '@n8n/di'; import type { Workflow } from 'n8n-workflow'; import { jsonParse } from 'n8n-workflow'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService } from '@n8n/backend-services'; // clientId -> "userId|lastSeen" type WorkflowCacheHash = Record; diff --git a/packages/cli/src/commands/__tests__/engine.test.ts b/packages/cli/src/commands/__tests__/engine.test.ts index 2d55a9c382f..c462a06ca0e 100644 --- a/packages/cli/src/commands/__tests__/engine.test.ts +++ b/packages/cli/src/commands/__tests__/engine.test.ts @@ -17,7 +17,7 @@ import type { RedisResponsePublisher } from '@/modules/engine-v2/response-channe import { NodeTypes } from '@/node-types'; import { OtelService } from '@/modules/otel/otel.service'; import { PostHogClient } from '@/posthog'; -import { RedisClientService } from '@/services/redis-client.service'; +import { RedisClientService } from '@n8n/backend-services'; import { ShutdownService } from '@/shutdown/shutdown.service'; import { TaskRunnerModule } from '@/task-runners/task-runner-module'; diff --git a/packages/cli/src/commands/__tests__/webhook.test.ts b/packages/cli/src/commands/__tests__/webhook.test.ts index 2e192eca669..f3b2d60455e 100644 --- a/packages/cli/src/commands/__tests__/webhook.test.ts +++ b/packages/cli/src/commands/__tests__/webhook.test.ts @@ -12,7 +12,7 @@ import { PubSubRegistry } from '@/scaling/pubsub/pubsub.registry'; import { Subscriber } from '@/scaling/pubsub/subscriber.service'; import { SystemTaskRunner } from '@/scheduling/system-tasks/system-task-runner'; import { JwtService } from '@/services/jwt.service'; -import { RedisClientService } from '@/services/redis-client.service'; +import { RedisClientService } from '@n8n/backend-services'; import { WebhookServer } from '@/webhooks/webhook-server'; import { BaseCommand } from '../base-command'; diff --git a/packages/cli/src/commands/__tests__/worker.test.ts b/packages/cli/src/commands/__tests__/worker.test.ts index d5948f0eed9..f96216d2fb8 100644 --- a/packages/cli/src/commands/__tests__/worker.test.ts +++ b/packages/cli/src/commands/__tests__/worker.test.ts @@ -33,7 +33,7 @@ import { WorkerServer } from '@/scaling/worker-server'; import { WorkerStatusService } from '@/scaling/worker-status.service.ee'; import { SystemTaskRunner } from '@/scheduling/system-tasks/system-task-runner'; import { JwtService } from '@/services/jwt.service'; -import { RedisClientService } from '@/services/redis-client.service'; +import { RedisClientService } from '@n8n/backend-services'; import { ShutdownService } from '@/shutdown/shutdown.service'; import { TaskRunnerModule } from '@/task-runners/task-runner-module'; diff --git a/packages/cli/src/controllers/e2e.controller.ts b/packages/cli/src/controllers/e2e.controller.ts index cc448cc1bd2..faa3c40c31b 100644 --- a/packages/cli/src/controllers/e2e.controller.ts +++ b/packages/cli/src/controllers/e2e.controller.ts @@ -32,7 +32,7 @@ import { MfaService } from '@/mfa/mfa.service'; import { LogStreamingDestinationService } from '@/modules/log-streaming.ee/log-streaming-destination.service'; import { Push } from '@/push'; import { WorkflowScheduledJobOwner } from '@/scheduling/workflow-scheduled-job-owner'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService } from '@n8n/backend-services'; import { FrontendService } from '@/services/frontend.service'; import { PasswordUtility } from '@/services/password.utility'; import { WorkflowStaticDataService } from '@/workflows/workflow-static-data.service'; diff --git a/packages/cli/src/environments.ee/variables/__tests__/variables.service.integration.test.ts b/packages/cli/src/environments.ee/variables/__tests__/variables.service.integration.test.ts index 42f80854ddf..0f16b2ad724 100644 --- a/packages/cli/src/environments.ee/variables/__tests__/variables.service.integration.test.ts +++ b/packages/cli/src/environments.ee/variables/__tests__/variables.service.integration.test.ts @@ -1,4 +1,3 @@ -import type { EventService } from '@n8n/backend-services'; import { createTeamProject, linkUserToProject, testDb } from '@n8n/backend-test-utils'; import { UNLIMITED_LICENSE_QUOTA } from '@n8n/constants'; import { VariablesRepository } from '@n8n/db'; @@ -7,7 +6,7 @@ import type { AssignableProjectRole } from '@n8n/permissions'; import type { Mock } from 'vitest'; import { mock } from 'vitest-mock-extended'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService, type EventService } from '@n8n/backend-services'; import { ProjectService } from '@/services/project.service.ee'; import { createAdmin, createMember } from '@test-integration/db/users'; import { createProjectVariable, createVariable } from '@test-integration/db/variables'; diff --git a/packages/cli/src/environments.ee/variables/variables.service.ee.ts b/packages/cli/src/environments.ee/variables/variables.service.ee.ts index 3459738233b..73e44fab5ff 100644 --- a/packages/cli/src/environments.ee/variables/variables.service.ee.ts +++ b/packages/cli/src/environments.ee/variables/variables.service.ee.ts @@ -4,7 +4,6 @@ import { NEW_VARIABLE_KEY_REGEX, } from '@n8n/api-types'; import { LicenseState } from '@n8n/backend-common'; -import { EventService } from '@n8n/backend-services'; import { UNLIMITED_LICENSE_QUOTA } from '@n8n/constants'; import type { User, Variables } from '@n8n/db'; import { generateNanoId, VariablesRepository } from '@n8n/db'; @@ -15,7 +14,7 @@ import { FeatureNotLicensedError } from '@/errors/feature-not-licensed.error'; import { ForbiddenError, NotFoundError } from '@n8n/errors'; import { VariableCountLimitReachedError } from '@/errors/variable-count-limit-reached.error'; import { VariableValidationError } from '@/errors/variable-validation.error'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService, EventService } from '@n8n/backend-services'; import { ProjectService } from '@/services/project.service.ee'; const projectVariableScopes: Partial> = { diff --git a/packages/cli/src/metrics/prometheus/__tests__/active-workflow-metrics.service.test.ts b/packages/cli/src/metrics/prometheus/__tests__/active-workflow-metrics.service.test.ts index cbdc2a582db..ac04a5c2cfe 100644 --- a/packages/cli/src/metrics/prometheus/__tests__/active-workflow-metrics.service.test.ts +++ b/packages/cli/src/metrics/prometheus/__tests__/active-workflow-metrics.service.test.ts @@ -4,7 +4,7 @@ import type { WorkflowRepository } from '@n8n/db'; import { mock } from 'vitest-mock-extended'; import promClient from 'prom-client'; -import type { CacheService } from '@/services/cache/cache.service'; +import type { CacheService } from '@n8n/backend-services'; import { PrometheusActiveWorkflowMetricsService } from '../active-workflow-metrics.service'; diff --git a/packages/cli/src/metrics/prometheus/__tests__/cache-metrics.service.test.ts b/packages/cli/src/metrics/prometheus/__tests__/cache-metrics.service.test.ts index fc7c237cff6..5303b0995d3 100644 --- a/packages/cli/src/metrics/prometheus/__tests__/cache-metrics.service.test.ts +++ b/packages/cli/src/metrics/prometheus/__tests__/cache-metrics.service.test.ts @@ -6,7 +6,7 @@ import promClient from 'prom-client'; import { PrometheusCacheMetricsService } from '../cache-metrics.service'; -import type { CacheService } from '@/services/cache/cache.service'; +import type { CacheService } from '@n8n/backend-services'; vi.mock('prom-client'); diff --git a/packages/cli/src/metrics/prometheus/__tests__/cached-metric-query.test.ts b/packages/cli/src/metrics/prometheus/__tests__/cached-metric-query.test.ts index 5338198c7c7..47e33e568ef 100644 --- a/packages/cli/src/metrics/prometheus/__tests__/cached-metric-query.test.ts +++ b/packages/cli/src/metrics/prometheus/__tests__/cached-metric-query.test.ts @@ -1,6 +1,6 @@ import { mock } from 'vitest-mock-extended'; -import type { CacheService } from '@/services/cache/cache.service'; +import type { CacheService } from '@n8n/backend-services'; import { CachedMetricQuery } from '../cached-metric-query'; diff --git a/packages/cli/src/metrics/prometheus/__tests__/scheduler-metrics.service.test.ts b/packages/cli/src/metrics/prometheus/__tests__/scheduler-metrics.service.test.ts index 16cb026a822..9c66444813b 100644 --- a/packages/cli/src/metrics/prometheus/__tests__/scheduler-metrics.service.test.ts +++ b/packages/cli/src/metrics/prometheus/__tests__/scheduler-metrics.service.test.ts @@ -9,7 +9,7 @@ import { mock } from 'vitest-mock-extended'; import { PrometheusSchedulerMetricsService } from '../scheduler-metrics.service'; -import type { CacheService } from '@/services/cache/cache.service'; +import type { CacheService } from '@n8n/backend-services'; vi.mock('prom-client'); diff --git a/packages/cli/src/metrics/prometheus/__tests__/workflow-info-metrics.service.test.ts b/packages/cli/src/metrics/prometheus/__tests__/workflow-info-metrics.service.test.ts index 321e743048a..d27c013fde8 100644 --- a/packages/cli/src/metrics/prometheus/__tests__/workflow-info-metrics.service.test.ts +++ b/packages/cli/src/metrics/prometheus/__tests__/workflow-info-metrics.service.test.ts @@ -5,7 +5,7 @@ import type { InstanceSettings } from 'n8n-core'; import promClient from 'prom-client'; import { mock } from 'vitest-mock-extended'; -import type { CacheService } from '@/services/cache/cache.service'; +import type { CacheService } from '@n8n/backend-services'; import { PrometheusWorkflowInfoMetricsService } from '../workflow-info-metrics.service'; diff --git a/packages/cli/src/metrics/prometheus/__tests__/workflow-publication-metrics.service.test.ts b/packages/cli/src/metrics/prometheus/__tests__/workflow-publication-metrics.service.test.ts index 5a95ffe119b..147f5ead723 100644 --- a/packages/cli/src/metrics/prometheus/__tests__/workflow-publication-metrics.service.test.ts +++ b/packages/cli/src/metrics/prometheus/__tests__/workflow-publication-metrics.service.test.ts @@ -1,4 +1,3 @@ -import type { EventService } from '@n8n/backend-services'; import type { Mock } from 'vitest'; import { mockInstance } from '@n8n/backend-test-utils'; import type { WorkflowsConfig } from '@n8n/config'; @@ -10,7 +9,7 @@ import promClient from 'prom-client'; import { PrometheusWorkflowPublicationMetricsService } from '../workflow-publication-metrics.service'; -import type { CacheService } from '@/services/cache/cache.service'; +import type { CacheService, EventService } from '@n8n/backend-services'; vi.mock('prom-client'); diff --git a/packages/cli/src/metrics/prometheus/__tests__/workflow-statistics-metrics.service.test.ts b/packages/cli/src/metrics/prometheus/__tests__/workflow-statistics-metrics.service.test.ts index 0937115516a..886a2ae9a49 100644 --- a/packages/cli/src/metrics/prometheus/__tests__/workflow-statistics-metrics.service.test.ts +++ b/packages/cli/src/metrics/prometheus/__tests__/workflow-statistics-metrics.service.test.ts @@ -4,7 +4,7 @@ import type { LicenseMetricsRepository } from '@n8n/db'; import { mock } from 'vitest-mock-extended'; import promClient from 'prom-client'; -import type { CacheService } from '@/services/cache/cache.service'; +import type { CacheService } from '@n8n/backend-services'; import { PrometheusWorkflowStatisticsMetricsService } from '../workflow-statistics-metrics.service'; diff --git a/packages/cli/src/metrics/prometheus/active-workflow-metrics.service.ts b/packages/cli/src/metrics/prometheus/active-workflow-metrics.service.ts index 19c9fa83af2..39a516df496 100644 --- a/packages/cli/src/metrics/prometheus/active-workflow-metrics.service.ts +++ b/packages/cli/src/metrics/prometheus/active-workflow-metrics.service.ts @@ -4,7 +4,7 @@ import { WorkflowRepository } from '@n8n/db'; import { Service } from '@n8n/di'; import promClient from 'prom-client'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService } from '@n8n/backend-services'; import type { PrometheusMetricsCollector } from './base'; import { CachedMetricQuery } from './cached-metric-query'; diff --git a/packages/cli/src/metrics/prometheus/cache-metrics.service.ts b/packages/cli/src/metrics/prometheus/cache-metrics.service.ts index c7191a5034f..09abcdd52a5 100644 --- a/packages/cli/src/metrics/prometheus/cache-metrics.service.ts +++ b/packages/cli/src/metrics/prometheus/cache-metrics.service.ts @@ -2,7 +2,7 @@ import { PrometheusMetricsConfig } from '@n8n/config'; import { Service } from '@n8n/di'; import promClient from 'prom-client'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService } from '@n8n/backend-services'; import type { PrometheusMetricsCollector } from './base'; diff --git a/packages/cli/src/metrics/prometheus/cached-metric-query.ts b/packages/cli/src/metrics/prometheus/cached-metric-query.ts index 78192018df1..4734054aa86 100644 --- a/packages/cli/src/metrics/prometheus/cached-metric-query.ts +++ b/packages/cli/src/metrics/prometheus/cached-metric-query.ts @@ -1,6 +1,6 @@ import type { JsonValue } from 'n8n-workflow'; -import type { CacheService } from '@/services/cache/cache.service'; +import type { CacheService } from '@n8n/backend-services'; type CachedMetricQueryOpts = { cacheService: CacheService; diff --git a/packages/cli/src/metrics/prometheus/scheduler-metrics.service.ts b/packages/cli/src/metrics/prometheus/scheduler-metrics.service.ts index 35274cd3846..0de192d578d 100644 --- a/packages/cli/src/metrics/prometheus/scheduler-metrics.service.ts +++ b/packages/cli/src/metrics/prometheus/scheduler-metrics.service.ts @@ -6,7 +6,7 @@ import type { MisfireCount, SchedulerMetrics } from '@n8n/scheduler'; import { InstanceSettings } from 'n8n-core'; import promClient from 'prom-client'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService } from '@n8n/backend-services'; import type { PrometheusMetricsCollector } from './base'; import { CachedMetricQuery } from './cached-metric-query'; diff --git a/packages/cli/src/metrics/prometheus/workflow-info-metrics.service.ts b/packages/cli/src/metrics/prometheus/workflow-info-metrics.service.ts index 5f07788507f..b236505443c 100644 --- a/packages/cli/src/metrics/prometheus/workflow-info-metrics.service.ts +++ b/packages/cli/src/metrics/prometheus/workflow-info-metrics.service.ts @@ -5,7 +5,7 @@ import { Service } from '@n8n/di'; import { InstanceSettings } from 'n8n-core'; import promClient from 'prom-client'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService } from '@n8n/backend-services'; import type { PrometheusMetricsCollector } from './base'; import { CachedMetricQuery } from './cached-metric-query'; diff --git a/packages/cli/src/metrics/prometheus/workflow-publication-metrics.service.ts b/packages/cli/src/metrics/prometheus/workflow-publication-metrics.service.ts index 117ca49375a..c640f5908b2 100644 --- a/packages/cli/src/metrics/prometheus/workflow-publication-metrics.service.ts +++ b/packages/cli/src/metrics/prometheus/workflow-publication-metrics.service.ts @@ -1,4 +1,3 @@ -import { EventService } from '@n8n/backend-services'; import { PrometheusMetricsConfig, WorkflowsConfig } from '@n8n/config'; import { Time } from '@n8n/constants'; import { WorkflowPublicationOutboxRepository, WorkflowPublicationOutboxStatus } from '@n8n/db'; @@ -6,7 +5,7 @@ import { Service } from '@n8n/di'; import { InstanceSettings } from 'n8n-core'; import promClient from 'prom-client'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService, EventService } from '@n8n/backend-services'; import type { PrometheusMetricsCollector } from './base'; import { CachedMetricQuery } from './cached-metric-query'; diff --git a/packages/cli/src/metrics/prometheus/workflow-statistics-metrics.service.ts b/packages/cli/src/metrics/prometheus/workflow-statistics-metrics.service.ts index a1f72f7468a..6a41f0ad43d 100644 --- a/packages/cli/src/metrics/prometheus/workflow-statistics-metrics.service.ts +++ b/packages/cli/src/metrics/prometheus/workflow-statistics-metrics.service.ts @@ -4,7 +4,7 @@ import { LicenseMetricsRepository } from '@n8n/db'; import { Service } from '@n8n/di'; import promClient from 'prom-client'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService } from '@n8n/backend-services'; import type { PrometheusMetricsCollector } from './base'; import { CachedMetricQuery } from './cached-metric-query'; diff --git a/packages/cli/src/mfa/__tests__/mfa.service.test.ts b/packages/cli/src/mfa/__tests__/mfa.service.test.ts index f7039685c67..12ff73620af 100644 --- a/packages/cli/src/mfa/__tests__/mfa.service.test.ts +++ b/packages/cli/src/mfa/__tests__/mfa.service.test.ts @@ -5,7 +5,7 @@ import type { Cipher } from 'n8n-core'; import type { Mocked } from 'vitest'; import { mock } from 'vitest-mock-extended'; -import type { CacheService } from '@/services/cache/cache.service'; +import type { CacheService } from '@n8n/backend-services'; import { MFA_ENFORCE_SETTING } from '../constants'; import { MFA_CACHE_KEY, MfaService } from '../mfa.service'; diff --git a/packages/cli/src/mfa/mfa.service.ts b/packages/cli/src/mfa/mfa.service.ts index e1d085d6aee..d00e9a17804 100644 --- a/packages/cli/src/mfa/mfa.service.ts +++ b/packages/cli/src/mfa/mfa.service.ts @@ -6,7 +6,7 @@ import { v4 as uuid } from 'uuid'; import { InvalidMfaCodeError } from '@/errors/response-errors/invalid-mfa-code.error'; import { InvalidMfaRecoveryCodeError } from '@/errors/response-errors/invalid-mfa-recovery-code-error'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService } from '@n8n/backend-services'; import { MFA_ENFORCE_SETTING } from './constants'; import { TOTPService } from './totp.service'; diff --git a/packages/cli/src/modules/agents/integrations/__tests__/callback-store.test.ts b/packages/cli/src/modules/agents/integrations/__tests__/callback-store.test.ts index 7f0074dda3e..3a750f305b1 100644 --- a/packages/cli/src/modules/agents/integrations/__tests__/callback-store.test.ts +++ b/packages/cli/src/modules/agents/integrations/__tests__/callback-store.test.ts @@ -3,7 +3,7 @@ import type { GlobalConfig } from '@n8n/config'; import { Container } from '@n8n/di'; import { mock } from 'vitest-mock-extended'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService } from '@n8n/backend-services'; import { CallbackStore } from '../callback-store'; 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 03a54ca041a..f8db6dbfb6a 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 @@ -9,7 +9,7 @@ import type { CredentialsService } from '@/credentials/credentials.service'; import type { CredentialsFinderService } from '@/credentials/credentials-finder.service'; import type { CredentialsOverwrites } from '@/credentials-overwrites'; import { BadRequestError } from '@n8n/errors'; -import type { CacheService } from '@/services/cache/cache.service'; +import type { CacheService } from '@n8n/backend-services'; import type { ProjectService } from '@/services/project.service.ee'; import type { UrlService } from '@n8n/backend-services'; diff --git a/packages/cli/src/modules/agents/integrations/__tests__/slack-manual-setup.service.test.ts b/packages/cli/src/modules/agents/integrations/__tests__/slack-manual-setup.service.test.ts index 1b3be78a270..819db80609b 100644 --- a/packages/cli/src/modules/agents/integrations/__tests__/slack-manual-setup.service.test.ts +++ b/packages/cli/src/modules/agents/integrations/__tests__/slack-manual-setup.service.test.ts @@ -2,7 +2,7 @@ import type { UserRepository } from '@n8n/db'; import { mock } from 'vitest-mock-extended'; -import type { CacheService } from '@/services/cache/cache.service'; +import type { CacheService } from '@n8n/backend-services'; import { BadRequestError } from '@n8n/errors'; import type { ProjectService } from '@/services/project.service.ee'; 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 8c59516c307..16ceb6db196 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 @@ -5,7 +5,7 @@ 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 { CacheService } from '@n8n/backend-services'; import type { UrlService } from '@n8n/backend-services'; import type { AgentIntegrationManagementService } from '../../agent-integration-management.service'; diff --git a/packages/cli/src/modules/agents/integrations/agent-chat-bridge.ts b/packages/cli/src/modules/agents/integrations/agent-chat-bridge.ts index e2737d08988..a80866bb1ca 100644 --- a/packages/cli/src/modules/agents/integrations/agent-chat-bridge.ts +++ b/packages/cli/src/modules/agents/integrations/agent-chat-bridge.ts @@ -14,7 +14,7 @@ import { isRecord } from '@n8n/utils/is-record'; import type { Attachment, Author, CardElement, Chat, Message, Thread } from 'chat'; import { UserError, type Logger } from 'n8n-workflow'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService } from '@n8n/backend-services'; import { AgentChatAttachmentService } from '../agent-chat-attachment.service'; import { AgentMessageQueueService } from '../agent-message-queue.service'; diff --git a/packages/cli/src/modules/agents/integrations/callback-store.ts b/packages/cli/src/modules/agents/integrations/callback-store.ts index 04d277e6e52..be64333b60a 100644 --- a/packages/cli/src/modules/agents/integrations/callback-store.ts +++ b/packages/cli/src/modules/agents/integrations/callback-store.ts @@ -2,7 +2,7 @@ import { createHash, randomBytes } from 'node:crypto'; import { LockNamespace, type LockService } from '@n8n/backend-common'; -import type { CacheService } from '@/services/cache/cache.service'; +import type { CacheService } from '@n8n/backend-services'; export interface CallbackPayload { actionId: string; diff --git a/packages/cli/src/modules/agents/integrations/platforms/slack/slack-managed-setup.service.ts b/packages/cli/src/modules/agents/integrations/platforms/slack/slack-managed-setup.service.ts index 4ea87219d4e..ea57168a439 100644 --- a/packages/cli/src/modules/agents/integrations/platforms/slack/slack-managed-setup.service.ts +++ b/packages/cli/src/modules/agents/integrations/platforms/slack/slack-managed-setup.service.ts @@ -20,7 +20,7 @@ import { CredentialsFinderService } from '@/credentials/credentials-finder.servi import { CredentialsService } from '@/credentials/credentials.service'; import { CredentialsOverwrites } from '@/credentials-overwrites'; import { BadRequestError, NotFoundError } from '@n8n/errors'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService } from '@n8n/backend-services'; import { SlackMethodsService } from './slack-methods.service'; import { diff --git a/packages/cli/src/modules/agents/integrations/platforms/slack/slack-manual-setup.service.ts b/packages/cli/src/modules/agents/integrations/platforms/slack/slack-manual-setup.service.ts index 4eae3546d55..366e0f47a6a 100644 --- a/packages/cli/src/modules/agents/integrations/platforms/slack/slack-manual-setup.service.ts +++ b/packages/cli/src/modules/agents/integrations/platforms/slack/slack-manual-setup.service.ts @@ -5,7 +5,7 @@ import { Service } from '@n8n/di'; import { randomBytes } from 'node:crypto'; import { BadRequestError, ForbiddenError, NotFoundError } from '@n8n/errors'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService } from '@n8n/backend-services'; import { ProjectService } from '@/services/project.service.ee'; import { SlackMethodsService } from './slack-methods.service'; 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 22bc97541e5..66ed3c4191c 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 @@ -13,8 +13,7 @@ import { jsonParse } from 'n8n-workflow'; import { CredentialsService } from '@/credentials/credentials.service'; import { BadRequestError } from '@n8n/errors'; -import { CacheService } from '@/services/cache/cache.service'; -import { UrlService } from '@n8n/backend-services'; +import { CacheService, UrlService } from '@n8n/backend-services'; import { getAgentOrThrow } from '../../../utils/get-agent-or-throw'; import { diff --git a/packages/cli/src/modules/breaking-changes/__tests__/breaking-changes.service.test.ts b/packages/cli/src/modules/breaking-changes/__tests__/breaking-changes.service.test.ts index 6be2b950264..b42fdc0df8f 100644 --- a/packages/cli/src/modules/breaking-changes/__tests__/breaking-changes.service.test.ts +++ b/packages/cli/src/modules/breaking-changes/__tests__/breaking-changes.service.test.ts @@ -5,7 +5,7 @@ import type { ErrorReporter } from 'n8n-core'; import type { Mocked } from 'vitest'; import { mock } from 'vitest-mock-extended'; -import type { CacheService } from '@/services/cache/cache.service'; +import type { CacheService } from '@n8n/backend-services'; import { N8N_VERSION } from '../../../constants'; import { MigrationRegistry } from '../breaking-changes.migration-registry.service'; diff --git a/packages/cli/src/modules/breaking-changes/breaking-changes.service.ts b/packages/cli/src/modules/breaking-changes/breaking-changes.service.ts index 36f9396c88b..7b981b788d0 100644 --- a/packages/cli/src/modules/breaking-changes/breaking-changes.service.ts +++ b/packages/cli/src/modules/breaking-changes/breaking-changes.service.ts @@ -13,7 +13,7 @@ import { Container, Service } from '@n8n/di'; import { In } from '@n8n/typeorm'; import { ErrorReporter } from 'n8n-core'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService } from '@n8n/backend-services'; import { MigrationRegistry } from './breaking-changes.migration-registry.service'; import { RuleRegistry } from './breaking-changes.rule-registry.service'; diff --git a/packages/cli/src/modules/chat-hub/__tests__/chat-hub-execution-store.service.test.ts b/packages/cli/src/modules/chat-hub/__tests__/chat-hub-execution-store.service.test.ts index 5953e084373..db6b3d8b9f3 100644 --- a/packages/cli/src/modules/chat-hub/__tests__/chat-hub-execution-store.service.test.ts +++ b/packages/cli/src/modules/chat-hub/__tests__/chat-hub-execution-store.service.test.ts @@ -7,7 +7,7 @@ import { ChatHubExecutionStore, type ChatHubExecutionContext, } from '@/modules/chat-hub/chat-hub-execution-store.service'; -import type { RedisClientService } from '@/services/redis-client.service'; +import type { RedisClientService } from '@n8n/backend-services'; const EXECUTION_ID = '12345678'; const SESSION_ID = 'bbbbbbbb-2222-4000-8000-000000000002'; diff --git a/packages/cli/src/modules/chat-hub/__tests__/chat-stream-state.service.test.ts b/packages/cli/src/modules/chat-hub/__tests__/chat-stream-state.service.test.ts index 044e2252c46..d4778376761 100644 --- a/packages/cli/src/modules/chat-hub/__tests__/chat-stream-state.service.test.ts +++ b/packages/cli/src/modules/chat-hub/__tests__/chat-stream-state.service.test.ts @@ -4,7 +4,7 @@ import type { InstanceSettings } from 'n8n-core'; import { mock } from 'vitest-mock-extended'; import { ChatStreamStateService } from '@/modules/chat-hub/chat-stream-state.service'; -import type { RedisClientService } from '@/services/redis-client.service'; +import type { RedisClientService } from '@n8n/backend-services'; describe('ChatStreamStateService', () => { const logger = mock(); diff --git a/packages/cli/src/modules/chat-hub/chat-hub-execution-store.service.ts b/packages/cli/src/modules/chat-hub/chat-hub-execution-store.service.ts index 66859dceec0..c59af5f9a5a 100644 --- a/packages/cli/src/modules/chat-hub/chat-hub-execution-store.service.ts +++ b/packages/cli/src/modules/chat-hub/chat-hub-execution-store.service.ts @@ -7,7 +7,7 @@ import { Service } from '@n8n/di'; import type { Cluster, Redis } from 'ioredis'; import { InstanceSettings } from 'n8n-core'; -import { RedisClientService } from '@/services/redis-client.service'; +import { RedisClientService } from '@n8n/backend-services'; import type { NonStreamingResponseMode } from './chat-hub.types'; diff --git a/packages/cli/src/modules/chat-hub/chat-stream-state.service.ts b/packages/cli/src/modules/chat-hub/chat-stream-state.service.ts index c1d6111d81e..b362c02f1cf 100644 --- a/packages/cli/src/modules/chat-hub/chat-stream-state.service.ts +++ b/packages/cli/src/modules/chat-hub/chat-stream-state.service.ts @@ -7,7 +7,7 @@ import { Service } from '@n8n/di'; import type { Cluster, Redis } from 'ioredis'; import { InstanceSettings } from 'n8n-core'; -import { RedisClientService } from '@/services/redis-client.service'; +import { RedisClientService } from '@n8n/backend-services'; /** * Stream state for an active chat session diff --git a/packages/cli/src/modules/dynamic-credentials.ee/credential-resolvers/identifiers/__tests__/oauth2-introspection-identifier.integration.test.ts b/packages/cli/src/modules/dynamic-credentials.ee/credential-resolvers/identifiers/__tests__/oauth2-introspection-identifier.integration.test.ts index 403b767f881..a36e9ecb6a0 100644 --- a/packages/cli/src/modules/dynamic-credentials.ee/credential-resolvers/identifiers/__tests__/oauth2-introspection-identifier.integration.test.ts +++ b/packages/cli/src/modules/dynamic-credentials.ee/credential-resolvers/identifiers/__tests__/oauth2-introspection-identifier.integration.test.ts @@ -10,7 +10,7 @@ import { SsrfProtectionConfig } from '@n8n/config'; import { mock } from 'vitest-mock-extended'; import type { IncomingHttpHeaders } from 'node:http'; -import type { CacheService } from '@/services/cache/cache.service'; +import type { CacheService } from '@n8n/backend-services'; import { IdentifierValidationError } from '../identifier-interface'; import { OAuth2TokenIntrospectionIdentifier } from '../oauth2-introspection-identifier'; diff --git a/packages/cli/src/modules/dynamic-credentials.ee/credential-resolvers/identifiers/__tests__/oauth2-introspection-identifier.test.ts b/packages/cli/src/modules/dynamic-credentials.ee/credential-resolvers/identifiers/__tests__/oauth2-introspection-identifier.test.ts index f60b15e172a..8e9c6bb2e41 100644 --- a/packages/cli/src/modules/dynamic-credentials.ee/credential-resolvers/identifiers/__tests__/oauth2-introspection-identifier.test.ts +++ b/packages/cli/src/modules/dynamic-credentials.ee/credential-resolvers/identifiers/__tests__/oauth2-introspection-identifier.test.ts @@ -4,7 +4,7 @@ import { Time } from '@n8n/constants'; import { mock } from 'vitest-mock-extended'; import type { IHttpRequestOptions } from 'n8n-workflow'; -import type { CacheService } from '@/services/cache/cache.service'; +import type { CacheService } from '@n8n/backend-services'; import { IdentifierValidationError } from '../identifier-interface'; import { OAuth2TokenIntrospectionIdentifier } from '../oauth2-introspection-identifier'; diff --git a/packages/cli/src/modules/dynamic-credentials.ee/credential-resolvers/identifiers/__tests__/oauth2-metadata-http-client.test.ts b/packages/cli/src/modules/dynamic-credentials.ee/credential-resolvers/identifiers/__tests__/oauth2-metadata-http-client.test.ts index ceadc3ee3ea..689214e0b20 100644 --- a/packages/cli/src/modules/dynamic-credentials.ee/credential-resolvers/identifiers/__tests__/oauth2-metadata-http-client.test.ts +++ b/packages/cli/src/modules/dynamic-credentials.ee/credential-resolvers/identifiers/__tests__/oauth2-metadata-http-client.test.ts @@ -3,7 +3,7 @@ import { mockLogger } from '@n8n/backend-test-utils'; import { mock } from 'vitest-mock-extended'; import { z } from 'zod'; -import type { CacheService } from '@/services/cache/cache.service'; +import type { CacheService } from '@n8n/backend-services'; import { IdentifierValidationError } from '../identifier-interface'; import { OAuth2MetadataHttpClient } from '../oauth2-metadata-http-client'; diff --git a/packages/cli/src/modules/dynamic-credentials.ee/credential-resolvers/identifiers/__tests__/oauth2-userinfo-identifier.integration.test.ts b/packages/cli/src/modules/dynamic-credentials.ee/credential-resolvers/identifiers/__tests__/oauth2-userinfo-identifier.integration.test.ts index 27283fdb476..8bfaaf03073 100644 --- a/packages/cli/src/modules/dynamic-credentials.ee/credential-resolvers/identifiers/__tests__/oauth2-userinfo-identifier.integration.test.ts +++ b/packages/cli/src/modules/dynamic-credentials.ee/credential-resolvers/identifiers/__tests__/oauth2-userinfo-identifier.integration.test.ts @@ -12,7 +12,7 @@ import type { JSONWebKeySet, JWTPayload, KeyObject } from 'jose'; import { mock } from 'vitest-mock-extended'; import type { IncomingHttpHeaders } from 'node:http'; -import type { CacheService } from '@/services/cache/cache.service'; +import type { CacheService } from '@n8n/backend-services'; import { IdentifierValidationError } from '../identifier-interface'; import { OAuth2MetadataHttpClient } from '../oauth2-metadata-http-client'; diff --git a/packages/cli/src/modules/dynamic-credentials.ee/credential-resolvers/identifiers/__tests__/oauth2-userinfo-identifier.test.ts b/packages/cli/src/modules/dynamic-credentials.ee/credential-resolvers/identifiers/__tests__/oauth2-userinfo-identifier.test.ts index d8c0587d964..5cb721b9bdc 100644 --- a/packages/cli/src/modules/dynamic-credentials.ee/credential-resolvers/identifiers/__tests__/oauth2-userinfo-identifier.test.ts +++ b/packages/cli/src/modules/dynamic-credentials.ee/credential-resolvers/identifiers/__tests__/oauth2-userinfo-identifier.test.ts @@ -6,7 +6,7 @@ import type { JSONWebKeySet, JWTPayload, KeyObject } from 'jose'; import type { IHttpRequestOptions } from 'n8n-workflow'; import { mock } from 'vitest-mock-extended'; -import type { CacheService } from '@/services/cache/cache.service'; +import type { CacheService } from '@n8n/backend-services'; import { IdentifierValidationError } from '../identifier-interface'; import { OAuth2MetadataHttpClient } from '../oauth2-metadata-http-client'; diff --git a/packages/cli/src/modules/dynamic-credentials.ee/credential-resolvers/identifiers/oauth2-introspection-identifier.ts b/packages/cli/src/modules/dynamic-credentials.ee/credential-resolvers/identifiers/oauth2-introspection-identifier.ts index ed67cbc7ff8..2664a0a22a2 100644 --- a/packages/cli/src/modules/dynamic-credentials.ee/credential-resolvers/identifiers/oauth2-introspection-identifier.ts +++ b/packages/cli/src/modules/dynamic-credentials.ee/credential-resolvers/identifiers/oauth2-introspection-identifier.ts @@ -8,7 +8,7 @@ import { IdentifierValidationError, ITokenIdentifier } from './identifier-interf import { OAuth2MetadataHttpClient } from './oauth2-metadata-http-client'; import { assertAudience, OAuth2OptionsSchema, sha256 } from './oauth2-utils'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService } from '@n8n/backend-services'; // Cap at 5 minutes to ensure periodic revalidation const MAX_TOKEN_CACHE_TIMEOUT = 5 * Time.minutes.toMilliseconds; diff --git a/packages/cli/src/modules/dynamic-credentials.ee/credential-resolvers/identifiers/oauth2-metadata-http-client.ts b/packages/cli/src/modules/dynamic-credentials.ee/credential-resolvers/identifiers/oauth2-metadata-http-client.ts index 26e6f86e9cf..227e679e1af 100644 --- a/packages/cli/src/modules/dynamic-credentials.ee/credential-resolvers/identifiers/oauth2-metadata-http-client.ts +++ b/packages/cli/src/modules/dynamic-credentials.ee/credential-resolvers/identifiers/oauth2-metadata-http-client.ts @@ -7,7 +7,7 @@ import type { z } from 'zod'; import { IdentifierValidationError } from './identifier-interface'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService } from '@n8n/backend-services'; const REQUEST_TIMEOUT = 10 * Time.seconds.toMilliseconds; const METADATA_CACHE_TIMEOUT = 1 * Time.hours.toMilliseconds; // 1 hour diff --git a/packages/cli/src/modules/dynamic-credentials.ee/credential-resolvers/identifiers/oauth2-userinfo-identifier.ts b/packages/cli/src/modules/dynamic-credentials.ee/credential-resolvers/identifiers/oauth2-userinfo-identifier.ts index 221b4ab7312..8ae2ff57e50 100644 --- a/packages/cli/src/modules/dynamic-credentials.ee/credential-resolvers/identifiers/oauth2-userinfo-identifier.ts +++ b/packages/cli/src/modules/dynamic-credentials.ee/credential-resolvers/identifiers/oauth2-userinfo-identifier.ts @@ -5,7 +5,7 @@ import type { JSONWebKeySet, JWTPayload } from 'jose'; import type { ICredentialContext } from 'n8n-workflow'; import { z } from 'zod'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService } from '@n8n/backend-services'; import { IdentifierValidationError, ITokenIdentifier } from './identifier-interface'; import { OAuth2MetadataHttpClient } from './oauth2-metadata-http-client'; diff --git a/packages/cli/src/modules/dynamic-credentials.ee/services/__tests__/authorize-intent.service.test.ts b/packages/cli/src/modules/dynamic-credentials.ee/services/__tests__/authorize-intent.service.test.ts index 383e14afc9b..71c5f731818 100644 --- a/packages/cli/src/modules/dynamic-credentials.ee/services/__tests__/authorize-intent.service.test.ts +++ b/packages/cli/src/modules/dynamic-credentials.ee/services/__tests__/authorize-intent.service.test.ts @@ -1,6 +1,6 @@ import { mock } from 'vitest-mock-extended'; -import type { CacheService } from '@/services/cache/cache.service'; +import type { CacheService } from '@n8n/backend-services'; import { AuthorizeIntentService, type AuthorizeIntent } from '../authorize-intent.service'; diff --git a/packages/cli/src/modules/dynamic-credentials.ee/services/authorize-intent.service.ts b/packages/cli/src/modules/dynamic-credentials.ee/services/authorize-intent.service.ts index e47d26d3d02..b2d99450805 100644 --- a/packages/cli/src/modules/dynamic-credentials.ee/services/authorize-intent.service.ts +++ b/packages/cli/src/modules/dynamic-credentials.ee/services/authorize-intent.service.ts @@ -2,7 +2,7 @@ import { Service } from '@n8n/di'; import { randomBytes } from 'node:crypto'; import { MAX_CSRF_AGE } from '@/oauth/types'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService } from '@n8n/backend-services'; /** * A pending dynamic-credential authorization, captured at credential-gate time and diff --git a/packages/cli/src/modules/engine-v2/__tests__/engine-v2.module.test.ts b/packages/cli/src/modules/engine-v2/__tests__/engine-v2.module.test.ts index cd2cff85387..26213c0a2a1 100644 --- a/packages/cli/src/modules/engine-v2/__tests__/engine-v2.module.test.ts +++ b/packages/cli/src/modules/engine-v2/__tests__/engine-v2.module.test.ts @@ -5,7 +5,7 @@ import { mock } from 'vitest-mock-extended'; import { EngineDataPlaneProxyService } from '@/services/engine-data-plane-proxy.service'; import { EngineV2WebhookResponder } from '@/services/engine-v2-webhook-responder.service'; -import { RedisClientService } from '@/services/redis-client.service'; +import { RedisClientService } from '@n8n/backend-services'; import { EngineControlPlaneServer } from '../engine-control-plane-server'; import { EngineDataPlaneClient } from '../engine-data-plane-client'; diff --git a/packages/cli/src/modules/engine-v2/response-channel/redis-execution-response-channel.ts b/packages/cli/src/modules/engine-v2/response-channel/redis-execution-response-channel.ts index 4c2d41b3c0b..7b09bb4fb4f 100644 --- a/packages/cli/src/modules/engine-v2/response-channel/redis-execution-response-channel.ts +++ b/packages/cli/src/modules/engine-v2/response-channel/redis-execution-response-channel.ts @@ -6,7 +6,7 @@ export type RedisExecutionResponseChannelNameGenerator = (executionId: string) = /** Both planes must derive the same channel name, so they share this helper. */ async function createChannelNameGenerator(): Promise { - const { RedisClientService } = await import('@/services/redis-client.service.js'); + const { RedisClientService } = await import('@n8n/backend-services'); const prefix = Container.get(RedisClientService).toValidPrefix( Container.get(GlobalConfig).redis.prefix, ); @@ -17,7 +17,7 @@ async function createChannelNameGenerator(): Promise { const projectPoolSettingsRepository = mock(); diff --git a/packages/cli/src/scaling/__tests__/redis-lock.service.test.ts b/packages/cli/src/scaling/__tests__/redis-lock.service.test.ts index f9750a5708a..12ad8f8a64b 100644 --- a/packages/cli/src/scaling/__tests__/redis-lock.service.test.ts +++ b/packages/cli/src/scaling/__tests__/redis-lock.service.test.ts @@ -6,7 +6,7 @@ import { OperationalError } from 'n8n-workflow'; import { createHash } from 'node:crypto'; import { mock } from 'vitest-mock-extended'; -import type { RedisClientService } from '@/services/redis-client.service'; +import type { RedisClientService } from '@n8n/backend-services'; import { RedisLockService } from '../redis-lock.service'; diff --git a/packages/cli/src/scaling/__tests__/worker-server.test.ts b/packages/cli/src/scaling/__tests__/worker-server.test.ts index 58d0a6d3367..69feaacd507 100644 --- a/packages/cli/src/scaling/__tests__/worker-server.test.ts +++ b/packages/cli/src/scaling/__tests__/worker-server.test.ts @@ -12,7 +12,7 @@ import type { CredentialsOverwrites } from '@/credentials-overwrites'; import type { ExternalHooks } from '@/external-hooks'; import type { PrometheusMetricsService } from '@/metrics/prometheus'; import { bodyParser, rawBodyReader } from '@/middlewares'; -import type { RedisClientService } from '@/services/redis-client.service'; +import type { RedisClientService } from '@n8n/backend-services'; import { WorkerServer } from '../worker-server'; diff --git a/packages/cli/src/scaling/leader-election-client.ts b/packages/cli/src/scaling/leader-election-client.ts index 7b889e4ab1a..48826b80d09 100644 --- a/packages/cli/src/scaling/leader-election-client.ts +++ b/packages/cli/src/scaling/leader-election-client.ts @@ -5,7 +5,7 @@ import { InstanceSettings } from 'n8n-core'; import { ensureError } from '@n8n/utils/errors/ensure-error'; import { type Result, createResultOk, createResultError } from '@n8n/utils/result'; -import { RedisClientService } from '@/services/redis-client.service'; +import { RedisClientService } from '@n8n/backend-services'; const COMMAND_TIMEOUT_MS = 5_000; diff --git a/packages/cli/src/scaling/pool-config.service.ee.ts b/packages/cli/src/scaling/pool-config.service.ee.ts index f180d14eb8f..947e18e87df 100644 --- a/packages/cli/src/scaling/pool-config.service.ee.ts +++ b/packages/cli/src/scaling/pool-config.service.ee.ts @@ -5,7 +5,7 @@ import { ProjectPoolSettingsRepository } from '@n8n/db'; import { Service } from '@n8n/di'; import type { IWorkflowExecutionDataProcess } from 'n8n-workflow'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService } from '@n8n/backend-services'; import { DEFAULT_QUEUE_NAME, poolQueueName } from './queue-name'; import { WorkerPoolsService } from './worker-pools.service.ee'; diff --git a/packages/cli/src/scaling/pubsub/__tests__/publisher.service.test.ts b/packages/cli/src/scaling/pubsub/__tests__/publisher.service.test.ts index 747c8a8d787..8d2268378c3 100644 --- a/packages/cli/src/scaling/pubsub/__tests__/publisher.service.test.ts +++ b/packages/cli/src/scaling/pubsub/__tests__/publisher.service.test.ts @@ -4,7 +4,7 @@ import type { Redis as SingleNodeClient } from 'ioredis'; import type { InstanceSettings } from 'n8n-core'; import { mock } from 'vitest-mock-extended'; -import type { RedisClientService } from '@/services/redis-client.service'; +import type { RedisClientService } from '@n8n/backend-services'; import { Publisher } from '../publisher.service'; import type { PubSub } from '../pubsub.types'; diff --git a/packages/cli/src/scaling/pubsub/__tests__/subscriber.service.test.ts b/packages/cli/src/scaling/pubsub/__tests__/subscriber.service.test.ts index a377362a3ef..e18819960e8 100644 --- a/packages/cli/src/scaling/pubsub/__tests__/subscriber.service.test.ts +++ b/packages/cli/src/scaling/pubsub/__tests__/subscriber.service.test.ts @@ -4,7 +4,7 @@ import { ExecutionsConfig, GlobalConfig } from '@n8n/config'; import type { Redis as SingleNodeClient } from 'ioredis'; import { mock } from 'vitest-mock-extended'; -import type { RedisClientService } from '@/services/redis-client.service'; +import type { RedisClientService } from '@n8n/backend-services'; import type { PubSubEventBus } from '../pubsub.eventbus'; import type { McpRelayMessage } from '../subscriber.service'; diff --git a/packages/cli/src/scaling/pubsub/publisher.service.ts b/packages/cli/src/scaling/pubsub/publisher.service.ts index 152b64c064c..4f00fe2768e 100644 --- a/packages/cli/src/scaling/pubsub/publisher.service.ts +++ b/packages/cli/src/scaling/pubsub/publisher.service.ts @@ -5,7 +5,7 @@ import type { Redis as SingleNodeClient, Cluster as MultiNodeClient } from 'iore import { InstanceSettings } from 'n8n-core'; import type { LogMetadata } from 'n8n-workflow'; -import { RedisClientService } from '@/services/redis-client.service'; +import { RedisClientService } from '@n8n/backend-services'; import type { PubSub } from './pubsub.types'; import { diff --git a/packages/cli/src/scaling/pubsub/subscriber.service.ts b/packages/cli/src/scaling/pubsub/subscriber.service.ts index 80cebb9595a..2923b231966 100644 --- a/packages/cli/src/scaling/pubsub/subscriber.service.ts +++ b/packages/cli/src/scaling/pubsub/subscriber.service.ts @@ -7,7 +7,7 @@ import { InstanceSettings } from 'n8n-core'; import { jsonParse } from 'n8n-workflow'; import type { LogMetadata } from 'n8n-workflow'; -import { RedisClientService } from '@/services/redis-client.service'; +import { RedisClientService } from '@n8n/backend-services'; import { PubSubEventBus } from './pubsub.eventbus'; import type { PubSub } from './pubsub.types'; diff --git a/packages/cli/src/scaling/redis-lock.service.ts b/packages/cli/src/scaling/redis-lock.service.ts index ec8398ec2db..50e9bcea65a 100644 --- a/packages/cli/src/scaling/redis-lock.service.ts +++ b/packages/cli/src/scaling/redis-lock.service.ts @@ -11,7 +11,7 @@ import { ensureError } from '@n8n/utils/errors/ensure-error'; import { sleep } from '@n8n/utils/sleep'; import { createHash, randomUUID } from 'node:crypto'; -import { RedisClientService } from '@/services/redis-client.service'; +import { RedisClientService } from '@n8n/backend-services'; import { OnShutdown } from '@n8n/decorators'; const COMMAND_TIMEOUT_MS = 5_000; diff --git a/packages/cli/src/scaling/scaling.service.ts b/packages/cli/src/scaling/scaling.service.ts index 283f3cc761b..9288de3acec 100644 --- a/packages/cli/src/scaling/scaling.service.ts +++ b/packages/cli/src/scaling/scaling.service.ts @@ -98,7 +98,7 @@ export class ScalingService { if (this.queueByName.size > 0) return; const { default: BullQueue } = await import('bull'); - const { RedisClientService } = await import('@/services/redis-client.service.js'); + const { RedisClientService } = await import('@n8n/backend-services'); const service = Container.get(RedisClientService); diff --git a/packages/cli/src/scaling/worker-server.ts b/packages/cli/src/scaling/worker-server.ts index d2da517bded..41e339e319f 100644 --- a/packages/cli/src/scaling/worker-server.ts +++ b/packages/cli/src/scaling/worker-server.ts @@ -17,7 +17,7 @@ import type { ICredentialsOverwrite } from '@/interfaces'; import { PrometheusMetricsService } from '@/metrics/prometheus'; import { rawBodyReader, bodyParser } from '@/middlewares'; import * as ResponseHelper from '@/response-helper'; -import { RedisClientService } from '@/services/redis-client.service'; +import { RedisClientService } from '@n8n/backend-services'; import { resolveBackendHealthEndpointPath } from '@/utils/health-endpoint.util'; export type WorkerServerEndpointsConfig = { diff --git a/packages/cli/src/services/__tests__/ai-usage.service.test.ts b/packages/cli/src/services/__tests__/ai-usage.service.test.ts index e428d526d1c..69a79cae7db 100644 --- a/packages/cli/src/services/__tests__/ai-usage.service.test.ts +++ b/packages/cli/src/services/__tests__/ai-usage.service.test.ts @@ -4,7 +4,7 @@ import { SettingsRepository } from '@n8n/db'; import config from '@/config'; import { AiUsageService } from '@/services/ai-usage.service'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService } from '@n8n/backend-services'; vi.mock('@/config', () => ({ default: { set: vi.fn() } })); diff --git a/packages/cli/src/services/__tests__/ownership.service.test.ts b/packages/cli/src/services/__tests__/ownership.service.test.ts index 3d5cfc63a67..daa54eb3eac 100644 --- a/packages/cli/src/services/__tests__/ownership.service.test.ts +++ b/packages/cli/src/services/__tests__/ownership.service.test.ts @@ -24,7 +24,7 @@ import { OwnershipService } from '@/services/ownership.service'; import { PasswordUtility } from '@/services/password.utility'; import { mockCredential, mockProject } from '@test/mock-objects'; -import { CacheService } from '../cache/cache.service'; +import { CacheService } from '@n8n/backend-services'; describe('OwnershipService', () => { const userRepository = mockInstance(UserRepository); diff --git a/packages/cli/src/services/__tests__/role-cache.service.test.ts b/packages/cli/src/services/__tests__/role-cache.service.test.ts index 9f5276824fb..be5026a848d 100644 --- a/packages/cli/src/services/__tests__/role-cache.service.test.ts +++ b/packages/cli/src/services/__tests__/role-cache.service.test.ts @@ -6,7 +6,7 @@ import { staticRolesWithScope } from '@n8n/permissions'; import type { MockedFunction } from 'vitest'; import { mock } from 'vitest-mock-extended'; -import type { CacheService } from '@/services/cache/cache.service'; +import type { CacheService } from '@n8n/backend-services'; import { RoleCacheService } from '@/services/role-cache.service'; // Mock static function diff --git a/packages/cli/src/services/ai-usage.service.ts b/packages/cli/src/services/ai-usage.service.ts index 1436936a2ac..88be621005b 100644 --- a/packages/cli/src/services/ai-usage.service.ts +++ b/packages/cli/src/services/ai-usage.service.ts @@ -2,7 +2,7 @@ import { SettingsRepository } from '@n8n/db'; import { Service } from '@n8n/di'; import config from '@/config'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService } from '@n8n/backend-services'; const KEY = 'ai.allowSendingParameterValues'; diff --git a/packages/cli/src/services/ownership.service.ts b/packages/cli/src/services/ownership.service.ts index 3f42ecbd73d..39701960b7a 100644 --- a/packages/cli/src/services/ownership.service.ts +++ b/packages/cli/src/services/ownership.service.ts @@ -1,6 +1,6 @@ import { OwnerSetupRequestDto } from '@n8n/api-types'; import { Logger } from '@n8n/backend-common'; -import { EventService } from '@n8n/backend-services'; +import { CacheService, EventService } from '@n8n/backend-services'; import type { ListQueryDb } from '@n8n/db'; import { GLOBAL_OWNER_ROLE, @@ -20,7 +20,6 @@ import { Not } from '@n8n/typeorm/find-options/operator/Not'; import config from '@/config'; import { BadRequestError } from '@n8n/errors'; -import { CacheService } from '@/services/cache/cache.service'; import { PasswordUtility } from './password.utility'; diff --git a/packages/cli/src/services/role-cache.service.ts b/packages/cli/src/services/role-cache.service.ts index 43dd151a706..1aabf3dc95d 100644 --- a/packages/cli/src/services/role-cache.service.ts +++ b/packages/cli/src/services/role-cache.service.ts @@ -5,7 +5,7 @@ import type { EntityManager } from '@n8n/db'; import { Container, Service } from '@n8n/di'; import { staticRolesWithScope, type Scope } from '@n8n/permissions'; -import { CacheService } from './cache/cache.service'; +import { CacheService } from '@n8n/backend-services'; type RoleInfo = { scopes: string[]; // array of scope slugs diff --git a/packages/cli/src/task-runners/task-broker/auth/__tests__/task-broker-auth.controller.test.ts b/packages/cli/src/task-runners/task-broker/auth/__tests__/task-broker-auth.controller.test.ts index 628d823e3e2..dbb789e0d33 100644 --- a/packages/cli/src/task-runners/task-broker/auth/__tests__/task-broker-auth.controller.test.ts +++ b/packages/cli/src/task-runners/task-broker/auth/__tests__/task-broker-auth.controller.test.ts @@ -1,7 +1,7 @@ import { mockInstance } from '@n8n/backend-test-utils'; import { GlobalConfig } from '@n8n/config'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService } from '@n8n/backend-services'; import { BadRequestError, ForbiddenError } from '@n8n/errors'; import type { AuthlessRequest } from '../../../../requests'; diff --git a/packages/cli/src/task-runners/task-broker/auth/__tests__/task-broker-auth.service.test.ts b/packages/cli/src/task-runners/task-broker/auth/__tests__/task-broker-auth.service.test.ts index 031881b0f3f..5f50cc52ba1 100644 --- a/packages/cli/src/task-runners/task-broker/auth/__tests__/task-broker-auth.service.test.ts +++ b/packages/cli/src/task-runners/task-broker/auth/__tests__/task-broker-auth.service.test.ts @@ -4,7 +4,7 @@ import { Time } from '@n8n/constants'; import { sleep } from '@n8n/utils/sleep'; import config from '@/config'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService } from '@n8n/backend-services'; import { retryUntil } from '@test-integration/retry-until'; import { TaskBrokerAuthService } from '../task-broker-auth.service'; diff --git a/packages/cli/src/task-runners/task-broker/auth/task-broker-auth.service.ts b/packages/cli/src/task-runners/task-broker/auth/task-broker-auth.service.ts index ba133caf0ad..2aff4401cbc 100644 --- a/packages/cli/src/task-runners/task-broker/auth/task-broker-auth.service.ts +++ b/packages/cli/src/task-runners/task-broker/auth/task-broker-auth.service.ts @@ -3,7 +3,7 @@ import { Time } from '@n8n/constants'; import { Service } from '@n8n/di'; import { randomBytes, timingSafeEqual } from 'crypto'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService } from '@n8n/backend-services'; /** * Cached in place of a runner ID for a grant token minted without one bound. diff --git a/packages/cli/src/webhooks/__tests__/test-webhook-registrations.service.test.ts b/packages/cli/src/webhooks/__tests__/test-webhook-registrations.service.test.ts index e04e297bd36..0e187de7857 100644 --- a/packages/cli/src/webhooks/__tests__/test-webhook-registrations.service.test.ts +++ b/packages/cli/src/webhooks/__tests__/test-webhook-registrations.service.test.ts @@ -6,7 +6,7 @@ import { TEST_WEBHOOK_TIMEOUT, TEST_WEBHOOK_TIMEOUT_BUFFER, } from '@/constants'; -import type { CacheService } from '@/services/cache/cache.service'; +import type { CacheService } from '@n8n/backend-services'; import type { TestWebhookRegistration } from '@/webhooks/test-webhook-registrations.service'; import { TestWebhookRegistrationsService } from '@/webhooks/test-webhook-registrations.service'; diff --git a/packages/cli/src/webhooks/__tests__/webhook.service.test.ts b/packages/cli/src/webhooks/__tests__/webhook.service.test.ts index 35b412a29f5..f70d6c27658 100644 --- a/packages/cli/src/webhooks/__tests__/webhook.service.test.ts +++ b/packages/cli/src/webhooks/__tests__/webhook.service.test.ts @@ -18,7 +18,7 @@ import { mock } from 'vitest-mock-extended'; import config from '@/config'; import type { NodeTypes } from '@/node-types'; -import type { CacheService } from '@/services/cache/cache.service'; +import type { CacheService } from '@n8n/backend-services'; import { WebhookService } from '@/webhooks/webhook.service'; const createWebhook = (method: string, path: string, webhookId?: string, pathSegments?: number) => diff --git a/packages/cli/src/webhooks/test-webhook-registrations.service.ts b/packages/cli/src/webhooks/test-webhook-registrations.service.ts index 9b1f35d2e98..a0ae0080611 100644 --- a/packages/cli/src/webhooks/test-webhook-registrations.service.ts +++ b/packages/cli/src/webhooks/test-webhook-registrations.service.ts @@ -13,7 +13,7 @@ import { TEST_WEBHOOK_TIMEOUT, TEST_WEBHOOK_TIMEOUT_BUFFER, } from '@/constants'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService } from '@n8n/backend-services'; const TEST_WEBHOOK_REGISTRATION_VERSION = 1; diff --git a/packages/cli/src/webhooks/webhook.service.ts b/packages/cli/src/webhooks/webhook.service.ts index 300ccfd67e2..be68734ba3c 100644 --- a/packages/cli/src/webhooks/webhook.service.ts +++ b/packages/cli/src/webhooks/webhook.service.ts @@ -26,7 +26,7 @@ import type { } from 'n8n-workflow'; import { NodeTypes } from '@/node-types'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService } from '@n8n/backend-services'; import type { Method } from './webhook.types'; diff --git a/packages/cli/src/workflows/__tests__/workflow-published-data.service.test.ts b/packages/cli/src/workflows/__tests__/workflow-published-data.service.test.ts index 3b34e7f20bc..bb7b65e5d08 100644 --- a/packages/cli/src/workflows/__tests__/workflow-published-data.service.test.ts +++ b/packages/cli/src/workflows/__tests__/workflow-published-data.service.test.ts @@ -2,7 +2,7 @@ import type { Logger } from '@n8n/backend-common'; import type { WorkflowPublishedVersionRepository, WorkflowPublishedVersion } from '@n8n/db'; import { mock } from 'vitest-mock-extended'; -import type { CacheService } from '@/services/cache/cache.service'; +import type { CacheService } from '@n8n/backend-services'; import { WorkflowPublishedDataService, type PublishedWorkflowDataForExecution, diff --git a/packages/cli/src/workflows/workflow-published-data.service.ts b/packages/cli/src/workflows/workflow-published-data.service.ts index 01b066c8fb3..34c755ea491 100644 --- a/packages/cli/src/workflows/workflow-published-data.service.ts +++ b/packages/cli/src/workflows/workflow-published-data.service.ts @@ -8,7 +8,7 @@ import { import { Service } from '@n8n/di'; import { ensureError } from '@n8n/utils/errors/ensure-error'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService } from '@n8n/backend-services'; export type { PublishedWorkflowDataForExecution }; diff --git a/packages/cli/test/integration/activation-errors.service.test.ts b/packages/cli/test/integration/activation-errors.service.test.ts index fd1bae94c18..3274ff9d8d6 100644 --- a/packages/cli/test/integration/activation-errors.service.test.ts +++ b/packages/cli/test/integration/activation-errors.service.test.ts @@ -2,7 +2,7 @@ import { mockInstance } from '@n8n/backend-test-utils'; import { GlobalConfig } from '@n8n/config'; import { ActivationErrorsService } from '@/activation-errors.service'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService } from '@n8n/backend-services'; describe('ActivationErrorsService', () => { const globalConfig = mockInstance(GlobalConfig, { diff --git a/packages/cli/test/integration/chat-trigger-test-webhook-auth.api.test.ts b/packages/cli/test/integration/chat-trigger-test-webhook-auth.api.test.ts index 9f0400045c6..66491ca775a 100644 --- a/packages/cli/test/integration/chat-trigger-test-webhook-auth.api.test.ts +++ b/packages/cli/test/integration/chat-trigger-test-webhook-auth.api.test.ts @@ -26,7 +26,7 @@ import path from 'node:path'; import { agent as testAgent } from 'supertest'; import { LoadNodesAndCredentials } from '@/load-nodes-and-credentials'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService } from '@n8n/backend-services'; import { Telemetry } from '@/telemetry'; import { TestWebhooks } from '@/webhooks/test-webhooks'; import { WebhookServer } from '@/webhooks/webhook-server'; diff --git a/packages/cli/test/integration/collaboration/collaboration.service.test.ts b/packages/cli/test/integration/collaboration/collaboration.service.test.ts index 8bbb33bce9a..b82d56aae68 100644 --- a/packages/cli/test/integration/collaboration/collaboration.service.test.ts +++ b/packages/cli/test/integration/collaboration/collaboration.service.test.ts @@ -19,7 +19,7 @@ import type { import { CollaborationService } from '@/collaboration/collaboration.service'; import { CollaborationState } from '@/collaboration/collaboration.state'; import { Push } from '@/push'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService } from '@n8n/backend-services'; describe('CollaborationService', () => { mockInstance(Push, new Push(mock(), mock(), mock(), mock(), mock())); diff --git a/packages/cli/test/integration/controllers/oauth/oauth1.api.test.ts b/packages/cli/test/integration/controllers/oauth/oauth1.api.test.ts index 502632d9d85..7457d6ef472 100644 --- a/packages/cli/test/integration/controllers/oauth/oauth1.api.test.ts +++ b/packages/cli/test/integration/controllers/oauth/oauth1.api.test.ts @@ -7,7 +7,7 @@ import nock from 'nock'; import { CredentialsHelper } from '@/credentials-helper'; import { OauthService, type OauthFlowState } from '@/oauth/oauth.service'; import { MAX_CSRF_AGE } from '@/oauth/types'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService } from '@n8n/backend-services'; import { decryptCredentialData, getCredentialById, diff --git a/packages/cli/test/integration/controllers/oauth/oauth2.api.test.ts b/packages/cli/test/integration/controllers/oauth/oauth2.api.test.ts index 8bcf94e18df..db4a0631d5c 100644 --- a/packages/cli/test/integration/controllers/oauth/oauth2.api.test.ts +++ b/packages/cli/test/integration/controllers/oauth/oauth2.api.test.ts @@ -11,7 +11,7 @@ import { CredentialsHelper } from '@/credentials-helper'; import { ExternalHooks } from '@/external-hooks'; import { OauthService, type OauthFlowState } from '@/oauth/oauth.service'; import { MAX_CSRF_AGE } from '@/oauth/types'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService } from '@n8n/backend-services'; import { decryptCredentialData, getCredentialById, diff --git a/packages/cli/test/integration/dynamic-credentials.ee/chat-trigger-test-run.api.test.ts b/packages/cli/test/integration/dynamic-credentials.ee/chat-trigger-test-run.api.test.ts index ea9a8e291fb..b11393b51c9 100644 --- a/packages/cli/test/integration/dynamic-credentials.ee/chat-trigger-test-run.api.test.ts +++ b/packages/cli/test/integration/dynamic-credentials.ee/chat-trigger-test-run.api.test.ts @@ -39,7 +39,7 @@ import { LoadNodesAndCredentials } from '@/load-nodes-and-credentials'; import { SYSTEM_RESOLVER_ID } from '@/modules/dynamic-credentials.ee/constants'; import { DynamicCredentialUserEntryStorage } from '@/modules/dynamic-credentials.ee/credential-resolvers/storage/dynamic-credential-user-entry-storage'; import { N8nResolverSeeder } from '@/modules/dynamic-credentials.ee/services/n8n-resolver-seeder.service'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService } from '@n8n/backend-services'; import { Telemetry } from '@/telemetry'; import { WebhookServer } from '@/webhooks/webhook-server'; 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 6abb62c49fe..23a270f8f31 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 @@ -24,7 +24,7 @@ import { DynamicCredentialUserEntryStorage } from '@/modules/dynamic-credentials import { N8nResolverSeeder } from '@/modules/dynamic-credentials.ee/services/n8n-resolver-seeder.service'; 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 { CacheService } from '@n8n/backend-services'; import { UrlService } from '@n8n/backend-services'; import { WebhookServer } from '@/webhooks/webhook-server'; diff --git a/packages/cli/test/integration/engine-v2-webhooks.test.ts b/packages/cli/test/integration/engine-v2-webhooks.test.ts index cb1b3db725f..cebf8e23fd4 100644 --- a/packages/cli/test/integration/engine-v2-webhooks.test.ts +++ b/packages/cli/test/integration/engine-v2-webhooks.test.ts @@ -17,7 +17,7 @@ import { WEBHOOK_NODE_TYPE } from 'n8n-workflow'; import { randomUUID } from 'node:crypto'; import { agent as testAgent } from 'supertest'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService } from '@n8n/backend-services'; import { InMemoryExecutionResponseChannel } from '@/modules/engine-v2/response-channel/in-memory-execution-response-channel'; import { InMemoryExecutionResponseReceiver } from '@/modules/engine-v2/response-channel/in-memory-execution-response-receiver'; import { EngineDataPlaneProxyService } from '@/services/engine-data-plane-proxy.service'; diff --git a/packages/cli/test/integration/mfa/mfa.api.test.ts b/packages/cli/test/integration/mfa/mfa.api.test.ts index 22715ad95af..97f2743dd28 100644 --- a/packages/cli/test/integration/mfa/mfa.api.test.ts +++ b/packages/cli/test/integration/mfa/mfa.api.test.ts @@ -12,7 +12,7 @@ import { ExternalHooks } from '@/external-hooks'; import { MFA_ENFORCE_SETTING } from '@/mfa/constants'; import { MFA_CACHE_KEY } from '@/mfa/mfa.service'; import { TOTPService } from '@/mfa/totp.service'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService } from '@n8n/backend-services'; import { createOwner, createUser, createUserWithMfaEnabled } from '../shared/db/users'; import * as utils from '../shared/utils'; diff --git a/packages/cli/test/integration/policy/node-type-policy.fan-out.test.ts b/packages/cli/test/integration/policy/node-type-policy.fan-out.test.ts index 71f42bc00dd..f9124982503 100644 --- a/packages/cli/test/integration/policy/node-type-policy.fan-out.test.ts +++ b/packages/cli/test/integration/policy/node-type-policy.fan-out.test.ts @@ -11,7 +11,7 @@ import { TypeAvailabilityPolicyScopeRepository } from '@/modules/type-availabili import { TypeAvailabilityPolicyRepository } from '@/modules/type-availability-policies/database/repositories/type-availability-policy.repository'; import type { PolicyRule } from '@/modules/type-availability-policies/policy-rule.types'; import { TypeAvailabilityPolicyService } from '@/modules/type-availability-policies/type-availability-policy.service'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService } from '@n8n/backend-services'; import { clearPolicyCache } from './shared/policy-cache'; diff --git a/packages/cli/test/integration/policy/node-type-policy.store-reads.test.ts b/packages/cli/test/integration/policy/node-type-policy.store-reads.test.ts index a208695133e..cc26e7b7bfa 100644 --- a/packages/cli/test/integration/policy/node-type-policy.store-reads.test.ts +++ b/packages/cli/test/integration/policy/node-type-policy.store-reads.test.ts @@ -7,7 +7,7 @@ import { TypeAvailabilityPolicyScopeRepository } from '@/modules/type-availabili import { TypeAvailabilityPolicyRepository } from '@/modules/type-availability-policies/database/repositories/type-availability-policy.repository'; import type { PolicyRule } from '@/modules/type-availability-policies/policy-rule.types'; import { TypeAvailabilityPolicyService } from '@/modules/type-availability-policies/type-availability-policy.service'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService } from '@n8n/backend-services'; import { clearPolicyCache } from './shared/policy-cache'; diff --git a/packages/cli/test/integration/policy/shared/policy-cache.ts b/packages/cli/test/integration/policy/shared/policy-cache.ts index c0f759f6bbd..961a0e0aebb 100644 --- a/packages/cli/test/integration/policy/shared/policy-cache.ts +++ b/packages/cli/test/integration/policy/shared/policy-cache.ts @@ -1,7 +1,7 @@ import { Container } from '@n8n/di'; import { TypeAvailabilityPolicyService } from '@/modules/type-availability-policies/type-availability-policy.service'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService } from '@n8n/backend-services'; /** * Drops the policy read-through cache, both layers: the shared `CacheService` entries and the diff --git a/packages/cli/test/integration/prometheus-metrics.test.ts b/packages/cli/test/integration/prometheus-metrics.test.ts index 67e2b096ab1..539cdc35907 100644 --- a/packages/cli/test/integration/prometheus-metrics.test.ts +++ b/packages/cli/test/integration/prometheus-metrics.test.ts @@ -1,4 +1,4 @@ -import { EventService } from '@n8n/backend-services'; +import { CacheService, EventService } from '@n8n/backend-services'; import { createActiveWorkflow } from '@n8n/backend-test-utils'; import { GlobalConfig } from '@n8n/config'; import { WorkflowRepository } from '@n8n/db'; @@ -9,7 +9,6 @@ import { parse as semverParse } from 'semver'; import request, { type Response } from 'supertest'; import { N8N_VERSION } from '@/constants'; -import { CacheService } from '@/services/cache/cache.service'; import { setupTestServer } from './shared/utils'; diff --git a/packages/cli/test/integration/public-api/security-policy.test.ts b/packages/cli/test/integration/public-api/security-policy.test.ts index 99abaea3303..2adc29824fc 100644 --- a/packages/cli/test/integration/public-api/security-policy.test.ts +++ b/packages/cli/test/integration/public-api/security-policy.test.ts @@ -10,7 +10,7 @@ import { import { In } from '@n8n/typeorm'; import { FeatureNotLicensedError } from '@/errors/feature-not-licensed.error'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService } from '@n8n/backend-services'; import { createMemberWithApiKey, createOwnerWithApiKey } from '@test-integration/db/users'; import { setupTestServer } from '@test-integration/utils'; diff --git a/packages/cli/test/integration/shared/utils/test-server.ts b/packages/cli/test/integration/shared/utils/test-server.ts index 5588381f128..ce5df046245 100644 --- a/packages/cli/test/integration/shared/utils/test-server.ts +++ b/packages/cli/test/integration/shared/utils/test-server.ts @@ -246,7 +246,7 @@ export const setupTestServer = ({ // CacheService must be initialized before PrometheusMetricsService // because cache-metrics.service calls isRedis() during init, which // reads this.cache.kind — only set after CacheService.init() resolves. - const { CacheService } = await import('@/services/cache/cache.service.js'); + const { CacheService } = await import('@n8n/backend-services'); await Container.get(CacheService).init(); const { PrometheusMetricsService } = await import('@/metrics/prometheus/index.js'); Container.get(PrometheusMetricsService).init(app); diff --git a/packages/cli/test/integration/variables.test.ts b/packages/cli/test/integration/variables.test.ts index bc1a3251b46..ca4cc17352e 100644 --- a/packages/cli/test/integration/variables.test.ts +++ b/packages/cli/test/integration/variables.test.ts @@ -2,7 +2,7 @@ import { createTeamProject, linkUserToProject, testDb } from '@n8n/backend-test- import type { Project, Variables } from '@n8n/db'; import { Container } from '@n8n/di'; -import { CacheService } from '@/services/cache/cache.service'; +import { CacheService } from '@n8n/backend-services'; import { createProjectVariable, createVariable, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1508026aa65..9c0c386f57c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1798,9 +1798,30 @@ importers: '@n8n/config': specifier: workspace:* version: link:../config + '@n8n/constants': + specifier: workspace:* + version: link:../constants + '@n8n/decorators': + specifier: workspace:* + version: link:../decorators '@n8n/di': specifier: workspace:* version: link:../di + '@n8n/errors': + specifier: workspace:* + version: link:../errors + '@n8n/utils': + specifier: workspace:* + version: link:../utils + cache-manager: + specifier: 'catalog:' + version: 5.2.3 + ioredis: + specifier: 5.3.2 + version: 5.3.2(supports-color@8.1.1) + n8n-workflow: + specifier: workspace:* + version: link:../../workflow devDependencies: '@n8n/eslint-config': specifier: workspace:* @@ -1814,9 +1835,21 @@ importers: '@n8n/vitest-config': specifier: workspace:* version: link:../vitest-config + '@types/lodash': + specifier: 'catalog:' + version: 4.17.17 '@vitest/coverage-v8': specifier: 'catalog:' version: 5.0.1(@vitest/browser@5.0.1)(vitest@5.0.1) + eslint: + specifier: 'catalog:' + version: 9.29.0(jiti@2.6.1)(supports-color@8.1.1) + ioredis-mock: + specifier: ^8.8.1 + version: 8.8.1(@types/ioredis-mock@8.2.2(supports-color@8.1.1))(ioredis@5.3.2(supports-color@8.1.1)) + lodash: + specifier: 4.18.1 + version: 4.18.1(patch_hash=81ead1b07fc8efda87bd2724dbd876ab49f4a0aa03f96c3770060b2ea47d9e0b) oxlint: specifier: 'catalog:' version: 1.78.0(oxlint-tsgolint@0.21.1) @@ -4732,9 +4765,6 @@ importers: bull: specifier: 4.16.4 version: 4.16.4(patch_hash=a4b6d56db16fe5870646929938466d6a5c668435fd1551bed6a93fffb597ba42)(supports-color@8.1.1) - cache-manager: - specifier: 'catalog:' - version: 5.2.3 change-case: specifier: 'catalog:' version: 5.4.4 @@ -5120,9 +5150,6 @@ importers: form-data: specifier: 4.0.6 version: 4.0.6 - ioredis-mock: - specifier: ^8.8.1 - version: 8.8.1(@types/ioredis-mock@8.2.2(supports-color@8.1.1))(ioredis@5.3.2(supports-color@8.1.1)) minifaker: specifier: 1.34.1 version: 1.34.1(patch_hash=bc707e2c34a2464da2c9c93ead33e80fd9883a00434ef64907ddc45208a08b33)