mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-16 17:46:45 +00:00
refactor(core): Split out database types (#14942)
This commit is contained in:
@@ -6,10 +6,10 @@ import { createDeferredPromise } from 'n8n-workflow';
|
|||||||
import type { ActiveExecutions } from '@/active-executions';
|
import type { ActiveExecutions } from '@/active-executions';
|
||||||
import type { Project } from '@/databases/entities/project';
|
import type { Project } from '@/databases/entities/project';
|
||||||
import type { ExecutionRepository } from '@/databases/repositories/execution.repository';
|
import type { ExecutionRepository } from '@/databases/repositories/execution.repository';
|
||||||
import type { IExecutionResponse } from '@/interfaces';
|
|
||||||
import type { MultiMainSetup } from '@/scaling/multi-main-setup.ee';
|
import type { MultiMainSetup } from '@/scaling/multi-main-setup.ee';
|
||||||
import { OrchestrationService } from '@/services/orchestration.service';
|
import { OrchestrationService } from '@/services/orchestration.service';
|
||||||
import type { OwnershipService } from '@/services/ownership.service';
|
import type { OwnershipService } from '@/services/ownership.service';
|
||||||
|
import type { IExecutionResponse } from '@/types-db';
|
||||||
import { WaitTracker } from '@/wait-tracker';
|
import { WaitTracker } from '@/wait-tracker';
|
||||||
import type { WorkflowRunner } from '@/workflow-runner';
|
import type { WorkflowRunner } from '@/workflow-runner';
|
||||||
import { mockLogger } from '@test/mocking';
|
import { mockLogger } from '@test/mocking';
|
||||||
|
|||||||
@@ -46,11 +46,11 @@ import { WorkflowRepository } from '@/databases/repositories/workflow.repository
|
|||||||
import { executeErrorWorkflow } from '@/execution-lifecycle/execute-error-workflow';
|
import { executeErrorWorkflow } from '@/execution-lifecycle/execute-error-workflow';
|
||||||
import { ExecutionService } from '@/executions/execution.service';
|
import { ExecutionService } from '@/executions/execution.service';
|
||||||
import { ExternalHooks } from '@/external-hooks';
|
import { ExternalHooks } from '@/external-hooks';
|
||||||
import type { IWorkflowDb } from '@/interfaces';
|
|
||||||
import { NodeTypes } from '@/node-types';
|
import { NodeTypes } from '@/node-types';
|
||||||
import { Publisher } from '@/scaling/pubsub/publisher.service';
|
import { Publisher } from '@/scaling/pubsub/publisher.service';
|
||||||
import { ActiveWorkflowsService } from '@/services/active-workflows.service';
|
import { ActiveWorkflowsService } from '@/services/active-workflows.service';
|
||||||
import { OrchestrationService } from '@/services/orchestration.service';
|
import { OrchestrationService } from '@/services/orchestration.service';
|
||||||
|
import type { IWorkflowDb } from '@/types-db';
|
||||||
import * as WebhookHelpers from '@/webhooks/webhook-helpers';
|
import * as WebhookHelpers from '@/webhooks/webhook-helpers';
|
||||||
import { WebhookService } from '@/webhooks/webhook.service';
|
import { WebhookService } from '@/webhooks/webhook.service';
|
||||||
import * as WorkflowExecuteAdditionalData from '@/workflow-execute-additional-data';
|
import * as WorkflowExecuteAdditionalData from '@/workflow-execute-additional-data';
|
||||||
|
|||||||
@@ -6,7 +6,8 @@ import { UserError } from 'n8n-workflow';
|
|||||||
import path from 'path';
|
import path from 'path';
|
||||||
|
|
||||||
import { CredentialsRepository } from '@/databases/repositories/credentials.repository';
|
import { CredentialsRepository } from '@/databases/repositories/credentials.repository';
|
||||||
import type { ICredentialsDb, ICredentialsDecryptedDb } from '@/interfaces';
|
import type { ICredentialsDecryptedDb } from '@/interfaces';
|
||||||
|
import type { ICredentialsDb } from '@/types-db';
|
||||||
|
|
||||||
import { BaseCommand } from '../base-command';
|
import { BaseCommand } from '../base-command';
|
||||||
|
|
||||||
|
|||||||
@@ -14,11 +14,11 @@ import { BadRequestError } from '@/errors/response-errors/bad-request.error';
|
|||||||
import { InvalidMfaCodeError } from '@/errors/response-errors/invalid-mfa-code.error';
|
import { InvalidMfaCodeError } from '@/errors/response-errors/invalid-mfa-code.error';
|
||||||
import { EventService } from '@/events/event.service';
|
import { EventService } from '@/events/event.service';
|
||||||
import { ExternalHooks } from '@/external-hooks';
|
import { ExternalHooks } from '@/external-hooks';
|
||||||
import type { PublicUser } from '@/interfaces';
|
|
||||||
import { License } from '@/license';
|
import { License } from '@/license';
|
||||||
import { MfaService } from '@/mfa/mfa.service';
|
import { MfaService } from '@/mfa/mfa.service';
|
||||||
import type { AuthenticatedRequest, MeRequest } from '@/requests';
|
import type { AuthenticatedRequest, MeRequest } from '@/requests';
|
||||||
import { UserService } from '@/services/user.service';
|
import { UserService } from '@/services/user.service';
|
||||||
|
import type { PublicUser } from '@/types-db';
|
||||||
import { mockInstance } from '@test/mocking';
|
import { mockInstance } from '@test/mocking';
|
||||||
import { badPasswords } from '@test/test-data';
|
import { badPasswords } from '@test/test-data';
|
||||||
|
|
||||||
|
|||||||
@@ -11,10 +11,10 @@ import type { SettingsRepository } from '@/databases/repositories/settings.repos
|
|||||||
import type { UserRepository } from '@/databases/repositories/user.repository';
|
import type { UserRepository } from '@/databases/repositories/user.repository';
|
||||||
import { BadRequestError } from '@/errors/response-errors/bad-request.error';
|
import { BadRequestError } from '@/errors/response-errors/bad-request.error';
|
||||||
import type { EventService } from '@/events/event.service';
|
import type { EventService } from '@/events/event.service';
|
||||||
import type { PublicUser } from '@/interfaces';
|
|
||||||
import type { AuthenticatedRequest } from '@/requests';
|
import type { AuthenticatedRequest } from '@/requests';
|
||||||
import type { PasswordUtility } from '@/services/password.utility';
|
import type { PasswordUtility } from '@/services/password.utility';
|
||||||
import type { UserService } from '@/services/user.service';
|
import type { UserService } from '@/services/user.service';
|
||||||
|
import type { PublicUser } from '@/types-db';
|
||||||
|
|
||||||
describe('OwnerController', () => {
|
describe('OwnerController', () => {
|
||||||
const configGetSpy = jest.spyOn(config, 'getEnv');
|
const configGetSpy = jest.spyOn(config, 'getEnv');
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ import { AuthError } from '@/errors/response-errors/auth.error';
|
|||||||
import { BadRequestError } from '@/errors/response-errors/bad-request.error';
|
import { BadRequestError } from '@/errors/response-errors/bad-request.error';
|
||||||
import { ForbiddenError } from '@/errors/response-errors/forbidden.error';
|
import { ForbiddenError } from '@/errors/response-errors/forbidden.error';
|
||||||
import { EventService } from '@/events/event.service';
|
import { EventService } from '@/events/event.service';
|
||||||
import type { PublicUser } from '@/interfaces';
|
|
||||||
import { License } from '@/license';
|
import { License } from '@/license';
|
||||||
import { MfaService } from '@/mfa/mfa.service';
|
import { MfaService } from '@/mfa/mfa.service';
|
||||||
import { PostHogClient } from '@/posthog';
|
import { PostHogClient } from '@/posthog';
|
||||||
@@ -24,6 +23,7 @@ import {
|
|||||||
isLdapCurrentAuthenticationMethod,
|
isLdapCurrentAuthenticationMethod,
|
||||||
isSamlCurrentAuthenticationMethod,
|
isSamlCurrentAuthenticationMethod,
|
||||||
} from '@/sso.ee/sso-helpers';
|
} from '@/sso.ee/sso-helpers';
|
||||||
|
import type { PublicUser } from '@/types-db';
|
||||||
|
|
||||||
@RestController()
|
@RestController()
|
||||||
export class AuthController {
|
export class AuthController {
|
||||||
|
|||||||
@@ -17,12 +17,12 @@ import { InvalidMfaCodeError } from '@/errors/response-errors/invalid-mfa-code.e
|
|||||||
import { EventService } from '@/events/event.service';
|
import { EventService } from '@/events/event.service';
|
||||||
import { ExternalHooks } from '@/external-hooks';
|
import { ExternalHooks } from '@/external-hooks';
|
||||||
import { validateEntity } from '@/generic-helpers';
|
import { validateEntity } from '@/generic-helpers';
|
||||||
import type { PublicUser } from '@/interfaces';
|
|
||||||
import { MfaService } from '@/mfa/mfa.service';
|
import { MfaService } from '@/mfa/mfa.service';
|
||||||
import { AuthenticatedRequest, MeRequest } from '@/requests';
|
import { AuthenticatedRequest, MeRequest } from '@/requests';
|
||||||
import { PasswordUtility } from '@/services/password.utility';
|
import { PasswordUtility } from '@/services/password.utility';
|
||||||
import { UserService } from '@/services/user.service';
|
import { UserService } from '@/services/user.service';
|
||||||
import { isSamlLicensedAndEnabled } from '@/sso.ee/saml/saml-helpers';
|
import { isSamlLicensedAndEnabled } from '@/sso.ee/saml/saml-helpers';
|
||||||
|
import type { PublicUser } from '@/types-db';
|
||||||
|
|
||||||
import { PersonalizationSurveyAnswersV4 } from './survey-answers.dto';
|
import { PersonalizationSurveyAnswersV4 } from './survey-answers.dto';
|
||||||
@RestController('/me')
|
@RestController('/me')
|
||||||
|
|||||||
@@ -15,9 +15,9 @@ import { AuthError } from '@/errors/response-errors/auth.error';
|
|||||||
import { BadRequestError } from '@/errors/response-errors/bad-request.error';
|
import { BadRequestError } from '@/errors/response-errors/bad-request.error';
|
||||||
import { NotFoundError } from '@/errors/response-errors/not-found.error';
|
import { NotFoundError } from '@/errors/response-errors/not-found.error';
|
||||||
import { ExternalHooks } from '@/external-hooks';
|
import { ExternalHooks } from '@/external-hooks';
|
||||||
import type { ICredentialsDb } from '@/interfaces';
|
|
||||||
import type { AuthenticatedRequest, OAuthRequest } from '@/requests';
|
import type { AuthenticatedRequest, OAuthRequest } from '@/requests';
|
||||||
import { UrlService } from '@/services/url.service';
|
import { UrlService } from '@/services/url.service';
|
||||||
|
import type { ICredentialsDb } from '@/types-db';
|
||||||
import * as WorkflowExecuteAdditionalData from '@/workflow-execute-additional-data';
|
import * as WorkflowExecuteAdditionalData from '@/workflow-execute-additional-data';
|
||||||
|
|
||||||
type CsrfStateParam = {
|
type CsrfStateParam = {
|
||||||
|
|||||||
@@ -26,12 +26,12 @@ import { ForbiddenError } from '@/errors/response-errors/forbidden.error';
|
|||||||
import { NotFoundError } from '@/errors/response-errors/not-found.error';
|
import { NotFoundError } from '@/errors/response-errors/not-found.error';
|
||||||
import { EventService } from '@/events/event.service';
|
import { EventService } from '@/events/event.service';
|
||||||
import { ExternalHooks } from '@/external-hooks';
|
import { ExternalHooks } from '@/external-hooks';
|
||||||
import type { PublicUser } from '@/interfaces';
|
|
||||||
import { listQueryMiddleware } from '@/middlewares';
|
import { listQueryMiddleware } from '@/middlewares';
|
||||||
import { AuthenticatedRequest, ListQuery, UserRequest } from '@/requests';
|
import { AuthenticatedRequest, ListQuery, UserRequest } from '@/requests';
|
||||||
import { FolderService } from '@/services/folder.service';
|
import { FolderService } from '@/services/folder.service';
|
||||||
import { ProjectService } from '@/services/project.service.ee';
|
import { ProjectService } from '@/services/project.service.ee';
|
||||||
import { UserService } from '@/services/user.service';
|
import { UserService } from '@/services/user.service';
|
||||||
|
import type { PublicUser } from '@/types-db';
|
||||||
import { WorkflowService } from '@/workflows/workflow.service';
|
import { WorkflowService } from '@/workflows/workflow.service';
|
||||||
|
|
||||||
@RestController('/users')
|
@RestController('/users')
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ import { CredentialsOverwrites } from '@/credentials-overwrites';
|
|||||||
import type { CredentialsEntity } from '@/databases/entities/credentials-entity';
|
import type { CredentialsEntity } from '@/databases/entities/credentials-entity';
|
||||||
import { CredentialsRepository } from '@/databases/repositories/credentials.repository';
|
import { CredentialsRepository } from '@/databases/repositories/credentials.repository';
|
||||||
import { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository';
|
import { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository';
|
||||||
import type { ICredentialsDb } from '@/interfaces';
|
import type { ICredentialsDb } from '@/types-db';
|
||||||
|
|
||||||
import { RESPONSE_ERROR_MESSAGES } from './constants';
|
import { RESPONSE_ERROR_MESSAGES } from './constants';
|
||||||
import { CredentialNotFoundError } from './errors/credential-not-found.error';
|
import { CredentialNotFoundError } from './errors/credential-not-found.error';
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ import { BadRequestError } from '@/errors/response-errors/bad-request.error';
|
|||||||
import { NotFoundError } from '@/errors/response-errors/not-found.error';
|
import { NotFoundError } from '@/errors/response-errors/not-found.error';
|
||||||
import { ExternalHooks } from '@/external-hooks';
|
import { ExternalHooks } from '@/external-hooks';
|
||||||
import { validateEntity } from '@/generic-helpers';
|
import { validateEntity } from '@/generic-helpers';
|
||||||
import type { ICredentialsDb } from '@/interfaces';
|
|
||||||
import { userHasScopes } from '@/permissions.ee/check-access';
|
import { userHasScopes } from '@/permissions.ee/check-access';
|
||||||
import type { CredentialRequest, ListQuery } from '@/requests';
|
import type { CredentialRequest, ListQuery } from '@/requests';
|
||||||
import { CredentialsTester } from '@/services/credentials-tester.service';
|
import { CredentialsTester } from '@/services/credentials-tester.service';
|
||||||
@@ -40,6 +39,7 @@ import { OwnershipService } from '@/services/ownership.service';
|
|||||||
import { ProjectService } from '@/services/project.service.ee';
|
import { ProjectService } from '@/services/project.service.ee';
|
||||||
import type { ScopesField } from '@/services/role.service';
|
import type { ScopesField } from '@/services/role.service';
|
||||||
import { RoleService } from '@/services/role.service';
|
import { RoleService } from '@/services/role.service';
|
||||||
|
import type { ICredentialsDb } from '@/types-db';
|
||||||
|
|
||||||
import { CredentialsFinderService } from './credentials-finder.service';
|
import { CredentialsFinderService } from './credentials-finder.service';
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { Column, Entity, Index, OneToMany } from '@n8n/typeorm';
|
import { Column, Entity, Index, OneToMany } from '@n8n/typeorm';
|
||||||
import { IsObject, IsString, Length } from 'class-validator';
|
import { IsObject, IsString, Length } from 'class-validator';
|
||||||
|
|
||||||
import type { ICredentialsDb } from '@/interfaces';
|
import type { ICredentialsDb } from '@/types-db';
|
||||||
|
|
||||||
import { WithTimestampsAndStringId } from './abstract-entity';
|
import { WithTimestampsAndStringId } from './abstract-entity';
|
||||||
import type { SharedCredentials } from './shared-credentials';
|
import type { SharedCredentials } from './shared-credentials';
|
||||||
|
|||||||
@@ -13,12 +13,12 @@ import {
|
|||||||
import { IsEmail, IsString, Length } from 'class-validator';
|
import { IsEmail, IsString, Length } from 'class-validator';
|
||||||
import type { IUser, IUserSettings } from 'n8n-workflow';
|
import type { IUser, IUserSettings } from 'n8n-workflow';
|
||||||
|
|
||||||
import type { IPersonalizationSurveyAnswers } from '@/interfaces';
|
|
||||||
import {
|
import {
|
||||||
GLOBAL_OWNER_SCOPES,
|
GLOBAL_OWNER_SCOPES,
|
||||||
GLOBAL_MEMBER_SCOPES,
|
GLOBAL_MEMBER_SCOPES,
|
||||||
GLOBAL_ADMIN_SCOPES,
|
GLOBAL_ADMIN_SCOPES,
|
||||||
} from '@/permissions.ee/global-roles';
|
} from '@/permissions.ee/global-roles';
|
||||||
|
import type { IPersonalizationSurveyAnswers } from '@/types-db';
|
||||||
import { NoUrl } from '@/validators/no-url.validator';
|
import { NoUrl } from '@/validators/no-url.validator';
|
||||||
import { NoXss } from '@/validators/no-xss.validator';
|
import { NoXss } from '@/validators/no-xss.validator';
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import { Length } from 'class-validator';
|
|||||||
import { IConnections, IDataObject, IWorkflowSettings, WorkflowFEMeta } from 'n8n-workflow';
|
import { IConnections, IDataObject, IWorkflowSettings, WorkflowFEMeta } from 'n8n-workflow';
|
||||||
import type { IBinaryKeyData, INode, IPairedItemData } from 'n8n-workflow';
|
import type { IBinaryKeyData, INode, IPairedItemData } from 'n8n-workflow';
|
||||||
|
|
||||||
import type { IWorkflowDb } from '@/interfaces';
|
import type { IWorkflowDb } from '@/types-db';
|
||||||
|
|
||||||
import { WithTimestampsAndStringId, dbType, jsonColumnType } from './abstract-entity';
|
import { WithTimestampsAndStringId, dbType, jsonColumnType } from './abstract-entity';
|
||||||
import { type Folder } from './folder';
|
import { type Folder } from './folder';
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import type { MigrationContext, ReversibleMigration } from '@/databases/types';
|
import type { MigrationContext, ReversibleMigration } from '@/databases/types';
|
||||||
import type { UserSettings } from '@/interfaces';
|
import type { UserSettings } from '@/types-db';
|
||||||
|
|
||||||
export class AddUserActivatedProperty1681134145996 implements ReversibleMigration {
|
export class AddUserActivatedProperty1681134145996 implements ReversibleMigration {
|
||||||
async up({ queryRunner, tablePrefix }: MigrationContext) {
|
async up({ queryRunner, tablePrefix }: MigrationContext) {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import type { MigrationContext, ReversibleMigration } from '@/databases/types';
|
import type { MigrationContext, ReversibleMigration } from '@/databases/types';
|
||||||
import type { UserSettings } from '@/interfaces';
|
import type { UserSettings } from '@/types-db';
|
||||||
|
|
||||||
export class AddUserActivatedProperty1681134145996 implements ReversibleMigration {
|
export class AddUserActivatedProperty1681134145996 implements ReversibleMigration {
|
||||||
async up({ queryRunner, tablePrefix }: MigrationContext) {
|
async up({ queryRunner, tablePrefix }: MigrationContext) {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import type { MigrationContext, ReversibleMigration } from '@/databases/types';
|
import type { MigrationContext, ReversibleMigration } from '@/databases/types';
|
||||||
import type { UserSettings } from '@/interfaces';
|
import type { UserSettings } from '@/types-db';
|
||||||
|
|
||||||
export class AddUserActivatedProperty1681134145996 implements ReversibleMigration {
|
export class AddUserActivatedProperty1681134145996 implements ReversibleMigration {
|
||||||
async up({ queryRunner, tablePrefix }: MigrationContext) {
|
async up({ queryRunner, tablePrefix }: MigrationContext) {
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import { nanoid } from 'nanoid';
|
|||||||
|
|
||||||
import { ExecutionEntity } from '@/databases/entities/execution-entity';
|
import { ExecutionEntity } from '@/databases/entities/execution-entity';
|
||||||
import { ExecutionRepository } from '@/databases/repositories/execution.repository';
|
import { ExecutionRepository } from '@/databases/repositories/execution.repository';
|
||||||
import type { IExecutionResponse } from '@/interfaces';
|
import type { IExecutionResponse } from '@/types-db';
|
||||||
import { mockInstance, mockEntityManager } from '@test/mocking';
|
import { mockInstance, mockEntityManager } from '@test/mocking';
|
||||||
|
|
||||||
describe('ExecutionRepository', () => {
|
describe('ExecutionRepository', () => {
|
||||||
|
|||||||
@@ -36,12 +36,8 @@ import { AnnotationTagMapping } from '@/databases/entities/annotation-tag-mappin
|
|||||||
import { ExecutionAnnotation } from '@/databases/entities/execution-annotation.ee';
|
import { ExecutionAnnotation } from '@/databases/entities/execution-annotation.ee';
|
||||||
import { PostgresLiveRowsRetrievalError } from '@/errors/postgres-live-rows-retrieval.error';
|
import { PostgresLiveRowsRetrievalError } from '@/errors/postgres-live-rows-retrieval.error';
|
||||||
import type { ExecutionSummaries } from '@/executions/execution.types';
|
import type { ExecutionSummaries } from '@/executions/execution.types';
|
||||||
import type {
|
import type { CreateExecutionPayload, IExecutionFlattedDb } from '@/interfaces';
|
||||||
CreateExecutionPayload,
|
import type { IExecutionBase, IExecutionResponse } from '@/types-db';
|
||||||
IExecutionBase,
|
|
||||||
IExecutionFlattedDb,
|
|
||||||
IExecutionResponse,
|
|
||||||
} from '@/interfaces';
|
|
||||||
import { separate } from '@/utils';
|
import { separate } from '@/utils';
|
||||||
|
|
||||||
import { ExecutionDataRepository } from './execution-data.repository';
|
import { ExecutionDataRepository } from './execution-data.repository';
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import type { EntityManager } from '@n8n/typeorm';
|
|||||||
import { DataSource, In, Repository } from '@n8n/typeorm';
|
import { DataSource, In, Repository } from '@n8n/typeorm';
|
||||||
import intersection from 'lodash/intersection';
|
import intersection from 'lodash/intersection';
|
||||||
|
|
||||||
import type { IWorkflowDb } from '@/interfaces';
|
import type { IWorkflowDb } from '@/types-db';
|
||||||
|
|
||||||
import { TagEntity } from '../entities/tag-entity';
|
import { TagEntity } from '../entities/tag-entity';
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import { SharedWorkflowRepository } from '@/databases/repositories/shared-workfl
|
|||||||
import { TagRepository } from '@/databases/repositories/tag.repository';
|
import { TagRepository } from '@/databases/repositories/tag.repository';
|
||||||
import { WorkflowTagMappingRepository } from '@/databases/repositories/workflow-tag-mapping.repository';
|
import { WorkflowTagMappingRepository } from '@/databases/repositories/workflow-tag-mapping.repository';
|
||||||
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
|
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
|
||||||
import type { IWorkflowDb } from '@/interfaces';
|
import type { IWorkflowDb } from '@/types-db';
|
||||||
import { formatWorkflow } from '@/workflows/workflow.formatter';
|
import { formatWorkflow } from '@/workflows/workflow.formatter';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import type { IWorkflowBase, JsonObject } from 'n8n-workflow';
|
import type { IWorkflowBase, JsonObject } from 'n8n-workflow';
|
||||||
import { EventMessageTypeNames } from 'n8n-workflow';
|
import { EventMessageTypeNames } from 'n8n-workflow';
|
||||||
|
|
||||||
import type { IExecutionBase } from '@/interfaces';
|
import type { IExecutionBase } from '@/types-db';
|
||||||
|
|
||||||
import type { EventNamesWorkflowType } from '.';
|
import type { EventNamesWorkflowType } from '.';
|
||||||
import { AbstractEventMessage, isEventMessageOptionsWithType } from './abstract-event-message';
|
import { AbstractEventMessage, isEventMessageOptionsWithType } from './abstract-event-message';
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import type { MessageEventBus } from '@/eventbus/message-event-bus/message-event
|
|||||||
import { EventService } from '@/events/event.service';
|
import { EventService } from '@/events/event.service';
|
||||||
import type { RelayEventMap } from '@/events/maps/relay.event-map';
|
import type { RelayEventMap } from '@/events/maps/relay.event-map';
|
||||||
import { LogStreamingEventRelay } from '@/events/relays/log-streaming.event-relay';
|
import { LogStreamingEventRelay } from '@/events/relays/log-streaming.event-relay';
|
||||||
import type { IWorkflowDb } from '@/interfaces';
|
import type { IWorkflowDb } from '@/types-db';
|
||||||
|
|
||||||
describe('LogStreamingEventRelay', () => {
|
describe('LogStreamingEventRelay', () => {
|
||||||
const eventBus = mock<MessageEventBus>();
|
const eventBus = mock<MessageEventBus>();
|
||||||
|
|||||||
@@ -14,10 +14,10 @@ import type { WorkflowRepository } from '@/databases/repositories/workflow.repos
|
|||||||
import { EventService } from '@/events/event.service';
|
import { EventService } from '@/events/event.service';
|
||||||
import type { RelayEventMap } from '@/events/maps/relay.event-map';
|
import type { RelayEventMap } from '@/events/maps/relay.event-map';
|
||||||
import { TelemetryEventRelay } from '@/events/relays/telemetry.event-relay';
|
import { TelemetryEventRelay } from '@/events/relays/telemetry.event-relay';
|
||||||
import type { IWorkflowDb } from '@/interfaces';
|
|
||||||
import type { License } from '@/license';
|
import type { License } from '@/license';
|
||||||
import type { NodeTypes } from '@/node-types';
|
import type { NodeTypes } from '@/node-types';
|
||||||
import type { Telemetry } from '@/telemetry';
|
import type { Telemetry } from '@/telemetry';
|
||||||
|
import type { IWorkflowDb } from '@/types-db';
|
||||||
import { mockInstance } from '@test/mocking';
|
import { mockInstance } from '@test/mocking';
|
||||||
|
|
||||||
const flushPromises = async () => await new Promise((resolve) => setImmediate(resolve));
|
const flushPromises = async () => await new Promise((resolve) => setImmediate(resolve));
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import type {
|
|||||||
import type { ConcurrencyQueueType } from '@/concurrency/concurrency-control.service';
|
import type { ConcurrencyQueueType } from '@/concurrency/concurrency-control.service';
|
||||||
import type { AuthProviderType } from '@/databases/entities/auth-identity';
|
import type { AuthProviderType } from '@/databases/entities/auth-identity';
|
||||||
import type { User } from '@/databases/entities/user';
|
import type { User } from '@/databases/entities/user';
|
||||||
import type { IWorkflowDb } from '@/interfaces';
|
import type { IWorkflowDb } from '@/types-db';
|
||||||
|
|
||||||
import type { AiEventMap } from './ai.event-map';
|
import type { AiEventMap } from './ai.event-map';
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { Logger } from 'n8n-core';
|
|||||||
import type { IRunExecutionData, ITaskData } from 'n8n-workflow';
|
import type { IRunExecutionData, ITaskData } from 'n8n-workflow';
|
||||||
|
|
||||||
import { ExecutionRepository } from '@/databases/repositories/execution.repository';
|
import { ExecutionRepository } from '@/databases/repositories/execution.repository';
|
||||||
import type { IExecutionResponse } from '@/interfaces';
|
import type { IExecutionResponse } from '@/types-db';
|
||||||
import { mockInstance } from '@test/mocking';
|
import { mockInstance } from '@test/mocking';
|
||||||
|
|
||||||
import { saveExecutionProgress } from '../save-execution-progress';
|
import { saveExecutionProgress } from '../save-execution-progress';
|
||||||
|
|||||||
@@ -9,9 +9,9 @@ import { AbortedExecutionRetryError } from '@/errors/aborted-execution-retry.err
|
|||||||
import { MissingExecutionStopError } from '@/errors/missing-execution-stop.error';
|
import { MissingExecutionStopError } from '@/errors/missing-execution-stop.error';
|
||||||
import { ExecutionService } from '@/executions/execution.service';
|
import { ExecutionService } from '@/executions/execution.service';
|
||||||
import type { ExecutionRequest } from '@/executions/execution.types';
|
import type { ExecutionRequest } from '@/executions/execution.types';
|
||||||
import type { IExecutionResponse } from '@/interfaces';
|
|
||||||
import { ScalingService } from '@/scaling/scaling.service';
|
import { ScalingService } from '@/scaling/scaling.service';
|
||||||
import type { Job } from '@/scaling/scaling.types';
|
import type { Job } from '@/scaling/scaling.types';
|
||||||
|
import type { IExecutionResponse } from '@/types-db';
|
||||||
import type { WaitTracker } from '@/wait-tracker';
|
import type { WaitTracker } from '@/wait-tracker';
|
||||||
import { mockInstance } from '@test/mocking';
|
import { mockInstance } from '@test/mocking';
|
||||||
|
|
||||||
|
|||||||
@@ -9,8 +9,8 @@ import { ExecutionRepository } from '@/databases/repositories/execution.reposito
|
|||||||
import { NodeCrashedError } from '@/errors/node-crashed.error';
|
import { NodeCrashedError } from '@/errors/node-crashed.error';
|
||||||
import { WorkflowCrashedError } from '@/errors/workflow-crashed.error';
|
import { WorkflowCrashedError } from '@/errors/workflow-crashed.error';
|
||||||
import { getLifecycleHooksForRegularMain } from '@/execution-lifecycle/execution-lifecycle-hooks';
|
import { getLifecycleHooksForRegularMain } from '@/execution-lifecycle/execution-lifecycle-hooks';
|
||||||
import type { IExecutionResponse } from '@/interfaces';
|
|
||||||
import { Push } from '@/push';
|
import { Push } from '@/push';
|
||||||
|
import type { IExecutionResponse } from '@/types-db';
|
||||||
|
|
||||||
import type { EventMessageTypes } from '../eventbus/event-message-classes';
|
import type { EventMessageTypes } from '../eventbus/event-message-classes';
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import { Service } from '@n8n/di';
|
import { Service } from '@n8n/di';
|
||||||
|
|
||||||
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
|
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
|
||||||
import type { IExecutionResponse, IExecutionFlattedResponse } from '@/interfaces';
|
import type { IExecutionFlattedResponse } from '@/interfaces';
|
||||||
import type { WorkflowWithSharingsAndCredentials } from '@/workflows/workflows.types';
|
import type { WorkflowWithSharingsAndCredentials, IExecutionResponse } from '@/types-db';
|
||||||
|
|
||||||
import { ExecutionService } from './execution.service';
|
import { ExecutionService } from './execution.service';
|
||||||
import type { ExecutionRequest } from './execution.types';
|
import type { ExecutionRequest } from './execution.types';
|
||||||
|
|||||||
@@ -33,13 +33,10 @@ import { MissingExecutionStopError } from '@/errors/missing-execution-stop.error
|
|||||||
import { QueuedExecutionRetryError } from '@/errors/queued-execution-retry.error';
|
import { QueuedExecutionRetryError } from '@/errors/queued-execution-retry.error';
|
||||||
import { InternalServerError } from '@/errors/response-errors/internal-server.error';
|
import { InternalServerError } from '@/errors/response-errors/internal-server.error';
|
||||||
import { NotFoundError } from '@/errors/response-errors/not-found.error';
|
import { NotFoundError } from '@/errors/response-errors/not-found.error';
|
||||||
import type {
|
import type { CreateExecutionPayload, IExecutionFlattedResponse } from '@/interfaces';
|
||||||
CreateExecutionPayload,
|
|
||||||
IExecutionFlattedResponse,
|
|
||||||
IExecutionResponse,
|
|
||||||
} from '@/interfaces';
|
|
||||||
import { License } from '@/license';
|
import { License } from '@/license';
|
||||||
import { NodeTypes } from '@/node-types';
|
import { NodeTypes } from '@/node-types';
|
||||||
|
import type { IExecutionResponse } from '@/types-db';
|
||||||
import { WaitTracker } from '@/wait-tracker';
|
import { WaitTracker } from '@/wait-tracker';
|
||||||
import { WorkflowRunner } from '@/workflow-runner';
|
import { WorkflowRunner } from '@/workflow-runner';
|
||||||
import { WorkflowSharingService } from '@/workflows/workflow-sharing.service';
|
import { WorkflowSharingService } from '@/workflows/workflow-sharing.service';
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import { CredentialsRepository } from '@/databases/repositories/credentials.repo
|
|||||||
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';
|
||||||
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
|
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
|
||||||
import type { ICredentialsDb, PublicUser } from '@/interfaces';
|
import type { ICredentialsDb, PublicUser } from '@/types-db';
|
||||||
|
|
||||||
type Repositories = {
|
type Repositories = {
|
||||||
User: UserRepository;
|
User: UserRepository;
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
import type { AssignableRole, GlobalRole, Scope } from '@n8n/permissions';
|
import type { AssignableRole } from '@n8n/permissions';
|
||||||
import type { Application } from 'express';
|
import type { Application } from 'express';
|
||||||
import type {
|
import type {
|
||||||
ExecutionError,
|
ExecutionError,
|
||||||
ICredentialDataDecryptedObject,
|
ICredentialDataDecryptedObject,
|
||||||
ICredentialsDecrypted,
|
ICredentialsDecrypted,
|
||||||
ICredentialsEncrypted,
|
|
||||||
IDeferredPromise,
|
IDeferredPromise,
|
||||||
IExecuteResponsePromiseData,
|
IExecuteResponsePromiseData,
|
||||||
IRun,
|
IRun,
|
||||||
@@ -15,8 +14,6 @@ import type {
|
|||||||
WorkflowExecuteMode,
|
WorkflowExecuteMode,
|
||||||
ExecutionStatus,
|
ExecutionStatus,
|
||||||
ExecutionSummary,
|
ExecutionSummary,
|
||||||
FeatureFlags,
|
|
||||||
IUserSettings,
|
|
||||||
IWorkflowExecutionDataProcess,
|
IWorkflowExecutionDataProcess,
|
||||||
DeduplicationMode,
|
DeduplicationMode,
|
||||||
DeduplicationItemTypes,
|
DeduplicationItemTypes,
|
||||||
@@ -24,15 +21,8 @@ import type {
|
|||||||
import type PCancelable from 'p-cancelable';
|
import type PCancelable from 'p-cancelable';
|
||||||
|
|
||||||
import type { ActiveWorkflowManager } from '@/active-workflow-manager';
|
import type { ActiveWorkflowManager } from '@/active-workflow-manager';
|
||||||
import type { AnnotationTagEntity } from '@/databases/entities/annotation-tag-entity.ee';
|
import type { ExternalHooks } from '@/external-hooks';
|
||||||
import type { AuthProviderType } from '@/databases/entities/auth-identity';
|
import type { ICredentialsBase, IExecutionBase, ITagBase } from '@/types-db';
|
||||||
import type { SharedCredentials } from '@/databases/entities/shared-credentials';
|
|
||||||
import type { TagEntity } from '@/databases/entities/tag-entity';
|
|
||||||
import type { User } from '@/databases/entities/user';
|
|
||||||
|
|
||||||
import type { Folder } from './databases/entities/folder';
|
|
||||||
import type { ExternalHooks } from './external-hooks';
|
|
||||||
import type { WorkflowWithSharingsAndCredentials } from './workflows/workflows.types';
|
|
||||||
|
|
||||||
export interface ICredentialsTypeData {
|
export interface ICredentialsTypeData {
|
||||||
[key: string]: CredentialLoadingDetails;
|
[key: string]: CredentialLoadingDetails;
|
||||||
@@ -60,39 +50,15 @@ export interface IProcessedDataEntries {
|
|||||||
// tags
|
// tags
|
||||||
// ----------------------------------
|
// ----------------------------------
|
||||||
|
|
||||||
export interface ITagBase {
|
|
||||||
id: string;
|
|
||||||
name: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface ITagToImport extends ITagBase {
|
export interface ITagToImport extends ITagBase {
|
||||||
createdAt?: string;
|
createdAt?: string;
|
||||||
updatedAt?: string;
|
updatedAt?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export type UsageCount = {
|
|
||||||
usageCount: number;
|
|
||||||
};
|
|
||||||
|
|
||||||
export type ITagDb = Pick<TagEntity, 'id' | 'name' | 'createdAt' | 'updatedAt'>;
|
|
||||||
|
|
||||||
export type ITagWithCountDb = ITagDb & UsageCount;
|
|
||||||
|
|
||||||
export type IAnnotationTagDb = Pick<AnnotationTagEntity, 'id' | 'name' | 'createdAt' | 'updatedAt'>;
|
|
||||||
|
|
||||||
export type IAnnotationTagWithCountDb = IAnnotationTagDb & UsageCount;
|
|
||||||
|
|
||||||
// ----------------------------------
|
// ----------------------------------
|
||||||
// workflows
|
// workflows
|
||||||
// ----------------------------------
|
// ----------------------------------
|
||||||
|
|
||||||
// Almost identical to editor-ui.Interfaces.ts
|
|
||||||
export interface IWorkflowDb extends IWorkflowBase {
|
|
||||||
triggerCount: number;
|
|
||||||
tags?: TagEntity[];
|
|
||||||
parentFolder?: Folder | null;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface IWorkflowResponse extends IWorkflowBase {
|
export interface IWorkflowResponse extends IWorkflowBase {
|
||||||
id: string;
|
id: string;
|
||||||
}
|
}
|
||||||
@@ -110,41 +76,12 @@ export interface IWorkflowToImport
|
|||||||
// credentials
|
// credentials
|
||||||
// ----------------------------------
|
// ----------------------------------
|
||||||
|
|
||||||
export interface ICredentialsBase {
|
|
||||||
createdAt: Date;
|
|
||||||
updatedAt: Date;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface ICredentialsDb extends ICredentialsBase, ICredentialsEncrypted {
|
|
||||||
id: string;
|
|
||||||
name: string;
|
|
||||||
shared?: SharedCredentials[];
|
|
||||||
}
|
|
||||||
|
|
||||||
export type ICredentialsDecryptedDb = ICredentialsBase & ICredentialsDecrypted;
|
export type ICredentialsDecryptedDb = ICredentialsBase & ICredentialsDecrypted;
|
||||||
|
|
||||||
export type ICredentialsDecryptedResponse = ICredentialsDecryptedDb;
|
export type ICredentialsDecryptedResponse = ICredentialsDecryptedDb;
|
||||||
|
|
||||||
export type SaveExecutionDataType = 'all' | 'none';
|
export type SaveExecutionDataType = 'all' | 'none';
|
||||||
|
|
||||||
export interface IExecutionBase {
|
|
||||||
id: string;
|
|
||||||
mode: WorkflowExecuteMode;
|
|
||||||
createdAt: Date; // set by DB
|
|
||||||
startedAt: Date;
|
|
||||||
stoppedAt?: Date; // empty value means execution is still running
|
|
||||||
workflowId: string;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use `status` instead
|
|
||||||
*/
|
|
||||||
finished: boolean;
|
|
||||||
retryOf?: string; // If it is a retry, the id of the execution it is a retry of.
|
|
||||||
retrySuccessId?: string; // If it failed and a retry did succeed. The id of the successful retry.
|
|
||||||
status: ExecutionStatus;
|
|
||||||
waitTill?: Date | null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Data in regular format with references
|
// Data in regular format with references
|
||||||
export interface IExecutionDb extends IExecutionBase {
|
export interface IExecutionDb extends IExecutionBase {
|
||||||
data: IRunExecutionData;
|
data: IRunExecutionData;
|
||||||
@@ -157,18 +94,6 @@ export type CreateExecutionPayload = Omit<IExecutionDb, 'id' | 'createdAt' | 'st
|
|||||||
/** Payload for updating an execution. */
|
/** Payload for updating an execution. */
|
||||||
export type UpdateExecutionPayload = Omit<IExecutionDb, 'id' | 'createdAt'>;
|
export type UpdateExecutionPayload = Omit<IExecutionDb, 'id' | 'createdAt'>;
|
||||||
|
|
||||||
export interface IExecutionResponse extends IExecutionBase {
|
|
||||||
id: string;
|
|
||||||
data: IRunExecutionData;
|
|
||||||
retryOf?: string;
|
|
||||||
retrySuccessId?: string;
|
|
||||||
workflowData: IWorkflowBase | WorkflowWithSharingsAndCredentials;
|
|
||||||
customData: Record<string, string>;
|
|
||||||
annotation: {
|
|
||||||
tags: ITagBase[];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
// Flatted data to save memory when saving in database or transferring
|
// Flatted data to save memory when saving in database or transferring
|
||||||
// via REST API
|
// via REST API
|
||||||
export interface IExecutionFlatted extends IExecutionBase {
|
export interface IExecutionFlatted extends IExecutionBase {
|
||||||
@@ -221,16 +146,6 @@ export interface IExecutingWorkflowData {
|
|||||||
status: ExecutionStatus;
|
status: ExecutionStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IPersonalizationSurveyAnswers {
|
|
||||||
email: string | null;
|
|
||||||
codingSkill: string | null;
|
|
||||||
companyIndustry: string[];
|
|
||||||
companySize: string | null;
|
|
||||||
otherCompanyIndustry: string | null;
|
|
||||||
otherWorkArea: string | null;
|
|
||||||
workArea: string[] | string | null;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface IActiveDirectorySettings {
|
export interface IActiveDirectorySettings {
|
||||||
enabled: boolean;
|
enabled: boolean;
|
||||||
}
|
}
|
||||||
@@ -323,26 +238,6 @@ export interface ILicensePostResponse extends ILicenseReadResponse {
|
|||||||
managementToken: string;
|
managementToken: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface PublicUser {
|
|
||||||
id: string;
|
|
||||||
email?: string;
|
|
||||||
firstName?: string;
|
|
||||||
lastName?: string;
|
|
||||||
personalizationAnswers?: IPersonalizationSurveyAnswers | null;
|
|
||||||
password?: string;
|
|
||||||
passwordResetToken?: string;
|
|
||||||
createdAt: Date;
|
|
||||||
isPending: boolean;
|
|
||||||
role?: GlobalRole;
|
|
||||||
globalScopes?: Scope[];
|
|
||||||
signInType: AuthProviderType;
|
|
||||||
disabled: boolean;
|
|
||||||
settings?: IUserSettings | null;
|
|
||||||
inviteAcceptUrl?: string;
|
|
||||||
isOwner?: boolean;
|
|
||||||
featureFlags?: FeatureFlags;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface Invitation {
|
export interface Invitation {
|
||||||
email: string;
|
email: string;
|
||||||
role: AssignableRole;
|
role: AssignableRole;
|
||||||
@@ -354,5 +249,3 @@ export interface N8nApp {
|
|||||||
externalHooks: ExternalHooks;
|
externalHooks: ExternalHooks;
|
||||||
activeWorkflowManager: ActiveWorkflowManager;
|
activeWorkflowManager: ActiveWorkflowManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
export type UserSettings = Pick<User, 'id' | 'settings'>;
|
|
||||||
|
|||||||
@@ -14,10 +14,10 @@ import {
|
|||||||
import type { Project } from '@/databases/entities/project';
|
import type { Project } from '@/databases/entities/project';
|
||||||
import type { WorkflowEntity } from '@/databases/entities/workflow-entity';
|
import type { WorkflowEntity } from '@/databases/entities/workflow-entity';
|
||||||
import type { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository';
|
import type { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository';
|
||||||
import type { IWorkflowDb } from '@/interfaces';
|
|
||||||
import type { TypeUnit } from '@/modules/insights/database/entities/insights-shared';
|
import type { TypeUnit } from '@/modules/insights/database/entities/insights-shared';
|
||||||
import { InsightsMetadataRepository } from '@/modules/insights/database/repositories/insights-metadata.repository';
|
import { InsightsMetadataRepository } from '@/modules/insights/database/repositories/insights-metadata.repository';
|
||||||
import { InsightsRawRepository } from '@/modules/insights/database/repositories/insights-raw.repository';
|
import { InsightsRawRepository } from '@/modules/insights/database/repositories/insights-raw.repository';
|
||||||
|
import type { IWorkflowDb } from '@/types-db';
|
||||||
import { createTeamProject } from '@test-integration/db/projects';
|
import { createTeamProject } from '@test-integration/db/projects';
|
||||||
import { createWorkflow } from '@test-integration/db/workflows';
|
import { createWorkflow } from '@test-integration/db/workflows';
|
||||||
import * as testDb from '@test-integration/test-db';
|
import * as testDb from '@test-integration/test-db';
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ import type { Logger } from 'n8n-core';
|
|||||||
|
|
||||||
import type { Project } from '@/databases/entities/project';
|
import type { Project } from '@/databases/entities/project';
|
||||||
import type { WorkflowEntity } from '@/databases/entities/workflow-entity';
|
import type { WorkflowEntity } from '@/databases/entities/workflow-entity';
|
||||||
import type { IWorkflowDb } from '@/interfaces';
|
|
||||||
import type { License } from '@/license';
|
import type { License } from '@/license';
|
||||||
|
import type { IWorkflowDb } from '@/types-db';
|
||||||
import { createTeamProject } from '@test-integration/db/projects';
|
import { createTeamProject } from '@test-integration/db/projects';
|
||||||
import { createWorkflow } from '@test-integration/db/workflows';
|
import { createWorkflow } from '@test-integration/db/workflows';
|
||||||
import * as testDb from '@test-integration/test-db';
|
import * as testDb from '@test-integration/test-db';
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ import {
|
|||||||
} from '@n8n/typeorm';
|
} from '@n8n/typeorm';
|
||||||
import { UnexpectedError } from 'n8n-workflow';
|
import { UnexpectedError } from 'n8n-workflow';
|
||||||
|
|
||||||
|
import { datetimeColumnType } from '@/databases/entities/abstract-entity';
|
||||||
|
|
||||||
import { InsightsMetadata } from './insights-metadata';
|
import { InsightsMetadata } from './insights-metadata';
|
||||||
import type { PeriodUnit } from './insights-shared';
|
import type { PeriodUnit } from './insights-shared';
|
||||||
import {
|
import {
|
||||||
@@ -18,7 +20,6 @@ import {
|
|||||||
PeriodUnitToNumber,
|
PeriodUnitToNumber,
|
||||||
TypeToNumber,
|
TypeToNumber,
|
||||||
} from './insights-shared';
|
} from './insights-shared';
|
||||||
import { datetimeColumnType } from '../../../../databases/entities/abstract-entity';
|
|
||||||
|
|
||||||
@Entity()
|
@Entity()
|
||||||
export class InsightsByPeriod extends BaseEntity {
|
export class InsightsByPeriod extends BaseEntity {
|
||||||
|
|||||||
@@ -3,8 +3,9 @@ import { Container } from '@n8n/di';
|
|||||||
import { BaseEntity, Column, Entity, PrimaryGeneratedColumn } from '@n8n/typeorm';
|
import { BaseEntity, Column, Entity, PrimaryGeneratedColumn } from '@n8n/typeorm';
|
||||||
import { UnexpectedError } from 'n8n-workflow';
|
import { UnexpectedError } from 'n8n-workflow';
|
||||||
|
|
||||||
|
import { datetimeColumnType } from '@/databases/entities/abstract-entity';
|
||||||
|
|
||||||
import { isValidTypeNumber, NumberToType, TypeToNumber } from './insights-shared';
|
import { isValidTypeNumber, NumberToType, TypeToNumber } from './insights-shared';
|
||||||
import { datetimeColumnType } from '../../../../databases/entities/abstract-entity';
|
|
||||||
|
|
||||||
export const { type: dbType } = Container.get(GlobalConfig).database;
|
export const { type: dbType } = Container.get(GlobalConfig).database;
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { InstanceSettings } from 'n8n-core';
|
|||||||
import type { FeatureFlags, ITelemetryTrackProperties } from 'n8n-workflow';
|
import type { FeatureFlags, ITelemetryTrackProperties } from 'n8n-workflow';
|
||||||
import type { PostHog } from 'posthog-node';
|
import type { PostHog } from 'posthog-node';
|
||||||
|
|
||||||
import type { PublicUser } from '@/interfaces';
|
import type { PublicUser } from '@/types-db';
|
||||||
|
|
||||||
@Service()
|
@Service()
|
||||||
export class PostHogClient {
|
export class PostHogClient {
|
||||||
|
|||||||
@@ -16,8 +16,8 @@ import { SharedCredentialsRepository } from '@/databases/repositories/shared-cre
|
|||||||
import * as Db from '@/db';
|
import * as Db from '@/db';
|
||||||
import { EventService } from '@/events/event.service';
|
import { EventService } from '@/events/event.service';
|
||||||
import { ExternalHooks } from '@/external-hooks';
|
import { ExternalHooks } from '@/external-hooks';
|
||||||
import type { ICredentialsDb } from '@/interfaces';
|
|
||||||
import type { CredentialRequest } from '@/requests';
|
import type { CredentialRequest } from '@/requests';
|
||||||
|
import type { ICredentialsDb } from '@/types-db';
|
||||||
|
|
||||||
import type { IDependency, IJsonSchema } from '../../../types';
|
import type { IDependency, IJsonSchema } from '../../../types';
|
||||||
|
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import type { Variables } from '@/databases/entities/variables';
|
|||||||
import type { WorkflowEntity } from '@/databases/entities/workflow-entity';
|
import type { WorkflowEntity } from '@/databases/entities/workflow-entity';
|
||||||
import type { WorkflowHistory } from '@/databases/entities/workflow-history';
|
import type { WorkflowHistory } from '@/databases/entities/workflow-history';
|
||||||
import type { ScopesField } from '@/services/role.service';
|
import type { ScopesField } from '@/services/role.service';
|
||||||
|
import type { SlimProject } from '@/types-db';
|
||||||
|
|
||||||
export type APIRequest<
|
export type APIRequest<
|
||||||
RouteParams = {},
|
RouteParams = {},
|
||||||
@@ -122,7 +123,6 @@ export namespace ListQuery {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type SlimUser = Pick<IUser, 'id' | 'email' | 'firstName' | 'lastName'>;
|
type SlimUser = Pick<IUser, 'id' | 'email' | 'firstName' | 'lastName'>;
|
||||||
export type SlimProject = Pick<Project, 'id' | 'type' | 'name' | 'icon'>;
|
|
||||||
|
|
||||||
export function hasSharing(
|
export function hasSharing(
|
||||||
workflows: ListQuery.Workflow.Plain[] | ListQuery.Workflow.WithSharing[],
|
workflows: ListQuery.Workflow.Plain[] | ListQuery.Workflow.WithSharing[],
|
||||||
|
|||||||
@@ -7,10 +7,10 @@ import { CredentialsHelper } from '@/credentials-helper';
|
|||||||
import type { ExecutionRepository } from '@/databases/repositories/execution.repository';
|
import type { ExecutionRepository } from '@/databases/repositories/execution.repository';
|
||||||
import { VariablesService } from '@/environments.ee/variables/variables.service.ee';
|
import { VariablesService } from '@/environments.ee/variables/variables.service.ee';
|
||||||
import { ExternalHooks } from '@/external-hooks';
|
import { ExternalHooks } from '@/external-hooks';
|
||||||
import type { IExecutionResponse } from '@/interfaces';
|
|
||||||
import type { ManualExecutionService } from '@/manual-execution.service';
|
import type { ManualExecutionService } from '@/manual-execution.service';
|
||||||
import { SecretsHelper } from '@/secrets-helpers.ee';
|
import { SecretsHelper } from '@/secrets-helpers.ee';
|
||||||
import { WorkflowStatisticsService } from '@/services/workflow-statistics.service';
|
import { WorkflowStatisticsService } from '@/services/workflow-statistics.service';
|
||||||
|
import type { IExecutionResponse } from '@/types-db';
|
||||||
import { WorkflowStaticDataService } from '@/workflows/workflow-static-data.service';
|
import { WorkflowStaticDataService } from '@/workflows/workflow-static-data.service';
|
||||||
|
|
||||||
import { JobProcessor } from '../job-processor';
|
import { JobProcessor } from '../job-processor';
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { Service } from '@n8n/di';
|
|||||||
import type { AnnotationTagEntity } from '@/databases/entities/annotation-tag-entity.ee';
|
import type { AnnotationTagEntity } from '@/databases/entities/annotation-tag-entity.ee';
|
||||||
import { AnnotationTagRepository } from '@/databases/repositories/annotation-tag.repository.ee';
|
import { AnnotationTagRepository } from '@/databases/repositories/annotation-tag.repository.ee';
|
||||||
import { validateEntity } from '@/generic-helpers';
|
import { validateEntity } from '@/generic-helpers';
|
||||||
import type { IAnnotationTagDb, IAnnotationTagWithCountDb } from '@/interfaces';
|
import type { IAnnotationTagDb, IAnnotationTagWithCountDb } from '@/types-db';
|
||||||
|
|
||||||
type GetAllResult<T> = T extends { withUsageCount: true }
|
type GetAllResult<T> = T extends { withUsageCount: true }
|
||||||
? IAnnotationTagWithCountDb[]
|
? IAnnotationTagWithCountDb[]
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import { WorkflowTagMapping } from '@/databases/entities/workflow-tag-mapping';
|
|||||||
import { CredentialsRepository } from '@/databases/repositories/credentials.repository';
|
import { CredentialsRepository } from '@/databases/repositories/credentials.repository';
|
||||||
import { TagRepository } from '@/databases/repositories/tag.repository';
|
import { TagRepository } from '@/databases/repositories/tag.repository';
|
||||||
import * as Db from '@/db';
|
import * as Db from '@/db';
|
||||||
import type { ICredentialsDb, IWorkflowDb } from '@/interfaces';
|
import type { ICredentialsDb, IWorkflowDb } from '@/types-db';
|
||||||
import { replaceInvalidCredentials } from '@/workflow-helpers';
|
import { replaceInvalidCredentials } from '@/workflow-helpers';
|
||||||
|
|
||||||
@Service()
|
@Service()
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import type { TagEntity } from '@/databases/entities/tag-entity';
|
|||||||
import { TagRepository } from '@/databases/repositories/tag.repository';
|
import { TagRepository } from '@/databases/repositories/tag.repository';
|
||||||
import { ExternalHooks } from '@/external-hooks';
|
import { ExternalHooks } from '@/external-hooks';
|
||||||
import { validateEntity } from '@/generic-helpers';
|
import { validateEntity } from '@/generic-helpers';
|
||||||
import type { ITagWithCountDb } from '@/interfaces';
|
import type { ITagWithCountDb } from '@/types-db';
|
||||||
|
|
||||||
type GetAllResult<T> = T extends { withUsageCount: true } ? ITagWithCountDb[] : TagEntity[];
|
type GetAllResult<T> = T extends { withUsageCount: true } ? ITagWithCountDb[] : TagEntity[];
|
||||||
|
|
||||||
|
|||||||
@@ -9,10 +9,11 @@ import { User } from '@/databases/entities/user';
|
|||||||
import { UserRepository } from '@/databases/repositories/user.repository';
|
import { UserRepository } from '@/databases/repositories/user.repository';
|
||||||
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';
|
||||||
import type { Invitation, PublicUser } from '@/interfaces';
|
import type { Invitation } from '@/interfaces';
|
||||||
import type { PostHogClient } from '@/posthog';
|
import type { PostHogClient } from '@/posthog';
|
||||||
import type { UserRequest } from '@/requests';
|
import type { UserRequest } from '@/requests';
|
||||||
import { UrlService } from '@/services/url.service';
|
import { UrlService } from '@/services/url.service';
|
||||||
|
import type { PublicUser } from '@/types-db';
|
||||||
import { UserManagementMailer } from '@/user-management/email';
|
import { UserManagementMailer } from '@/user-management/email';
|
||||||
|
|
||||||
import { PublicApiKeyService } from './public-api-key.service';
|
import { PublicApiKeyService } from './public-api-key.service';
|
||||||
|
|||||||
142
packages/cli/src/types-db.ts
Normal file
142
packages/cli/src/types-db.ts
Normal file
@@ -0,0 +1,142 @@
|
|||||||
|
import type { GlobalRole, Scope } from '@n8n/permissions';
|
||||||
|
import type {
|
||||||
|
ICredentialsEncrypted,
|
||||||
|
IRunExecutionData,
|
||||||
|
IWorkflowBase,
|
||||||
|
WorkflowExecuteMode,
|
||||||
|
ExecutionStatus,
|
||||||
|
FeatureFlags,
|
||||||
|
IUserSettings,
|
||||||
|
} from 'n8n-workflow';
|
||||||
|
|
||||||
|
import type { AnnotationTagEntity } from '@/databases/entities/annotation-tag-entity.ee';
|
||||||
|
import type { AuthProviderType } from '@/databases/entities/auth-identity';
|
||||||
|
import type { Folder } from '@/databases/entities/folder';
|
||||||
|
import type { Project } from '@/databases/entities/project';
|
||||||
|
import type { SharedCredentials } from '@/databases/entities/shared-credentials';
|
||||||
|
import type { SharedWorkflow } from '@/databases/entities/shared-workflow';
|
||||||
|
import type { TagEntity } from '@/databases/entities/tag-entity';
|
||||||
|
import type { User } from '@/databases/entities/user';
|
||||||
|
import type { WorkflowEntity } from '@/databases/entities/workflow-entity';
|
||||||
|
|
||||||
|
export type UsageCount = {
|
||||||
|
usageCount: number;
|
||||||
|
};
|
||||||
|
|
||||||
|
export interface ITagBase {
|
||||||
|
id: string;
|
||||||
|
name: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ICredentialsBase {
|
||||||
|
createdAt: Date;
|
||||||
|
updatedAt: Date;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface IExecutionBase {
|
||||||
|
id: string;
|
||||||
|
mode: WorkflowExecuteMode;
|
||||||
|
createdAt: Date; // set by DB
|
||||||
|
startedAt: Date;
|
||||||
|
stoppedAt?: Date; // empty value means execution is still running
|
||||||
|
workflowId: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated Use `status` instead
|
||||||
|
*/
|
||||||
|
finished: boolean;
|
||||||
|
retryOf?: string; // If it is a retry, the id of the execution it is a retry of.
|
||||||
|
retrySuccessId?: string; // If it failed and a retry did succeed. The id of the successful retry.
|
||||||
|
status: ExecutionStatus;
|
||||||
|
waitTill?: Date | null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Required by PublicUser
|
||||||
|
export interface IPersonalizationSurveyAnswers {
|
||||||
|
email: string | null;
|
||||||
|
codingSkill: string | null;
|
||||||
|
companyIndustry: string[];
|
||||||
|
companySize: string | null;
|
||||||
|
otherCompanyIndustry: string | null;
|
||||||
|
otherWorkArea: string | null;
|
||||||
|
workArea: string[] | string | null;
|
||||||
|
}
|
||||||
|
|
||||||
|
export type ITagDb = Pick<TagEntity, 'id' | 'name' | 'createdAt' | 'updatedAt'>;
|
||||||
|
|
||||||
|
export type ITagWithCountDb = ITagDb & UsageCount;
|
||||||
|
|
||||||
|
export type IAnnotationTagDb = Pick<AnnotationTagEntity, 'id' | 'name' | 'createdAt' | 'updatedAt'>;
|
||||||
|
|
||||||
|
export type IAnnotationTagWithCountDb = IAnnotationTagDb & UsageCount;
|
||||||
|
|
||||||
|
// Almost identical to editor-ui.Interfaces.ts
|
||||||
|
export interface IWorkflowDb extends IWorkflowBase {
|
||||||
|
triggerCount: number;
|
||||||
|
tags?: TagEntity[];
|
||||||
|
parentFolder?: Folder | null;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ICredentialsDb extends ICredentialsBase, ICredentialsEncrypted {
|
||||||
|
id: string;
|
||||||
|
name: string;
|
||||||
|
shared?: SharedCredentials[];
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface IExecutionResponse extends IExecutionBase {
|
||||||
|
id: string;
|
||||||
|
data: IRunExecutionData;
|
||||||
|
retryOf?: string;
|
||||||
|
retrySuccessId?: string;
|
||||||
|
workflowData: IWorkflowBase | WorkflowWithSharingsAndCredentials;
|
||||||
|
customData: Record<string, string>;
|
||||||
|
annotation: {
|
||||||
|
tags: ITagBase[];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface PublicUser {
|
||||||
|
id: string;
|
||||||
|
email?: string;
|
||||||
|
firstName?: string;
|
||||||
|
lastName?: string;
|
||||||
|
personalizationAnswers?: IPersonalizationSurveyAnswers | null;
|
||||||
|
password?: string;
|
||||||
|
passwordResetToken?: string;
|
||||||
|
createdAt: Date;
|
||||||
|
isPending: boolean;
|
||||||
|
role?: GlobalRole;
|
||||||
|
globalScopes?: Scope[];
|
||||||
|
signInType: AuthProviderType;
|
||||||
|
disabled: boolean;
|
||||||
|
settings?: IUserSettings | null; // External type from n8n-workflow
|
||||||
|
inviteAcceptUrl?: string;
|
||||||
|
isOwner?: boolean;
|
||||||
|
featureFlags?: FeatureFlags; // External type from n8n-workflow
|
||||||
|
}
|
||||||
|
|
||||||
|
export type UserSettings = Pick<User, 'id' | 'settings'>;
|
||||||
|
|
||||||
|
export type SlimProject = Pick<Project, 'id' | 'type' | 'name' | 'icon'>;
|
||||||
|
|
||||||
|
export interface CredentialUsedByWorkflow {
|
||||||
|
id: string;
|
||||||
|
name: string;
|
||||||
|
type?: string;
|
||||||
|
currentUserHasAccess: boolean;
|
||||||
|
homeProject: SlimProject | null;
|
||||||
|
sharedWithProjects: SlimProject[];
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface WorkflowWithSharingsAndCredentials extends Omit<WorkflowEntity, 'shared'> {
|
||||||
|
homeProject?: SlimProject;
|
||||||
|
sharedWithProjects?: SlimProject[];
|
||||||
|
usedCredentials?: CredentialUsedByWorkflow[];
|
||||||
|
shared?: SharedWorkflow[];
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface WorkflowWithSharingsMetaDataAndCredentials extends Omit<WorkflowEntity, 'shared'> {
|
||||||
|
homeProject?: SlimProject | null;
|
||||||
|
sharedWithProjects: SlimProject[];
|
||||||
|
usedCredentials?: CredentialUsedByWorkflow[];
|
||||||
|
}
|
||||||
@@ -3,9 +3,9 @@ import { mock } from 'jest-mock-extended';
|
|||||||
import { FORM_NODE_TYPE, WAITING_FORMS_EXECUTION_STATUS, type Workflow } from 'n8n-workflow';
|
import { FORM_NODE_TYPE, WAITING_FORMS_EXECUTION_STATUS, type Workflow } from 'n8n-workflow';
|
||||||
|
|
||||||
import type { ExecutionRepository } from '@/databases/repositories/execution.repository';
|
import type { ExecutionRepository } from '@/databases/repositories/execution.repository';
|
||||||
|
import type { IExecutionResponse } from '@/types-db';
|
||||||
import { WaitingForms } from '@/webhooks/waiting-forms';
|
import { WaitingForms } from '@/webhooks/waiting-forms';
|
||||||
|
|
||||||
import type { IExecutionResponse } from '../../interfaces';
|
|
||||||
import type { WaitingWebhookRequest } from '../webhook.types';
|
import type { WaitingWebhookRequest } from '../webhook.types';
|
||||||
|
|
||||||
describe('WaitingForms', () => {
|
describe('WaitingForms', () => {
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { mock } from 'jest-mock-extended';
|
|||||||
import type { ExecutionRepository } from '@/databases/repositories/execution.repository';
|
import type { ExecutionRepository } from '@/databases/repositories/execution.repository';
|
||||||
import { ConflictError } from '@/errors/response-errors/conflict.error';
|
import { ConflictError } from '@/errors/response-errors/conflict.error';
|
||||||
import { NotFoundError } from '@/errors/response-errors/not-found.error';
|
import { NotFoundError } from '@/errors/response-errors/not-found.error';
|
||||||
import type { IExecutionResponse } from '@/interfaces';
|
import type { IExecutionResponse } from '@/types-db';
|
||||||
import { WaitingWebhooks } from '@/webhooks/waiting-webhooks';
|
import { WaitingWebhooks } from '@/webhooks/waiting-webhooks';
|
||||||
import type { IWebhookResponseCallbackData, WaitingWebhookRequest } from '@/webhooks/webhook.types';
|
import type { IWebhookResponseCallbackData, WaitingWebhookRequest } from '@/webhooks/webhook.types';
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import {
|
|||||||
|
|
||||||
import { ConflictError } from '@/errors/response-errors/conflict.error';
|
import { ConflictError } from '@/errors/response-errors/conflict.error';
|
||||||
import { NotFoundError } from '@/errors/response-errors/not-found.error';
|
import { NotFoundError } from '@/errors/response-errors/not-found.error';
|
||||||
import type { IExecutionResponse } from '@/interfaces';
|
import type { IExecutionResponse } from '@/types-db';
|
||||||
import { WaitingWebhooks } from '@/webhooks/waiting-webhooks';
|
import { WaitingWebhooks } from '@/webhooks/waiting-webhooks';
|
||||||
|
|
||||||
import type { IWebhookResponseCallbackData, WaitingWebhookRequest } from './webhook.types';
|
import type { IWebhookResponseCallbackData, WaitingWebhookRequest } from './webhook.types';
|
||||||
|
|||||||
@@ -13,8 +13,8 @@ import {
|
|||||||
import { ExecutionRepository } from '@/databases/repositories/execution.repository';
|
import { ExecutionRepository } from '@/databases/repositories/execution.repository';
|
||||||
import { ConflictError } from '@/errors/response-errors/conflict.error';
|
import { ConflictError } from '@/errors/response-errors/conflict.error';
|
||||||
import { NotFoundError } from '@/errors/response-errors/not-found.error';
|
import { NotFoundError } from '@/errors/response-errors/not-found.error';
|
||||||
import type { IExecutionResponse } from '@/interfaces';
|
|
||||||
import { NodeTypes } from '@/node-types';
|
import { NodeTypes } from '@/node-types';
|
||||||
|
import type { IExecutionResponse } from '@/types-db';
|
||||||
import * as WebhookHelpers from '@/webhooks/webhook-helpers';
|
import * as WebhookHelpers from '@/webhooks/webhook-helpers';
|
||||||
import * as WorkflowExecuteAdditionalData from '@/workflow-execute-additional-data';
|
import * as WorkflowExecuteAdditionalData from '@/workflow-execute-additional-data';
|
||||||
|
|
||||||
|
|||||||
@@ -23,12 +23,12 @@ import { TransferWorkflowError } from '@/errors/response-errors/transfer-workflo
|
|||||||
import { FolderService } from '@/services/folder.service';
|
import { FolderService } from '@/services/folder.service';
|
||||||
import { OwnershipService } from '@/services/ownership.service';
|
import { OwnershipService } from '@/services/ownership.service';
|
||||||
import { ProjectService } from '@/services/project.service.ee';
|
import { ProjectService } from '@/services/project.service.ee';
|
||||||
|
|
||||||
import { WorkflowFinderService } from './workflow-finder.service';
|
|
||||||
import type {
|
import type {
|
||||||
WorkflowWithSharingsAndCredentials,
|
WorkflowWithSharingsAndCredentials,
|
||||||
WorkflowWithSharingsMetaDataAndCredentials,
|
WorkflowWithSharingsMetaDataAndCredentials,
|
||||||
} from './workflows.types';
|
} from '@/types-db';
|
||||||
|
|
||||||
|
import { WorkflowFinderService } from './workflow-finder.service';
|
||||||
|
|
||||||
@Service()
|
@Service()
|
||||||
export class EnterpriseWorkflowService {
|
export class EnterpriseWorkflowService {
|
||||||
|
|||||||
@@ -1,25 +0,0 @@
|
|||||||
import type { SharedWorkflow } from '@/databases/entities/shared-workflow';
|
|
||||||
import type { WorkflowEntity } from '@/databases/entities/workflow-entity';
|
|
||||||
import type { SlimProject } from '@/requests';
|
|
||||||
|
|
||||||
export interface WorkflowWithSharingsAndCredentials extends Omit<WorkflowEntity, 'shared'> {
|
|
||||||
homeProject?: SlimProject;
|
|
||||||
sharedWithProjects?: SlimProject[];
|
|
||||||
usedCredentials?: CredentialUsedByWorkflow[];
|
|
||||||
shared?: SharedWorkflow[];
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface WorkflowWithSharingsMetaDataAndCredentials extends Omit<WorkflowEntity, 'shared'> {
|
|
||||||
homeProject?: SlimProject | null;
|
|
||||||
sharedWithProjects: SlimProject[];
|
|
||||||
usedCredentials?: CredentialUsedByWorkflow[];
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface CredentialUsedByWorkflow {
|
|
||||||
id: string;
|
|
||||||
name: string;
|
|
||||||
type?: string;
|
|
||||||
currentUserHasAccess: boolean;
|
|
||||||
homeProject: SlimProject | null;
|
|
||||||
sharedWithProjects: SlimProject[];
|
|
||||||
}
|
|
||||||
@@ -7,7 +7,7 @@ import type { User } from '@/databases/entities/user';
|
|||||||
import { CredentialsRepository } from '@/databases/repositories/credentials.repository';
|
import { CredentialsRepository } from '@/databases/repositories/credentials.repository';
|
||||||
import { ProjectRepository } from '@/databases/repositories/project.repository';
|
import { ProjectRepository } from '@/databases/repositories/project.repository';
|
||||||
import { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository';
|
import { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository';
|
||||||
import type { ICredentialsDb } from '@/interfaces';
|
import type { ICredentialsDb } from '@/types-db';
|
||||||
|
|
||||||
import type { CredentialPayload } from '../types';
|
import type { CredentialPayload } from '../types';
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import { User } from '@/databases/entities/user';
|
|||||||
import { ProjectRepository } from '@/databases/repositories/project.repository';
|
import { ProjectRepository } from '@/databases/repositories/project.repository';
|
||||||
import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository';
|
import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository';
|
||||||
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
|
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
|
||||||
import type { IWorkflowDb } from '@/interfaces';
|
import type { IWorkflowDb } from '@/types-db';
|
||||||
|
|
||||||
export async function createManyWorkflows(
|
export async function createManyWorkflows(
|
||||||
amount: number,
|
amount: number,
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import type TestAgent from 'supertest/lib/agent';
|
|||||||
import type { CredentialsEntity } from '@/databases/entities/credentials-entity';
|
import type { CredentialsEntity } from '@/databases/entities/credentials-entity';
|
||||||
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 { ICredentialsDb } from '@/interfaces';
|
import type { ICredentialsDb } from '@/types-db';
|
||||||
|
|
||||||
import type { LicenseMocker } from './license';
|
import type { LicenseMocker } from './license';
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import type { User } from '@/databases/entities/user';
|
import type { User } from '@/databases/entities/user';
|
||||||
import type { PublicUser } from '@/interfaces';
|
import type { PublicUser } from '@/types-db';
|
||||||
|
|
||||||
export const validateUser = (user: PublicUser) => {
|
export const validateUser = (user: PublicUser) => {
|
||||||
expect(typeof user.id).toBe('string');
|
expect(typeof user.id).toBe('string');
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ import { ProjectRepository } from '@/databases/repositories/project.repository';
|
|||||||
import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository';
|
import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository';
|
||||||
import { WorkflowHistoryRepository } from '@/databases/repositories/workflow-history.repository';
|
import { WorkflowHistoryRepository } from '@/databases/repositories/workflow-history.repository';
|
||||||
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
|
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
|
||||||
|
import type { WorkflowWithSharingsMetaDataAndCredentials } from '@/types-db';
|
||||||
import { UserManagementMailer } from '@/user-management/email';
|
import { UserManagementMailer } from '@/user-management/email';
|
||||||
import type { WorkflowWithSharingsMetaDataAndCredentials } from '@/workflows/workflows.types';
|
|
||||||
import { mockInstance } from '@test/mocking';
|
import { mockInstance } from '@test/mocking';
|
||||||
import { createFolder } from '@test-integration/db/folders';
|
import { createFolder } from '@test-integration/db/folders';
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user