diff --git a/packages/@n8n/db/package.json b/packages/@n8n/db/package.json index 75c2a3aad9..6a33119334 100644 --- a/packages/@n8n/db/package.json +++ b/packages/@n8n/db/package.json @@ -26,6 +26,8 @@ "@n8n/permissions": "workspace:^", "@n8n/typeorm": "catalog:", "class-validator": "0.14.0", + "flatted": "catalog:", + "lodash": "catalog:", "n8n-core": "workspace:^", "n8n-workflow": "workspace:^", "nanoid": "catalog:", @@ -33,6 +35,7 @@ "xss": "catalog:" }, "devDependencies": { - "@n8n/typescript-config": "workspace:*" + "@n8n/typescript-config": "workspace:*", + "@types/lodash": "catalog:" } } diff --git a/packages/@n8n/db/src/entities/types-db.ts b/packages/@n8n/db/src/entities/types-db.ts index d2175c2fce..b792773a0b 100644 --- a/packages/@n8n/db/src/entities/types-db.ts +++ b/packages/@n8n/db/src/entities/types-db.ts @@ -1,4 +1,5 @@ import type { GlobalRole, Scope } from '@n8n/permissions'; +import type { FindOperator } from '@n8n/typeorm'; import type { ICredentialsEncrypted, IRunExecutionData, @@ -308,3 +309,45 @@ export type MockedNodeItem = { export type RunningMode = 'dry' | 'live'; export type SyncStatus = 'success' | 'error'; + +/** @deprecated This is tech debt. Do not rely on request-level types in repositories. */ +export namespace ListQuery { + export type Options = { + filter?: Record; + select?: Record; + skip?: number; + take?: number; + sortBy?: string; + }; +} + +export type ProjectRole = + | 'project:personalOwner' + | 'project:admin' + | 'project:editor' + | 'project:viewer'; + +export interface IGetExecutionsQueryFilter { + id?: FindOperator | string; + finished?: boolean; + mode?: string; + retryOf?: string; + retrySuccessId?: string; + status?: ExecutionStatus[]; + workflowId?: string; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + waitTill?: FindOperator | boolean; + metadata?: Array<{ key: string; value: string }>; + startedAfter?: string; + startedBefore?: string; +} + +export type ResourceType = 'folder' | 'workflow'; + +export type WorkflowFolderUnionFull = ( + | ListQueryDb.Workflow.Plain + | ListQueryDb.Workflow.WithSharing + | FolderWithWorkflowAndSubFolderCount +) & { + resource: ResourceType; +}; diff --git a/packages/@n8n/db/src/index.ts b/packages/@n8n/db/src/index.ts index c6bd4f4d23..de9a64a93f 100644 --- a/packages/@n8n/db/src/index.ts +++ b/packages/@n8n/db/src/index.ts @@ -18,3 +18,5 @@ export * from './entities'; export * from './entities/types-db'; export { NoXss } from './utils/validators/no-xss.validator'; export { NoUrl } from './utils/validators/no-url.validator'; + +export * from './repositories'; diff --git a/packages/cli/src/databases/repositories/annotation-tag-mapping.repository.ee.ts b/packages/@n8n/db/src/repositories/annotation-tag-mapping.repository.ee.ts similarity index 93% rename from packages/cli/src/databases/repositories/annotation-tag-mapping.repository.ee.ts rename to packages/@n8n/db/src/repositories/annotation-tag-mapping.repository.ee.ts index 3537321438..2ec4e0eaca 100644 --- a/packages/cli/src/databases/repositories/annotation-tag-mapping.repository.ee.ts +++ b/packages/@n8n/db/src/repositories/annotation-tag-mapping.repository.ee.ts @@ -1,7 +1,8 @@ -import { AnnotationTagMapping } from '@n8n/db'; import { Service } from '@n8n/di'; import { DataSource, Repository } from '@n8n/typeorm'; +import { AnnotationTagMapping } from '../entities'; + @Service() export class AnnotationTagMappingRepository extends Repository { constructor(dataSource: DataSource) { diff --git a/packages/cli/src/databases/repositories/annotation-tag.repository.ee.ts b/packages/@n8n/db/src/repositories/annotation-tag.repository.ee.ts similarity index 84% rename from packages/cli/src/databases/repositories/annotation-tag.repository.ee.ts rename to packages/@n8n/db/src/repositories/annotation-tag.repository.ee.ts index 9c9a130a7d..6efd533720 100644 --- a/packages/cli/src/databases/repositories/annotation-tag.repository.ee.ts +++ b/packages/@n8n/db/src/repositories/annotation-tag.repository.ee.ts @@ -1,7 +1,8 @@ -import { AnnotationTagEntity } from '@n8n/db'; import { Service } from '@n8n/di'; import { DataSource, Repository } from '@n8n/typeorm'; +import { AnnotationTagEntity } from '../entities'; + @Service() export class AnnotationTagRepository extends Repository { constructor(dataSource: DataSource) { diff --git a/packages/cli/src/databases/repositories/api-key.repository.ts b/packages/@n8n/db/src/repositories/api-key.repository.ts similarity index 86% rename from packages/cli/src/databases/repositories/api-key.repository.ts rename to packages/@n8n/db/src/repositories/api-key.repository.ts index 64dc27fa43..1b64e57616 100644 --- a/packages/cli/src/databases/repositories/api-key.repository.ts +++ b/packages/@n8n/db/src/repositories/api-key.repository.ts @@ -1,7 +1,8 @@ -import { ApiKey } from '@n8n/db'; import { Service } from '@n8n/di'; import { DataSource, Repository } from '@n8n/typeorm'; +import { ApiKey } from '../entities'; + @Service() export class ApiKeyRepository extends Repository { constructor(dataSource: DataSource) { diff --git a/packages/cli/src/databases/repositories/auth-identity.repository.ts b/packages/@n8n/db/src/repositories/auth-identity.repository.ts similarity index 85% rename from packages/cli/src/databases/repositories/auth-identity.repository.ts rename to packages/@n8n/db/src/repositories/auth-identity.repository.ts index efb9464bf6..6121ab9310 100644 --- a/packages/cli/src/databases/repositories/auth-identity.repository.ts +++ b/packages/@n8n/db/src/repositories/auth-identity.repository.ts @@ -1,7 +1,8 @@ -import { AuthIdentity } from '@n8n/db'; import { Service } from '@n8n/di'; import { DataSource, Repository } from '@n8n/typeorm'; +import { AuthIdentity } from '../entities'; + @Service() export class AuthIdentityRepository extends Repository { constructor(dataSource: DataSource) { diff --git a/packages/cli/src/databases/repositories/auth-provider-sync-history.repository.ts b/packages/@n8n/db/src/repositories/auth-provider-sync-history.repository.ts similarity index 83% rename from packages/cli/src/databases/repositories/auth-provider-sync-history.repository.ts rename to packages/@n8n/db/src/repositories/auth-provider-sync-history.repository.ts index 951c975f7a..699d1b90f5 100644 --- a/packages/cli/src/databases/repositories/auth-provider-sync-history.repository.ts +++ b/packages/@n8n/db/src/repositories/auth-provider-sync-history.repository.ts @@ -1,7 +1,8 @@ -import { AuthProviderSyncHistory } from '@n8n/db'; import { Service } from '@n8n/di'; import { DataSource, Repository } from '@n8n/typeorm'; +import { AuthProviderSyncHistory } from '../entities'; + @Service() export class AuthProviderSyncHistoryRepository extends Repository { constructor(dataSource: DataSource) { diff --git a/packages/cli/src/databases/repositories/auth-user.repository.ts b/packages/@n8n/db/src/repositories/auth-user.repository.ts similarity index 85% rename from packages/cli/src/databases/repositories/auth-user.repository.ts rename to packages/@n8n/db/src/repositories/auth-user.repository.ts index 3f4074f5e7..99cbe2d783 100644 --- a/packages/cli/src/databases/repositories/auth-user.repository.ts +++ b/packages/@n8n/db/src/repositories/auth-user.repository.ts @@ -1,7 +1,8 @@ -import { AuthUser } from '@n8n/db'; import { Service } from '@n8n/di'; import { DataSource, Repository } from '@n8n/typeorm'; +import { AuthUser } from '../entities'; + @Service() export class AuthUserRepository extends Repository { constructor(dataSource: DataSource) { diff --git a/packages/cli/src/databases/repositories/credentials.repository.ts b/packages/@n8n/db/src/repositories/credentials.repository.ts similarity index 96% rename from packages/cli/src/databases/repositories/credentials.repository.ts rename to packages/@n8n/db/src/repositories/credentials.repository.ts index 51d91db4c2..0f4db3ea2e 100644 --- a/packages/cli/src/databases/repositories/credentials.repository.ts +++ b/packages/@n8n/db/src/repositories/credentials.repository.ts @@ -1,10 +1,10 @@ -import type { User } from '@n8n/db'; -import { CredentialsEntity } from '@n8n/db'; import { Service } from '@n8n/di'; import { DataSource, In, Repository, Like } from '@n8n/typeorm'; import type { FindManyOptions } from '@n8n/typeorm'; -import type { ListQuery } from '@/requests'; +import { CredentialsEntity } from '../entities'; +import type { User } from '../entities'; +import type { ListQuery } from '../entities/types-db'; @Service() export class CredentialsRepository extends Repository { diff --git a/packages/cli/src/databases/repositories/event-destinations.repository.ts b/packages/@n8n/db/src/repositories/event-destinations.repository.ts similarity index 84% rename from packages/cli/src/databases/repositories/event-destinations.repository.ts rename to packages/@n8n/db/src/repositories/event-destinations.repository.ts index 9a67ae9eed..00671a30f5 100644 --- a/packages/cli/src/databases/repositories/event-destinations.repository.ts +++ b/packages/@n8n/db/src/repositories/event-destinations.repository.ts @@ -1,7 +1,8 @@ -import { EventDestinations } from '@n8n/db'; import { Service } from '@n8n/di'; import { DataSource, Repository } from '@n8n/typeorm'; +import { EventDestinations } from '../entities'; + @Service() export class EventDestinationsRepository extends Repository { constructor(dataSource: DataSource) { diff --git a/packages/cli/src/databases/repositories/execution-annotation.repository.ts b/packages/@n8n/db/src/repositories/execution-annotation.repository.ts similarity index 84% rename from packages/cli/src/databases/repositories/execution-annotation.repository.ts rename to packages/@n8n/db/src/repositories/execution-annotation.repository.ts index 72aa62a27b..6bcad1824f 100644 --- a/packages/cli/src/databases/repositories/execution-annotation.repository.ts +++ b/packages/@n8n/db/src/repositories/execution-annotation.repository.ts @@ -1,7 +1,8 @@ -import { ExecutionAnnotation } from '@n8n/db'; import { Service } from '@n8n/di'; import { DataSource, Repository } from '@n8n/typeorm'; +import { ExecutionAnnotation } from '../entities'; + @Service() export class ExecutionAnnotationRepository extends Repository { constructor(dataSource: DataSource) { diff --git a/packages/cli/src/databases/repositories/execution-data.repository.ts b/packages/@n8n/db/src/repositories/execution-data.repository.ts similarity index 94% rename from packages/cli/src/databases/repositories/execution-data.repository.ts rename to packages/@n8n/db/src/repositories/execution-data.repository.ts index 5e473e319a..1af6a838a3 100644 --- a/packages/cli/src/databases/repositories/execution-data.repository.ts +++ b/packages/@n8n/db/src/repositories/execution-data.repository.ts @@ -1,9 +1,10 @@ -import { ExecutionData } from '@n8n/db'; import { Service } from '@n8n/di'; import { DataSource, In, Repository } from '@n8n/typeorm'; import type { EntityManager } from '@n8n/typeorm'; import type { QueryDeepPartialEntity } from '@n8n/typeorm/query-builder/QueryPartialEntity'; +import { ExecutionData } from '../entities'; + @Service() export class ExecutionDataRepository extends Repository { constructor(dataSource: DataSource) { diff --git a/packages/cli/src/databases/repositories/execution-metadata.repository.ts b/packages/@n8n/db/src/repositories/execution-metadata.repository.ts similarity index 84% rename from packages/cli/src/databases/repositories/execution-metadata.repository.ts rename to packages/@n8n/db/src/repositories/execution-metadata.repository.ts index 5884eb972c..0ea7a294bb 100644 --- a/packages/cli/src/databases/repositories/execution-metadata.repository.ts +++ b/packages/@n8n/db/src/repositories/execution-metadata.repository.ts @@ -1,7 +1,8 @@ -import { ExecutionMetadata } from '@n8n/db'; import { Service } from '@n8n/di'; import { DataSource, Repository } from '@n8n/typeorm'; +import { ExecutionMetadata } from '../entities'; + @Service() export class ExecutionMetadataRepository extends Repository { constructor(dataSource: DataSource) { diff --git a/packages/cli/src/databases/repositories/execution.repository.ts b/packages/@n8n/db/src/repositories/execution.repository.ts similarity index 98% rename from packages/cli/src/databases/repositories/execution.repository.ts rename to packages/@n8n/db/src/repositories/execution.repository.ts index a2e50d0be0..448e0e7465 100644 --- a/packages/cli/src/databases/repositories/execution.repository.ts +++ b/packages/@n8n/db/src/repositories/execution.repository.ts @@ -1,22 +1,4 @@ import { GlobalConfig } from '@n8n/config'; -import type { - CreateExecutionPayload, - IExecutionFlattedDb, - IExecutionBase, - IExecutionResponse, - ExecutionSummaries, -} from '@n8n/db'; -import { - separate, - SharedWorkflow, - WorkflowEntity, - AnnotationTagEntity, - AnnotationTagMapping, - ExecutionData, - ExecutionEntity, - ExecutionAnnotation, - ExecutionMetadata, -} from '@n8n/db'; import { Service } from '@n8n/di'; import type { FindManyOptions, @@ -49,9 +31,31 @@ import type { IRunExecutionData, } from 'n8n-workflow'; -import { PostgresLiveRowsRetrievalError } from '@/errors/postgres-live-rows-retrieval.error'; - import { ExecutionDataRepository } from './execution-data.repository'; +import { + ExecutionEntity, + ExecutionMetadata, + ExecutionData, + ExecutionAnnotation, + AnnotationTagMapping, + WorkflowEntity, + SharedWorkflow, + AnnotationTagEntity, +} from '../entities'; +import type { + CreateExecutionPayload, + IExecutionFlattedDb, + IExecutionBase, + IExecutionResponse, + ExecutionSummaries, +} from '../entities/types-db'; +import { separate } from '../utils/separate'; + +class PostgresLiveRowsRetrievalError extends UnexpectedError { + constructor(rows: unknown) { + super('Failed to retrieve live execution rows in Postgres', { extra: { rows } }); + } +} export interface IGetExecutionsQueryFilter { id?: FindOperator | string; @@ -61,6 +65,7 @@ export interface IGetExecutionsQueryFilter { retrySuccessId?: string; status?: ExecutionStatus[]; workflowId?: string; + // eslint-disable-next-line @typescript-eslint/no-explicit-any waitTill?: FindOperator | boolean; metadata?: Array<{ key: string; value: string }>; startedAfter?: string; @@ -989,6 +994,7 @@ export class ExecutionRepository extends Repository { qb.setParameter('value', value); } + // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing if (annotationTags?.length || vote) { // If there is a filter by one or multiple tags or by vote - we need to join the annotations table qb.innerJoin('execution.annotation', 'annotation'); diff --git a/packages/@n8n/db/src/repositories/index.ts b/packages/@n8n/db/src/repositories/index.ts new file mode 100644 index 0000000000..2e662e6408 --- /dev/null +++ b/packages/@n8n/db/src/repositories/index.ts @@ -0,0 +1,12 @@ +export { AnnotationTagMappingRepository } from './annotation-tag-mapping.repository.ee'; +export { AnnotationTagRepository } from './annotation-tag.repository.ee'; +export { ApiKeyRepository } from './api-key.repository'; +export { AuthIdentityRepository } from './auth-identity.repository'; +export { AuthProviderSyncHistoryRepository } from './auth-provider-sync-history.repository'; +export { AuthUserRepository } from './auth-user.repository'; +export { CredentialsRepository } from './credentials.repository'; +export { ExecutionAnnotationRepository } from './execution-annotation.repository'; +export { ExecutionDataRepository } from './execution-data.repository'; +export { ExecutionMetadataRepository } from './execution-metadata.repository'; +export { ExecutionRepository } from './execution.repository'; +export { EventDestinationsRepository } from './event-destinations.repository'; diff --git a/packages/cli/src/__tests__/active-executions.test.ts b/packages/cli/src/__tests__/active-executions.test.ts index 0ae648a098..028e9204d4 100644 --- a/packages/cli/src/__tests__/active-executions.test.ts +++ b/packages/cli/src/__tests__/active-executions.test.ts @@ -1,3 +1,4 @@ +import type { ExecutionRepository } from '@n8n/db'; import { captor, mock } from 'jest-mock-extended'; import type { IDeferredPromise, @@ -12,7 +13,6 @@ import { v4 as uuid } from 'uuid'; import { ActiveExecutions } from '@/active-executions'; import { ConcurrencyControlService } from '@/concurrency/concurrency-control.service'; import config from '@/config'; -import type { ExecutionRepository } from '@/databases/repositories/execution.repository'; import { mockInstance } from '@test/mocking'; jest.mock('n8n-workflow', () => ({ diff --git a/packages/cli/src/__tests__/external-hooks.test.ts b/packages/cli/src/__tests__/external-hooks.test.ts index a6688fbd1f..f9255b927a 100644 --- a/packages/cli/src/__tests__/external-hooks.test.ts +++ b/packages/cli/src/__tests__/external-hooks.test.ts @@ -1,10 +1,10 @@ import type { GlobalConfig } from '@n8n/config'; +import type { CredentialsRepository } from '@n8n/db'; import { mock } from 'jest-mock-extended'; import type { ErrorReporter, Logger } from 'n8n-core'; import type { IWorkflowBase } from 'n8n-workflow'; import { UnexpectedError } from 'n8n-workflow'; -import type { CredentialsRepository } from '@/databases/repositories/credentials.repository'; import type { SettingsRepository } from '@/databases/repositories/settings.repository'; import type { UserRepository } from '@/databases/repositories/user.repository'; import type { WorkflowRepository } from '@/databases/repositories/workflow.repository'; diff --git a/packages/cli/src/__tests__/wait-tracker.test.ts b/packages/cli/src/__tests__/wait-tracker.test.ts index 2af5b399f4..6bc21a8480 100644 --- a/packages/cli/src/__tests__/wait-tracker.test.ts +++ b/packages/cli/src/__tests__/wait-tracker.test.ts @@ -1,12 +1,12 @@ import type { Project } from '@n8n/db'; import type { IExecutionResponse } from '@n8n/db'; +import type { ExecutionRepository } from '@n8n/db'; import { mock } from 'jest-mock-extended'; import type { InstanceSettings } from 'n8n-core'; import type { IRun, IWorkflowBase } from 'n8n-workflow'; import { createDeferredPromise } from 'n8n-workflow'; import type { ActiveExecutions } from '@/active-executions'; -import type { ExecutionRepository } from '@/databases/repositories/execution.repository'; import type { MultiMainSetup } from '@/scaling/multi-main-setup.ee'; import type { OwnershipService } from '@/services/ownership.service'; import { WaitTracker } from '@/wait-tracker'; diff --git a/packages/cli/src/__tests__/workflow-execute-additional-data.test.ts b/packages/cli/src/__tests__/workflow-execute-additional-data.test.ts index 743749a2de..ca07066ae1 100644 --- a/packages/cli/src/__tests__/workflow-execute-additional-data.test.ts +++ b/packages/cli/src/__tests__/workflow-execute-additional-data.test.ts @@ -1,5 +1,6 @@ import { GlobalConfig } from '@n8n/config'; import type { WorkflowEntity } from '@n8n/db'; +import { ExecutionRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import { mock } from 'jest-mock-extended'; import type { IWorkflowBase } from 'n8n-workflow'; @@ -14,7 +15,6 @@ import type PCancelable from 'p-cancelable'; import { ActiveExecutions } from '@/active-executions'; import { CredentialsHelper } from '@/credentials-helper'; -import { ExecutionRepository } from '@/databases/repositories/execution.repository'; import { WorkflowRepository } from '@/databases/repositories/workflow.repository'; import { VariablesService } from '@/environments.ee/variables/variables.service.ee'; import { EventService } from '@/events/event.service'; diff --git a/packages/cli/src/__tests__/workflow-runner.test.ts b/packages/cli/src/__tests__/workflow-runner.test.ts index 89e6503f61..4ac31197ad 100644 --- a/packages/cli/src/__tests__/workflow-runner.test.ts +++ b/packages/cli/src/__tests__/workflow-runner.test.ts @@ -51,7 +51,7 @@ afterAll(() => { }); beforeEach(async () => { - await testDb.truncate(['Workflow', 'SharedWorkflow']); + await testDb.truncate(['WorkflowEntity', 'SharedWorkflow']); jest.clearAllMocks(); }); diff --git a/packages/cli/src/active-executions.ts b/packages/cli/src/active-executions.ts index 869c1e3c78..6282993313 100644 --- a/packages/cli/src/active-executions.ts +++ b/packages/cli/src/active-executions.ts @@ -1,4 +1,5 @@ import type { CreateExecutionPayload, IExecutionDb } from '@n8n/db'; +import { ExecutionRepository } from '@n8n/db'; import { Service } from '@n8n/di'; import { Logger } from 'n8n-core'; import type { @@ -12,7 +13,6 @@ import { createDeferredPromise, ExecutionCancelledError, sleep } from 'n8n-workf import { strict as assert } from 'node:assert'; import type PCancelable from 'p-cancelable'; -import { ExecutionRepository } from '@/databases/repositories/execution.repository'; import { ExecutionNotFoundError } from '@/errors/execution-not-found-error'; import type { IExecutingWorkflowData, IExecutionsCurrentSummary } from '@/interfaces'; import { isWorkflowIdValid } from '@/utils'; diff --git a/packages/cli/src/commands/community-node.ts b/packages/cli/src/commands/community-node.ts index b06bc0958a..e52d41e1e4 100644 --- a/packages/cli/src/commands/community-node.ts +++ b/packages/cli/src/commands/community-node.ts @@ -1,9 +1,9 @@ import { type InstalledNodes, type InstalledPackages, type User } from '@n8n/db'; +import { CredentialsRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import { Flags } from '@oclif/core'; import { CredentialsService } from '@/credentials/credentials.service'; -import { CredentialsRepository } from '@/databases/repositories/credentials.repository'; import { InstalledNodesRepository } from '@/databases/repositories/installed-nodes.repository'; import { UserRepository } from '@/databases/repositories/user.repository'; import { CommunityPackagesService } from '@/services/community-packages.service'; diff --git a/packages/cli/src/commands/export/credentials.ts b/packages/cli/src/commands/export/credentials.ts index 335c91bade..a67080a017 100644 --- a/packages/cli/src/commands/export/credentials.ts +++ b/packages/cli/src/commands/export/credentials.ts @@ -1,4 +1,5 @@ import type { ICredentialsDb } from '@n8n/db'; +import { CredentialsRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import { Flags } from '@oclif/core'; import fs from 'fs'; @@ -6,7 +7,6 @@ import { Credentials } from 'n8n-core'; import { UserError } from 'n8n-workflow'; import path from 'path'; -import { CredentialsRepository } from '@/databases/repositories/credentials.repository'; import type { ICredentialsDecryptedDb } from '@/interfaces'; import { BaseCommand } from '../base-command'; diff --git a/packages/cli/src/commands/ldap/reset.ts b/packages/cli/src/commands/ldap/reset.ts index 3a9d377fd5..219ab2419a 100644 --- a/packages/cli/src/commands/ldap/reset.ts +++ b/packages/cli/src/commands/ldap/reset.ts @@ -1,3 +1,4 @@ +import { AuthIdentityRepository, AuthProviderSyncHistoryRepository } from '@n8n/db'; import { Container } from '@n8n/di'; // eslint-disable-next-line n8n-local-rules/misplaced-n8n-typeorm-import import { In } from '@n8n/typeorm'; @@ -6,8 +7,6 @@ import { UserError } from 'n8n-workflow'; import { UM_FIX_INSTRUCTION } from '@/constants'; import { CredentialsService } from '@/credentials/credentials.service'; -import { AuthIdentityRepository } from '@/databases/repositories/auth-identity.repository'; -import { AuthProviderSyncHistoryRepository } from '@/databases/repositories/auth-provider-sync-history.repository'; import { ProjectRelationRepository } from '@/databases/repositories/project-relation.repository'; import { ProjectRepository } from '@/databases/repositories/project.repository'; import { SettingsRepository } from '@/databases/repositories/settings.repository'; diff --git a/packages/cli/src/commands/mfa/disable.ts b/packages/cli/src/commands/mfa/disable.ts index a739fbda88..89dc929bd0 100644 --- a/packages/cli/src/commands/mfa/disable.ts +++ b/packages/cli/src/commands/mfa/disable.ts @@ -1,8 +1,7 @@ +import { AuthUserRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import { Flags } from '@oclif/core'; -import { AuthUserRepository } from '@/databases/repositories/auth-user.repository'; - import { BaseCommand } from '../base-command'; export class DisableMFACommand extends BaseCommand { diff --git a/packages/cli/src/commands/start.ts b/packages/cli/src/commands/start.ts index ea9b18ee24..c7d473de28 100644 --- a/packages/cli/src/commands/start.ts +++ b/packages/cli/src/commands/start.ts @@ -1,6 +1,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ import { LICENSE_FEATURES } from '@n8n/constants'; +import { ExecutionRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import { Flags } from '@oclif/core'; import glob from 'fast-glob'; @@ -15,7 +16,6 @@ import { ActiveExecutions } from '@/active-executions'; import { ActiveWorkflowManager } from '@/active-workflow-manager'; import config from '@/config'; import { EDITOR_UI_DIST_DIR } from '@/constants'; -import { ExecutionRepository } from '@/databases/repositories/execution.repository'; import { SettingsRepository } from '@/databases/repositories/settings.repository'; import { FeatureNotLicensedError } from '@/errors/feature-not-licensed.error'; import { MessageEventBus } from '@/eventbus/message-event-bus/message-event-bus'; diff --git a/packages/cli/src/commands/user-management/reset.ts b/packages/cli/src/commands/user-management/reset.ts index 63f46707c9..fe0f3e3d35 100644 --- a/packages/cli/src/commands/user-management/reset.ts +++ b/packages/cli/src/commands/user-management/reset.ts @@ -1,8 +1,7 @@ import type { CredentialsEntity } from '@n8n/db'; -import { User } from '@n8n/db'; +import { User, CredentialsRepository } from '@n8n/db'; import { Container } from '@n8n/di'; -import { CredentialsRepository } from '@/databases/repositories/credentials.repository'; import { ProjectRepository } from '@/databases/repositories/project.repository'; import { SettingsRepository } from '@/databases/repositories/settings.repository'; import { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository'; diff --git a/packages/cli/src/concurrency/__tests__/concurrency-control.service.test.ts b/packages/cli/src/concurrency/__tests__/concurrency-control.service.test.ts index 6a0ffcac18..690e15aafe 100644 --- a/packages/cli/src/concurrency/__tests__/concurrency-control.service.test.ts +++ b/packages/cli/src/concurrency/__tests__/concurrency-control.service.test.ts @@ -1,3 +1,4 @@ +import type { ExecutionRepository } from '@n8n/db'; import { mock } from 'jest-mock-extended'; import type { WorkflowExecuteMode as ExecutionMode } from 'n8n-workflow'; @@ -8,7 +9,6 @@ import { ConcurrencyControlService, } from '@/concurrency/concurrency-control.service'; import config from '@/config'; -import type { ExecutionRepository } from '@/databases/repositories/execution.repository'; import { InvalidConcurrencyLimitError } from '@/errors/invalid-concurrency-limit.error'; import type { EventService } from '@/events/event.service'; import type { Telemetry } from '@/telemetry'; diff --git a/packages/cli/src/concurrency/concurrency-control.service.ts b/packages/cli/src/concurrency/concurrency-control.service.ts index f41a919680..920050405a 100644 --- a/packages/cli/src/concurrency/concurrency-control.service.ts +++ b/packages/cli/src/concurrency/concurrency-control.service.ts @@ -1,10 +1,10 @@ +import { ExecutionRepository } from '@n8n/db'; import { Service } from '@n8n/di'; import { capitalize } from 'lodash'; import { Logger } from 'n8n-core'; import type { WorkflowExecuteMode as ExecutionMode } from 'n8n-workflow'; import config from '@/config'; -import { ExecutionRepository } from '@/databases/repositories/execution.repository'; import { InvalidConcurrencyLimitError } from '@/errors/invalid-concurrency-limit.error'; import { UnknownExecutionModeError } from '@/errors/unknown-execution-mode.error'; import { EventService } from '@/events/event.service'; diff --git a/packages/cli/src/controllers/__tests__/me.controller.test.ts b/packages/cli/src/controllers/__tests__/me.controller.test.ts index 8fb7da2fcf..e2c51a0746 100644 --- a/packages/cli/src/controllers/__tests__/me.controller.test.ts +++ b/packages/cli/src/controllers/__tests__/me.controller.test.ts @@ -1,6 +1,7 @@ import { UserUpdateRequestDto } from '@n8n/api-types'; import type { User } from '@n8n/db'; import type { PublicUser } from '@n8n/db'; +import { AuthUserRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import type { Response } from 'express'; import { mock, anyObject } from 'jest-mock-extended'; @@ -8,7 +9,6 @@ import jwt from 'jsonwebtoken'; import { AUTH_COOKIE_NAME } from '@/constants'; import { MeController } from '@/controllers/me.controller'; -import { AuthUserRepository } from '@/databases/repositories/auth-user.repository'; import { InvalidAuthTokenRepository } from '@/databases/repositories/invalid-auth-token.repository'; import { UserRepository } from '@/databases/repositories/user.repository'; import { BadRequestError } from '@/errors/response-errors/bad-request.error'; diff --git a/packages/cli/src/controllers/e2e.controller.ts b/packages/cli/src/controllers/e2e.controller.ts index b5cd0ce0df..28d26d0ce0 100644 --- a/packages/cli/src/controllers/e2e.controller.ts +++ b/packages/cli/src/controllers/e2e.controller.ts @@ -1,6 +1,7 @@ import type { PushMessage } from '@n8n/api-types'; import type { BooleanLicenseFeature, NumericLicenseFeature } from '@n8n/constants'; import { LICENSE_FEATURES, LICENSE_QUOTAS, UNLIMITED_LICENSE_QUOTA } from '@n8n/constants'; +import { AuthUserRepository } from '@n8n/db'; import { Patch, Post, RestController } from '@n8n/decorators'; import { Container } from '@n8n/di'; import { Request } from 'express'; @@ -10,7 +11,6 @@ import { v4 as uuid } from 'uuid'; import { ActiveWorkflowManager } from '@/active-workflow-manager'; import config from '@/config'; import { inE2ETests } from '@/constants'; -import { AuthUserRepository } from '@/databases/repositories/auth-user.repository'; import { SettingsRepository } from '@/databases/repositories/settings.repository'; import { UserRepository } from '@/databases/repositories/user.repository'; import { MessageEventBus } from '@/eventbus/message-event-bus/message-event-bus'; diff --git a/packages/cli/src/controllers/oauth/__tests__/oauth1-credential.controller.test.ts b/packages/cli/src/controllers/oauth/__tests__/oauth1-credential.controller.test.ts index faae8bebfa..ffbb39a8b8 100644 --- a/packages/cli/src/controllers/oauth/__tests__/oauth1-credential.controller.test.ts +++ b/packages/cli/src/controllers/oauth/__tests__/oauth1-credential.controller.test.ts @@ -1,5 +1,6 @@ import type { CredentialsEntity } from '@n8n/db'; import type { User } from '@n8n/db'; +import { CredentialsRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import Csrf from 'csrf'; import type { Response } from 'express'; @@ -12,7 +13,6 @@ import { Time } from '@/constants'; import { OAuth1CredentialController } from '@/controllers/oauth/oauth1-credential.controller'; import { CredentialsFinderService } from '@/credentials/credentials-finder.service'; import { CredentialsHelper } from '@/credentials-helper'; -import { CredentialsRepository } from '@/databases/repositories/credentials.repository'; import { VariablesService } from '@/environments.ee/variables/variables.service.ee'; import { BadRequestError } from '@/errors/response-errors/bad-request.error'; import { NotFoundError } from '@/errors/response-errors/not-found.error'; diff --git a/packages/cli/src/controllers/oauth/__tests__/oauth2-credential.controller.test.ts b/packages/cli/src/controllers/oauth/__tests__/oauth2-credential.controller.test.ts index 19fb5ec276..ab99f4f556 100644 --- a/packages/cli/src/controllers/oauth/__tests__/oauth2-credential.controller.test.ts +++ b/packages/cli/src/controllers/oauth/__tests__/oauth2-credential.controller.test.ts @@ -1,5 +1,6 @@ import type { CredentialsEntity } from '@n8n/db'; import type { User } from '@n8n/db'; +import { CredentialsRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import Csrf from 'csrf'; import { type Response } from 'express'; @@ -12,7 +13,6 @@ import { CREDENTIAL_BLANKING_VALUE, Time } from '@/constants'; import { OAuth2CredentialController } from '@/controllers/oauth/oauth2-credential.controller'; import { CredentialsFinderService } from '@/credentials/credentials-finder.service'; import { CredentialsHelper } from '@/credentials-helper'; -import { CredentialsRepository } from '@/databases/repositories/credentials.repository'; import { VariablesService } from '@/environments.ee/variables/variables.service.ee'; import { BadRequestError } from '@/errors/response-errors/bad-request.error'; import { NotFoundError } from '@/errors/response-errors/not-found.error'; diff --git a/packages/cli/src/controllers/oauth/abstract-oauth.controller.ts b/packages/cli/src/controllers/oauth/abstract-oauth.controller.ts index ad6c76caaf..dc819871fd 100644 --- a/packages/cli/src/controllers/oauth/abstract-oauth.controller.ts +++ b/packages/cli/src/controllers/oauth/abstract-oauth.controller.ts @@ -1,5 +1,6 @@ import { GlobalConfig } from '@n8n/config'; import type { CredentialsEntity, ICredentialsDb } from '@n8n/db'; +import { CredentialsRepository } from '@n8n/db'; import { Service } from '@n8n/di'; import Csrf from 'csrf'; import type { Response } from 'express'; @@ -10,7 +11,6 @@ import { jsonParse, UnexpectedError } from 'n8n-workflow'; import { RESPONSE_ERROR_MESSAGES, Time } from '@/constants'; import { CredentialsFinderService } from '@/credentials/credentials-finder.service'; import { CredentialsHelper } from '@/credentials-helper'; -import { CredentialsRepository } from '@/databases/repositories/credentials.repository'; import { AuthError } from '@/errors/response-errors/auth.error'; import { BadRequestError } from '@/errors/response-errors/bad-request.error'; import { NotFoundError } from '@/errors/response-errors/not-found.error'; diff --git a/packages/cli/src/credentials-helper.ts b/packages/cli/src/credentials-helper.ts index 00ecee8770..96560f94b6 100644 --- a/packages/cli/src/credentials-helper.ts +++ b/packages/cli/src/credentials-helper.ts @@ -3,6 +3,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/no-unsafe-return */ import type { CredentialsEntity, ICredentialsDb } from '@n8n/db'; +import { CredentialsRepository } from '@n8n/db'; import { Service } from '@n8n/di'; // eslint-disable-next-line n8n-local-rules/misplaced-n8n-typeorm-import import { In } from '@n8n/typeorm'; @@ -31,7 +32,6 @@ import { ICredentialsHelper, NodeHelpers, Workflow, UnexpectedError } from 'n8n- import { CredentialTypes } from '@/credential-types'; import { CredentialsOverwrites } from '@/credentials-overwrites'; -import { CredentialsRepository } from '@/databases/repositories/credentials.repository'; import { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository'; import { RESPONSE_ERROR_MESSAGES } from './constants'; diff --git a/packages/cli/src/credentials/__tests__/credentials.service.test.ts b/packages/cli/src/credentials/__tests__/credentials.service.test.ts index 7c18022d38..637a201b0b 100644 --- a/packages/cli/src/credentials/__tests__/credentials.service.test.ts +++ b/packages/cli/src/credentials/__tests__/credentials.service.test.ts @@ -1,4 +1,5 @@ import type { CredentialsEntity } from '@n8n/db'; +import type { CredentialsRepository } from '@n8n/db'; import { mock } from 'jest-mock-extended'; import { CREDENTIAL_ERRORS, CredentialDataError, Credentials, type ErrorReporter } from 'n8n-core'; import { CREDENTIAL_EMPTY_VALUE, type ICredentialType } from 'n8n-workflow'; @@ -6,7 +7,6 @@ import { CREDENTIAL_EMPTY_VALUE, type ICredentialType } from 'n8n-workflow'; import { CREDENTIAL_BLANKING_VALUE } from '@/constants'; import type { CredentialTypes } from '@/credential-types'; import { CredentialsService } from '@/credentials/credentials.service'; -import type { CredentialsRepository } from '@/databases/repositories/credentials.repository'; describe('CredentialsService', () => { const credType = mock({ diff --git a/packages/cli/src/credentials/credentials-finder.service.ts b/packages/cli/src/credentials/credentials-finder.service.ts index c134a6848a..19e1d49882 100644 --- a/packages/cli/src/credentials/credentials-finder.service.ts +++ b/packages/cli/src/credentials/credentials-finder.service.ts @@ -1,5 +1,6 @@ import type { ProjectRole } from '@n8n/api-types'; import type { CredentialsEntity, SharedCredentials, CredentialSharingRole, User } from '@n8n/db'; +import { CredentialsRepository } from '@n8n/db'; import { Service } from '@n8n/di'; import type { Scope } from '@n8n/permissions'; // eslint-disable-next-line n8n-local-rules/misplaced-n8n-typeorm-import @@ -7,7 +8,6 @@ import type { EntityManager, FindOptionsWhere } from '@n8n/typeorm'; // eslint-disable-next-line n8n-local-rules/misplaced-n8n-typeorm-import import { In } from '@n8n/typeorm'; -import { CredentialsRepository } from '@/databases/repositories/credentials.repository'; import { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository'; import { RoleService } from '@/services/role.service'; diff --git a/packages/cli/src/credentials/credentials.service.ts b/packages/cli/src/credentials/credentials.service.ts index 411a581e52..b716aed302 100644 --- a/packages/cli/src/credentials/credentials.service.ts +++ b/packages/cli/src/credentials/credentials.service.ts @@ -1,6 +1,6 @@ import type { CreateCredentialDto } from '@n8n/api-types'; import type { Project, User, ICredentialsDb, ScopesField } from '@n8n/db'; -import { CredentialsEntity, SharedCredentials } from '@n8n/db'; +import { CredentialsEntity, SharedCredentials, CredentialsRepository } from '@n8n/db'; import { Service } from '@n8n/di'; import type { Scope } from '@n8n/permissions'; // eslint-disable-next-line n8n-local-rules/misplaced-n8n-typeorm-import @@ -22,7 +22,6 @@ import { CREDENTIAL_EMPTY_VALUE, deepCopy, NodeHelpers, UnexpectedError } from ' import { CREDENTIAL_BLANKING_VALUE } from '@/constants'; import { CredentialTypes } from '@/credential-types'; import { createCredentialsFromCredentialsEntity } from '@/credentials-helper'; -import { CredentialsRepository } from '@/databases/repositories/credentials.repository'; import { ProjectRepository } from '@/databases/repositories/project.repository'; import { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository'; import { UserRepository } from '@/databases/repositories/user.repository'; diff --git a/packages/cli/src/databases/repositories/__tests__/credentials.repository.test.ts b/packages/cli/src/databases/repositories/__tests__/credentials.repository.test.ts index f8b305581a..332d2d9476 100644 --- a/packages/cli/src/databases/repositories/__tests__/credentials.repository.test.ts +++ b/packages/cli/src/databases/repositories/__tests__/credentials.repository.test.ts @@ -1,11 +1,10 @@ import { CredentialsEntity } from '@n8n/db'; +import { CredentialsRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import { mock } from 'jest-mock-extended'; import { mockEntityManager } from '@test/mocking'; -import { CredentialsRepository } from '../credentials.repository'; - const entityManager = mockEntityManager(CredentialsEntity); const repository = Container.get(CredentialsRepository); diff --git a/packages/cli/src/databases/repositories/__tests__/execution.repository.test.ts b/packages/cli/src/databases/repositories/__tests__/execution.repository.test.ts index 21bf7a22b9..23b1040881 100644 --- a/packages/cli/src/databases/repositories/__tests__/execution.repository.test.ts +++ b/packages/cli/src/databases/repositories/__tests__/execution.repository.test.ts @@ -2,6 +2,7 @@ import { GlobalConfig } from '@n8n/config'; import type { SqliteConfig } from '@n8n/config/src/configs/database.config'; import type { IExecutionResponse } from '@n8n/db'; import { ExecutionEntity } from '@n8n/db'; +import { ExecutionRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import type { SelectQueryBuilder } from '@n8n/typeorm'; import { Not, LessThanOrEqual } from '@n8n/typeorm'; @@ -10,7 +11,6 @@ import { BinaryDataService } from 'n8n-core'; import type { IRunExecutionData, IWorkflowBase } from 'n8n-workflow'; import { nanoid } from 'nanoid'; -import { ExecutionRepository } from '@/databases/repositories/execution.repository'; import { mockInstance, mockEntityManager } from '@test/mocking'; describe('ExecutionRepository', () => { diff --git a/packages/cli/src/databases/repositories/__tests__/folder.repository.test.ts b/packages/cli/src/databases/repositories/__tests__/folder.repository.test.ts index 6cc52d24ab..f0daa8db33 100644 --- a/packages/cli/src/databases/repositories/__tests__/folder.repository.test.ts +++ b/packages/cli/src/databases/repositories/__tests__/folder.repository.test.ts @@ -22,7 +22,7 @@ describe('FolderRepository', () => { }); afterEach(async () => { - await testDb.truncate(['Folder', 'Tag']); + await testDb.truncate(['Folder', 'TagEntity']); }); afterAll(async () => { diff --git a/packages/cli/src/environments.ee/source-control/source-control-import.service.ee.ts b/packages/cli/src/environments.ee/source-control/source-control-import.service.ee.ts index 47698bdd25..ebb3aa1343 100644 --- a/packages/cli/src/environments.ee/source-control/source-control-import.service.ee.ts +++ b/packages/cli/src/environments.ee/source-control/source-control-import.service.ee.ts @@ -1,6 +1,6 @@ import type { SourceControlledFile } from '@n8n/api-types'; -import { SharedCredentials } from '@n8n/db'; import type { Variables, Project, TagEntity, User, WorkflowTagMapping } from '@n8n/db'; +import { SharedCredentials, CredentialsRepository } from '@n8n/db'; import { Service } from '@n8n/di'; // eslint-disable-next-line n8n-local-rules/misplaced-n8n-typeorm-import import { In } from '@n8n/typeorm'; @@ -12,7 +12,6 @@ import path from 'path'; import { ActiveWorkflowManager } from '@/active-workflow-manager'; import { CredentialsService } from '@/credentials/credentials.service'; -import { CredentialsRepository } from '@/databases/repositories/credentials.repository'; import { FolderRepository } from '@/databases/repositories/folder.repository'; import { ProjectRepository } from '@/databases/repositories/project.repository'; import { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository'; diff --git a/packages/cli/src/evaluation.ee/test-definition.service.ee.ts b/packages/cli/src/evaluation.ee/test-definition.service.ee.ts index 6c6182f453..607009ea80 100644 --- a/packages/cli/src/evaluation.ee/test-definition.service.ee.ts +++ b/packages/cli/src/evaluation.ee/test-definition.service.ee.ts @@ -1,7 +1,7 @@ import type { MockedNodeItem, TestDefinition } from '@n8n/db'; +import { AnnotationTagRepository } from '@n8n/db'; import { Service } from '@n8n/di'; -import { AnnotationTagRepository } from '@/databases/repositories/annotation-tag.repository.ee'; import { TestDefinitionRepository } from '@/databases/repositories/test-definition.repository.ee'; import { BadRequestError } from '@/errors/response-errors/bad-request.error'; import { NotFoundError } from '@/errors/response-errors/not-found.error'; diff --git a/packages/cli/src/evaluation.ee/test-runner/__tests__/test-runner.service.ee.test.ts b/packages/cli/src/evaluation.ee/test-runner/__tests__/test-runner.service.ee.test.ts index 7f7875b305..1c6f8c1bbc 100644 --- a/packages/cli/src/evaluation.ee/test-runner/__tests__/test-runner.service.ee.test.ts +++ b/packages/cli/src/evaluation.ee/test-runner/__tests__/test-runner.service.ee.test.ts @@ -3,6 +3,7 @@ import type { ExecutionEntity } from '@n8n/db'; import type { TestDefinition } from '@n8n/db'; import type { TestMetric } from '@n8n/db'; import type { TestRun } from '@n8n/db'; +import type { ExecutionRepository } from '@n8n/db'; import type { SelectQueryBuilder } from '@n8n/typeorm'; import { stringify } from 'flatted'; import { readFileSync } from 'fs'; @@ -14,7 +15,6 @@ import path from 'path'; import type { ActiveExecutions } from '@/active-executions'; import config from '@/config'; -import type { ExecutionRepository } from '@/databases/repositories/execution.repository'; import type { TestCaseExecutionRepository } from '@/databases/repositories/test-case-execution.repository.ee'; import type { TestMetricRepository } from '@/databases/repositories/test-metric.repository.ee'; import type { TestRunRepository } from '@/databases/repositories/test-run.repository.ee'; diff --git a/packages/cli/src/evaluation.ee/test-runner/test-runner.service.ee.ts b/packages/cli/src/evaluation.ee/test-runner/test-runner.service.ee.ts index 2aca1afed7..c9ac32647e 100644 --- a/packages/cli/src/evaluation.ee/test-runner/test-runner.service.ee.ts +++ b/packages/cli/src/evaluation.ee/test-runner/test-runner.service.ee.ts @@ -1,4 +1,5 @@ import type { User, ExecutionEntity, MockedNodeItem, TestDefinition, TestRun } from '@n8n/db'; +import { ExecutionRepository } from '@n8n/db'; import { Service } from '@n8n/di'; import { parse } from 'flatted'; import difference from 'lodash/difference'; @@ -17,7 +18,6 @@ import assert from 'node:assert'; import { ActiveExecutions } from '@/active-executions'; import config from '@/config'; import { EVALUATION_METRICS_NODE } from '@/constants'; -import { ExecutionRepository } from '@/databases/repositories/execution.repository'; import { TestCaseExecutionRepository } from '@/databases/repositories/test-case-execution.repository.ee'; import { TestMetricRepository } from '@/databases/repositories/test-metric.repository.ee'; import { TestRunRepository } from '@/databases/repositories/test-run.repository.ee'; diff --git a/packages/cli/src/eventbus/message-event-bus-destination/message-event-bus-destination.ee.ts b/packages/cli/src/eventbus/message-event-bus-destination/message-event-bus-destination.ee.ts index 6f990a5cfb..81d2cbdfda 100644 --- a/packages/cli/src/eventbus/message-event-bus-destination/message-event-bus-destination.ee.ts +++ b/packages/cli/src/eventbus/message-event-bus-destination/message-event-bus-destination.ee.ts @@ -1,10 +1,10 @@ +import { EventDestinationsRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import { Logger } from 'n8n-core'; import type { INodeCredentials, MessageEventBusDestinationOptions } from 'n8n-workflow'; import { MessageEventBusDestinationTypeNames } from 'n8n-workflow'; import { v4 as uuid } from 'uuid'; -import { EventDestinationsRepository } from '@/databases/repositories/event-destinations.repository'; import { License } from '@/license'; import type { EventMessageTypes } from '../event-message-classes'; diff --git a/packages/cli/src/eventbus/message-event-bus/message-event-bus.ts b/packages/cli/src/eventbus/message-event-bus/message-event-bus.ts index 22a974f5ee..ac352f5bdf 100644 --- a/packages/cli/src/eventbus/message-event-bus/message-event-bus.ts +++ b/packages/cli/src/eventbus/message-event-bus/message-event-bus.ts @@ -1,4 +1,5 @@ import { GlobalConfig } from '@n8n/config'; +import { EventDestinationsRepository, ExecutionRepository } from '@n8n/db'; import { Service } from '@n8n/di'; // eslint-disable-next-line n8n-local-rules/misplaced-n8n-typeorm-import import type { DeleteResult } from '@n8n/typeorm'; @@ -10,8 +11,6 @@ import { Logger } from 'n8n-core'; import type { MessageEventBusDestinationOptions } from 'n8n-workflow'; import config from '@/config'; -import { EventDestinationsRepository } from '@/databases/repositories/event-destinations.repository'; -import { ExecutionRepository } from '@/databases/repositories/execution.repository'; import { WorkflowRepository } from '@/databases/repositories/workflow.repository'; import { License } from '@/license'; import { Publisher } from '@/scaling/pubsub/publisher.service'; diff --git a/packages/cli/src/events/__tests__/telemetry-event-relay.test.ts b/packages/cli/src/events/__tests__/telemetry-event-relay.test.ts index 87c0686075..e78c163a43 100644 --- a/packages/cli/src/events/__tests__/telemetry-event-relay.test.ts +++ b/packages/cli/src/events/__tests__/telemetry-event-relay.test.ts @@ -2,13 +2,13 @@ import type { GlobalConfig } from '@n8n/config'; import type { CredentialsEntity } from '@n8n/db'; import type { WorkflowEntity } from '@n8n/db'; import type { IWorkflowDb } from '@n8n/db'; +import type { CredentialsRepository } from '@n8n/db'; import { mock } from 'jest-mock-extended'; import { type BinaryDataConfig, InstanceSettings } from 'n8n-core'; import type { INode, INodesGraphResult } from 'n8n-workflow'; import { NodeApiError, TelemetryHelpers, type IRun, type IWorkflowBase } from 'n8n-workflow'; import { N8N_VERSION } from '@/constants'; -import type { CredentialsRepository } from '@/databases/repositories/credentials.repository'; import type { ProjectRelationRepository } from '@/databases/repositories/project-relation.repository'; import type { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository'; import type { WorkflowRepository } from '@/databases/repositories/workflow.repository'; diff --git a/packages/cli/src/events/relays/telemetry.event-relay.ts b/packages/cli/src/events/relays/telemetry.event-relay.ts index c75342ac5d..d7f7b43ce4 100644 --- a/packages/cli/src/events/relays/telemetry.event-relay.ts +++ b/packages/cli/src/events/relays/telemetry.event-relay.ts @@ -1,4 +1,5 @@ import { GlobalConfig } from '@n8n/config'; +import { CredentialsRepository } from '@n8n/db'; import { Service } from '@n8n/di'; import { snakeCase } from 'change-case'; import { BinaryDataConfig, InstanceSettings } from 'n8n-core'; @@ -9,7 +10,6 @@ import { get as pslGet } from 'psl'; import config from '@/config'; import { N8N_VERSION } from '@/constants'; -import { CredentialsRepository } from '@/databases/repositories/credentials.repository'; import { ProjectRelationRepository } from '@/databases/repositories/project-relation.repository'; import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository'; import { WorkflowRepository } from '@/databases/repositories/workflow.repository'; diff --git a/packages/cli/src/execution-lifecycle/__tests__/execution-lifecycle-hooks.test.ts b/packages/cli/src/execution-lifecycle/__tests__/execution-lifecycle-hooks.test.ts index 744b754e01..cfb2e47ca4 100644 --- a/packages/cli/src/execution-lifecycle/__tests__/execution-lifecycle-hooks.test.ts +++ b/packages/cli/src/execution-lifecycle/__tests__/execution-lifecycle-hooks.test.ts @@ -1,4 +1,5 @@ import type { Project } from '@n8n/db'; +import { ExecutionRepository } from '@n8n/db'; import { stringify } from 'flatted'; import { mock } from 'jest-mock-extended'; import { @@ -22,7 +23,6 @@ import type { ITaskStartedData, } from 'n8n-workflow'; -import { ExecutionRepository } from '@/databases/repositories/execution.repository'; import { EventService } from '@/events/event.service'; import { ExternalHooks } from '@/external-hooks'; import { Push } from '@/push'; diff --git a/packages/cli/src/execution-lifecycle/__tests__/save-execution-progress.test.ts b/packages/cli/src/execution-lifecycle/__tests__/save-execution-progress.test.ts index b5c0eb2527..999f41b919 100644 --- a/packages/cli/src/execution-lifecycle/__tests__/save-execution-progress.test.ts +++ b/packages/cli/src/execution-lifecycle/__tests__/save-execution-progress.test.ts @@ -1,10 +1,10 @@ import type { IExecutionResponse } from '@n8n/db'; +import { ExecutionRepository } from '@n8n/db'; import { mock } from 'jest-mock-extended'; import { ErrorReporter } from 'n8n-core'; import { Logger } from 'n8n-core'; import type { IRunExecutionData, ITaskData } from 'n8n-workflow'; -import { ExecutionRepository } from '@/databases/repositories/execution.repository'; import { mockInstance } from '@test/mocking'; import { saveExecutionProgress } from '../save-execution-progress'; diff --git a/packages/cli/src/execution-lifecycle/execution-lifecycle-hooks.ts b/packages/cli/src/execution-lifecycle/execution-lifecycle-hooks.ts index b2630d6c33..b7be72be39 100644 --- a/packages/cli/src/execution-lifecycle/execution-lifecycle-hooks.ts +++ b/packages/cli/src/execution-lifecycle/execution-lifecycle-hooks.ts @@ -1,3 +1,4 @@ +import { ExecutionRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import { stringify } from 'flatted'; import { ErrorReporter, Logger, InstanceSettings, ExecutionLifecycleHooks } from 'n8n-core'; @@ -7,7 +8,6 @@ import type { IWorkflowExecutionDataProcess, } from 'n8n-workflow'; -import { ExecutionRepository } from '@/databases/repositories/execution.repository'; import { EventService } from '@/events/event.service'; import { ExternalHooks } from '@/external-hooks'; import { ModuleRegistry } from '@/modules/module-registry'; diff --git a/packages/cli/src/execution-lifecycle/save-execution-progress.ts b/packages/cli/src/execution-lifecycle/save-execution-progress.ts index 78f61ff98f..c97645b0ab 100644 --- a/packages/cli/src/execution-lifecycle/save-execution-progress.ts +++ b/packages/cli/src/execution-lifecycle/save-execution-progress.ts @@ -1,9 +1,8 @@ +import { ExecutionRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import { ErrorReporter, Logger } from 'n8n-core'; import type { IRunExecutionData, ITaskData } from 'n8n-workflow'; -import { ExecutionRepository } from '@/databases/repositories/execution.repository'; - export async function saveExecutionProgress( workflowId: string, executionId: string, diff --git a/packages/cli/src/execution-lifecycle/shared/shared-hook-functions.ts b/packages/cli/src/execution-lifecycle/shared/shared-hook-functions.ts index 8a42d44532..a3a314f9e5 100644 --- a/packages/cli/src/execution-lifecycle/shared/shared-hook-functions.ts +++ b/packages/cli/src/execution-lifecycle/shared/shared-hook-functions.ts @@ -1,10 +1,10 @@ import type { IExecutionDb } from '@n8n/db'; +import { ExecutionRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import pick from 'lodash/pick'; import { Logger } from 'n8n-core'; import { ensureError, type ExecutionStatus, type IRun, type IWorkflowBase } from 'n8n-workflow'; -import { ExecutionRepository } from '@/databases/repositories/execution.repository'; import type { UpdateExecutionPayload } from '@/interfaces'; import { ExecutionMetadataService } from '@/services/execution-metadata.service'; import { isWorkflowIdValid } from '@/utils'; diff --git a/packages/cli/src/executions/__tests__/execution-recovery.service.test.ts b/packages/cli/src/executions/__tests__/execution-recovery.service.test.ts index e0ff5cb2e2..61fdb255ab 100644 --- a/packages/cli/src/executions/__tests__/execution-recovery.service.test.ts +++ b/packages/cli/src/executions/__tests__/execution-recovery.service.test.ts @@ -1,3 +1,4 @@ +import { ExecutionRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import { stringify } from 'flatted'; import { mock } from 'jest-mock-extended'; @@ -6,7 +7,6 @@ import { randomInt } from 'n8n-workflow'; import assert from 'node:assert'; import { ARTIFICIAL_TASK_DATA } from '@/constants'; -import { ExecutionRepository } from '@/databases/repositories/execution.repository'; import { NodeCrashedError } from '@/errors/node-crashed.error'; import { WorkflowCrashedError } from '@/errors/workflow-crashed.error'; import type { EventMessageTypes as EventMessage } from '@/eventbus/event-message-classes'; @@ -46,7 +46,7 @@ describe('ExecutionRecoveryService', () => { afterEach(async () => { jest.restoreAllMocks(); - await testDb.truncate(['Execution', 'ExecutionData', 'Workflow']); + await testDb.truncate(['ExecutionEntity', 'ExecutionData', 'WorkflowEntity']); }); afterAll(async () => { diff --git a/packages/cli/src/executions/__tests__/execution.service.test.ts b/packages/cli/src/executions/__tests__/execution.service.test.ts index ffe5ee9288..7122e6cb18 100644 --- a/packages/cli/src/executions/__tests__/execution.service.test.ts +++ b/packages/cli/src/executions/__tests__/execution.service.test.ts @@ -1,11 +1,11 @@ import type { IExecutionResponse } from '@n8n/db'; +import type { ExecutionRepository } from '@n8n/db'; import { mock } from 'jest-mock-extended'; import { WorkflowOperationError } from 'n8n-workflow'; import type { ActiveExecutions } from '@/active-executions'; import type { ConcurrencyControlService } from '@/concurrency/concurrency-control.service'; import config from '@/config'; -import type { ExecutionRepository } from '@/databases/repositories/execution.repository'; import { AbortedExecutionRetryError } from '@/errors/aborted-execution-retry.error'; import { MissingExecutionStopError } from '@/errors/missing-execution-stop.error'; import { ExecutionService } from '@/executions/execution.service'; diff --git a/packages/cli/src/executions/execution-recovery.service.ts b/packages/cli/src/executions/execution-recovery.service.ts index 15b6c24cdf..701277a696 100644 --- a/packages/cli/src/executions/execution-recovery.service.ts +++ b/packages/cli/src/executions/execution-recovery.service.ts @@ -1,4 +1,5 @@ import type { IExecutionResponse } from '@n8n/db'; +import { ExecutionRepository } from '@n8n/db'; import { Service } from '@n8n/di'; import type { DateTime } from 'luxon'; import { InstanceSettings, Logger } from 'n8n-core'; @@ -6,7 +7,6 @@ import { sleep } from 'n8n-workflow'; import type { IRun, ITaskData } from 'n8n-workflow'; import { ARTIFICIAL_TASK_DATA } from '@/constants'; -import { ExecutionRepository } from '@/databases/repositories/execution.repository'; import { NodeCrashedError } from '@/errors/node-crashed.error'; import { WorkflowCrashedError } from '@/errors/workflow-crashed.error'; import { getLifecycleHooksForRegularMain } from '@/execution-lifecycle/execution-lifecycle-hooks'; diff --git a/packages/cli/src/executions/execution.service.ts b/packages/cli/src/executions/execution.service.ts index 4f2d7d5df7..f1f5e26385 100644 --- a/packages/cli/src/executions/execution.service.ts +++ b/packages/cli/src/executions/execution.service.ts @@ -1,5 +1,16 @@ import { GlobalConfig } from '@n8n/config'; -import type { User, CreateExecutionPayload, ExecutionSummaries, IExecutionResponse } from '@n8n/db'; +import type { + User, + CreateExecutionPayload, + ExecutionSummaries, + IExecutionResponse, + IGetExecutionsQueryFilter, +} from '@n8n/db'; +import { + ExecutionAnnotationRepository, + ExecutionRepository, + AnnotationTagMappingRepository, +} from '@n8n/db'; import { Service } from '@n8n/di'; import { validate as jsonSchemaValidate } from 'jsonschema'; import { Logger } from 'n8n-core'; @@ -23,10 +34,6 @@ import { import { ActiveExecutions } from '@/active-executions'; import { ConcurrencyControlService } from '@/concurrency/concurrency-control.service'; import config from '@/config'; -import { AnnotationTagMappingRepository } from '@/databases/repositories/annotation-tag-mapping.repository.ee'; -import { ExecutionAnnotationRepository } from '@/databases/repositories/execution-annotation.repository'; -import { ExecutionRepository } from '@/databases/repositories/execution.repository'; -import type { IGetExecutionsQueryFilter } from '@/databases/repositories/execution.repository'; import { WorkflowRepository } from '@/databases/repositories/workflow.repository'; import { AbortedExecutionRetryError } from '@/errors/aborted-execution-retry.error'; import { MissingExecutionStopError } from '@/errors/missing-execution-stop.error'; diff --git a/packages/cli/src/external-hooks.ts b/packages/cli/src/external-hooks.ts index 1afb43264d..d8e4fa4168 100644 --- a/packages/cli/src/external-hooks.ts +++ b/packages/cli/src/external-hooks.ts @@ -2,6 +2,7 @@ import type { FrontendSettings, UserUpdateRequestDto } from '@n8n/api-types'; import type { ClientOAuth2Options } from '@n8n/client-oauth2'; import { GlobalConfig } from '@n8n/config'; import type { TagEntity, User, ICredentialsDb, PublicUser } from '@n8n/db'; +import { CredentialsRepository } from '@n8n/db'; import { Service } from '@n8n/di'; import { ErrorReporter, Logger } from 'n8n-core'; import type { IRun, IWorkflowBase, Workflow, WorkflowExecuteMode } from 'n8n-workflow'; @@ -10,7 +11,6 @@ import type clientOAuth1 from 'oauth-1.0a'; import type { AbstractServer } from '@/abstract-server'; import type { Config } from '@/config'; -import { CredentialsRepository } from '@/databases/repositories/credentials.repository'; import { SettingsRepository } from '@/databases/repositories/settings.repository'; import { UserRepository } from '@/databases/repositories/user.repository'; import { WorkflowRepository } from '@/databases/repositories/workflow.repository'; diff --git a/packages/cli/src/ldap.ee/__tests__/ldap.service.test.ts b/packages/cli/src/ldap.ee/__tests__/ldap.service.test.ts index 768697c002..7577addacc 100644 --- a/packages/cli/src/ldap.ee/__tests__/ldap.service.test.ts +++ b/packages/cli/src/ldap.ee/__tests__/ldap.service.test.ts @@ -1,4 +1,5 @@ import type { Settings } from '@n8n/db'; +import { AuthIdentityRepository } from '@n8n/db'; import { QueryFailedError } from '@n8n/typeorm'; import { mock } from 'jest-mock-extended'; import { Client } from 'ldapts'; @@ -6,7 +7,6 @@ import type { Cipher } from 'n8n-core'; import { randomString } from 'n8n-workflow'; import config from '@/config'; -import { AuthIdentityRepository } from '@/databases/repositories/auth-identity.repository'; import { SettingsRepository } from '@/databases/repositories/settings.repository'; import type { EventService } from '@/events/event.service'; import { mockInstance, mockLogger } from '@test/mocking'; diff --git a/packages/cli/src/ldap.ee/helpers.ee.ts b/packages/cli/src/ldap.ee/helpers.ee.ts index b2048298a7..972ef4322b 100644 --- a/packages/cli/src/ldap.ee/helpers.ee.ts +++ b/packages/cli/src/ldap.ee/helpers.ee.ts @@ -1,5 +1,10 @@ -import { AuthIdentity, User } from '@n8n/db'; import type { AuthProviderSyncHistory } from '@n8n/db'; +import { + AuthIdentity, + User, + AuthIdentityRepository, + AuthProviderSyncHistoryRepository, +} from '@n8n/db'; import { Container } from '@n8n/di'; import { validate } from 'jsonschema'; import type { Entry as LdapUser } from 'ldapts'; @@ -7,8 +12,6 @@ import { Filter } from 'ldapts/filters/Filter'; import { randomString } from 'n8n-workflow'; import config from '@/config'; -import { AuthIdentityRepository } from '@/databases/repositories/auth-identity.repository'; -import { AuthProviderSyncHistoryRepository } from '@/databases/repositories/auth-provider-sync-history.repository'; import { UserRepository } from '@/databases/repositories/user.repository'; import * as Db from '@/db'; import { License } from '@/license'; diff --git a/packages/cli/src/mfa/mfa.service.ts b/packages/cli/src/mfa/mfa.service.ts index 19bc9aead0..82d02a3055 100644 --- a/packages/cli/src/mfa/mfa.service.ts +++ b/packages/cli/src/mfa/mfa.service.ts @@ -1,8 +1,8 @@ +import { AuthUserRepository } from '@n8n/db'; import { Service } from '@n8n/di'; import { Cipher } from 'n8n-core'; import { v4 as uuid } from 'uuid'; -import { AuthUserRepository } from '@/databases/repositories/auth-user.repository'; import { InvalidMfaCodeError } from '@/errors/response-errors/invalid-mfa-code.error'; import { InvalidMfaRecoveryCodeError } from '@/errors/response-errors/invalid-mfa-recovery-code-error'; diff --git a/packages/cli/src/modules/insights/__tests__/insights-collection.service.test.ts b/packages/cli/src/modules/insights/__tests__/insights-collection.service.test.ts index 12f2a31efc..2cb1fec1ae 100644 --- a/packages/cli/src/modules/insights/__tests__/insights-collection.service.test.ts +++ b/packages/cli/src/modules/insights/__tests__/insights-collection.service.test.ts @@ -28,7 +28,7 @@ import { InsightsConfig } from '../insights.config'; // Initialize DB once for all tests beforeAll(async () => { - await testDb.init(['insights']); + await testDb.init(); }); beforeEach(async () => { @@ -36,7 +36,7 @@ beforeEach(async () => { 'InsightsRaw', 'InsightsByPeriod', 'InsightsMetadata', - 'Workflow', + 'WorkflowEntity', 'Project', ]); }); diff --git a/packages/cli/src/modules/insights/__tests__/insights-compaction.service.test.ts b/packages/cli/src/modules/insights/__tests__/insights-compaction.service.test.ts index 3478a14718..e50ea58782 100644 --- a/packages/cli/src/modules/insights/__tests__/insights-compaction.service.test.ts +++ b/packages/cli/src/modules/insights/__tests__/insights-compaction.service.test.ts @@ -28,7 +28,7 @@ if (dbType === 'sqlite' && !globalConfig.database.sqlite.poolSize) { } else { // Initialize DB once for all tests beforeAll(async () => { - await testDb.init(['insights']); + await testDb.init(); }); beforeEach(async () => { @@ -36,7 +36,7 @@ if (dbType === 'sqlite' && !globalConfig.database.sqlite.poolSize) { 'InsightsRaw', 'InsightsByPeriod', 'InsightsMetadata', - 'Workflow', + 'WorkflowEntity', 'Project', ]); }); diff --git a/packages/cli/src/modules/insights/__tests__/insights.service.test.ts b/packages/cli/src/modules/insights/__tests__/insights.service.test.ts index 5ed4a7e65d..e5adae0892 100644 --- a/packages/cli/src/modules/insights/__tests__/insights.service.test.ts +++ b/packages/cli/src/modules/insights/__tests__/insights.service.test.ts @@ -19,7 +19,7 @@ import { InsightsService } from '../insights.service'; // Initialize DB once for all tests beforeAll(async () => { - await testDb.init(['insights']); + await testDb.init(); }); beforeEach(async () => { @@ -27,7 +27,7 @@ beforeEach(async () => { 'InsightsRaw', 'InsightsByPeriod', 'InsightsMetadata', - 'Workflow', + 'WorkflowEntity', 'Project', ]); }); diff --git a/packages/cli/src/public-api/v1/handlers/credentials/credentials.service.ts b/packages/cli/src/public-api/v1/handlers/credentials/credentials.service.ts index ffc9d56a2c..01e6bcbcc6 100644 --- a/packages/cli/src/public-api/v1/handlers/credentials/credentials.service.ts +++ b/packages/cli/src/public-api/v1/handlers/credentials/credentials.service.ts @@ -1,5 +1,5 @@ -import { CredentialsEntity, SharedCredentials } from '@n8n/db'; import type { User, ICredentialsDb } from '@n8n/db'; +import { CredentialsEntity, SharedCredentials, CredentialsRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import { Credentials } from 'n8n-core'; import type { @@ -9,7 +9,6 @@ import type { INodePropertyOptions, } from 'n8n-workflow'; -import { CredentialsRepository } from '@/databases/repositories/credentials.repository'; import { ProjectRepository } from '@/databases/repositories/project.repository'; import { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository'; import * as Db from '@/db'; diff --git a/packages/cli/src/public-api/v1/handlers/executions/executions.handler.ts b/packages/cli/src/public-api/v1/handlers/executions/executions.handler.ts index 90ab9323d9..0e873b53da 100644 --- a/packages/cli/src/public-api/v1/handlers/executions/executions.handler.ts +++ b/packages/cli/src/public-api/v1/handlers/executions/executions.handler.ts @@ -1,10 +1,10 @@ +import { ExecutionRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import type express from 'express'; import { replaceCircularReferences } from 'n8n-workflow'; import { ActiveExecutions } from '@/active-executions'; import { ConcurrencyControlService } from '@/concurrency/concurrency-control.service'; -import { ExecutionRepository } from '@/databases/repositories/execution.repository'; import { EventService } from '@/events/event.service'; import type { ExecutionRequest } from '../../../types'; diff --git a/packages/cli/src/scaling/__tests__/job-processor.service.test.ts b/packages/cli/src/scaling/__tests__/job-processor.service.test.ts index 0c957d25d0..c071f2a0c5 100644 --- a/packages/cli/src/scaling/__tests__/job-processor.service.test.ts +++ b/packages/cli/src/scaling/__tests__/job-processor.service.test.ts @@ -1,4 +1,5 @@ import type { IExecutionResponse } from '@n8n/db'; +import type { ExecutionRepository } from '@n8n/db'; import { mock } from 'jest-mock-extended'; import type { Logger } from 'n8n-core'; import { mockInstance } from 'n8n-core/test/utils'; @@ -6,7 +7,6 @@ import type { IPinData, ITaskData, IWorkflowExecuteAdditionalData } from 'n8n-wo import { Workflow, type IRunExecutionData, type WorkflowExecuteMode } from 'n8n-workflow'; import { CredentialsHelper } from '@/credentials-helper'; -import type { ExecutionRepository } from '@/databases/repositories/execution.repository'; import { VariablesService } from '@/environments.ee/variables/variables.service.ee'; import { ExternalHooks } from '@/external-hooks'; import type { ManualExecutionService } from '@/manual-execution.service'; diff --git a/packages/cli/src/scaling/job-processor.ts b/packages/cli/src/scaling/job-processor.ts index 1c54f0dbc4..da1007962c 100644 --- a/packages/cli/src/scaling/job-processor.ts +++ b/packages/cli/src/scaling/job-processor.ts @@ -1,4 +1,5 @@ import type { RunningJobSummary } from '@n8n/api-types'; +import { ExecutionRepository } from '@n8n/db'; import { Service } from '@n8n/di'; import { WorkflowHasIssuesError, @@ -17,7 +18,6 @@ import { BINARY_ENCODING, Workflow, UnexpectedError } from 'n8n-workflow'; import type PCancelable from 'p-cancelable'; import config from '@/config'; -import { ExecutionRepository } from '@/databases/repositories/execution.repository'; import { WorkflowRepository } from '@/databases/repositories/workflow.repository'; import { getLifecycleHooksForScalingWorker } from '@/execution-lifecycle/execution-lifecycle-hooks'; import { ManualExecutionService } from '@/manual-execution.service'; diff --git a/packages/cli/src/scaling/scaling.service.ts b/packages/cli/src/scaling/scaling.service.ts index 0236d96c79..a370f270bb 100644 --- a/packages/cli/src/scaling/scaling.service.ts +++ b/packages/cli/src/scaling/scaling.service.ts @@ -1,4 +1,5 @@ import { GlobalConfig } from '@n8n/config'; +import { ExecutionRepository } from '@n8n/db'; import { OnLeaderStepdown, OnLeaderTakeover, OnShutdown } from '@n8n/decorators'; import { Container, Service } from '@n8n/di'; import { ErrorReporter, InstanceSettings, isObjectLiteral, Logger } from 'n8n-core'; @@ -16,7 +17,6 @@ import assert, { strict } from 'node:assert'; import { ActiveExecutions } from '@/active-executions'; import config from '@/config'; import { HIGHEST_SHUTDOWN_PRIORITY, Time } from '@/constants'; -import { ExecutionRepository } from '@/databases/repositories/execution.repository'; import { EventService } from '@/events/event.service'; import { assertNever } from '@/utils'; diff --git a/packages/cli/src/security-audit/risk-reporters/credentials-risk-reporter.ts b/packages/cli/src/security-audit/risk-reporters/credentials-risk-reporter.ts index cd40dc76b2..7724d07467 100644 --- a/packages/cli/src/security-audit/risk-reporters/credentials-risk-reporter.ts +++ b/packages/cli/src/security-audit/risk-reporters/credentials-risk-reporter.ts @@ -1,10 +1,8 @@ import { SecurityConfig } from '@n8n/config'; +import { CredentialsRepository, ExecutionDataRepository, ExecutionRepository } from '@n8n/db'; import { Service } from '@n8n/di'; import type { IWorkflowBase } from 'n8n-workflow'; -import { CredentialsRepository } from '@/databases/repositories/credentials.repository'; -import { ExecutionDataRepository } from '@/databases/repositories/execution-data.repository'; -import { ExecutionRepository } from '@/databases/repositories/execution.repository'; import { CREDENTIALS_REPORT } from '@/security-audit/constants'; import type { RiskReporter, Risk } from '@/security-audit/types'; diff --git a/packages/cli/src/services/__tests__/execution-metadata.service.test.ts b/packages/cli/src/services/__tests__/execution-metadata.service.test.ts index 309da5a354..022c3eb494 100644 --- a/packages/cli/src/services/__tests__/execution-metadata.service.test.ts +++ b/packages/cli/src/services/__tests__/execution-metadata.service.test.ts @@ -1,6 +1,6 @@ +import { ExecutionMetadataRepository } from '@n8n/db'; import { Container } from '@n8n/di'; -import { ExecutionMetadataRepository } from '@/databases/repositories/execution-metadata.repository'; import { ExecutionMetadataService } from '@/services/execution-metadata.service'; import { mockInstance } from '@test/mocking'; diff --git a/packages/cli/src/services/__tests__/hooks.service.test.ts b/packages/cli/src/services/__tests__/hooks.service.test.ts index e901c2976f..bdc71da141 100644 --- a/packages/cli/src/services/__tests__/hooks.service.test.ts +++ b/packages/cli/src/services/__tests__/hooks.service.test.ts @@ -1,11 +1,11 @@ import type { AuthUser } from '@n8n/db'; +import type { AuthUserRepository } from '@n8n/db'; +import type { CredentialsRepository } from '@n8n/db'; import RudderStack from '@rudderstack/rudder-sdk-node'; import type { Response } from 'express'; import { mock } from 'jest-mock-extended'; import type { AuthService } from '@/auth/auth.service'; -import type { AuthUserRepository } from '@/databases/repositories/auth-user.repository'; -import type { CredentialsRepository } from '@/databases/repositories/credentials.repository'; import type { SettingsRepository } from '@/databases/repositories/settings.repository'; import type { UserRepository } from '@/databases/repositories/user.repository'; import type { WorkflowRepository } from '@/databases/repositories/workflow.repository'; diff --git a/packages/cli/src/services/__tests__/naming.service.test.ts b/packages/cli/src/services/__tests__/naming.service.test.ts index 0466b5ead4..cd6cf516f6 100644 --- a/packages/cli/src/services/__tests__/naming.service.test.ts +++ b/packages/cli/src/services/__tests__/naming.service.test.ts @@ -1,7 +1,7 @@ import type { CredentialsEntity } from '@n8n/db'; import type { WorkflowEntity } from '@n8n/db'; +import { CredentialsRepository } from '@n8n/db'; -import { CredentialsRepository } from '@/databases/repositories/credentials.repository'; import { WorkflowRepository } from '@/databases/repositories/workflow.repository'; import { NamingService } from '@/services/naming.service'; import { mockInstance } from '@test/mocking'; diff --git a/packages/cli/src/services/__tests__/public-api-key.service.test.ts b/packages/cli/src/services/__tests__/public-api-key.service.test.ts index 24c2844c55..3ca5d37d81 100644 --- a/packages/cli/src/services/__tests__/public-api-key.service.test.ts +++ b/packages/cli/src/services/__tests__/public-api-key.service.test.ts @@ -1,3 +1,4 @@ +import { ApiKeyRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import type { ApiKeyScope } from '@n8n/permissions'; import type { Response, NextFunction } from 'express'; @@ -7,7 +8,6 @@ import type { InstanceSettings } from 'n8n-core'; import { randomString } from 'n8n-workflow'; import type { OpenAPIV3 } from 'openapi-types'; -import { ApiKeyRepository } from '@/databases/repositories/api-key.repository'; import { UserRepository } from '@/databases/repositories/user.repository'; import { getConnection } from '@/db'; import type { EventService } from '@/events/event.service'; diff --git a/packages/cli/src/services/annotation-tag.service.ee.ts b/packages/cli/src/services/annotation-tag.service.ee.ts index cb692b3cbd..01fdfa79ee 100644 --- a/packages/cli/src/services/annotation-tag.service.ee.ts +++ b/packages/cli/src/services/annotation-tag.service.ee.ts @@ -1,7 +1,7 @@ import type { AnnotationTagEntity } from '@n8n/db'; +import { AnnotationTagRepository } from '@n8n/db'; import { Service } from '@n8n/di'; -import { AnnotationTagRepository } from '@/databases/repositories/annotation-tag.repository.ee'; import { validateEntity } from '@/generic-helpers'; type IAnnotationTagDb = Pick; diff --git a/packages/cli/src/services/execution-metadata.service.ts b/packages/cli/src/services/execution-metadata.service.ts index 50a76b6bbb..b3ffdff785 100644 --- a/packages/cli/src/services/execution-metadata.service.ts +++ b/packages/cli/src/services/execution-metadata.service.ts @@ -1,8 +1,7 @@ import type { ExecutionMetadata } from '@n8n/db'; +import { ExecutionMetadataRepository } from '@n8n/db'; import { Service } from '@n8n/di'; -import { ExecutionMetadataRepository } from '@/databases/repositories/execution-metadata.repository'; - @Service() export class ExecutionMetadataService { constructor(private readonly executionMetadataRepository: ExecutionMetadataRepository) {} diff --git a/packages/cli/src/services/hooks.service.ts b/packages/cli/src/services/hooks.service.ts index 56669d5313..08b05cca63 100644 --- a/packages/cli/src/services/hooks.service.ts +++ b/packages/cli/src/services/hooks.service.ts @@ -1,4 +1,5 @@ import type { Settings, CredentialsEntity, User, WorkflowEntity, AuthUser } from '@n8n/db'; +import { AuthUserRepository, CredentialsRepository } from '@n8n/db'; import { Service } from '@n8n/di'; // eslint-disable-next-line n8n-local-rules/misplaced-n8n-typeorm-import import type { FindManyOptions, FindOneOptions, FindOptionsWhere } from '@n8n/typeorm'; @@ -7,8 +8,6 @@ import RudderStack, { type constructorOptions } from '@rudderstack/rudder-sdk-no import type { NextFunction, Response } from 'express'; import { AuthService } from '@/auth/auth.service'; -import { AuthUserRepository } from '@/databases/repositories/auth-user.repository'; -import { CredentialsRepository } from '@/databases/repositories/credentials.repository'; import { SettingsRepository } from '@/databases/repositories/settings.repository'; import { UserRepository } from '@/databases/repositories/user.repository'; import { WorkflowRepository } from '@/databases/repositories/workflow.repository'; diff --git a/packages/cli/src/services/import.service.ts b/packages/cli/src/services/import.service.ts index 69111da438..df603c6fdc 100644 --- a/packages/cli/src/services/import.service.ts +++ b/packages/cli/src/services/import.service.ts @@ -1,11 +1,16 @@ import type { TagEntity, ICredentialsDb, IWorkflowDb } from '@n8n/db'; -import { Project, WorkflowEntity, SharedWorkflow, WorkflowTagMapping } from '@n8n/db'; +import { + Project, + WorkflowEntity, + SharedWorkflow, + WorkflowTagMapping, + CredentialsRepository, +} from '@n8n/db'; import { Service } from '@n8n/di'; import { Logger } from 'n8n-core'; import { type INode, type INodeCredentialsDetails, type IWorkflowBase } from 'n8n-workflow'; import { v4 as uuid } from 'uuid'; -import { CredentialsRepository } from '@/databases/repositories/credentials.repository'; import { TagRepository } from '@/databases/repositories/tag.repository'; import * as Db from '@/db'; import { replaceInvalidCredentials } from '@/workflow-helpers'; diff --git a/packages/cli/src/services/naming.service.ts b/packages/cli/src/services/naming.service.ts index 70384ac15a..972252fe8c 100644 --- a/packages/cli/src/services/naming.service.ts +++ b/packages/cli/src/services/naming.service.ts @@ -1,6 +1,6 @@ +import { CredentialsRepository } from '@n8n/db'; import { Service } from '@n8n/di'; -import { CredentialsRepository } from '@/databases/repositories/credentials.repository'; import { WorkflowRepository } from '@/databases/repositories/workflow.repository'; @Service() diff --git a/packages/cli/src/services/pruning/pruning.service.ts b/packages/cli/src/services/pruning/pruning.service.ts index 171b606fab..40cb17bc8a 100644 --- a/packages/cli/src/services/pruning/pruning.service.ts +++ b/packages/cli/src/services/pruning/pruning.service.ts @@ -1,4 +1,5 @@ import { ExecutionsConfig } from '@n8n/config'; +import { ExecutionRepository } from '@n8n/db'; import { OnLeaderStepdown, OnLeaderTakeover, OnShutdown } from '@n8n/decorators'; import { Service } from '@n8n/di'; import { BinaryDataService, InstanceSettings, Logger } from 'n8n-core'; @@ -6,7 +7,6 @@ import { ensureError } from 'n8n-workflow'; import { strict } from 'node:assert'; import { Time } from '@/constants'; -import { ExecutionRepository } from '@/databases/repositories/execution.repository'; import { connectionState as dbConnectionState } from '@/db'; /** diff --git a/packages/cli/src/services/public-api-key.service.ts b/packages/cli/src/services/public-api-key.service.ts index 8613ac03ab..450e2939db 100644 --- a/packages/cli/src/services/public-api-key.service.ts +++ b/packages/cli/src/services/public-api-key.service.ts @@ -1,7 +1,7 @@ import type { UnixTimestamp, UpdateApiKeyRequestDto } from '@n8n/api-types'; import type { CreateApiKeyRequestDto } from '@n8n/api-types/src/dto/api-keys/create-api-key-request.dto'; -import { ApiKey } from '@n8n/db'; import type { User } from '@n8n/db'; +import { ApiKey, ApiKeyRepository } from '@n8n/db'; import { Service } from '@n8n/di'; import type { GlobalRole, ApiKeyScope } from '@n8n/permissions'; // eslint-disable-next-line n8n-local-rules/misplaced-n8n-typeorm-import @@ -10,7 +10,6 @@ import type { NextFunction, Request, Response } from 'express'; import { TokenExpiredError } from 'jsonwebtoken'; import type { OpenAPIV3 } from 'openapi-types'; -import { ApiKeyRepository } from '@/databases/repositories/api-key.repository'; import { UserRepository } from '@/databases/repositories/user.repository'; import { EventService } from '@/events/event.service'; import { getApiKeyScopesForRole, getOwnerOnlyApiKeyScopes } from '@/public-api/permissions.ee'; diff --git a/packages/cli/src/sso.ee/saml/__tests__/saml-helpers.test.ts b/packages/cli/src/sso.ee/saml/__tests__/saml-helpers.test.ts index 76492807f6..c119521d92 100644 --- a/packages/cli/src/sso.ee/saml/__tests__/saml-helpers.test.ts +++ b/packages/cli/src/sso.ee/saml/__tests__/saml-helpers.test.ts @@ -1,8 +1,8 @@ import type { AuthIdentity } from '@n8n/db'; import { generateNanoId } from '@n8n/db'; import { User } from '@n8n/db'; +import { AuthIdentityRepository } from '@n8n/db'; -import { AuthIdentityRepository } from '@/databases/repositories/auth-identity.repository'; import { UserRepository } from '@/databases/repositories/user.repository'; import * as helpers from '@/sso.ee/saml/saml-helpers'; import type { SamlUserAttributes } from '@/sso.ee/saml/types'; diff --git a/packages/cli/src/sso.ee/saml/saml-helpers.ts b/packages/cli/src/sso.ee/saml/saml-helpers.ts index 8b4c338890..28c11095ec 100644 --- a/packages/cli/src/sso.ee/saml/saml-helpers.ts +++ b/packages/cli/src/sso.ee/saml/saml-helpers.ts @@ -1,12 +1,11 @@ import type { SamlAcsDto, SamlPreferences } from '@n8n/api-types'; -import { AuthIdentity } from '@n8n/db'; import type { User } from '@n8n/db'; +import { AuthIdentity, AuthIdentityRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import { randomString } from 'n8n-workflow'; import type { FlowResult } from 'samlify/types/src/flow'; import config from '@/config'; -import { AuthIdentityRepository } from '@/databases/repositories/auth-identity.repository'; import { UserRepository } from '@/databases/repositories/user.repository'; import { AuthError } from '@/errors/response-errors/auth.error'; import { InternalServerError } from '@/errors/response-errors/internal-server.error'; diff --git a/packages/cli/src/wait-tracker.ts b/packages/cli/src/wait-tracker.ts index 848dc919b1..7c738fe940 100644 --- a/packages/cli/src/wait-tracker.ts +++ b/packages/cli/src/wait-tracker.ts @@ -1,10 +1,10 @@ +import { ExecutionRepository } from '@n8n/db'; import { OnLeaderStepdown, OnLeaderTakeover } from '@n8n/decorators'; import { Service } from '@n8n/di'; import { InstanceSettings, Logger } from 'n8n-core'; import { UnexpectedError, type IWorkflowExecutionDataProcess } from 'n8n-workflow'; import { ActiveExecutions } from '@/active-executions'; -import { ExecutionRepository } from '@/databases/repositories/execution.repository'; import { OwnershipService } from '@/services/ownership.service'; import { WorkflowRunner } from '@/workflow-runner'; diff --git a/packages/cli/src/webhooks/__tests__/waiting-forms.test.ts b/packages/cli/src/webhooks/__tests__/waiting-forms.test.ts index e0b80d5c64..745c90b20d 100644 --- a/packages/cli/src/webhooks/__tests__/waiting-forms.test.ts +++ b/packages/cli/src/webhooks/__tests__/waiting-forms.test.ts @@ -1,9 +1,9 @@ import type { IExecutionResponse } from '@n8n/db'; +import type { ExecutionRepository } from '@n8n/db'; import type express from 'express'; import { mock } from 'jest-mock-extended'; import { FORM_NODE_TYPE, WAITING_FORMS_EXECUTION_STATUS, type Workflow } from 'n8n-workflow'; -import type { ExecutionRepository } from '@/databases/repositories/execution.repository'; import { WaitingForms } from '@/webhooks/waiting-forms'; import type { WaitingWebhookRequest } from '../webhook.types'; diff --git a/packages/cli/src/webhooks/__tests__/waiting-webhooks.test.ts b/packages/cli/src/webhooks/__tests__/waiting-webhooks.test.ts index 1b2384310d..c21ff079f6 100644 --- a/packages/cli/src/webhooks/__tests__/waiting-webhooks.test.ts +++ b/packages/cli/src/webhooks/__tests__/waiting-webhooks.test.ts @@ -1,8 +1,8 @@ import type { IExecutionResponse } from '@n8n/db'; +import type { ExecutionRepository } from '@n8n/db'; import type express from 'express'; import { mock } from 'jest-mock-extended'; -import type { ExecutionRepository } from '@/databases/repositories/execution.repository'; import { ConflictError } from '@/errors/response-errors/conflict.error'; import { NotFoundError } from '@/errors/response-errors/not-found.error'; import { WaitingWebhooks } from '@/webhooks/waiting-webhooks'; diff --git a/packages/cli/src/webhooks/waiting-webhooks.ts b/packages/cli/src/webhooks/waiting-webhooks.ts index 932b528b99..6891e63b29 100644 --- a/packages/cli/src/webhooks/waiting-webhooks.ts +++ b/packages/cli/src/webhooks/waiting-webhooks.ts @@ -1,4 +1,5 @@ import type { IExecutionResponse } from '@n8n/db'; +import { ExecutionRepository } from '@n8n/db'; import { Service } from '@n8n/di'; import type express from 'express'; import { Logger } from 'n8n-core'; @@ -11,7 +12,6 @@ import { Workflow, } from 'n8n-workflow'; -import { ExecutionRepository } from '@/databases/repositories/execution.repository'; import { ConflictError } from '@/errors/response-errors/conflict.error'; import { NotFoundError } from '@/errors/response-errors/not-found.error'; import { NodeTypes } from '@/node-types'; diff --git a/packages/cli/src/workflow-execute-additional-data.ts b/packages/cli/src/workflow-execute-additional-data.ts index 5574978a72..db14fd6be1 100644 --- a/packages/cli/src/workflow-execute-additional-data.ts +++ b/packages/cli/src/workflow-execute-additional-data.ts @@ -4,6 +4,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ import type { PushMessage, PushType } from '@n8n/api-types'; import { GlobalConfig } from '@n8n/config'; +import { ExecutionRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import { Logger, WorkflowExecute } from 'n8n-core'; import { UnexpectedError, Workflow } from 'n8n-workflow'; @@ -32,7 +33,6 @@ import type { import { ActiveExecutions } from '@/active-executions'; import { CredentialsHelper } from '@/credentials-helper'; -import { ExecutionRepository } from '@/databases/repositories/execution.repository'; import { WorkflowRepository } from '@/databases/repositories/workflow.repository'; import { EventService } from '@/events/event.service'; import type { AiEventMap, AiEventPayload } from '@/events/maps/ai.event-map'; diff --git a/packages/cli/src/workflow-helpers.ts b/packages/cli/src/workflow-helpers.ts index 42d50ef16f..606137f6b7 100644 --- a/packages/cli/src/workflow-helpers.ts +++ b/packages/cli/src/workflow-helpers.ts @@ -1,3 +1,4 @@ +import { CredentialsRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import type { IDataObject, @@ -8,7 +9,6 @@ import type { } from 'n8n-workflow'; import { v4 as uuid } from 'uuid'; -import { CredentialsRepository } from '@/databases/repositories/credentials.repository'; import { VariablesService } from '@/environments.ee/variables/variables.service.ee'; /** diff --git a/packages/cli/src/workflow-runner.ts b/packages/cli/src/workflow-runner.ts index 6fc680b20c..089715114b 100644 --- a/packages/cli/src/workflow-runner.ts +++ b/packages/cli/src/workflow-runner.ts @@ -2,6 +2,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-shadow */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ +import { ExecutionRepository } from '@n8n/db'; import { Container, Service } from '@n8n/di'; import type { ExecutionLifecycleHooks } from 'n8n-core'; import { ErrorReporter, InstanceSettings, Logger, WorkflowExecute } from 'n8n-core'; @@ -19,7 +20,6 @@ import PCancelable from 'p-cancelable'; import { ActiveExecutions } from '@/active-executions'; import config from '@/config'; -import { ExecutionRepository } from '@/databases/repositories/execution.repository'; import { ExecutionNotFoundError } from '@/errors/execution-not-found-error'; import { MaxStalledCountError } from '@/errors/max-stalled-count.error'; import { diff --git a/packages/cli/src/workflows/workflow-execution.service.ts b/packages/cli/src/workflows/workflow-execution.service.ts index 4ebd08acf2..fa8cc5c799 100644 --- a/packages/cli/src/workflows/workflow-execution.service.ts +++ b/packages/cli/src/workflows/workflow-execution.service.ts @@ -1,5 +1,6 @@ import { GlobalConfig } from '@n8n/config'; import type { Project, User, CreateExecutionPayload } from '@n8n/db'; +import { ExecutionRepository } from '@n8n/db'; import { Service } from '@n8n/di'; import { ErrorReporter, Logger } from 'n8n-core'; import type { @@ -18,7 +19,6 @@ import type { import { SubworkflowOperationError, Workflow } from 'n8n-workflow'; import config from '@/config'; -import { ExecutionRepository } from '@/databases/repositories/execution.repository'; import { WorkflowRepository } from '@/databases/repositories/workflow.repository'; import { ExecutionDataService } from '@/executions/execution-data.service'; import { SubworkflowPolicyChecker } from '@/executions/pre-execution-checks'; diff --git a/packages/cli/src/workflows/workflow.service.ee.ts b/packages/cli/src/workflows/workflow.service.ee.ts index 3b71cd951b..c6f0d01d57 100644 --- a/packages/cli/src/workflows/workflow.service.ee.ts +++ b/packages/cli/src/workflows/workflow.service.ee.ts @@ -1,10 +1,10 @@ -import { Project, SharedWorkflow } from '@n8n/db'; import type { CredentialsEntity, User, WorkflowWithSharingsAndCredentials, WorkflowWithSharingsMetaDataAndCredentials, } from '@n8n/db'; +import { Project, SharedWorkflow, CredentialsRepository } from '@n8n/db'; import { Service } from '@n8n/di'; // eslint-disable-next-line n8n-local-rules/misplaced-n8n-typeorm-import import { In, type EntityManager } from '@n8n/typeorm'; @@ -17,7 +17,6 @@ import { ActiveWorkflowManager } from '@/active-workflow-manager'; import { CredentialsFinderService } from '@/credentials/credentials-finder.service'; import { CredentialsService } from '@/credentials/credentials.service'; import { EnterpriseCredentialsService } from '@/credentials/credentials.service.ee'; -import { CredentialsRepository } from '@/databases/repositories/credentials.repository'; import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository'; import { WorkflowRepository } from '@/databases/repositories/workflow.repository'; import { BadRequestError } from '@/errors/response-errors/bad-request.error'; diff --git a/packages/cli/src/workflows/workflow.service.ts b/packages/cli/src/workflows/workflow.service.ts index 881c7cd901..d7bd1b99dd 100644 --- a/packages/cli/src/workflows/workflow.service.ts +++ b/packages/cli/src/workflows/workflow.service.ts @@ -1,6 +1,6 @@ import { GlobalConfig } from '@n8n/config'; -import { SharedWorkflow } from '@n8n/db'; import type { User, WorkflowEntity, ListQueryDb } from '@n8n/db'; +import { SharedWorkflow, ExecutionRepository } from '@n8n/db'; import { Service } from '@n8n/di'; import type { Scope } from '@n8n/permissions'; // eslint-disable-next-line n8n-local-rules/misplaced-n8n-typeorm-import @@ -16,7 +16,6 @@ import { v4 as uuid } from 'uuid'; import { ActiveWorkflowManager } from '@/active-workflow-manager'; import config from '@/config'; -import { ExecutionRepository } from '@/databases/repositories/execution.repository'; import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository'; import { WorkflowTagMappingRepository } from '@/databases/repositories/workflow-tag-mapping.repository'; import type { WorkflowFolderUnionFull } from '@/databases/repositories/workflow.repository'; diff --git a/packages/cli/test/integration/active-workflow-manager.test.ts b/packages/cli/test/integration/active-workflow-manager.test.ts index bacc24229e..5ebe80af08 100644 --- a/packages/cli/test/integration/active-workflow-manager.test.ts +++ b/packages/cli/test/integration/active-workflow-manager.test.ts @@ -71,7 +71,7 @@ beforeAll(async () => { afterEach(async () => { await activeWorkflowManager.removeAll(); - await testDb.truncate(['Workflow', 'Webhook']); + await testDb.truncate(['WorkflowEntity', 'WebhookEntity']); jest.clearAllMocks(); }); diff --git a/packages/cli/test/integration/ai/ai.api.test.ts b/packages/cli/test/integration/ai/ai.api.test.ts index 2feae69819..e96b24d2cc 100644 --- a/packages/cli/test/integration/ai/ai.api.test.ts +++ b/packages/cli/test/integration/ai/ai.api.test.ts @@ -1,12 +1,12 @@ import type { Project } from '@n8n/db'; import type { User } from '@n8n/db'; +import { CredentialsRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import { randomUUID } from 'crypto'; import { mock } from 'jest-mock-extended'; import { OPEN_AI_API_CREDENTIAL_TYPE } from 'n8n-workflow'; import { FREE_AI_CREDITS_CREDENTIAL_NAME } from '@/constants'; -import { CredentialsRepository } from '@/databases/repositories/credentials.repository'; import { ProjectRepository } from '@/databases/repositories/project.repository'; import { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository'; import { UserRepository } from '@/databases/repositories/user.repository'; @@ -37,7 +37,7 @@ let ownerPersonalProject: Project; let authOwnerAgent: SuperAgentTest; beforeEach(async () => { - await testDb.truncate(['SharedCredentials', 'Credentials']); + await testDb.truncate(['SharedCredentials', 'CredentialsEntity']); owner = await createOwner(); diff --git a/packages/cli/test/integration/api-keys.api.test.ts b/packages/cli/test/integration/api-keys.api.test.ts index 38afe38286..ea06b0c1ad 100644 --- a/packages/cli/test/integration/api-keys.api.test.ts +++ b/packages/cli/test/integration/api-keys.api.test.ts @@ -1,11 +1,11 @@ import type { ApiKeyWithRawValue } from '@n8n/api-types'; import { GlobalConfig } from '@n8n/config'; import type { User } from '@n8n/db'; +import { ApiKeyRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import type { ApiKeyScope } from '@n8n/permissions'; import { mock } from 'jest-mock-extended'; -import { ApiKeyRepository } from '@/databases/repositories/api-key.repository'; import type { License } from '@/license'; import { getApiKeyScopesForRole, getOwnerOnlyApiKeyScopes } from '@/public-api/permissions.ee'; import { PublicApiKeyService } from '@/services/public-api-key.service'; diff --git a/packages/cli/test/integration/commands/credentials.cmd.test.ts b/packages/cli/test/integration/commands/credentials.cmd.test.ts index d8f85a611f..ece85fb720 100644 --- a/packages/cli/test/integration/commands/credentials.cmd.test.ts +++ b/packages/cli/test/integration/commands/credentials.cmd.test.ts @@ -14,7 +14,7 @@ mockInstance(LoadNodesAndCredentials); const command = setupTestCommand(ImportCredentialsCommand); beforeEach(async () => { - await testDb.truncate(['Credentials', 'SharedCredentials', 'User']); + await testDb.truncate(['CredentialsEntity', 'SharedCredentials', 'User']); }); test('import:credentials should import a credential', async () => { diff --git a/packages/cli/test/integration/commands/import.cmd.test.ts b/packages/cli/test/integration/commands/import.cmd.test.ts index 6c1d9d9fde..7eb4566ac1 100644 --- a/packages/cli/test/integration/commands/import.cmd.test.ts +++ b/packages/cli/test/integration/commands/import.cmd.test.ts @@ -14,7 +14,7 @@ mockInstance(LoadNodesAndCredentials); const command = setupTestCommand(ImportWorkflowsCommand); beforeEach(async () => { - await testDb.truncate(['Workflow', 'SharedWorkflow', 'User']); + await testDb.truncate(['WorkflowEntity', 'SharedWorkflow', 'User']); }); test('import:workflow should import active workflow and deactivate it', async () => { diff --git a/packages/cli/test/integration/commands/ldap/reset.test.ts b/packages/cli/test/integration/commands/ldap/reset.test.ts index 11051b9d98..0843001512 100644 --- a/packages/cli/test/integration/commands/ldap/reset.test.ts +++ b/packages/cli/test/integration/commands/ldap/reset.test.ts @@ -1,9 +1,9 @@ +import { CredentialsRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import { EntityNotFoundError } from '@n8n/typeorm'; import { v4 as uuid } from 'uuid'; import { Reset } from '@/commands/ldap/reset'; -import { CredentialsRepository } from '@/databases/repositories/credentials.repository'; import { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository'; import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository'; import { WorkflowRepository } from '@/databases/repositories/workflow.repository'; diff --git a/packages/cli/test/integration/commands/reset.cmd.test.ts b/packages/cli/test/integration/commands/reset.cmd.test.ts index e0c56189a2..8f1511276d 100644 --- a/packages/cli/test/integration/commands/reset.cmd.test.ts +++ b/packages/cli/test/integration/commands/reset.cmd.test.ts @@ -1,8 +1,8 @@ import { CredentialsEntity } from '@n8n/db'; +import { CredentialsRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import { Reset } from '@/commands/user-management/reset'; -import { CredentialsRepository } from '@/databases/repositories/credentials.repository'; import { SettingsRepository } from '@/databases/repositories/settings.repository'; import { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository'; import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository'; diff --git a/packages/cli/test/integration/commands/update/workflow.test.ts b/packages/cli/test/integration/commands/update/workflow.test.ts index 1152eadfbf..899ce97912 100644 --- a/packages/cli/test/integration/commands/update/workflow.test.ts +++ b/packages/cli/test/integration/commands/update/workflow.test.ts @@ -10,7 +10,7 @@ mockInstance(LoadNodesAndCredentials); const command = setupTestCommand(UpdateWorkflowCommand); beforeEach(async () => { - await testDb.truncate(['Workflow']); + await testDb.truncate(['WorkflowEntity']); }); test('update:workflow can activate all workflows', async () => { 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 4c8f492fa2..e1c2d608c5 100644 --- a/packages/cli/test/integration/controllers/oauth/oauth2.api.test.ts +++ b/packages/cli/test/integration/controllers/oauth/oauth2.api.test.ts @@ -38,7 +38,7 @@ describe('OAuth2 API', () => { }); beforeEach(async () => { - await testDb.truncate(['SharedCredentials', 'Credentials']); + await testDb.truncate(['SharedCredentials', 'CredentialsEntity']); credential = await saveCredential( { name: 'Test', diff --git a/packages/cli/test/integration/credentials/credentials.api.ee.test.ts b/packages/cli/test/integration/credentials/credentials.api.ee.test.ts index abb5bedb1b..1d80435ea0 100644 --- a/packages/cli/test/integration/credentials/credentials.api.ee.test.ts +++ b/packages/cli/test/integration/credentials/credentials.api.ee.test.ts @@ -62,7 +62,7 @@ let projectService: ProjectService; let projectRepository: ProjectRepository; beforeEach(async () => { - await testDb.truncate(['SharedCredentials', 'Credentials', 'Project', 'ProjectRelation']); + await testDb.truncate(['SharedCredentials', 'CredentialsEntity', 'Project', 'ProjectRelation']); projectRepository = Container.get(ProjectRepository); projectService = Container.get(ProjectService); diff --git a/packages/cli/test/integration/credentials/credentials.api.test.ts b/packages/cli/test/integration/credentials/credentials.api.test.ts index 36caa1227b..ed2cf95f40 100644 --- a/packages/cli/test/integration/credentials/credentials.api.test.ts +++ b/packages/cli/test/integration/credentials/credentials.api.test.ts @@ -2,6 +2,7 @@ import { GlobalConfig } from '@n8n/config'; import type { Project } from '@n8n/db'; import type { User } from '@n8n/db'; import type { ListQueryDb } from '@n8n/db'; +import { CredentialsRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import type { Scope } from '@sentry/node'; import * as a from 'assert'; @@ -12,7 +13,6 @@ import { randomString } from 'n8n-workflow'; import { CREDENTIAL_BLANKING_VALUE } from '@/constants'; import { CredentialsService } from '@/credentials/credentials.service'; -import { CredentialsRepository } from '@/databases/repositories/credentials.repository'; import { ProjectRepository } from '@/databases/repositories/project.repository'; import { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository'; import { CredentialsTester } from '@/services/credentials-tester.service'; @@ -56,7 +56,7 @@ let projectRepository: ProjectRepository; let sharedCredentialsRepository: SharedCredentialsRepository; beforeEach(async () => { - await testDb.truncate(['SharedCredentials', 'Credentials']); + await testDb.truncate(['SharedCredentials', 'CredentialsEntity']); owner = await createOwner(); member = await createMember(); diff --git a/packages/cli/test/integration/cta.service.test.ts b/packages/cli/test/integration/cta.service.test.ts index e70da54d64..0e19fb5f8b 100644 --- a/packages/cli/test/integration/cta.service.test.ts +++ b/packages/cli/test/integration/cta.service.test.ts @@ -26,7 +26,7 @@ describe('CtaService', () => { describe('getBecomeCreatorCta()', () => { afterEach(async () => { - await testDb.truncate(['Workflow', 'SharedWorkflow']); + await testDb.truncate(['WorkflowEntity', 'SharedWorkflow']); }); test.each([ diff --git a/packages/cli/test/integration/database/repositories/execution.repository.test.ts b/packages/cli/test/integration/database/repositories/execution.repository.test.ts index cb368b511c..fa2064046d 100644 --- a/packages/cli/test/integration/database/repositories/execution.repository.test.ts +++ b/packages/cli/test/integration/database/repositories/execution.repository.test.ts @@ -1,9 +1,8 @@ import { GlobalConfig } from '@n8n/config'; +import { ExecutionDataRepository } from '@n8n/db'; +import { ExecutionRepository } from '@n8n/db'; import { Container } from '@n8n/di'; -import { ExecutionDataRepository } from '@/databases/repositories/execution-data.repository'; -import { ExecutionRepository } from '@/databases/repositories/execution.repository'; - import { createWorkflow } from '../../shared/db/workflows'; import * as testDb from '../../shared/test-db'; @@ -13,7 +12,7 @@ describe('ExecutionRepository', () => { }); beforeEach(async () => { - await testDb.truncate(['Workflow', 'Execution']); + await testDb.truncate(['WorkflowEntity', 'ExecutionEntity']); }); afterAll(async () => { diff --git a/packages/cli/test/integration/database/repositories/project.repository.test.ts b/packages/cli/test/integration/database/repositories/project.repository.test.ts index 1b93da7d69..635b8ae844 100644 --- a/packages/cli/test/integration/database/repositories/project.repository.test.ts +++ b/packages/cli/test/integration/database/repositories/project.repository.test.ts @@ -15,7 +15,7 @@ describe('ProjectRepository', () => { }); beforeEach(async () => { - await testDb.truncate(['User', 'Workflow', 'Project']); + await testDb.truncate(['User', 'WorkflowEntity', 'Project']); }); afterAll(async () => { diff --git a/packages/cli/test/integration/database/repositories/workflow.repository.test.ts b/packages/cli/test/integration/database/repositories/workflow.repository.test.ts index c92dcdde0a..65fe46d806 100644 --- a/packages/cli/test/integration/database/repositories/workflow.repository.test.ts +++ b/packages/cli/test/integration/database/repositories/workflow.repository.test.ts @@ -15,7 +15,7 @@ describe('WorkflowRepository', () => { }); beforeEach(async () => { - await testDb.truncate(['Workflow']); + await testDb.truncate(['WorkflowEntity']); }); afterAll(async () => { diff --git a/packages/cli/test/integration/environments/source-control-import.service.test.ts b/packages/cli/test/integration/environments/source-control-import.service.test.ts index 34ab5a855b..5679fba02d 100644 --- a/packages/cli/test/integration/environments/source-control-import.service.test.ts +++ b/packages/cli/test/integration/environments/source-control-import.service.test.ts @@ -1,4 +1,5 @@ import type { SourceControlledFile } from '@n8n/api-types'; +import { CredentialsRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import { mock } from 'jest-mock-extended'; import { Cipher } from 'n8n-core'; @@ -7,7 +8,6 @@ import * as utils from 'n8n-workflow'; import { nanoid } from 'nanoid'; import fsp from 'node:fs/promises'; -import { CredentialsRepository } from '@/databases/repositories/credentials.repository'; import { FolderRepository } from '@/databases/repositories/folder.repository'; import { ProjectRepository } from '@/databases/repositories/project.repository'; import { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository'; @@ -63,7 +63,7 @@ describe('SourceControlImportService', () => { }); afterEach(async () => { - await testDb.truncate(['Credentials', 'SharedCredentials']); + await testDb.truncate(['CredentialsEntity', 'SharedCredentials']); jest.restoreAllMocks(); }); diff --git a/packages/cli/test/integration/evaluation/test-definitions.api.test.ts b/packages/cli/test/integration/evaluation/test-definitions.api.test.ts index b6e2b8a1df..c0163bfa1d 100644 --- a/packages/cli/test/integration/evaluation/test-definitions.api.test.ts +++ b/packages/cli/test/integration/evaluation/test-definitions.api.test.ts @@ -31,7 +31,7 @@ beforeAll(async () => { }); beforeEach(async () => { - await testDb.truncate(['TestDefinition', 'Workflow', 'AnnotationTag']); + await testDb.truncate(['TestDefinition', 'WorkflowEntity', 'AnnotationTagEntity']); workflowUnderTest = await createWorkflow({ name: 'workflow-under-test' }, ownerShell); workflowUnderTest2 = await createWorkflow({ name: 'workflow-under-test-2' }, ownerShell); diff --git a/packages/cli/test/integration/evaluation/test-runs.api.test.ts b/packages/cli/test/integration/evaluation/test-runs.api.test.ts index 988a87ae1f..2f5864c5ef 100644 --- a/packages/cli/test/integration/evaluation/test-runs.api.test.ts +++ b/packages/cli/test/integration/evaluation/test-runs.api.test.ts @@ -34,7 +34,7 @@ beforeAll(async () => { }); beforeEach(async () => { - await testDb.truncate(['TestDefinition', 'TestRun', 'Workflow', 'SharedWorkflow']); + await testDb.truncate(['TestDefinition', 'TestRun', 'WorkflowEntity', 'SharedWorkflow']); workflowUnderTest = await createWorkflow({ name: 'workflow-under-test' }, ownerShell); diff --git a/packages/cli/test/integration/execution.service.integration.test.ts b/packages/cli/test/integration/execution.service.integration.test.ts index 0e9a1b50af..e00c34eb52 100644 --- a/packages/cli/test/integration/execution.service.integration.test.ts +++ b/packages/cli/test/integration/execution.service.integration.test.ts @@ -1,9 +1,9 @@ import type { ExecutionSummaries } from '@n8n/db'; +import { ExecutionMetadataRepository } from '@n8n/db'; +import { ExecutionRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import { mock } from 'jest-mock-extended'; -import { ExecutionMetadataRepository } from '@/databases/repositories/execution-metadata.repository'; -import { ExecutionRepository } from '@/databases/repositories/execution.repository'; import { WorkflowRepository } from '@/databases/repositories/workflow.repository'; import { ExecutionService } from '@/executions/execution.service'; import { createTeamProject } from '@test-integration/db/projects'; @@ -39,7 +39,7 @@ describe('ExecutionService', () => { }); afterEach(async () => { - await testDb.truncate(['Execution']); + await testDb.truncate(['ExecutionEntity']); }); afterAll(async () => { @@ -609,7 +609,7 @@ describe('ExecutionService', () => { }; afterEach(async () => { - await testDb.truncate(['AnnotationTag', 'ExecutionAnnotation']); + await testDb.truncate(['AnnotationTagEntity', 'ExecutionAnnotation']); }); test('should add and retrieve annotation', async () => { diff --git a/packages/cli/test/integration/executions.controller.test.ts b/packages/cli/test/integration/executions.controller.test.ts index 0b3b8e51ed..0652006b8b 100644 --- a/packages/cli/test/integration/executions.controller.test.ts +++ b/packages/cli/test/integration/executions.controller.test.ts @@ -28,7 +28,7 @@ const saveExecution = async ({ belongingTo }: { belongingTo: User }) => { }; beforeEach(async () => { - await testDb.truncate(['Execution', 'Workflow', 'SharedWorkflow']); + await testDb.truncate(['ExecutionEntity', 'WorkflowEntity', 'SharedWorkflow']); testServer.license.reset(); owner = await createOwner(); member = await createMember(); diff --git a/packages/cli/test/integration/executions/pre-execution-checks/credentials-permission-checker.test.ts b/packages/cli/test/integration/executions/pre-execution-checks/credentials-permission-checker.test.ts index ddc3c79fc7..537e723ffb 100644 --- a/packages/cli/test/integration/executions/pre-execution-checks/credentials-permission-checker.test.ts +++ b/packages/cli/test/integration/executions/pre-execution-checks/credentials-permission-checker.test.ts @@ -81,7 +81,7 @@ beforeAll(async () => { describe('check()', () => { beforeEach(async () => { - await testDb.truncate(['Workflow', 'Credentials']); + await testDb.truncate(['WorkflowEntity', 'CredentialsEntity']); }); afterAll(async () => { diff --git a/packages/cli/test/integration/folder/folder.controller.test.ts b/packages/cli/test/integration/folder/folder.controller.test.ts index f3c3f64a8e..9dad9c96a6 100644 --- a/packages/cli/test/integration/folder/folder.controller.test.ts +++ b/packages/cli/test/integration/folder/folder.controller.test.ts @@ -33,7 +33,7 @@ let folderRepository: FolderRepository; let workflowRepository: WorkflowRepository; beforeEach(async () => { - await testDb.truncate(['Folder', 'SharedWorkflow', 'Tag', 'Project', 'ProjectRelation']); + await testDb.truncate(['Folder', 'SharedWorkflow', 'TagEntity', 'Project', 'ProjectRelation']); projectRepository = Container.get(ProjectRepository); folderRepository = Container.get(FolderRepository); diff --git a/packages/cli/test/integration/import.service.test.ts b/packages/cli/test/integration/import.service.test.ts index d7fba525ea..e389408d22 100644 --- a/packages/cli/test/integration/import.service.test.ts +++ b/packages/cli/test/integration/import.service.test.ts @@ -1,12 +1,12 @@ -import { TagEntity } from '@n8n/db'; import type { Project } from '@n8n/db'; import type { User } from '@n8n/db'; +import { TagEntity } from '@n8n/db'; +import { CredentialsRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import { mock } from 'jest-mock-extended'; import type { INode } from 'n8n-workflow'; import { v4 as uuid } from 'uuid'; -import { CredentialsRepository } from '@/databases/repositories/credentials.repository'; import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository'; import { TagRepository } from '@/databases/repositories/tag.repository'; import { WorkflowRepository } from '@/databases/repositories/workflow.repository'; @@ -45,7 +45,7 @@ describe('ImportService', () => { }); afterEach(async () => { - await testDb.truncate(['Workflow', 'SharedWorkflow', 'Tag', 'WorkflowTagMapping']); + await testDb.truncate(['WorkflowEntity', 'SharedWorkflow', 'TagEntity', 'WorkflowTagMapping']); }); afterAll(async () => { diff --git a/packages/cli/test/integration/ldap/ldap.api.test.ts b/packages/cli/test/integration/ldap/ldap.api.test.ts index 13a38f2897..c3f9c74b6c 100644 --- a/packages/cli/test/integration/ldap/ldap.api.test.ts +++ b/packages/cli/test/integration/ldap/ldap.api.test.ts @@ -1,11 +1,11 @@ import type { User } from '@n8n/db'; +import { AuthProviderSyncHistoryRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import { Not } from '@n8n/typeorm'; import type { Entry as LdapUser } from 'ldapts'; import { Cipher } from 'n8n-core'; import config from '@/config'; -import { AuthProviderSyncHistoryRepository } from '@/databases/repositories/auth-provider-sync-history.repository'; import { UserRepository } from '@/databases/repositories/user.repository'; import { LDAP_DEFAULT_CONFIGURATION } from '@/ldap.ee/constants'; import { saveLdapSynchronization } from '@/ldap.ee/helpers.ee'; @@ -47,9 +47,9 @@ beforeEach(async () => { 'AuthIdentity', 'AuthProviderSyncHistory', 'SharedCredentials', - 'Credentials', + 'CredentialsEntity', 'SharedWorkflow', - 'Workflow', + 'WorkflowEntity', ]); await Container.get(UserRepository).delete({ id: Not(owner.id) }); diff --git a/packages/cli/test/integration/license-metrics.repository.test.ts b/packages/cli/test/integration/license-metrics.repository.test.ts index 143b9a59e7..eeefde69ae 100644 --- a/packages/cli/test/integration/license-metrics.repository.test.ts +++ b/packages/cli/test/integration/license-metrics.repository.test.ts @@ -22,7 +22,13 @@ describe('LicenseMetricsRepository', () => { }); beforeEach(async () => { - await testDb.truncate(['User', 'Credentials', 'Workflow', 'Execution', 'WorkflowStatistics']); + await testDb.truncate([ + 'User', + 'CredentialsEntity', + 'WorkflowEntity', + 'ExecutionEntity', + 'WorkflowStatistics', + ]); }); afterAll(async () => { diff --git a/packages/cli/test/integration/mfa/mfa.api.test.ts b/packages/cli/test/integration/mfa/mfa.api.test.ts index 7a1f76df65..5ad46ddc1b 100644 --- a/packages/cli/test/integration/mfa/mfa.api.test.ts +++ b/packages/cli/test/integration/mfa/mfa.api.test.ts @@ -1,10 +1,10 @@ import type { User } from '@n8n/db'; +import { AuthUserRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import { randomString } from 'n8n-workflow'; import { AuthService } from '@/auth/auth.service'; import config from '@/config'; -import { AuthUserRepository } from '@/databases/repositories/auth-user.repository'; import { BadRequestError } from '@/errors/response-errors/bad-request.error'; import { ExternalHooks } from '@/external-hooks'; import { TOTPService } from '@/mfa/totp.service'; diff --git a/packages/cli/test/integration/project.service.integration.test.ts b/packages/cli/test/integration/project.service.integration.test.ts index b2210b5210..4c4e2f070e 100644 --- a/packages/cli/test/integration/project.service.integration.test.ts +++ b/packages/cli/test/integration/project.service.integration.test.ts @@ -22,7 +22,13 @@ describe('ProjectService', () => { }); afterEach(async () => { - await testDb.truncate(['User', 'Project', 'ProjectRelation', 'Workflow', 'SharedWorkflow']); + await testDb.truncate([ + 'User', + 'Project', + 'ProjectRelation', + 'WorkflowEntity', + 'SharedWorkflow', + ]); }); afterAll(async () => { diff --git a/packages/cli/test/integration/pruning.service.test.ts b/packages/cli/test/integration/pruning.service.test.ts index 2095e064c6..91f2eb33e4 100644 --- a/packages/cli/test/integration/pruning.service.test.ts +++ b/packages/cli/test/integration/pruning.service.test.ts @@ -1,11 +1,11 @@ import { ExecutionsConfig } from '@n8n/config'; import type { ExecutionEntity } from '@n8n/db'; +import { ExecutionRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import { BinaryDataService, InstanceSettings } from 'n8n-core'; import type { ExecutionStatus, IWorkflowBase } from 'n8n-workflow'; import { Time } from '@/constants'; -import { ExecutionRepository } from '@/databases/repositories/execution.repository'; import { PruningService } from '@/services/pruning/pruning.service'; import { @@ -43,7 +43,7 @@ describe('softDeleteOnPruningCycle()', () => { }); beforeEach(async () => { - await testDb.truncate(['Execution', 'ExecutionAnnotation']); + await testDb.truncate(['ExecutionEntity', 'ExecutionAnnotation']); }); afterAll(async () => { diff --git a/packages/cli/test/integration/public-api/credentials.test.ts b/packages/cli/test/integration/public-api/credentials.test.ts index 995e920e78..91d2b2a28c 100644 --- a/packages/cli/test/integration/public-api/credentials.test.ts +++ b/packages/cli/test/integration/public-api/credentials.test.ts @@ -1,8 +1,8 @@ import type { User } from '@n8n/db'; +import { CredentialsRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import { randomString } from 'n8n-workflow'; -import { CredentialsRepository } from '@/databases/repositories/credentials.repository'; import { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository'; import { createTeamProject } from '@test-integration/db/projects'; @@ -40,7 +40,7 @@ beforeAll(async () => { }); beforeEach(async () => { - await testDb.truncate(['SharedCredentials', 'Credentials']); + await testDb.truncate(['SharedCredentials', 'CredentialsEntity']); }); describe('POST /credentials', () => { diff --git a/packages/cli/test/integration/public-api/endpoints-with-scopes-enabled.test.ts b/packages/cli/test/integration/public-api/endpoints-with-scopes-enabled.test.ts index 87aa71923c..4c41b3eca2 100644 --- a/packages/cli/test/integration/public-api/endpoints-with-scopes-enabled.test.ts +++ b/packages/cli/test/integration/public-api/endpoints-with-scopes-enabled.test.ts @@ -1,10 +1,10 @@ import type { TagEntity } from '@n8n/db'; +import { ApiKeyRepository } from '@n8n/db'; +import { CredentialsRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import { randomString } from 'n8n-workflow'; import validator from 'validator'; -import { ApiKeyRepository } from '@/databases/repositories/api-key.repository'; -import { CredentialsRepository } from '@/databases/repositories/credentials.repository'; import { ProjectRepository } from '@/databases/repositories/project.repository'; import { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository'; import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository'; @@ -72,13 +72,13 @@ describe('Public API endpoints with feat:apiKeyScopes enabled', () => { await testDb.truncate([ 'User', 'SharedCredentials', - 'Credentials', - 'Execution', + 'CredentialsEntity', + 'ExecutionEntity', 'SharedWorkflow', - 'Tag', + 'TagEntity', 'Variables', 'Project', - 'Workflow', + 'WorkflowEntity', 'WorkflowHistory', ]); // globalConfig.tags.disabled = false; diff --git a/packages/cli/test/integration/public-api/executions.test.ts b/packages/cli/test/integration/public-api/executions.test.ts index 2a7b39d553..d1629aed81 100644 --- a/packages/cli/test/integration/public-api/executions.test.ts +++ b/packages/cli/test/integration/public-api/executions.test.ts @@ -51,9 +51,9 @@ beforeEach(async () => { await testDb.truncate([ 'SharedCredentials', 'SharedWorkflow', - 'Workflow', - 'Credentials', - 'Execution', + 'WorkflowEntity', + 'CredentialsEntity', + 'ExecutionEntity', 'Settings', ]); diff --git a/packages/cli/test/integration/public-api/tags.test.ts b/packages/cli/test/integration/public-api/tags.test.ts index 3c3a4ade89..a5dc78afe4 100644 --- a/packages/cli/test/integration/public-api/tags.test.ts +++ b/packages/cli/test/integration/public-api/tags.test.ts @@ -22,7 +22,7 @@ beforeAll(async () => { }); beforeEach(async () => { - await testDb.truncate(['Tag']); + await testDb.truncate(['TagEntity']); authOwnerAgent = testServer.publicApiAgentFor(owner); authMemberAgent = testServer.publicApiAgentFor(member); diff --git a/packages/cli/test/integration/public-api/users.ee.test.ts b/packages/cli/test/integration/public-api/users.ee.test.ts index 508b06a23d..ef965130d1 100644 --- a/packages/cli/test/integration/public-api/users.ee.test.ts +++ b/packages/cli/test/integration/public-api/users.ee.test.ts @@ -24,7 +24,13 @@ mockInstance(License, { const testServer = utils.setupTestServer({ endpointGroups: ['publicApi'] }); beforeEach(async () => { - await testDb.truncate(['SharedCredentials', 'SharedWorkflow', 'Workflow', 'Credentials', 'User']); + await testDb.truncate([ + 'SharedCredentials', + 'SharedWorkflow', + 'WorkflowEntity', + 'CredentialsEntity', + 'User', + ]); }); describe('With license unlimited quota:users', () => { diff --git a/packages/cli/test/integration/public-api/workflows.test.ts b/packages/cli/test/integration/public-api/workflows.test.ts index b9c925bdb6..031b0f6da0 100644 --- a/packages/cli/test/integration/public-api/workflows.test.ts +++ b/packages/cli/test/integration/public-api/workflows.test.ts @@ -63,9 +63,9 @@ beforeEach(async () => { await testDb.truncate([ 'SharedCredentials', 'SharedWorkflow', - 'Tag', - 'Workflow', - 'Credentials', + 'TagEntity', + 'WorkflowEntity', + 'CredentialsEntity', 'WorkflowHistory', ]); diff --git a/packages/cli/test/integration/security-audit/credentials-risk-reporter.test.ts b/packages/cli/test/integration/security-audit/credentials-risk-reporter.test.ts index 2a69c38ed9..9ca073ac91 100644 --- a/packages/cli/test/integration/security-audit/credentials-risk-reporter.test.ts +++ b/packages/cli/test/integration/security-audit/credentials-risk-reporter.test.ts @@ -1,12 +1,12 @@ import type { SecurityConfig } from '@n8n/config'; import { generateNanoId } from '@n8n/db'; +import { CredentialsRepository } from '@n8n/db'; +import { ExecutionDataRepository } from '@n8n/db'; +import { ExecutionRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import { mock } from 'jest-mock-extended'; import { v4 as uuid } from 'uuid'; -import { CredentialsRepository } from '@/databases/repositories/credentials.repository'; -import { ExecutionDataRepository } from '@/databases/repositories/execution-data.repository'; -import { ExecutionRepository } from '@/databases/repositories/execution.repository'; import { WorkflowRepository } from '@/databases/repositories/workflow.repository'; import { CREDENTIALS_REPORT } from '@/security-audit/constants'; import { SecurityAuditService } from '@/security-audit/security-audit.service'; @@ -28,7 +28,7 @@ beforeAll(async () => { }); beforeEach(async () => { - await testDb.truncate(['Workflow', 'Credentials', 'Execution']); + await testDb.truncate(['WorkflowEntity', 'CredentialsEntity', 'ExecutionEntity']); }); afterAll(async () => { diff --git a/packages/cli/test/integration/security-audit/database-risk-reporter.test.ts b/packages/cli/test/integration/security-audit/database-risk-reporter.test.ts index d0c4f02e85..bbe9b59f53 100644 --- a/packages/cli/test/integration/security-audit/database-risk-reporter.test.ts +++ b/packages/cli/test/integration/security-audit/database-risk-reporter.test.ts @@ -23,7 +23,7 @@ beforeAll(async () => { }); beforeEach(async () => { - await testDb.truncate(['Workflow']); + await testDb.truncate(['WorkflowEntity']); }); afterAll(async () => { diff --git a/packages/cli/test/integration/security-audit/filesystem-risk-reporter.test.ts b/packages/cli/test/integration/security-audit/filesystem-risk-reporter.test.ts index 85ab2e6ec4..6e0e50b4ae 100644 --- a/packages/cli/test/integration/security-audit/filesystem-risk-reporter.test.ts +++ b/packages/cli/test/integration/security-audit/filesystem-risk-reporter.test.ts @@ -18,7 +18,7 @@ beforeAll(async () => { }); beforeEach(async () => { - await testDb.truncate(['Workflow']); + await testDb.truncate(['WorkflowEntity']); }); afterAll(async () => { diff --git a/packages/cli/test/integration/security-audit/instance-risk-reporter.test.ts b/packages/cli/test/integration/security-audit/instance-risk-reporter.test.ts index d722b5d88d..3310eff9fd 100644 --- a/packages/cli/test/integration/security-audit/instance-risk-reporter.test.ts +++ b/packages/cli/test/integration/security-audit/instance-risk-reporter.test.ts @@ -30,7 +30,7 @@ beforeAll(async () => { }); beforeEach(async () => { - await testDb.truncate(['Workflow']); + await testDb.truncate(['WorkflowEntity']); }); afterAll(async () => { diff --git a/packages/cli/test/integration/security-audit/nodes-risk-reporter.test.ts b/packages/cli/test/integration/security-audit/nodes-risk-reporter.test.ts index 461685ec5c..b3e1b5a1ca 100644 --- a/packages/cli/test/integration/security-audit/nodes-risk-reporter.test.ts +++ b/packages/cli/test/integration/security-audit/nodes-risk-reporter.test.ts @@ -29,7 +29,7 @@ beforeAll(async () => { }); beforeEach(async () => { - await testDb.truncate(['Workflow']); + await testDb.truncate(['WorkflowEntity']); }); afterAll(async () => { diff --git a/packages/cli/test/integration/services/execution-metadata.service.test.ts b/packages/cli/test/integration/services/execution-metadata.service.test.ts index 7288c4b98f..104a7a0fd8 100644 --- a/packages/cli/test/integration/services/execution-metadata.service.test.ts +++ b/packages/cli/test/integration/services/execution-metadata.service.test.ts @@ -1,6 +1,6 @@ +import { ExecutionMetadataRepository } from '@n8n/db'; import { Container } from '@n8n/di'; -import { ExecutionMetadataRepository } from '@/databases/repositories/execution-metadata.repository'; import { ExecutionMetadataService } from '@/services/execution-metadata.service'; import { createExecution } from '@test-integration/db/executions'; import { createWorkflow } from '@test-integration/db/workflows'; diff --git a/packages/cli/test/integration/shared/db/credentials.ts b/packages/cli/test/integration/shared/db/credentials.ts index f53ea74fdc..38d32c64ab 100644 --- a/packages/cli/test/integration/shared/db/credentials.ts +++ b/packages/cli/test/integration/shared/db/credentials.ts @@ -1,11 +1,11 @@ -import { CredentialsEntity } from '@n8n/db'; import type { Project } from '@n8n/db'; import type { CredentialSharingRole } from '@n8n/db'; import type { User } from '@n8n/db'; import type { ICredentialsDb } from '@n8n/db'; +import { CredentialsEntity } from '@n8n/db'; +import { CredentialsRepository } from '@n8n/db'; import { Container } from '@n8n/di'; -import { CredentialsRepository } from '@/databases/repositories/credentials.repository'; import { ProjectRepository } from '@/databases/repositories/project.repository'; import { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository'; diff --git a/packages/cli/test/integration/shared/db/executions.ts b/packages/cli/test/integration/shared/db/executions.ts index a700dafc63..258a1c6006 100644 --- a/packages/cli/test/integration/shared/db/executions.ts +++ b/packages/cli/test/integration/shared/db/executions.ts @@ -1,12 +1,12 @@ import type { ExecutionEntity } from '@n8n/db'; import type { ExecutionData } from '@n8n/db'; +import { ExecutionDataRepository } from '@n8n/db'; +import { ExecutionMetadataRepository } from '@n8n/db'; +import { ExecutionRepository } from '@n8n/db'; +import { AnnotationTagRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import type { AnnotationVote, IWorkflowBase } from 'n8n-workflow'; -import { AnnotationTagRepository } from '@/databases/repositories/annotation-tag.repository.ee'; -import { ExecutionDataRepository } from '@/databases/repositories/execution-data.repository'; -import { ExecutionMetadataRepository } from '@/databases/repositories/execution-metadata.repository'; -import { ExecutionRepository } from '@/databases/repositories/execution.repository'; import { ExecutionService } from '@/executions/execution.service'; import { Telemetry } from '@/telemetry'; import { mockInstance } from '@test/mocking'; diff --git a/packages/cli/test/integration/shared/db/users.ts b/packages/cli/test/integration/shared/db/users.ts index fd22c09656..9b96c53987 100644 --- a/packages/cli/test/integration/shared/db/users.ts +++ b/packages/cli/test/integration/shared/db/users.ts @@ -1,11 +1,11 @@ import { AuthIdentity } from '@n8n/db'; import { type User } from '@n8n/db'; +import { AuthIdentityRepository } from '@n8n/db'; +import { AuthUserRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import type { ApiKeyScope, GlobalRole } from '@n8n/permissions'; import { hash } from 'bcryptjs'; -import { AuthIdentityRepository } from '@/databases/repositories/auth-identity.repository'; -import { AuthUserRepository } from '@/databases/repositories/auth-user.repository'; import { UserRepository } from '@/databases/repositories/user.repository'; import { MfaService } from '@/mfa/mfa.service'; import { TOTPService } from '@/mfa/totp.service'; diff --git a/packages/cli/test/integration/shared/test-db.ts b/packages/cli/test/integration/shared/test-db.ts index 7cfe6017b6..a92c45da88 100644 --- a/packages/cli/test/integration/shared/test-db.ts +++ b/packages/cli/test/integration/shared/test-db.ts @@ -1,9 +1,8 @@ import { GlobalConfig } from '@n8n/config'; +import type { entities } from '@n8n/db'; import { Container } from '@n8n/di'; -import type { DataSourceOptions, Repository } from '@n8n/typeorm'; +import type { DataSourceOptions } from '@n8n/typeorm'; import { DataSource as Connection } from '@n8n/typeorm'; -import { kebabCase } from 'lodash'; -import type { Class } from 'n8n-core'; import { randomString } from 'n8n-workflow'; import { getOptionOverrides } from '@/databases/config'; @@ -11,18 +10,13 @@ import * as Db from '@/db'; export const testDbPrefix = 'n8n_test_'; -type Extensions = 'insights'; - -let loadedExtensions: Extensions[] = []; - /** * Initialize one test DB per suite run, with bootstrap connection if needed. */ -export async function init(extensionNames: Extensions[] = []) { +export async function init() { const globalConfig = Container.get(GlobalConfig); const dbType = globalConfig.database.type; const testDbName = `${testDbPrefix}${randomString(6, 10).toLowerCase()}_${Date.now()}`; - loadedExtensions = extensionNames; if (dbType === 'postgresdb') { const bootstrapPostgres = await new Connection( @@ -56,71 +50,16 @@ export async function terminate() { Db.connectionState.connected = false; } -// Can't use `Object.keys(entities)` here because some entities have a `Entity` suffix, while the repositories don't -const repositories = [ - 'AnnotationTag', - 'AuthIdentity', - 'AuthProviderSyncHistory', - 'Credentials', - 'EventDestinations', - 'Execution', - 'ExecutionAnnotation', - 'ExecutionData', - 'ExecutionMetadata', - 'InstalledNodes', - 'InstalledPackages', - 'Project', - 'ProjectRelation', - 'Role', - 'ProcessedData', - 'Project', - 'ProjectRelation', - 'Settings', - 'SharedCredentials', - 'SharedWorkflow', - 'Tag', - 'TestDefinition', - 'TestMetric', - 'TestRun', - 'User', - 'Variables', - 'Webhook', - 'Workflow', - 'WorkflowHistory', - 'WorkflowStatistics', - 'WorkflowTagMapping', - 'ApiKey', - 'Folder', - 'InsightsRaw', - 'InsightsMetadata', - 'InsightsByPeriod', -] as const; +type EntityName = keyof typeof entities | 'InsightsRaw' | 'InsightsByPeriod' | 'InsightsMetadata'; /** * Truncate specific DB tables in a test DB. */ -export async function truncate(names: Array<(typeof repositories)[number]>) { - for (const name of names) { - let RepositoryClass: Class>; +export async function truncate(entities: EntityName[]) { + const connection = Container.get(Connection); - const fileName = `${kebabCase(name)}.repository`; - const paths = [ - `@/databases/repositories/${fileName}.ee`, - `@/databases/repositories/${fileName}`, - ]; - - for (const extension of loadedExtensions) { - paths.push( - `@/modules/${extension}/database/repositories/${fileName}`, - `@/modules/${extension}/database/repositories/${fileName}.ee`, - ); - } - - RepositoryClass = (await Promise.any(paths.map(async (path) => await import(path))))[ - `${name}Repository` - ]; - - await Container.get(RepositoryClass).delete({}); + for (const name of entities) { + await connection.getRepository(name).delete({}); } } diff --git a/packages/cli/test/integration/tags.api.test.ts b/packages/cli/test/integration/tags.api.test.ts index 90d764f534..1089925d9d 100644 --- a/packages/cli/test/integration/tags.api.test.ts +++ b/packages/cli/test/integration/tags.api.test.ts @@ -17,7 +17,7 @@ beforeAll(async () => { }); beforeEach(async () => { - await testDb.truncate(['Tag']); + await testDb.truncate(['TagEntity']); }); describe('POST /tags', () => { diff --git a/packages/cli/test/integration/webhooks.api.test.ts b/packages/cli/test/integration/webhooks.api.test.ts index d16103c3f8..584e372712 100644 --- a/packages/cli/test/integration/webhooks.api.test.ts +++ b/packages/cli/test/integration/webhooks.api.test.ts @@ -91,7 +91,7 @@ describe('Webhook API', () => { }); beforeEach(async () => { - await testDb.truncate(['Workflow']); + await testDb.truncate(['WorkflowEntity']); await createWorkflow(workflowData, user); await initActiveWorkflowManager(); }); diff --git a/packages/cli/test/integration/workflow-history-manager.test.ts b/packages/cli/test/integration/workflow-history-manager.test.ts index 070fcbc3de..b8e2cf2a91 100644 --- a/packages/cli/test/integration/workflow-history-manager.test.ts +++ b/packages/cli/test/integration/workflow-history-manager.test.ts @@ -26,7 +26,7 @@ describe('Workflow History Manager', () => { }); beforeEach(async () => { - await testDb.truncate(['Workflow']); + await testDb.truncate(['WorkflowEntity']); jest.clearAllMocks(); globalConfig.workflowHistory.enabled = true; diff --git a/packages/cli/test/integration/workflow-history.api.test.ts b/packages/cli/test/integration/workflow-history.api.test.ts index 56e4a6aa52..234845d710 100644 --- a/packages/cli/test/integration/workflow-history.api.test.ts +++ b/packages/cli/test/integration/workflow-history.api.test.ts @@ -25,7 +25,7 @@ beforeAll(async () => { }); afterEach(async () => { - await testDb.truncate(['Workflow', 'SharedWorkflow', 'WorkflowHistory']); + await testDb.truncate(['WorkflowEntity', 'SharedWorkflow', 'WorkflowHistory']); }); describe('GET /workflow-history/:workflowId', () => { diff --git a/packages/cli/test/integration/workflow-tag-mapping.repository.integration.test.ts b/packages/cli/test/integration/workflow-tag-mapping.repository.integration.test.ts index c01adbc51a..9b0bf6078f 100644 --- a/packages/cli/test/integration/workflow-tag-mapping.repository.integration.test.ts +++ b/packages/cli/test/integration/workflow-tag-mapping.repository.integration.test.ts @@ -18,7 +18,7 @@ describe('WorkflowTagMappingRepository', () => { }); afterEach(async () => { - await testDb.truncate(['WorkflowTagMapping', 'Workflow', 'Tag']); + await testDb.truncate(['WorkflowTagMapping', 'WorkflowEntity', 'TagEntity']); }); afterAll(async () => { diff --git a/packages/cli/test/integration/workflows/workflow-sharing.service.test.ts b/packages/cli/test/integration/workflows/workflow-sharing.service.test.ts index cf7732ccca..2a491c6504 100644 --- a/packages/cli/test/integration/workflows/workflow-sharing.service.test.ts +++ b/packages/cli/test/integration/workflows/workflow-sharing.service.test.ts @@ -31,7 +31,7 @@ beforeAll(async () => { }); beforeEach(async () => { - await testDb.truncate(['Workflow', 'SharedWorkflow', 'WorkflowHistory']); + await testDb.truncate(['WorkflowEntity', 'SharedWorkflow', 'WorkflowHistory']); }); afterAll(async () => { diff --git a/packages/cli/test/integration/workflows/workflow.service.ee.test.ts b/packages/cli/test/integration/workflows/workflow.service.ee.test.ts index 5ff50f634e..a4166b7eef 100644 --- a/packages/cli/test/integration/workflows/workflow.service.ee.test.ts +++ b/packages/cli/test/integration/workflows/workflow.service.ee.test.ts @@ -1,8 +1,8 @@ import { CredentialsEntity } from '@n8n/db'; +import { CredentialsRepository } from '@n8n/db'; import { Container } from '@n8n/di'; import { mock } from 'jest-mock-extended'; -import { CredentialsRepository } from '@/databases/repositories/credentials.repository'; import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository'; import { WorkflowRepository } from '@/databases/repositories/workflow.repository'; import { Telemetry } from '@/telemetry'; @@ -41,7 +41,7 @@ describe('EnterpriseWorkflowService', () => { }); afterEach(async () => { - await testDb.truncate(['Workflow']); + await testDb.truncate(['WorkflowEntity']); jest.restoreAllMocks(); }); diff --git a/packages/cli/test/integration/workflows/workflow.service.test.ts b/packages/cli/test/integration/workflows/workflow.service.test.ts index b3dbb972b6..93042f5dd1 100644 --- a/packages/cli/test/integration/workflows/workflow.service.test.ts +++ b/packages/cli/test/integration/workflows/workflow.service.test.ts @@ -48,7 +48,7 @@ beforeAll(async () => { }); afterEach(async () => { - await testDb.truncate(['Workflow']); + await testDb.truncate(['WorkflowEntity']); jest.restoreAllMocks(); }); diff --git a/packages/cli/test/integration/workflows/workflows.controller-with-active-workflow-manager.ee.test.ts b/packages/cli/test/integration/workflows/workflows.controller-with-active-workflow-manager.ee.test.ts index b0f05da1c1..87c8c9844a 100644 --- a/packages/cli/test/integration/workflows/workflows.controller-with-active-workflow-manager.ee.test.ts +++ b/packages/cli/test/integration/workflows/workflows.controller-with-active-workflow-manager.ee.test.ts @@ -25,7 +25,7 @@ beforeAll(async () => { }); beforeEach(async () => { - await testDb.truncate(['Workflow', 'SharedWorkflow']); + await testDb.truncate(['WorkflowEntity', 'SharedWorkflow']); }); describe('PUT /:workflowId/transfer', () => { diff --git a/packages/cli/test/integration/workflows/workflows.controller.ee.test.ts b/packages/cli/test/integration/workflows/workflows.controller.ee.test.ts index 758c568a95..6873514915 100644 --- a/packages/cli/test/integration/workflows/workflows.controller.ee.test.ts +++ b/packages/cli/test/integration/workflows/workflows.controller.ee.test.ts @@ -89,7 +89,7 @@ beforeEach(async () => { activeWorkflowManager.add.mockReset(); activeWorkflowManager.remove.mockReset(); - await testDb.truncate(['Workflow', 'SharedWorkflow', 'WorkflowHistory', 'Tag']); + await testDb.truncate(['WorkflowEntity', 'SharedWorkflow', 'WorkflowHistory', 'TagEntity']); }); afterEach(() => { diff --git a/packages/cli/test/integration/workflows/workflows.controller.test.ts b/packages/cli/test/integration/workflows/workflows.controller.test.ts index 4adaaab5f7..6b9cc226b1 100644 --- a/packages/cli/test/integration/workflows/workflows.controller.test.ts +++ b/packages/cli/test/integration/workflows/workflows.controller.test.ts @@ -62,8 +62,8 @@ beforeEach(async () => { 'WorkflowHistory', 'ProjectRelation', 'Folder', - 'Workflow', - 'Tag', + 'WorkflowEntity', + 'TagEntity', 'Project', 'User', ]); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 46a31755b2..17a6e35794 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -500,6 +500,12 @@ importers: class-validator: specifier: 0.14.0 version: 0.14.0 + flatted: + specifier: 'catalog:' + version: 3.2.7 + lodash: + specifier: 'catalog:' + version: 4.17.21 n8n-core: specifier: workspace:^ version: link:../../core @@ -519,6 +525,9 @@ importers: '@n8n/typescript-config': specifier: workspace:* version: link:../typescript-config + '@types/lodash': + specifier: 'catalog:' + version: 4.14.195 packages/@n8n/decorators: dependencies: