refactor(core): Move first batch of repositories to @n8n/db (#15130)

This commit is contained in:
Iván Ovejero
2025-05-06 11:22:43 +02:00
committed by GitHub
parent 939ff97ec4
commit ade546fb48
151 changed files with 338 additions and 299 deletions

View File

@@ -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:"
}
}

View File

@@ -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<string, unknown>;
select?: Record<string, true>;
skip?: number;
take?: number;
sortBy?: string;
};
}
export type ProjectRole =
| 'project:personalOwner'
| 'project:admin'
| 'project:editor'
| 'project:viewer';
export interface IGetExecutionsQueryFilter {
id?: FindOperator<string> | string;
finished?: boolean;
mode?: string;
retryOf?: string;
retrySuccessId?: string;
status?: ExecutionStatus[];
workflowId?: string;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
waitTill?: FindOperator<any> | 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;
};

View File

@@ -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';

View File

@@ -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<AnnotationTagMapping> {
constructor(dataSource: DataSource) {

View File

@@ -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<AnnotationTagEntity> {
constructor(dataSource: DataSource) {

View File

@@ -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<ApiKey> {
constructor(dataSource: DataSource) {

View File

@@ -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<AuthIdentity> {
constructor(dataSource: DataSource) {

View File

@@ -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<AuthProviderSyncHistory> {
constructor(dataSource: DataSource) {

View File

@@ -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<AuthUser> {
constructor(dataSource: DataSource) {

View File

@@ -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<CredentialsEntity> {

View File

@@ -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<EventDestinations> {
constructor(dataSource: DataSource) {

View File

@@ -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<ExecutionAnnotation> {
constructor(dataSource: DataSource) {

View File

@@ -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<ExecutionData> {
constructor(dataSource: DataSource) {

View File

@@ -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<ExecutionMetadata> {
constructor(dataSource: DataSource) {

View File

@@ -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> | 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<any> | boolean;
metadata?: Array<{ key: string; value: string }>;
startedAfter?: string;
@@ -989,6 +994,7 @@ export class ExecutionRepository extends Repository<ExecutionEntity> {
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');

View File

@@ -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';

View File

@@ -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', () => ({

View File

@@ -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';

View File

@@ -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';

View File

@@ -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';

View File

@@ -51,7 +51,7 @@ afterAll(() => {
});
beforeEach(async () => {
await testDb.truncate(['Workflow', 'SharedWorkflow']);
await testDb.truncate(['WorkflowEntity', 'SharedWorkflow']);
jest.clearAllMocks();
});

View File

@@ -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';

View File

@@ -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';

View File

@@ -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';

View File

@@ -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';

View File

@@ -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 {

View File

@@ -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';

View File

@@ -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';

View File

@@ -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';

View File

@@ -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';

View File

@@ -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';

View File

@@ -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';

View File

@@ -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';

View File

@@ -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';

View File

@@ -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';

View File

@@ -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';

View File

@@ -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<ICredentialType>({

View File

@@ -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';

View File

@@ -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';

View File

@@ -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);

View File

@@ -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', () => {

View File

@@ -22,7 +22,7 @@ describe('FolderRepository', () => {
});
afterEach(async () => {
await testDb.truncate(['Folder', 'Tag']);
await testDb.truncate(['Folder', 'TagEntity']);
});
afterAll(async () => {

View File

@@ -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';

View File

@@ -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';

View File

@@ -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';

View File

@@ -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';

View File

@@ -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';

View File

@@ -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';

View File

@@ -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';

View File

@@ -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';

View File

@@ -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';

View File

@@ -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';

View File

@@ -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';

View File

@@ -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,

View File

@@ -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';

View File

@@ -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 () => {

View File

@@ -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';

View File

@@ -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';

View File

@@ -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';

View File

@@ -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';

View File

@@ -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';

View File

@@ -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';

View File

@@ -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';

View File

@@ -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',
]);
});

View File

@@ -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',
]);
});

View File

@@ -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',
]);
});

View File

@@ -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';

View File

@@ -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';

View File

@@ -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';

View File

@@ -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';

View File

@@ -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';

View File

@@ -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';

View File

@@ -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';

View File

@@ -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';

View File

@@ -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';

View File

@@ -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';

View File

@@ -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<AnnotationTagEntity, 'id' | 'name' | 'createdAt' | 'updatedAt'>;

View File

@@ -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) {}

View File

@@ -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';

View File

@@ -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';

View File

@@ -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()

View File

@@ -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';
/**

View File

@@ -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';

View File

@@ -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';

View File

@@ -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';

View File

@@ -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';

View File

@@ -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';

View File

@@ -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';

View File

@@ -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';

View File

@@ -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';

View File

@@ -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';
/**

View File

@@ -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 {

View File

@@ -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';

View File

@@ -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';

View File

@@ -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';

View File

@@ -71,7 +71,7 @@ beforeAll(async () => {
afterEach(async () => {
await activeWorkflowManager.removeAll();
await testDb.truncate(['Workflow', 'Webhook']);
await testDb.truncate(['WorkflowEntity', 'WebhookEntity']);
jest.clearAllMocks();
});

View File

@@ -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();

View File

@@ -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';

View File

@@ -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 () => {

View File

@@ -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 () => {

Some files were not shown because too many files have changed in this diff Show More