refactor(core): Move leaf entities to @n8n/db (#15010)

This commit is contained in:
Iván Ovejero
2025-04-30 10:31:28 +02:00
committed by GitHub
parent a88b889309
commit 1de95ead0d
49 changed files with 110 additions and 89 deletions

View File

@@ -1,7 +1,8 @@
import { JsonColumn, WithTimestamps } from '@n8n/db';
import { Entity, PrimaryColumn } from '@n8n/typeorm'; import { Entity, PrimaryColumn } from '@n8n/typeorm';
import { MessageEventBusDestinationOptions } from 'n8n-workflow'; import { MessageEventBusDestinationOptions } from 'n8n-workflow';
import { JsonColumn, WithTimestamps } from './abstract-entity';
@Entity({ name: 'event_destinations' }) @Entity({ name: 'event_destinations' })
export class EventDestinations extends WithTimestamps { export class EventDestinations extends WithTimestamps {
@PrimaryColumn('uuid') @PrimaryColumn('uuid')

View File

@@ -0,0 +1,19 @@
import { EventDestinations } from './event-destinations';
import { InstalledNodes } from './installed-nodes';
import { InstalledPackages } from './installed-packages';
import { InvalidAuthToken } from './invalid-auth-token';
import { ProcessedData } from './processed-data';
import { Settings } from './settings';
import { Variables } from './variables';
import { WebhookEntity } from './webhook-entity';
export {
EventDestinations,
InstalledNodes,
InstalledPackages,
InvalidAuthToken,
ProcessedData,
Settings,
Variables,
WebhookEntity,
};

View File

@@ -1,6 +1,6 @@
import { WithTimestamps } from '@n8n/db';
import { Column, Entity, JoinColumn, OneToMany, PrimaryColumn } from '@n8n/typeorm'; import { Column, Entity, JoinColumn, OneToMany, PrimaryColumn } from '@n8n/typeorm';
import { WithTimestamps } from './abstract-entity';
import type { InstalledNodes } from './installed-nodes'; import type { InstalledNodes } from './installed-nodes';
@Entity() @Entity()

View File

@@ -1,6 +1,7 @@
import { DateTimeColumn } from '@n8n/db';
import { Entity, PrimaryColumn } from '@n8n/typeorm'; import { Entity, PrimaryColumn } from '@n8n/typeorm';
import { DateTimeColumn } from './abstract-entity';
@Entity() @Entity()
export class InvalidAuthToken { export class InvalidAuthToken {
@PrimaryColumn() @PrimaryColumn()

View File

@@ -1,8 +1,7 @@
import { JsonColumn, WithTimestamps } from '@n8n/db';
import { Entity, PrimaryColumn } from '@n8n/typeorm'; import { Entity, PrimaryColumn } from '@n8n/typeorm';
import type { IProcessedDataEntries, IProcessedDataLatest } from 'n8n-workflow';
import type { IProcessedDataEntries, IProcessedDataLatest } from '@/types-db'; import { JsonColumn, WithTimestamps } from './abstract-entity';
import { objectRetriever } from '../utils/transformers'; import { objectRetriever } from '../utils/transformers';
@Entity() @Entity()

View File

@@ -1,6 +1,7 @@
import { WithStringId } from '@n8n/db';
import { Column, Entity } from '@n8n/typeorm'; import { Column, Entity } from '@n8n/typeorm';
import { WithStringId } from './abstract-entity';
@Entity() @Entity()
export class Variables extends WithStringId { export class Variables extends WithStringId {
@Column('text') @Column('text')

View File

@@ -12,3 +12,15 @@ export {
export { generateNanoId } from './utils/generators'; export { generateNanoId } from './utils/generators';
export { isStringArray } from './utils/is-string-array'; export { isStringArray } from './utils/is-string-array';
export { separate } from './utils/separate'; export { separate } from './utils/separate';
export { idStringifier, lowerCaser, objectRetriever, sqlite } from './utils/transformers';
export {
EventDestinations,
InstalledNodes,
InstalledPackages,
InvalidAuthToken,
ProcessedData,
Settings,
Variables,
WebhookEntity,
} from './entities';

View File

@@ -1,8 +1,8 @@
import { type InstalledNodes } from '@n8n/db';
import { type Config } from '@oclif/core'; import { type Config } from '@oclif/core';
import { mock } from 'jest-mock-extended'; import { mock } from 'jest-mock-extended';
import { type CredentialsEntity } from '@/databases/entities/credentials-entity'; import { type CredentialsEntity } from '@/databases/entities/credentials-entity';
import { type InstalledNodes } from '@/databases/entities/installed-nodes';
import { type User } from '@/databases/entities/user'; import { type User } from '@/databases/entities/user';
import { CommunityNode } from '../community-node'; import { CommunityNode } from '../community-node';

View File

@@ -1,9 +1,8 @@
import { type InstalledNodes, type InstalledPackages } from '@n8n/db';
import { Container } from '@n8n/di'; import { Container } from '@n8n/di';
import { Flags } from '@oclif/core'; import { Flags } from '@oclif/core';
import { CredentialsService } from '@/credentials/credentials.service'; import { CredentialsService } from '@/credentials/credentials.service';
import { type InstalledNodes } from '@/databases/entities/installed-nodes';
import { type InstalledPackages } from '@/databases/entities/installed-packages';
import { type User } from '@/databases/entities/user'; import { type User } from '@/databases/entities/user';
import { CredentialsRepository } from '@/databases/repositories/credentials.repository'; import { CredentialsRepository } from '@/databases/repositories/credentials.repository';
import { InstalledNodesRepository } from '@/databases/repositories/installed-nodes.repository'; import { InstalledNodesRepository } from '@/databases/repositories/installed-nodes.repository';

View File

@@ -1,3 +1,4 @@
import type { InstalledPackages } from '@n8n/db';
import { Delete, Get, Patch, Post, RestController, GlobalScope } from '@n8n/decorators'; import { Delete, Get, Patch, Post, RestController, GlobalScope } from '@n8n/decorators';
import { import {
@@ -5,7 +6,6 @@ import {
STARTER_TEMPLATE_NAME, STARTER_TEMPLATE_NAME,
UNKNOWN_FAILURE_REASON, UNKNOWN_FAILURE_REASON,
} from '@/constants'; } from '@/constants';
import type { InstalledPackages } from '@/databases/entities/installed-packages';
import { BadRequestError } from '@/errors/response-errors/bad-request.error'; import { BadRequestError } from '@/errors/response-errors/bad-request.error';
import { InternalServerError } from '@/errors/response-errors/internal-server.error'; import { InternalServerError } from '@/errors/response-errors/internal-server.error';
import { EventService } from '@/events/event.service'; import { EventService } from '@/events/event.service';

View File

@@ -1,9 +1,8 @@
import { JsonColumn } from '@n8n/db'; import { JsonColumn, idStringifier } from '@n8n/db';
import { Column, Entity, ManyToOne, PrimaryColumn } from '@n8n/typeorm'; import { Column, Entity, ManyToOne, PrimaryColumn } from '@n8n/typeorm';
import { IWorkflowBase } from 'n8n-workflow'; import { IWorkflowBase } from 'n8n-workflow';
import { ExecutionEntity } from './execution-entity'; import { ExecutionEntity } from './execution-entity';
import { idStringifier } from '../utils/transformers';
@Entity() @Entity()
export class ExecutionData { export class ExecutionData {

View File

@@ -1,4 +1,4 @@
import { DateTimeColumn, datetimeColumnType } from '@n8n/db'; import { DateTimeColumn, datetimeColumnType, idStringifier } from '@n8n/db';
import { import {
Column, Column,
Entity, Entity,
@@ -19,7 +19,6 @@ import type { ExecutionAnnotation } from '@/databases/entities/execution-annotat
import type { ExecutionData } from './execution-data'; import type { ExecutionData } from './execution-data';
import type { ExecutionMetadata } from './execution-metadata'; import type { ExecutionMetadata } from './execution-metadata';
import { WorkflowEntity } from './workflow-entity'; import { WorkflowEntity } from './workflow-entity';
import { idStringifier } from '../utils/transformers';
@Entity() @Entity()
@Index(['workflowId', 'id']) @Index(['workflowId', 'id'])

View File

@@ -1,3 +1,14 @@
import {
EventDestinations,
InstalledNodes,
InstalledPackages,
InvalidAuthToken,
ProcessedData,
Settings,
Variables,
WebhookEntity,
} from '@n8n/db';
import { AnnotationTagEntity } from './annotation-tag-entity.ee'; import { AnnotationTagEntity } from './annotation-tag-entity.ee';
import { AnnotationTagMapping } from './annotation-tag-mapping.ee'; import { AnnotationTagMapping } from './annotation-tag-mapping.ee';
import { ApiKey } from './api-key'; import { ApiKey } from './api-key';
@@ -5,20 +16,14 @@ import { AuthIdentity } from './auth-identity';
import { AuthProviderSyncHistory } from './auth-provider-sync-history'; import { AuthProviderSyncHistory } from './auth-provider-sync-history';
import { AuthUser } from './auth-user'; import { AuthUser } from './auth-user';
import { CredentialsEntity } from './credentials-entity'; import { CredentialsEntity } from './credentials-entity';
import { EventDestinations } from './event-destinations';
import { ExecutionAnnotation } from './execution-annotation.ee'; import { ExecutionAnnotation } from './execution-annotation.ee';
import { ExecutionData } from './execution-data'; import { ExecutionData } from './execution-data';
import { ExecutionEntity } from './execution-entity'; import { ExecutionEntity } from './execution-entity';
import { ExecutionMetadata } from './execution-metadata'; import { ExecutionMetadata } from './execution-metadata';
import { Folder } from './folder'; import { Folder } from './folder';
import { FolderTagMapping } from './folder-tag-mapping'; import { FolderTagMapping } from './folder-tag-mapping';
import { InstalledNodes } from './installed-nodes';
import { InstalledPackages } from './installed-packages';
import { InvalidAuthToken } from './invalid-auth-token';
import { ProcessedData } from './processed-data';
import { Project } from './project'; import { Project } from './project';
import { ProjectRelation } from './project-relation'; import { ProjectRelation } from './project-relation';
import { Settings } from './settings';
import { SharedCredentials } from './shared-credentials'; import { SharedCredentials } from './shared-credentials';
import { SharedWorkflow } from './shared-workflow'; import { SharedWorkflow } from './shared-workflow';
import { TagEntity } from './tag-entity'; import { TagEntity } from './tag-entity';
@@ -27,8 +32,6 @@ import { TestDefinition } from './test-definition.ee';
import { TestMetric } from './test-metric.ee'; import { TestMetric } from './test-metric.ee';
import { TestRun } from './test-run.ee'; import { TestRun } from './test-run.ee';
import { User } from './user'; import { User } from './user';
import { Variables } from './variables';
import { WebhookEntity } from './webhook-entity';
import { WorkflowEntity } from './workflow-entity'; import { WorkflowEntity } from './workflow-entity';
import { WorkflowHistory } from './workflow-history'; import { WorkflowHistory } from './workflow-history';
import { WorkflowStatistics } from './workflow-statistics'; import { WorkflowStatistics } from './workflow-statistics';

View File

@@ -1,4 +1,4 @@
import { JsonColumn, WithTimestamps } from '@n8n/db'; import { JsonColumn, WithTimestamps, objectRetriever, lowerCaser } from '@n8n/db';
import { hasScope, type ScopeOptions, type Scope, GlobalRole } from '@n8n/permissions'; import { hasScope, type ScopeOptions, type Scope, GlobalRole } from '@n8n/permissions';
import { import {
AfterLoad, AfterLoad,
@@ -28,7 +28,6 @@ import type { AuthIdentity } from './auth-identity';
import type { ProjectRelation } from './project-relation'; import type { ProjectRelation } from './project-relation';
import type { SharedCredentials } from './shared-credentials'; import type { SharedCredentials } from './shared-credentials';
import type { SharedWorkflow } from './shared-workflow'; import type { SharedWorkflow } from './shared-workflow';
import { objectRetriever, lowerCaser } from '../utils/transformers';
const STATIC_SCOPE_MAP: Record<GlobalRole, Scope[]> = { const STATIC_SCOPE_MAP: Record<GlobalRole, Scope[]> = {
'global:owner': GLOBAL_OWNER_SCOPES, 'global:owner': GLOBAL_OWNER_SCOPES,

View File

@@ -1,4 +1,4 @@
import { JsonColumn, WithTimestampsAndStringId, dbType } from '@n8n/db'; import { JsonColumn, WithTimestampsAndStringId, dbType, objectRetriever, sqlite } from '@n8n/db';
import { import {
Column, Column,
Entity, Entity,
@@ -20,7 +20,6 @@ import type { SharedWorkflow } from './shared-workflow';
import type { TagEntity } from './tag-entity'; import type { TagEntity } from './tag-entity';
import type { WorkflowStatistics } from './workflow-statistics'; import type { WorkflowStatistics } from './workflow-statistics';
import type { WorkflowTagMapping } from './workflow-tag-mapping'; import type { WorkflowTagMapping } from './workflow-tag-mapping';
import { objectRetriever, sqlite } from '../utils/transformers';
@Entity() @Entity()
export class WorkflowEntity extends WithTimestampsAndStringId implements IWorkflowDb { export class WorkflowEntity extends WithTimestampsAndStringId implements IWorkflowDb {

View File

@@ -1,8 +1,7 @@
import { EventDestinations } from '@n8n/db';
import { Service } from '@n8n/di'; import { Service } from '@n8n/di';
import { DataSource, Repository } from '@n8n/typeorm'; import { DataSource, Repository } from '@n8n/typeorm';
import { EventDestinations } from '../entities/event-destinations';
@Service() @Service()
export class EventDestinationsRepository extends Repository<EventDestinations> { export class EventDestinationsRepository extends Repository<EventDestinations> {
constructor(dataSource: DataSource) { constructor(dataSource: DataSource) {

View File

@@ -1,8 +1,7 @@
import { InstalledNodes } from '@n8n/db';
import { Service } from '@n8n/di'; import { Service } from '@n8n/di';
import { DataSource, Repository } from '@n8n/typeorm'; import { DataSource, Repository } from '@n8n/typeorm';
import { InstalledNodes } from '../entities/installed-nodes';
@Service() @Service()
export class InstalledNodesRepository extends Repository<InstalledNodes> { export class InstalledNodesRepository extends Repository<InstalledNodes> {
constructor(dataSource: DataSource) { constructor(dataSource: DataSource) {

View File

@@ -1,9 +1,9 @@
import { InstalledPackages } from '@n8n/db';
import { Service } from '@n8n/di'; import { Service } from '@n8n/di';
import { DataSource, Repository } from '@n8n/typeorm'; import { DataSource, Repository } from '@n8n/typeorm';
import type { PackageDirectoryLoader } from 'n8n-core'; import type { PackageDirectoryLoader } from 'n8n-core';
import { InstalledNodesRepository } from './installed-nodes.repository'; import { InstalledNodesRepository } from './installed-nodes.repository';
import { InstalledPackages } from '../entities/installed-packages';
@Service() @Service()
export class InstalledPackagesRepository extends Repository<InstalledPackages> { export class InstalledPackagesRepository extends Repository<InstalledPackages> {

View File

@@ -1,8 +1,7 @@
import { InvalidAuthToken } from '@n8n/db';
import { Service } from '@n8n/di'; import { Service } from '@n8n/di';
import { DataSource, Repository } from '@n8n/typeorm'; import { DataSource, Repository } from '@n8n/typeorm';
import { InvalidAuthToken } from '../entities/invalid-auth-token';
@Service() @Service()
export class InvalidAuthTokenRepository extends Repository<InvalidAuthToken> { export class InvalidAuthTokenRepository extends Repository<InvalidAuthToken> {
constructor(dataSource: DataSource) { constructor(dataSource: DataSource) {

View File

@@ -1,8 +1,7 @@
import { ProcessedData } from '@n8n/db';
import { Service } from '@n8n/di'; import { Service } from '@n8n/di';
import { DataSource, Repository } from '@n8n/typeorm'; import { DataSource, Repository } from '@n8n/typeorm';
import { ProcessedData } from '../entities/processed-data';
@Service() @Service()
export class ProcessedDataRepository extends Repository<ProcessedData> { export class ProcessedDataRepository extends Repository<ProcessedData> {
constructor(dataSource: DataSource) { constructor(dataSource: DataSource) {

View File

@@ -1,3 +1,4 @@
import { Settings } from '@n8n/db';
import { Service } from '@n8n/di'; import { Service } from '@n8n/di';
import { DataSource, Repository } from '@n8n/typeorm'; import { DataSource, Repository } from '@n8n/typeorm';
import { ErrorReporter } from 'n8n-core'; import { ErrorReporter } from 'n8n-core';
@@ -5,8 +6,6 @@ import { ErrorReporter } from 'n8n-core';
import config from '@/config'; import config from '@/config';
import { EXTERNAL_SECRETS_DB_KEY } from '@/external-secrets.ee/constants'; import { EXTERNAL_SECRETS_DB_KEY } from '@/external-secrets.ee/constants';
import { Settings } from '../entities/settings';
@Service() @Service()
export class SettingsRepository extends Repository<Settings> { export class SettingsRepository extends Repository<Settings> {
constructor( constructor(

View File

@@ -1,8 +1,7 @@
import { Variables } from '@n8n/db';
import { Service } from '@n8n/di'; import { Service } from '@n8n/di';
import { DataSource, Repository } from '@n8n/typeorm'; import { DataSource, Repository } from '@n8n/typeorm';
import { Variables } from '../entities/variables';
@Service() @Service()
export class VariablesRepository extends Repository<Variables> { export class VariablesRepository extends Repository<Variables> {
constructor(dataSource: DataSource) { constructor(dataSource: DataSource) {

View File

@@ -1,8 +1,7 @@
import { WebhookEntity } from '@n8n/db';
import { Service } from '@n8n/di'; import { Service } from '@n8n/di';
import { DataSource, Repository } from '@n8n/typeorm'; import { DataSource, Repository } from '@n8n/typeorm';
import { WebhookEntity } from '../entities/webhook-entity';
@Service() @Service()
export class WebhookRepository extends Repository<WebhookEntity> { export class WebhookRepository extends Repository<WebhookEntity> {
constructor(dataSource: DataSource) { constructor(dataSource: DataSource) {

View File

@@ -1,5 +1,5 @@
import { GlobalConfig } from '@n8n/config'; import { GlobalConfig } from '@n8n/config';
import { isStringArray } from '@n8n/db'; import { isStringArray, WebhookEntity } from '@n8n/db';
import { Service } from '@n8n/di'; import { Service } from '@n8n/di';
import { DataSource, Repository, In, Like } from '@n8n/typeorm'; import { DataSource, Repository, In, Like } from '@n8n/typeorm';
import type { import type {
@@ -18,7 +18,6 @@ import type { ListQuery } from '@/types-db';
import { FolderRepository } from './folder.repository'; import { FolderRepository } from './folder.repository';
import type { Folder, FolderWithWorkflowAndSubFolderCount } from '../entities/folder'; import type { Folder, FolderWithWorkflowAndSubFolderCount } from '../entities/folder';
import { TagEntity } from '../entities/tag-entity'; import { TagEntity } from '../entities/tag-entity';
import { WebhookEntity } from '../entities/webhook-entity';
import { WorkflowEntity } from '../entities/workflow-entity'; import { WorkflowEntity } from '../entities/workflow-entity';
import { WorkflowTagMapping } from '../entities/workflow-tag-mapping'; import { WorkflowTagMapping } from '../entities/workflow-tag-mapping';

View File

@@ -1,21 +1,22 @@
import type { ProcessedData } from '@n8n/db';
import { Container } from '@n8n/di'; import { Container } from '@n8n/di';
import { createHash } from 'crypto'; import { createHash } from 'crypto';
import { import { tryToParseDateTime } from 'n8n-workflow';
type ICheckProcessedContextData, import type {
type IDataDeduplicator, IProcessedDataEntries,
type ICheckProcessedOptions, IProcessedDataLatest,
type IDeduplicationOutput, ICheckProcessedContextData,
type DeduplicationScope, IDataDeduplicator,
type DeduplicationItemTypes, ICheckProcessedOptions,
type DeduplicationMode, IDeduplicationOutput,
tryToParseDateTime, DeduplicationScope,
DeduplicationItemTypes,
DeduplicationMode,
} from 'n8n-workflow'; } from 'n8n-workflow';
import * as assert from 'node:assert/strict'; import * as assert from 'node:assert/strict';
import type { ProcessedData } from '@/databases/entities/processed-data';
import { ProcessedDataRepository } from '@/databases/repositories/processed-data.repository'; import { ProcessedDataRepository } from '@/databases/repositories/processed-data.repository';
import { DeduplicationError } from '@/errors/deduplication.error'; import { DeduplicationError } from '@/errors/deduplication.error';
import type { IProcessedDataEntries, IProcessedDataLatest } from '@/types-db';
export class DeduplicationHelper implements IDataDeduplicator { export class DeduplicationHelper implements IDataDeduplicator {
private static sortEntries( private static sortEntries(

View File

@@ -1,4 +1,5 @@
import type { SourceControlledFile } from '@n8n/api-types'; import type { SourceControlledFile } from '@n8n/api-types';
import type { Variables } from '@n8n/db';
import { Container } from '@n8n/di'; import { Container } from '@n8n/di';
import { mock } from 'jest-mock-extended'; import { mock } from 'jest-mock-extended';
import { InstanceSettings } from 'n8n-core'; import { InstanceSettings } from 'n8n-core';
@@ -6,7 +7,6 @@ import { InstanceSettings } from 'n8n-core';
import type { FolderWithWorkflowAndSubFolderCount } from '@/databases/entities/folder'; import type { FolderWithWorkflowAndSubFolderCount } from '@/databases/entities/folder';
import type { TagEntity } from '@/databases/entities/tag-entity'; import type { TagEntity } from '@/databases/entities/tag-entity';
import type { User } from '@/databases/entities/user'; import type { User } from '@/databases/entities/user';
import type { Variables } from '@/databases/entities/variables';
import type { FolderRepository } from '@/databases/repositories/folder.repository'; import type { FolderRepository } from '@/databases/repositories/folder.repository';
import type { TagRepository } from '@/databases/repositories/tag.repository'; import type { TagRepository } from '@/databases/repositories/tag.repository';
import { SourceControlPreferencesService } from '@/environments.ee/source-control/source-control-preferences.service.ee'; import { SourceControlPreferencesService } from '@/environments.ee/source-control/source-control-preferences.service.ee';

View File

@@ -1,4 +1,5 @@
import type { SourceControlledFile } from '@n8n/api-types'; import type { SourceControlledFile } from '@n8n/api-types';
import type { Variables } from '@n8n/db';
import { Service } from '@n8n/di'; import { Service } from '@n8n/di';
// eslint-disable-next-line n8n-local-rules/misplaced-n8n-typeorm-import // eslint-disable-next-line n8n-local-rules/misplaced-n8n-typeorm-import
import { In } from '@n8n/typeorm'; import { In } from '@n8n/typeorm';
@@ -14,7 +15,6 @@ import type { Project } from '@/databases/entities/project';
import { SharedCredentials } from '@/databases/entities/shared-credentials'; import { SharedCredentials } from '@/databases/entities/shared-credentials';
import type { TagEntity } from '@/databases/entities/tag-entity'; import type { TagEntity } from '@/databases/entities/tag-entity';
import type { User } from '@/databases/entities/user'; import type { User } from '@/databases/entities/user';
import type { Variables } from '@/databases/entities/variables';
import type { WorkflowTagMapping } from '@/databases/entities/workflow-tag-mapping'; import type { WorkflowTagMapping } from '@/databases/entities/workflow-tag-mapping';
import { CredentialsRepository } from '@/databases/repositories/credentials.repository'; import { CredentialsRepository } from '@/databases/repositories/credentials.repository';
import { FolderRepository } from '@/databases/repositories/folder.repository'; import { FolderRepository } from '@/databases/repositories/folder.repository';

View File

@@ -3,6 +3,7 @@ import type {
PushWorkFolderRequestDto, PushWorkFolderRequestDto,
SourceControlledFile, SourceControlledFile,
} from '@n8n/api-types'; } from '@n8n/api-types';
import type { Variables } from '@n8n/db';
import { Service } from '@n8n/di'; import { Service } from '@n8n/di';
import { writeFileSync } from 'fs'; import { writeFileSync } from 'fs';
import { Logger } from 'n8n-core'; import { Logger } from 'n8n-core';
@@ -12,7 +13,6 @@ import type { PushResult } from 'simple-git';
import type { TagEntity } from '@/databases/entities/tag-entity'; import type { TagEntity } from '@/databases/entities/tag-entity';
import type { User } from '@/databases/entities/user'; import type { User } from '@/databases/entities/user';
import type { Variables } from '@/databases/entities/variables';
import { FolderRepository } from '@/databases/repositories/folder.repository'; import { FolderRepository } from '@/databases/repositories/folder.repository';
import { TagRepository } from '@/databases/repositories/tag.repository'; import { TagRepository } from '@/databases/repositories/tag.repository';
import { BadRequestError } from '@/errors/response-errors/bad-request.error'; import { BadRequestError } from '@/errors/response-errors/bad-request.error';

View File

@@ -1,7 +1,7 @@
import { generateNanoId } from '@n8n/db'; import { generateNanoId } from '@n8n/db';
import type { Variables } from '@n8n/db';
import { Service } from '@n8n/di'; import { Service } from '@n8n/di';
import type { Variables } from '@/databases/entities/variables';
import { VariablesRepository } from '@/databases/repositories/variables.repository'; import { VariablesRepository } from '@/databases/repositories/variables.repository';
import { VariableCountLimitReachedError } from '@/errors/variable-count-limit-reached.error'; import { VariableCountLimitReachedError } from '@/errors/variable-count-limit-reached.error';
import { VariableValidationError } from '@/errors/variable-validation.error'; import { VariableValidationError } from '@/errors/variable-validation.error';

View File

@@ -1,9 +1,8 @@
import type { EventDestinations } from '@n8n/db';
import { Container } from '@n8n/di'; import { Container } from '@n8n/di';
import { Logger } from 'n8n-core'; import { Logger } from 'n8n-core';
import { MessageEventBusDestinationTypeNames } from 'n8n-workflow'; import { MessageEventBusDestinationTypeNames } from 'n8n-workflow';
import type { EventDestinations } from '@/databases/entities/event-destinations';
import { MessageEventBusDestinationSentry } from './message-event-bus-destination-sentry.ee'; import { MessageEventBusDestinationSentry } from './message-event-bus-destination-sentry.ee';
import { MessageEventBusDestinationSyslog } from './message-event-bus-destination-syslog.ee'; import { MessageEventBusDestinationSyslog } from './message-event-bus-destination-syslog.ee';
import { MessageEventBusDestinationWebhook } from './message-event-bus-destination-webhook.ee'; import { MessageEventBusDestinationWebhook } from './message-event-bus-destination-webhook.ee';

View File

@@ -1,3 +1,4 @@
import type { Settings } from '@n8n/db';
import { QueryFailedError } from '@n8n/typeorm'; import { QueryFailedError } from '@n8n/typeorm';
import { mock } from 'jest-mock-extended'; import { mock } from 'jest-mock-extended';
import { Client } from 'ldapts'; import { Client } from 'ldapts';
@@ -5,7 +6,6 @@ import type { Cipher } from 'n8n-core';
import { randomString } from 'n8n-workflow'; import { randomString } from 'n8n-workflow';
import config from '@/config'; import config from '@/config';
import type { Settings } from '@/databases/entities/settings';
import { AuthIdentityRepository } from '@/databases/repositories/auth-identity.repository'; import { AuthIdentityRepository } from '@/databases/repositories/auth-identity.repository';
import { SettingsRepository } from '@/databases/repositories/settings.repository'; import { SettingsRepository } from '@/databases/repositories/settings.repository';
import type { EventService } from '@/events/event.service'; import type { EventService } from '@/events/event.service';

View File

@@ -1,4 +1,5 @@
import type { ProjectIcon, ProjectRole, ProjectType } from '@n8n/api-types'; import type { ProjectIcon, ProjectRole, ProjectType } from '@n8n/api-types';
import type { Variables } from '@n8n/db';
import type { AssignableRole, GlobalRole, Scope } from '@n8n/permissions'; import type { AssignableRole, GlobalRole, Scope } from '@n8n/permissions';
import type express from 'express'; import type express from 'express';
import type { import type {
@@ -9,7 +10,6 @@ import type {
import type { Project } from '@/databases/entities/project'; import type { Project } from '@/databases/entities/project';
import type { User } from '@/databases/entities/user'; import type { User } from '@/databases/entities/user';
import type { Variables } from '@/databases/entities/variables';
import type { WorkflowHistory } from '@/databases/entities/workflow-history'; import type { WorkflowHistory } from '@/databases/entities/workflow-history';
import type { ListQuery } from '@/types-db'; import type { ListQuery } from '@/types-db';

View File

@@ -1,4 +1,6 @@
import type { GlobalConfig } from '@n8n/config'; import type { GlobalConfig } from '@n8n/config';
import { InstalledNodes } from '@n8n/db';
import { InstalledPackages } from '@n8n/db';
import axios from 'axios'; import axios from 'axios';
import { exec } from 'child_process'; import { exec } from 'child_process';
import { access as fsAccess, mkdir as fsMkdir } from 'fs/promises'; import { access as fsAccess, mkdir as fsMkdir } from 'fs/promises';
@@ -13,8 +15,6 @@ import {
NPM_PACKAGE_STATUS_GOOD, NPM_PACKAGE_STATUS_GOOD,
RESPONSE_ERROR_MESSAGES, RESPONSE_ERROR_MESSAGES,
} from '@/constants'; } from '@/constants';
import { InstalledNodes } from '@/databases/entities/installed-nodes';
import { InstalledPackages } from '@/databases/entities/installed-packages';
import { InstalledNodesRepository } from '@/databases/repositories/installed-nodes.repository'; import { InstalledNodesRepository } from '@/databases/repositories/installed-nodes.repository';
import { InstalledPackagesRepository } from '@/databases/repositories/installed-packages.repository'; import { InstalledPackagesRepository } from '@/databases/repositories/installed-packages.repository';
import type { CommunityPackages } from '@/interfaces'; import type { CommunityPackages } from '@/interfaces';

View File

@@ -1,5 +1,6 @@
import { GlobalConfig } from '@n8n/config'; import { GlobalConfig } from '@n8n/config';
import { LICENSE_FEATURES } from '@n8n/constants'; import { LICENSE_FEATURES } from '@n8n/constants';
import type { InstalledPackages } from '@n8n/db';
import { Service } from '@n8n/di'; import { Service } from '@n8n/di';
import axios from 'axios'; import axios from 'axios';
import { exec } from 'child_process'; import { exec } from 'child_process';
@@ -16,7 +17,6 @@ import {
RESPONSE_ERROR_MESSAGES, RESPONSE_ERROR_MESSAGES,
UNKNOWN_FAILURE_REASON, UNKNOWN_FAILURE_REASON,
} from '@/constants'; } from '@/constants';
import type { InstalledPackages } from '@/databases/entities/installed-packages';
import { InstalledPackagesRepository } from '@/databases/repositories/installed-packages.repository'; import { InstalledPackagesRepository } from '@/databases/repositories/installed-packages.repository';
import { FeatureNotLicensedError } from '@/errors/feature-not-licensed.error'; import { FeatureNotLicensedError } from '@/errors/feature-not-licensed.error';
import type { CommunityPackages } from '@/interfaces'; import type { CommunityPackages } from '@/interfaces';

View File

@@ -1,3 +1,4 @@
import type { Settings } from '@n8n/db';
import { Service } from '@n8n/di'; import { Service } from '@n8n/di';
// eslint-disable-next-line n8n-local-rules/misplaced-n8n-typeorm-import // eslint-disable-next-line n8n-local-rules/misplaced-n8n-typeorm-import
import type { FindManyOptions, FindOneOptions, FindOptionsWhere } from '@n8n/typeorm'; import type { FindManyOptions, FindOneOptions, FindOptionsWhere } from '@n8n/typeorm';
@@ -8,7 +9,6 @@ import type { NextFunction, Response } from 'express';
import { AuthService } from '@/auth/auth.service'; import { AuthService } from '@/auth/auth.service';
import type { AuthUser } from '@/databases/entities/auth-user'; import type { AuthUser } from '@/databases/entities/auth-user';
import type { CredentialsEntity } from '@/databases/entities/credentials-entity'; import type { CredentialsEntity } from '@/databases/entities/credentials-entity';
import type { Settings } from '@/databases/entities/settings';
import type { User } from '@/databases/entities/user'; import type { User } from '@/databases/entities/user';
import type { WorkflowEntity } from '@/databases/entities/workflow-entity'; import type { WorkflowEntity } from '@/databases/entities/workflow-entity';
import { AuthUserRepository } from '@/databases/repositories/auth-user.repository'; import { AuthUserRepository } from '@/databases/repositories/auth-user.repository';

View File

@@ -1,4 +1,5 @@
import type { SamlPreferences } from '@n8n/api-types'; import type { SamlPreferences } from '@n8n/api-types';
import type { Settings } from '@n8n/db';
import { Service } from '@n8n/di'; import { Service } from '@n8n/di';
import axios from 'axios'; import axios from 'axios';
import type express from 'express'; import type express from 'express';
@@ -8,7 +9,6 @@ import { jsonParse, UnexpectedError } from 'n8n-workflow';
import type { IdentityProviderInstance, ServiceProviderInstance } from 'samlify'; import type { IdentityProviderInstance, ServiceProviderInstance } from 'samlify';
import type { BindingContext, PostBindingContext } from 'samlify/types/src/entity'; import type { BindingContext, PostBindingContext } from 'samlify/types/src/entity';
import type { Settings } from '@/databases/entities/settings';
import type { User } from '@/databases/entities/user'; import type { User } from '@/databases/entities/user';
import { SettingsRepository } from '@/databases/repositories/settings.repository'; import { SettingsRepository } from '@/databases/repositories/settings.repository';
import { UserRepository } from '@/databases/repositories/user.repository'; import { UserRepository } from '@/databases/repositories/user.repository';

View File

@@ -8,8 +8,6 @@ import type {
ExecutionStatus, ExecutionStatus,
FeatureFlags, FeatureFlags,
IUserSettings, IUserSettings,
DeduplicationMode,
DeduplicationItemTypes,
AnnotationVote, AnnotationVote,
ExecutionSummary, ExecutionSummary,
IUser, IUser,
@@ -148,16 +146,6 @@ export interface WorkflowWithSharingsMetaDataAndCredentials extends Omit<Workflo
usedCredentials?: CredentialUsedByWorkflow[]; usedCredentials?: CredentialUsedByWorkflow[];
} }
export interface IProcessedDataLatest {
mode: DeduplicationMode;
data: DeduplicationItemTypes;
}
export interface IProcessedDataEntries {
mode: DeduplicationMode;
data: DeduplicationItemTypes[];
}
/** Payload for creating an execution. */ /** Payload for creating an execution. */
export type CreateExecutionPayload = Omit<IExecutionDb, 'id' | 'createdAt' | 'startedAt'>; export type CreateExecutionPayload = Omit<IExecutionDb, 'id' | 'createdAt' | 'startedAt'>;

View File

@@ -1,10 +1,10 @@
import { WebhookEntity } from '@n8n/db';
import { mock } from 'jest-mock-extended'; import { mock } from 'jest-mock-extended';
import type { INode, INodeType, IWebhookData, IWorkflowExecuteAdditionalData } from 'n8n-workflow'; import type { INode, INodeType, IWebhookData, IWorkflowExecuteAdditionalData } from 'n8n-workflow';
import { Workflow } from 'n8n-workflow'; import { Workflow } from 'n8n-workflow';
import { v4 as uuid } from 'uuid'; import { v4 as uuid } from 'uuid';
import config from '@/config'; import config from '@/config';
import { WebhookEntity } from '@/databases/entities/webhook-entity';
import type { WebhookRepository } from '@/databases/repositories/webhook.repository'; import type { WebhookRepository } from '@/databases/repositories/webhook.repository';
import type { NodeTypes } from '@/node-types'; import type { NodeTypes } from '@/node-types';
import type { CacheService } from '@/services/cache/cache.service'; import type { CacheService } from '@/services/cache/cache.service';

View File

@@ -1,3 +1,4 @@
import type { WebhookEntity } from '@n8n/db';
import { Service } from '@n8n/di'; import { Service } from '@n8n/di';
import { HookContext, WebhookContext, Logger } from 'n8n-core'; import { HookContext, WebhookContext, Logger } from 'n8n-core';
import { Node, NodeHelpers, UnexpectedError } from 'n8n-workflow'; import { Node, NodeHelpers, UnexpectedError } from 'n8n-workflow';
@@ -14,7 +15,6 @@ import type {
WorkflowExecuteMode, WorkflowExecuteMode,
} from 'n8n-workflow'; } from 'n8n-workflow';
import type { WebhookEntity } from '@/databases/entities/webhook-entity';
import { WebhookRepository } from '@/databases/repositories/webhook.repository'; import { WebhookRepository } from '@/databases/repositories/webhook.repository';
import { NodeTypes } from '@/node-types'; import { NodeTypes } from '@/node-types';
import { CacheService } from '@/services/cache/cache.service'; import { CacheService } from '@/services/cache/cache.service';

View File

@@ -1,3 +1,4 @@
import type { WebhookEntity } from '@n8n/db';
import { Container } from '@n8n/di'; import { Container } from '@n8n/di';
import { mock } from 'jest-mock-extended'; import { mock } from 'jest-mock-extended';
import { Logger } from 'n8n-core'; import { Logger } from 'n8n-core';
@@ -13,7 +14,6 @@ import type {
import { ActiveExecutions } from '@/active-executions'; import { ActiveExecutions } from '@/active-executions';
import { ActiveWorkflowManager } from '@/active-workflow-manager'; import { ActiveWorkflowManager } from '@/active-workflow-manager';
import type { WebhookEntity } from '@/databases/entities/webhook-entity';
import { WorkflowRepository } from '@/databases/repositories/workflow.repository'; import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
import { ExecutionService } from '@/executions/execution.service'; import { ExecutionService } from '@/executions/execution.service';
import { ExternalHooks } from '@/external-hooks'; import { ExternalHooks } from '@/external-hooks';

View File

@@ -1,7 +1,7 @@
import type { InstalledNodes } from '@n8n/db';
import type { InstalledPackages } from '@n8n/db';
import path from 'path'; import path from 'path';
import type { InstalledNodes } from '@/databases/entities/installed-nodes';
import type { InstalledPackages } from '@/databases/entities/installed-packages';
import { LoadNodesAndCredentials } from '@/load-nodes-and-credentials'; import { LoadNodesAndCredentials } from '@/load-nodes-and-credentials';
import { CommunityPackagesService } from '@/services/community-packages.service'; import { CommunityPackagesService } from '@/services/community-packages.service';

View File

@@ -1,11 +1,11 @@
import { GlobalConfig } from '@n8n/config'; import { GlobalConfig } from '@n8n/config';
import type { InstalledNodes } from '@n8n/db';
import type { InstalledPackages } from '@n8n/db';
import { Container } from '@n8n/di'; import { Container } from '@n8n/di';
import nock from 'nock'; import nock from 'nock';
import { v4 as uuid } from 'uuid'; import { v4 as uuid } from 'uuid';
import * as constants from '@/constants'; import * as constants from '@/constants';
import type { InstalledNodes } from '@/databases/entities/installed-nodes';
import type { InstalledPackages } from '@/databases/entities/installed-packages';
import { WorkflowRepository } from '@/databases/repositories/workflow.repository'; import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
import type { Risk } from '@/security-audit/types'; import type { Risk } from '@/security-audit/types';
import { toReportTitle } from '@/security-audit/utils'; import { toReportTitle } from '@/security-audit/utils';

View File

@@ -1,7 +1,7 @@
import { InstalledPackages } from '@n8n/db';
import { Container } from '@n8n/di'; import { Container } from '@n8n/di';
import { NODE_PACKAGE_PREFIX } from '@/constants'; import { NODE_PACKAGE_PREFIX } from '@/constants';
import { InstalledPackages } from '@/databases/entities/installed-packages';
import { InstalledNodesRepository } from '@/databases/repositories/installed-nodes.repository'; import { InstalledNodesRepository } from '@/databases/repositories/installed-nodes.repository';
import { InstalledPackagesRepository } from '@/databases/repositories/installed-packages.repository'; import { InstalledPackagesRepository } from '@/databases/repositories/installed-packages.repository';

View File

@@ -1,7 +1,7 @@
import { generateNanoId } from '@n8n/db'; import { generateNanoId } from '@n8n/db';
import type { Variables } from '@n8n/db';
import { Container } from '@n8n/di'; import { Container } from '@n8n/di';
import type { Variables } from '@/databases/entities/variables';
import { VariablesRepository } from '@/databases/repositories/variables.repository'; import { VariablesRepository } from '@/databases/repositories/variables.repository';
import { VariablesService } from '@/environments.ee/variables/variables.service.ee'; import { VariablesService } from '@/environments.ee/variables/variables.service.ee';
import { CacheService } from '@/services/cache/cache.service'; import { CacheService } from '@/services/cache/cache.service';

View File

@@ -704,6 +704,16 @@ export type DeduplicationScope = 'node' | 'workflow';
export type DeduplicationItemTypes = string | number; export type DeduplicationItemTypes = string | number;
export type DeduplicationMode = 'entries' | 'latestIncrementalKey' | 'latestDate'; export type DeduplicationMode = 'entries' | 'latestIncrementalKey' | 'latestDate';
export interface IProcessedDataLatest {
mode: DeduplicationMode;
data: DeduplicationItemTypes;
}
export interface IProcessedDataEntries {
mode: DeduplicationMode;
data: DeduplicationItemTypes[];
}
export interface IDeduplicationOutput { export interface IDeduplicationOutput {
new: DeduplicationItemTypes[]; new: DeduplicationItemTypes[];
processed: DeduplicationItemTypes[]; processed: DeduplicationItemTypes[];