mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-17 18:12:04 +00:00
refactor(core): Lintfix cli package (#17125)
This commit is contained in:
@@ -1,6 +1,5 @@
|
|||||||
import { mockLogger } from '@n8n/backend-test-utils';
|
import { mockLogger } from '@n8n/backend-test-utils';
|
||||||
import type { WorkflowEntity } from '@n8n/db';
|
import type { WorkflowEntity, WorkflowRepository } from '@n8n/db';
|
||||||
import type { WorkflowRepository } from '@n8n/db';
|
|
||||||
import { mock } from 'jest-mock-extended';
|
import { mock } from 'jest-mock-extended';
|
||||||
import type { InstanceSettings } from 'n8n-core';
|
import type { InstanceSettings } from 'n8n-core';
|
||||||
import type {
|
import type {
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import { z } from 'zod';
|
|||||||
import { CommandRegistry } from '../command-registry';
|
import { CommandRegistry } from '../command-registry';
|
||||||
|
|
||||||
jest.mock('fast-glob');
|
jest.mock('fast-glob');
|
||||||
// eslint-disable-next-line import-x/no-default-export
|
|
||||||
import glob from 'fast-glob';
|
import glob from 'fast-glob';
|
||||||
|
|
||||||
describe('CommandRegistry', () => {
|
describe('CommandRegistry', () => {
|
||||||
|
|||||||
@@ -6,9 +6,7 @@ jest.mock('@n8n/backend-common', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
import type { GlobalConfig } from '@n8n/config';
|
import type { GlobalConfig } from '@n8n/config';
|
||||||
import { ControllerRegistryMetadata } from '@n8n/decorators';
|
import { ControllerRegistryMetadata, Param, Get, Licensed, RestController } from '@n8n/decorators';
|
||||||
import { Param } from '@n8n/decorators';
|
|
||||||
import { Get, Licensed, RestController } from '@n8n/decorators';
|
|
||||||
import { Container } from '@n8n/di';
|
import { Container } from '@n8n/di';
|
||||||
import express from 'express';
|
import express from 'express';
|
||||||
import { mock } from 'jest-mock-extended';
|
import { mock } from 'jest-mock-extended';
|
||||||
|
|||||||
@@ -100,7 +100,7 @@ describe('CredentialsOverwrites', () => {
|
|||||||
|
|
||||||
expect(firstCall).toEqual(secondCall);
|
expect(firstCall).toEqual(secondCall);
|
||||||
expect(credentialTypes.getByName).toHaveBeenCalledTimes(2);
|
expect(credentialTypes.getByName).toHaveBeenCalledTimes(2);
|
||||||
// eslint-disable-next-line @typescript-eslint/dot-notation
|
|
||||||
expect(credentialsOverwrites['resolvedTypes']).toEqual(['parent', 'test']);
|
expect(credentialsOverwrites['resolvedTypes']).toEqual(['parent', 'test']);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,11 @@
|
|||||||
import type { Logger } from '@n8n/backend-common';
|
import type { Logger } from '@n8n/backend-common';
|
||||||
import type { GlobalConfig } from '@n8n/config';
|
import type { GlobalConfig } from '@n8n/config';
|
||||||
import type { WorkflowRepository } from '@n8n/db';
|
import type {
|
||||||
import type { CredentialsRepository, SettingsRepository } from '@n8n/db';
|
WorkflowRepository,
|
||||||
import type { UserRepository } from '@n8n/db';
|
CredentialsRepository,
|
||||||
|
SettingsRepository,
|
||||||
|
UserRepository,
|
||||||
|
} from '@n8n/db';
|
||||||
import { mock } from 'jest-mock-extended';
|
import { mock } from 'jest-mock-extended';
|
||||||
import type { ErrorReporter } from 'n8n-core';
|
import type { ErrorReporter } from 'n8n-core';
|
||||||
import type { IWorkflowBase } from 'n8n-workflow';
|
import type { IWorkflowBase } from 'n8n-workflow';
|
||||||
@@ -72,7 +75,6 @@ describe('ExternalHooks', () => {
|
|||||||
|
|
||||||
await externalHooks.init();
|
await externalHooks.init();
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/dot-notation
|
|
||||||
expect(externalHooks['registered']['workflow.create']).toHaveLength(1);
|
expect(externalHooks['registered']['workflow.create']).toHaveLength(1);
|
||||||
|
|
||||||
await externalHooks.run('workflow.create', [workflowData]);
|
await externalHooks.run('workflow.create', [workflowData]);
|
||||||
@@ -88,7 +90,6 @@ describe('ExternalHooks', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should execute registered hooks', async () => {
|
it('should execute registered hooks', async () => {
|
||||||
// eslint-disable-next-line @typescript-eslint/dot-notation
|
|
||||||
externalHooks['registered']['workflow.create'] = [hookFn];
|
externalHooks['registered']['workflow.create'] = [hookFn];
|
||||||
|
|
||||||
await externalHooks.run('workflow.create', [workflowData]);
|
await externalHooks.run('workflow.create', [workflowData]);
|
||||||
@@ -108,7 +109,7 @@ describe('ExternalHooks', () => {
|
|||||||
it('should report error if hook execution fails', async () => {
|
it('should report error if hook execution fails', async () => {
|
||||||
const error = new Error('Hook failed');
|
const error = new Error('Hook failed');
|
||||||
hookFn.mockRejectedValueOnce(error);
|
hookFn.mockRejectedValueOnce(error);
|
||||||
// eslint-disable-next-line @typescript-eslint/dot-notation
|
|
||||||
externalHooks['registered']['workflow.create'] = [hookFn];
|
externalHooks['registered']['workflow.create'] = [hookFn];
|
||||||
|
|
||||||
await expect(externalHooks.run('workflow.create', [workflowData])).rejects.toThrow(error);
|
await expect(externalHooks.run('workflow.create', [workflowData])).rejects.toThrow(error);
|
||||||
|
|||||||
@@ -292,9 +292,9 @@ describe('LoadNodesAndCredentials', () => {
|
|||||||
},
|
},
|
||||||
] as unknown as INodeTypeDescription[];
|
] as unknown as INodeTypeDescription[];
|
||||||
// private field
|
// private field
|
||||||
// eslint-disable-next-line @typescript-eslint/dot-notation
|
|
||||||
instance['known'].nodes.testNode = { className: 'TestNode', sourcePath: '/path/to/testNode' };
|
instance['known'].nodes.testNode = { className: 'TestNode', sourcePath: '/path/to/testNode' };
|
||||||
// eslint-disable-next-line @typescript-eslint/dot-notation
|
|
||||||
instance['known'].credentials['testCredential'] = {
|
instance['known'].credentials['testCredential'] = {
|
||||||
className: 'TestCredential',
|
className: 'TestCredential',
|
||||||
sourcePath: '/path/to/testCredential',
|
sourcePath: '/path/to/testCredential',
|
||||||
@@ -340,7 +340,7 @@ describe('LoadNodesAndCredentials', () => {
|
|||||||
|
|
||||||
expect(instance.types.nodes).toHaveLength(2);
|
expect(instance.types.nodes).toHaveLength(2);
|
||||||
// accesses private property
|
// accesses private property
|
||||||
// eslint-disable-next-line @typescript-eslint/dot-notation
|
|
||||||
expect(instance['known'].credentials.testCredential.supportedNodes).toEqual([
|
expect(instance['known'].credentials.testCredential.supportedNodes).toEqual([
|
||||||
'testNode',
|
'testNode',
|
||||||
'testNodeTool',
|
'testNodeTool',
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
import { mockLogger } from '@n8n/backend-test-utils';
|
import { mockLogger } from '@n8n/backend-test-utils';
|
||||||
import type { Project } from '@n8n/db';
|
import type { Project, IExecutionResponse, ExecutionRepository } from '@n8n/db';
|
||||||
import type { IExecutionResponse } from '@n8n/db';
|
|
||||||
import type { ExecutionRepository } from '@n8n/db';
|
|
||||||
import { mock } from 'jest-mock-extended';
|
import { mock } from 'jest-mock-extended';
|
||||||
import type { InstanceSettings } from 'n8n-core';
|
import type { InstanceSettings } from 'n8n-core';
|
||||||
import type { IRun, IWorkflowBase } from 'n8n-workflow';
|
import type { IRun, IWorkflowBase } from 'n8n-workflow';
|
||||||
|
|||||||
@@ -1,13 +1,12 @@
|
|||||||
import { mockInstance } from '@n8n/backend-test-utils';
|
import { mockInstance } from '@n8n/backend-test-utils';
|
||||||
import { GlobalConfig } from '@n8n/config';
|
import { GlobalConfig } from '@n8n/config';
|
||||||
import type { WorkflowEntity } from '@n8n/db';
|
import type { WorkflowEntity } from '@n8n/db';
|
||||||
import { ExecutionRepository } from '@n8n/db';
|
import { ExecutionRepository, WorkflowRepository } from '@n8n/db';
|
||||||
import { WorkflowRepository } 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 { ExternalSecretsProxy } from 'n8n-core';
|
import { ExternalSecretsProxy } from 'n8n-core';
|
||||||
import type { IWorkflowBase } from 'n8n-workflow';
|
|
||||||
import type {
|
import type {
|
||||||
|
IWorkflowBase,
|
||||||
IExecuteWorkflowInfo,
|
IExecuteWorkflowInfo,
|
||||||
IWorkflowExecuteAdditionalData,
|
IWorkflowExecuteAdditionalData,
|
||||||
ExecuteWorkflowOptions,
|
ExecuteWorkflowOptions,
|
||||||
|
|||||||
@@ -1,26 +1,24 @@
|
|||||||
import { testDb } from '@n8n/backend-test-utils';
|
import { testDb, createWorkflow, mockInstance } from '@n8n/backend-test-utils';
|
||||||
import { createWorkflow } from '@n8n/backend-test-utils';
|
import type { User, ExecutionEntity } from '@n8n/db';
|
||||||
import { mockInstance } from '@n8n/backend-test-utils';
|
|
||||||
import type { User } from '@n8n/db';
|
|
||||||
import type { ExecutionEntity } from '@n8n/db';
|
|
||||||
import { Container, Service } from '@n8n/di';
|
import { Container, Service } from '@n8n/di';
|
||||||
import type { Response } from 'express';
|
import type { Response } from 'express';
|
||||||
import { mock } from 'jest-mock-extended';
|
import { mock } from 'jest-mock-extended';
|
||||||
import { DirectedGraph, WorkflowExecute } from 'n8n-core';
|
import { DirectedGraph, WorkflowExecute } from 'n8n-core';
|
||||||
import * as core from 'n8n-core';
|
import * as core from 'n8n-core';
|
||||||
import type {
|
import {
|
||||||
IExecuteData,
|
type IExecuteData,
|
||||||
INode,
|
type INode,
|
||||||
IRun,
|
type IRun,
|
||||||
ITaskData,
|
type ITaskData,
|
||||||
IWaitingForExecution,
|
type IWaitingForExecution,
|
||||||
IWaitingForExecutionSource,
|
type IWaitingForExecutionSource,
|
||||||
IWorkflowBase,
|
type IWorkflowBase,
|
||||||
IWorkflowExecutionDataProcess,
|
type IWorkflowExecutionDataProcess,
|
||||||
StartNodeData,
|
type StartNodeData,
|
||||||
IWorkflowExecuteAdditionalData,
|
type IWorkflowExecuteAdditionalData,
|
||||||
|
Workflow,
|
||||||
|
ExecutionError,
|
||||||
} from 'n8n-workflow';
|
} from 'n8n-workflow';
|
||||||
import { Workflow, type ExecutionError } from 'n8n-workflow';
|
|
||||||
import PCancelable from 'p-cancelable';
|
import PCancelable from 'p-cancelable';
|
||||||
|
|
||||||
import { ActiveExecutions } from '@/active-executions';
|
import { ActiveExecutions } from '@/active-executions';
|
||||||
|
|||||||
@@ -467,7 +467,6 @@ export class ActiveWorkflowManager {
|
|||||||
this.logger.error(
|
this.logger.error(
|
||||||
`Issue on initial workflow activation try of ${formatWorkflow(dbWorkflow)} (startup)`,
|
`Issue on initial workflow activation try of ${formatWorkflow(dbWorkflow)} (startup)`,
|
||||||
{
|
{
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
||||||
error,
|
error,
|
||||||
workflowName: dbWorkflow.name,
|
workflowName: dbWorkflow.name,
|
||||||
workflowId: dbWorkflow.id,
|
workflowId: dbWorkflow.id,
|
||||||
@@ -778,7 +777,6 @@ export class ActiveWorkflowManager {
|
|||||||
error.message as string
|
error.message as string
|
||||||
}" | retry in ${Math.floor(lastTimeout / 1000)} seconds`,
|
}" | retry in ${Math.floor(lastTimeout / 1000)} seconds`,
|
||||||
{
|
{
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
||||||
error,
|
error,
|
||||||
workflowId,
|
workflowId,
|
||||||
workflowName,
|
workflowName,
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
import type { GlobalConfig } from '@n8n/config';
|
import type { GlobalConfig } from '@n8n/config';
|
||||||
import { Time } from '@n8n/constants';
|
import { Time } from '@n8n/constants';
|
||||||
import type { AuthenticatedRequest } from '@n8n/db';
|
import type {
|
||||||
import type { User } from '@n8n/db';
|
AuthenticatedRequest,
|
||||||
import type { InvalidAuthTokenRepository } from '@n8n/db';
|
User,
|
||||||
import type { UserRepository } from '@n8n/db';
|
InvalidAuthTokenRepository,
|
||||||
|
UserRepository,
|
||||||
|
} from '@n8n/db';
|
||||||
import type { NextFunction, Response } from 'express';
|
import type { NextFunction, Response } from 'express';
|
||||||
import { mock } from 'jest-mock-extended';
|
import { mock } from 'jest-mock-extended';
|
||||||
import jwt from 'jsonwebtoken';
|
import jwt from 'jsonwebtoken';
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
import { type InstalledNodes } from '@n8n/db';
|
import { type InstalledNodes, type CredentialsEntity, type User } from '@n8n/db';
|
||||||
import { type CredentialsEntity } from '@n8n/db';
|
|
||||||
import { type User } from '@n8n/db';
|
|
||||||
import { mock } from 'jest-mock-extended';
|
import { mock } from 'jest-mock-extended';
|
||||||
|
|
||||||
import { CommunityNode } from '../community-node';
|
import { CommunityNode } from '../community-node';
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
import { mockInstance } from '@n8n/backend-test-utils';
|
import { mockInstance } from '@n8n/backend-test-utils';
|
||||||
import { GlobalConfig } from '@n8n/config';
|
import { GlobalConfig } from '@n8n/config';
|
||||||
import type { User, WorkflowEntity } from '@n8n/db';
|
import type { User, WorkflowEntity } from '@n8n/db';
|
||||||
import { WorkflowRepository } from '@n8n/db';
|
import { WorkflowRepository, DbConnection } from '@n8n/db';
|
||||||
import { DbConnection } from '@n8n/db';
|
|
||||||
import { Container } from '@n8n/di';
|
import { Container } from '@n8n/di';
|
||||||
import type { SelectQueryBuilder } from '@n8n/typeorm';
|
import type { SelectQueryBuilder } from '@n8n/typeorm';
|
||||||
import { mock } from 'jest-mock-extended';
|
import { mock } from 'jest-mock-extended';
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
import { mockInstance } from '@n8n/backend-test-utils';
|
import { mockInstance } from '@n8n/backend-test-utils';
|
||||||
import { GlobalConfig } from '@n8n/config';
|
import { GlobalConfig } from '@n8n/config';
|
||||||
import type { User, WorkflowEntity } from '@n8n/db';
|
import type { User, WorkflowEntity } from '@n8n/db';
|
||||||
import { WorkflowRepository } from '@n8n/db';
|
import { WorkflowRepository, DbConnection } from '@n8n/db';
|
||||||
import { DbConnection } 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 type { IRun } from 'n8n-workflow';
|
import type { IRun } from 'n8n-workflow';
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
import { mockInstance } from '@n8n/backend-test-utils';
|
import { mockInstance } from '@n8n/backend-test-utils';
|
||||||
import { Container } from '@n8n/di';
|
import { Container } from '@n8n/di';
|
||||||
|
|
||||||
import { Worker } from '../worker';
|
|
||||||
|
|
||||||
import { PubSubRegistry } from '@/scaling/pubsub/pubsub.registry';
|
import { PubSubRegistry } from '@/scaling/pubsub/pubsub.registry';
|
||||||
import { Subscriber } from '@/scaling/pubsub/subscriber.service';
|
import { Subscriber } from '@/scaling/pubsub/subscriber.service';
|
||||||
import { WorkerStatusService } from '@/scaling/worker-status.service.ee';
|
import { WorkerStatusService } from '@/scaling/worker-status.service.ee';
|
||||||
import { RedisClientService } from '@/services/redis-client.service';
|
import { RedisClientService } from '@/services/redis-client.service';
|
||||||
|
|
||||||
|
import { Worker } from '../worker';
|
||||||
|
|
||||||
mockInstance(RedisClientService);
|
mockInstance(RedisClientService);
|
||||||
mockInstance(PubSubRegistry);
|
mockInstance(PubSubRegistry);
|
||||||
mockInstance(Subscriber);
|
mockInstance(Subscriber);
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
import { Logger } from '@n8n/backend-common';
|
import { Logger } from '@n8n/backend-common';
|
||||||
import { mockInstance } from '@n8n/backend-test-utils';
|
import { mockInstance } from '@n8n/backend-test-utils';
|
||||||
import type { IrreversibleMigration, ReversibleMigration } from '@n8n/db';
|
import type { IrreversibleMigration, ReversibleMigration } from '@n8n/db';
|
||||||
import type { Migration, MigrationExecutor } from '@n8n/typeorm';
|
import type { Migration, MigrationExecutor, DataSource } from '@n8n/typeorm';
|
||||||
import { type DataSource } from '@n8n/typeorm';
|
|
||||||
import { mock } from 'jest-mock-extended';
|
import { mock } from 'jest-mock-extended';
|
||||||
|
|
||||||
import { main } from '@/commands/db/revert';
|
import { main } from '@/commands/db/revert';
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
/* eslint-disable @typescript-eslint/no-loop-func */
|
|
||||||
import type { User } from '@n8n/db';
|
import type { User } from '@n8n/db';
|
||||||
import { WorkflowRepository } from '@n8n/db';
|
import { WorkflowRepository } from '@n8n/db';
|
||||||
import { Command } from '@n8n/decorators';
|
import { Command } from '@n8n/decorators';
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ import { WorkflowRunner } from '@/workflow-runner';
|
|||||||
|
|
||||||
import { BaseCommand } from './base-command';
|
import { BaseCommand } from './base-command';
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-var-requires
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
||||||
const open = require('open');
|
const open = require('open');
|
||||||
|
|
||||||
const flagsSchema = z.object({
|
const flagsSchema = z.object({
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import { AiWorkflowBuilderService } from '@n8n/ai-workflow-builder';
|
import { AiWorkflowBuilderService } from '@n8n/ai-workflow-builder';
|
||||||
import { Container } from '@n8n/di';
|
|
||||||
import { Command } from '@n8n/decorators';
|
import { Command } from '@n8n/decorators';
|
||||||
|
import { Container } from '@n8n/di';
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
import { jsonParse, UserError } from 'n8n-workflow';
|
import { jsonParse, UserError } from 'n8n-workflow';
|
||||||
import { z } from 'zod';
|
import { z } from 'zod';
|
||||||
|
|||||||
@@ -13,9 +13,9 @@ import { PubSubRegistry } from '@/scaling/pubsub/pubsub.registry';
|
|||||||
import { Subscriber } from '@/scaling/pubsub/subscriber.service';
|
import { Subscriber } from '@/scaling/pubsub/subscriber.service';
|
||||||
import type { ScalingService } from '@/scaling/scaling.service';
|
import type { ScalingService } from '@/scaling/scaling.service';
|
||||||
import type { WorkerServerEndpointsConfig } from '@/scaling/worker-server';
|
import type { WorkerServerEndpointsConfig } from '@/scaling/worker-server';
|
||||||
|
import { WorkerStatusService } from '@/scaling/worker-status.service.ee';
|
||||||
|
|
||||||
import { BaseCommand } from './base-command';
|
import { BaseCommand } from './base-command';
|
||||||
import { WorkerStatusService } from '@/scaling/worker-status.service.ee';
|
|
||||||
|
|
||||||
const flagsSchema = z.object({
|
const flagsSchema = z.object({
|
||||||
concurrency: z.number().int().default(10).describe('How many jobs can run in parallel.'),
|
concurrency: z.number().int().default(10).describe('How many jobs can run in parallel.'),
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ type NumericPath = CollectPathsByType<number>;
|
|||||||
|
|
||||||
type BooleanPath = CollectPathsByType<boolean>;
|
type BooleanPath = CollectPathsByType<boolean>;
|
||||||
|
|
||||||
type StringLiteralArrayPath = CollectPathsByType<Readonly<string[]>>;
|
type StringLiteralArrayPath = CollectPathsByType<readonly string[]>;
|
||||||
|
|
||||||
type StringPath = CollectPathsByType<string>;
|
type StringPath = CollectPathsByType<string>;
|
||||||
|
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ export class ControllerRegistry {
|
|||||||
controller,
|
controller,
|
||||||
handlerName,
|
handlerName,
|
||||||
) as unknown[];
|
) as unknown[];
|
||||||
// eslint-disable-next-line @typescript-eslint/no-loop-func
|
|
||||||
const handler = async (req: Request, res: Response) => {
|
const handler = async (req: Request, res: Response) => {
|
||||||
const args: unknown[] = [req, res];
|
const args: unknown[] = [req, res];
|
||||||
for (let index = 0; index < route.args.length; index++) {
|
for (let index = 0; index < route.args.length; index++) {
|
||||||
@@ -83,7 +83,7 @@ export class ControllerRegistry {
|
|||||||
...(inProduction && route.rateLimit
|
...(inProduction && route.rateLimit
|
||||||
? [this.createRateLimitMiddleware(route.rateLimit)]
|
? [this.createRateLimitMiddleware(route.rateLimit)]
|
||||||
: []),
|
: []),
|
||||||
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
||||||
...(route.skipAuth
|
...(route.skipAuth
|
||||||
? []
|
? []
|
||||||
: ([
|
: ([
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
import { mockInstance } from '@n8n/backend-test-utils';
|
import { mockInstance } from '@n8n/backend-test-utils';
|
||||||
import type { AuthenticatedRequest } from '@n8n/db';
|
import type { AuthenticatedRequest, User, ApiKey } from '@n8n/db';
|
||||||
import type { User } from '@n8n/db';
|
|
||||||
import type { ApiKey } 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';
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
import type { LoginRequestDto } from '@n8n/api-types';
|
import type { LoginRequestDto } from '@n8n/api-types';
|
||||||
import { Logger } from '@n8n/backend-common';
|
import { Logger } from '@n8n/backend-common';
|
||||||
import { mockInstance } from '@n8n/backend-test-utils';
|
import { mockInstance } from '@n8n/backend-test-utils';
|
||||||
import type { AuthenticatedRequest } from '@n8n/db';
|
import type { AuthenticatedRequest, User } from '@n8n/db';
|
||||||
import type { User } from '@n8n/db';
|
|
||||||
import { UserRepository } from '@n8n/db';
|
import { UserRepository } from '@n8n/db';
|
||||||
import { Container } from '@n8n/di';
|
import { Container } from '@n8n/di';
|
||||||
import type { Response } from 'express';
|
import type { Response } from 'express';
|
||||||
|
|||||||
@@ -1,10 +1,7 @@
|
|||||||
import { UserUpdateRequestDto } from '@n8n/api-types';
|
import { UserUpdateRequestDto } from '@n8n/api-types';
|
||||||
import { mockInstance } from '@n8n/backend-test-utils';
|
import { mockInstance } from '@n8n/backend-test-utils';
|
||||||
import type { AuthenticatedRequest } from '@n8n/db';
|
import type { AuthenticatedRequest, User, PublicUser } from '@n8n/db';
|
||||||
import type { User } from '@n8n/db';
|
import { InvalidAuthTokenRepository, UserRepository } from '@n8n/db';
|
||||||
import type { PublicUser } from '@n8n/db';
|
|
||||||
import { InvalidAuthTokenRepository } from '@n8n/db';
|
|
||||||
import { UserRepository } from '@n8n/db';
|
|
||||||
import { Container } from '@n8n/di';
|
import { Container } from '@n8n/di';
|
||||||
import type { Response } from 'express';
|
import type { Response } from 'express';
|
||||||
import { mock, anyObject } from 'jest-mock-extended';
|
import { mock, anyObject } from 'jest-mock-extended';
|
||||||
|
|||||||
@@ -1,9 +1,12 @@
|
|||||||
import type { DismissBannerRequestDto, OwnerSetupRequestDto } from '@n8n/api-types';
|
import type { DismissBannerRequestDto, OwnerSetupRequestDto } from '@n8n/api-types';
|
||||||
import type { Logger } from '@n8n/backend-common';
|
import type { Logger } from '@n8n/backend-common';
|
||||||
import type { AuthenticatedRequest } from '@n8n/db';
|
import type {
|
||||||
import type { User } from '@n8n/db';
|
AuthenticatedRequest,
|
||||||
import type { PublicUser, SettingsRepository } from '@n8n/db';
|
User,
|
||||||
import type { UserRepository } from '@n8n/db';
|
PublicUser,
|
||||||
|
SettingsRepository,
|
||||||
|
UserRepository,
|
||||||
|
} from '@n8n/db';
|
||||||
import type { Response } from 'express';
|
import type { Response } from 'express';
|
||||||
import { mock } from 'jest-mock-extended';
|
import { mock } from 'jest-mock-extended';
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
import type { AuthenticatedRequest } from '@n8n/db';
|
import type { AuthenticatedRequest, User, UserRepository } from '@n8n/db';
|
||||||
import type { User } from '@n8n/db';
|
|
||||||
import type { UserRepository } from '@n8n/db';
|
|
||||||
import { mock } from 'jest-mock-extended';
|
import { mock } from 'jest-mock-extended';
|
||||||
|
|
||||||
import type { EventService } from '@/events/event.service';
|
import type { EventService } from '@/events/event.service';
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
import { Logger } from '@n8n/backend-common';
|
import { Logger } from '@n8n/backend-common';
|
||||||
import { mockInstance } from '@n8n/backend-test-utils';
|
import { mockInstance } from '@n8n/backend-test-utils';
|
||||||
import { Time } from '@n8n/constants';
|
import { Time } from '@n8n/constants';
|
||||||
import type { CredentialsEntity } from '@n8n/db';
|
import type { CredentialsEntity, User } from '@n8n/db';
|
||||||
import type { User } from '@n8n/db';
|
|
||||||
import { CredentialsRepository } from '@n8n/db';
|
import { CredentialsRepository } from '@n8n/db';
|
||||||
import { Container } from '@n8n/di';
|
import { Container } from '@n8n/di';
|
||||||
import Csrf from 'csrf';
|
import Csrf from 'csrf';
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
import { Logger } from '@n8n/backend-common';
|
import { Logger } from '@n8n/backend-common';
|
||||||
import { mockInstance } from '@n8n/backend-test-utils';
|
import { mockInstance } from '@n8n/backend-test-utils';
|
||||||
import { Time } from '@n8n/constants';
|
import { Time } from '@n8n/constants';
|
||||||
import type { CredentialsEntity } from '@n8n/db';
|
import type { CredentialsEntity, User } from '@n8n/db';
|
||||||
import type { User } from '@n8n/db';
|
|
||||||
import { CredentialsRepository } from '@n8n/db';
|
import { CredentialsRepository } from '@n8n/db';
|
||||||
import { Container } from '@n8n/di';
|
import { Container } from '@n8n/di';
|
||||||
import Csrf from 'csrf';
|
import Csrf from 'csrf';
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import type { AuthenticatedRequest } from '@n8n/db';
|
import type { AuthenticatedRequest, SharedCredentialsRepository } from '@n8n/db';
|
||||||
import type { SharedCredentialsRepository } from '@n8n/db';
|
|
||||||
import { mock } from 'jest-mock-extended';
|
import { mock } from 'jest-mock-extended';
|
||||||
|
|
||||||
import { createRawProjectData } from '@/__tests__/project.test-data';
|
import { createRawProjectData } from '@/__tests__/project.test-data';
|
||||||
@@ -29,7 +28,7 @@ describe('CredentialsController', () => {
|
|||||||
);
|
);
|
||||||
|
|
||||||
let req: AuthenticatedRequest;
|
let req: AuthenticatedRequest;
|
||||||
let res = mock<Response>();
|
const res = mock<Response>();
|
||||||
beforeAll(() => {
|
beforeAll(() => {
|
||||||
req = { user: { id: '123' } } as AuthenticatedRequest;
|
req = { user: { id: '123' } } as AuthenticatedRequest;
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import type { CredentialsEntity } from '@n8n/db';
|
import type { CredentialsEntity, CredentialsRepository } from '@n8n/db';
|
||||||
import type { CredentialsRepository } from '@n8n/db';
|
|
||||||
import { mock } from 'jest-mock-extended';
|
import { mock } from 'jest-mock-extended';
|
||||||
import { CREDENTIAL_ERRORS, CredentialDataError, Credentials, type ErrorReporter } from 'n8n-core';
|
import { CREDENTIAL_ERRORS, CredentialDataError, Credentials, type ErrorReporter } from 'n8n-core';
|
||||||
import { CREDENTIAL_EMPTY_VALUE, type ICredentialType } from 'n8n-workflow';
|
import { CREDENTIAL_EMPTY_VALUE, type ICredentialType } from 'n8n-workflow';
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import { CredentialsEntity } from '@n8n/db';
|
import { CredentialsEntity, CredentialsRepository } from '@n8n/db';
|
||||||
import { CredentialsRepository } 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';
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,7 @@ import { mockInstance } from '@n8n/backend-test-utils';
|
|||||||
import { GlobalConfig } from '@n8n/config';
|
import { GlobalConfig } from '@n8n/config';
|
||||||
import type { SqliteConfig } from '@n8n/config/src/configs/database.config';
|
import type { SqliteConfig } from '@n8n/config/src/configs/database.config';
|
||||||
import type { IExecutionResponse } from '@n8n/db';
|
import type { IExecutionResponse } from '@n8n/db';
|
||||||
import { ExecutionEntity } from '@n8n/db';
|
import { ExecutionEntity, ExecutionRepository } from '@n8n/db';
|
||||||
import { ExecutionRepository } from '@n8n/db';
|
|
||||||
import { Container } from '@n8n/di';
|
import { Container } from '@n8n/di';
|
||||||
import type { SelectQueryBuilder } from '@n8n/typeorm';
|
import type { SelectQueryBuilder } from '@n8n/typeorm';
|
||||||
import { Not, LessThanOrEqual } from '@n8n/typeorm';
|
import { Not, LessThanOrEqual } from '@n8n/typeorm';
|
||||||
|
|||||||
@@ -1,9 +1,5 @@
|
|||||||
import { getPersonalProject } from '@n8n/backend-test-utils';
|
import { getPersonalProject, createWorkflow, testDb } from '@n8n/backend-test-utils';
|
||||||
import { createWorkflow } from '@n8n/backend-test-utils';
|
import type { Project, User, Folder } from '@n8n/db';
|
||||||
import { testDb } from '@n8n/backend-test-utils';
|
|
||||||
import type { Project } from '@n8n/db';
|
|
||||||
import type { User } from '@n8n/db';
|
|
||||||
import type { Folder } from '@n8n/db';
|
|
||||||
import { FolderRepository } from '@n8n/db';
|
import { FolderRepository } from '@n8n/db';
|
||||||
import { Container } from '@n8n/di';
|
import { Container } from '@n8n/di';
|
||||||
import { DateTime } from 'luxon';
|
import { DateTime } from 'luxon';
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
import { createWorkflow } from '@n8n/backend-test-utils';
|
import { createWorkflow, testDb } from '@n8n/backend-test-utils';
|
||||||
import { testDb } from '@n8n/backend-test-utils';
|
import { StatisticsNames, WorkflowStatistics, WorkflowStatisticsRepository } from '@n8n/db';
|
||||||
import { StatisticsNames, WorkflowStatistics } from '@n8n/db';
|
|
||||||
import { WorkflowStatisticsRepository } from '@n8n/db';
|
|
||||||
import { Container } from '@n8n/di';
|
import { Container } from '@n8n/di';
|
||||||
import { type InsertResult, QueryFailedError } from '@n8n/typeorm';
|
import { type InsertResult, QueryFailedError } from '@n8n/typeorm';
|
||||||
import { mock, mockClear } from 'jest-mock-extended';
|
import { mock, mockClear } from 'jest-mock-extended';
|
||||||
|
|||||||
@@ -1,13 +1,15 @@
|
|||||||
import type { SourceControlledFile } from '@n8n/api-types';
|
import type { SourceControlledFile } from '@n8n/api-types';
|
||||||
import { User } from '@n8n/db';
|
import { User } from '@n8n/db';
|
||||||
import type { SharedCredentials } from '@n8n/db';
|
import type {
|
||||||
import type { SharedWorkflow } from '@n8n/db';
|
SharedCredentials,
|
||||||
import type { FolderRepository } from '@n8n/db';
|
SharedWorkflow,
|
||||||
import type { TagRepository } from '@n8n/db';
|
FolderRepository,
|
||||||
import type { WorkflowTagMappingRepository } from '@n8n/db';
|
TagRepository,
|
||||||
import type { SharedCredentialsRepository } from '@n8n/db';
|
WorkflowTagMappingRepository,
|
||||||
import type { SharedWorkflowRepository } from '@n8n/db';
|
SharedCredentialsRepository,
|
||||||
import type { WorkflowRepository } from '@n8n/db';
|
SharedWorkflowRepository,
|
||||||
|
WorkflowRepository,
|
||||||
|
} from '@n8n/db';
|
||||||
import { Container } from '@n8n/di';
|
import { Container } from '@n8n/di';
|
||||||
import { mock, captor } from 'jest-mock-extended';
|
import { mock, captor } from 'jest-mock-extended';
|
||||||
import { Cipher, type InstanceSettings } from 'n8n-core';
|
import { Cipher, type InstanceSettings } from 'n8n-core';
|
||||||
|
|||||||
@@ -1,6 +1,11 @@
|
|||||||
import { Project, type ProjectRepository, User, WorkflowEntity } from '@n8n/db';
|
import {
|
||||||
import type { FolderRepository } from '@n8n/db';
|
type FolderRepository,
|
||||||
import type { WorkflowRepository } from '@n8n/db';
|
type WorkflowRepository,
|
||||||
|
Project,
|
||||||
|
type ProjectRepository,
|
||||||
|
User,
|
||||||
|
WorkflowEntity,
|
||||||
|
} from '@n8n/db';
|
||||||
import * as fastGlob from 'fast-glob';
|
import * as fastGlob from 'fast-glob';
|
||||||
import { mock } from 'jest-mock-extended';
|
import { mock } from 'jest-mock-extended';
|
||||||
import { type InstanceSettings } from 'n8n-core';
|
import { type InstanceSettings } from 'n8n-core';
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
import type { SourceControlledFile } from '@n8n/api-types';
|
import type { SourceControlledFile } from '@n8n/api-types';
|
||||||
import type { Variables } from '@n8n/db';
|
import type {
|
||||||
import type { FolderWithWorkflowAndSubFolderCount } from '@n8n/db';
|
Variables,
|
||||||
import type { TagEntity } from '@n8n/db';
|
FolderWithWorkflowAndSubFolderCount,
|
||||||
import type { User } from '@n8n/db';
|
TagEntity,
|
||||||
import type { FolderRepository } from '@n8n/db';
|
User,
|
||||||
import type { TagRepository } from '@n8n/db';
|
FolderRepository,
|
||||||
|
TagRepository,
|
||||||
|
} 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';
|
||||||
|
|||||||
@@ -1,16 +1,16 @@
|
|||||||
import { mockLogger } from '@n8n/backend-test-utils';
|
import { mockLogger, mockInstance } from '@n8n/backend-test-utils';
|
||||||
import { mockInstance } from '@n8n/backend-test-utils';
|
import type {
|
||||||
import type { TestRun } from '@n8n/db';
|
TestRun,
|
||||||
import type { TestCaseExecutionRepository } from '@n8n/db';
|
TestCaseExecutionRepository,
|
||||||
import type { TestRunRepository } from '@n8n/db';
|
TestRunRepository,
|
||||||
import type { WorkflowRepository } from '@n8n/db';
|
WorkflowRepository,
|
||||||
|
} from '@n8n/db';
|
||||||
import { readFileSync } from 'fs';
|
import { readFileSync } from 'fs';
|
||||||
import type { Mock } from 'jest-mock';
|
import type { Mock } from 'jest-mock';
|
||||||
import { mock } from 'jest-mock-extended';
|
import { mock } from 'jest-mock-extended';
|
||||||
import type { ErrorReporter } from 'n8n-core';
|
import type { ErrorReporter } from 'n8n-core';
|
||||||
import { EVALUATION_NODE_TYPE, EVALUATION_TRIGGER_NODE_TYPE } from 'n8n-workflow';
|
import { EVALUATION_NODE_TYPE, EVALUATION_TRIGGER_NODE_TYPE } from 'n8n-workflow';
|
||||||
import type { IWorkflowBase } from 'n8n-workflow';
|
import type { IWorkflowBase, IRun, ExecutionError } from 'n8n-workflow';
|
||||||
import type { IRun, ExecutionError } from 'n8n-workflow';
|
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
|
|
||||||
import type { ActiveExecutions } from '@/active-executions';
|
import type { ActiveExecutions } from '@/active-executions';
|
||||||
|
|||||||
@@ -1,23 +1,31 @@
|
|||||||
|
import type { NodeTypes } from '@/node-types';
|
||||||
import { mockInstance } from '@n8n/backend-test-utils';
|
import { mockInstance } from '@n8n/backend-test-utils';
|
||||||
import type { GlobalConfig } from '@n8n/config';
|
import type { GlobalConfig } from '@n8n/config';
|
||||||
import type { CredentialsEntity } from '@n8n/db';
|
import type {
|
||||||
import type { WorkflowEntity } from '@n8n/db';
|
CredentialsEntity,
|
||||||
import type { IWorkflowDb } from '@n8n/db';
|
WorkflowEntity,
|
||||||
import type { CredentialsRepository } from '@n8n/db';
|
IWorkflowDb,
|
||||||
import type { ProjectRelationRepository } from '@n8n/db';
|
CredentialsRepository,
|
||||||
import type { SharedWorkflowRepository } from '@n8n/db';
|
ProjectRelationRepository,
|
||||||
import type { WorkflowRepository } from '@n8n/db';
|
SharedWorkflowRepository,
|
||||||
|
WorkflowRepository,
|
||||||
|
} from '@n8n/db';
|
||||||
import { mock } from 'jest-mock-extended';
|
import { mock } from 'jest-mock-extended';
|
||||||
import { type BinaryDataConfig, InstanceSettings } from 'n8n-core';
|
import { type BinaryDataConfig, InstanceSettings } from 'n8n-core';
|
||||||
import type { INode, INodesGraphResult } from 'n8n-workflow';
|
import {
|
||||||
import { NodeApiError, TelemetryHelpers, type IRun, type IWorkflowBase } from 'n8n-workflow';
|
type INode,
|
||||||
|
type INodesGraphResult,
|
||||||
|
NodeApiError,
|
||||||
|
TelemetryHelpers,
|
||||||
|
type IRun,
|
||||||
|
type IWorkflowBase,
|
||||||
|
} from 'n8n-workflow';
|
||||||
|
|
||||||
import { N8N_VERSION } from '@/constants';
|
import { N8N_VERSION } from '@/constants';
|
||||||
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 { License } from '@/license';
|
import type { License } from '@/license';
|
||||||
import type { NodeTypes } from '@/node-types';
|
|
||||||
import type { Telemetry } from '@/telemetry';
|
import type { Telemetry } from '@/telemetry';
|
||||||
|
|
||||||
const flushPromises = async () => await new Promise((resolve) => setImmediate(resolve));
|
const flushPromises = async () => await new Promise((resolve) => setImmediate(resolve));
|
||||||
|
|||||||
@@ -127,7 +127,7 @@ export class TelemetryEventRelay extends EventRelay {
|
|||||||
this.telemetry.track('Project settings updated', {
|
this.telemetry.track('Project settings updated', {
|
||||||
user_id: userId,
|
user_id: userId,
|
||||||
role,
|
role,
|
||||||
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
||||||
members: members.map(({ userId: user_id, role }) => ({ user_id, role })),
|
members: members.map(({ userId: user_id, role }) => ({ user_id, role })),
|
||||||
project_id: projectId,
|
project_id: projectId,
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ class ModulesHooksRegistry {
|
|||||||
runData,
|
runData,
|
||||||
newStaticData,
|
newStaticData,
|
||||||
};
|
};
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/return-await
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
||||||
return await instance[methodName].call(instance, context);
|
return await instance[methodName].call(instance, context);
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
@@ -58,7 +58,7 @@ class ModulesHooksRegistry {
|
|||||||
nodeName,
|
nodeName,
|
||||||
taskData,
|
taskData,
|
||||||
};
|
};
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/return-await
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
||||||
return await instance[methodName].call(instance, context);
|
return await instance[methodName].call(instance, context);
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
@@ -72,7 +72,7 @@ class ModulesHooksRegistry {
|
|||||||
taskData,
|
taskData,
|
||||||
executionData,
|
executionData,
|
||||||
};
|
};
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/return-await
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
||||||
return await instance[methodName].call(instance, context);
|
return await instance[methodName].call(instance, context);
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
@@ -85,7 +85,7 @@ class ModulesHooksRegistry {
|
|||||||
workflowInstance,
|
workflowInstance,
|
||||||
executionData,
|
executionData,
|
||||||
};
|
};
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/return-await
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
||||||
return await instance[methodName].call(instance, context);
|
return await instance[methodName].call(instance, context);
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
import { createWorkflow } from '@n8n/backend-test-utils';
|
import { createWorkflow, testDb, mockInstance } from '@n8n/backend-test-utils';
|
||||||
import { testDb } from '@n8n/backend-test-utils';
|
|
||||||
import { mockInstance } from '@n8n/backend-test-utils';
|
|
||||||
import { ExecutionRepository } from '@n8n/db';
|
import { ExecutionRepository } from '@n8n/db';
|
||||||
import { Container } from '@n8n/di';
|
import { Container } from '@n8n/di';
|
||||||
import { stringify } from 'flatted';
|
import { stringify } from 'flatted';
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import { mockInstance } from '@n8n/backend-test-utils';
|
import { mockInstance } from '@n8n/backend-test-utils';
|
||||||
import type { IExecutionResponse } from '@n8n/db';
|
import type { IExecutionResponse, ExecutionRepository } from '@n8n/db';
|
||||||
import type { ExecutionRepository } from '@n8n/db';
|
|
||||||
import { mock } from 'jest-mock-extended';
|
import { mock } from 'jest-mock-extended';
|
||||||
import { WorkflowOperationError } from 'n8n-workflow';
|
import { WorkflowOperationError } from 'n8n-workflow';
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
import type { Project } from '@n8n/db';
|
import type { Project, User, SharedCredentialsRepository } from '@n8n/db';
|
||||||
import type { User } from '@n8n/db';
|
|
||||||
import type { SharedCredentialsRepository } from '@n8n/db';
|
|
||||||
import { mock } from 'jest-mock-extended';
|
import { mock } from 'jest-mock-extended';
|
||||||
import type { INode } from 'n8n-workflow';
|
import type { INode } from 'n8n-workflow';
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
import { mockInstance } from '@n8n/backend-test-utils';
|
import { mockInstance } from '@n8n/backend-test-utils';
|
||||||
import type { GlobalConfig } from '@n8n/config';
|
import type { GlobalConfig } from '@n8n/config';
|
||||||
import type { Project } from '@n8n/db';
|
import type { Project, User, WorkflowEntity } from '@n8n/db';
|
||||||
import type { User } from '@n8n/db';
|
|
||||||
import type { WorkflowEntity } from '@n8n/db';
|
|
||||||
import { mock } from 'jest-mock-extended';
|
import { mock } from 'jest-mock-extended';
|
||||||
import type { INode, Workflow } from 'n8n-workflow';
|
import type { INode, Workflow } from 'n8n-workflow';
|
||||||
import { v4 as uuid } from 'uuid';
|
import { v4 as uuid } from 'uuid';
|
||||||
|
|||||||
@@ -122,7 +122,6 @@ export class ExternalHooks {
|
|||||||
for (let hookFilePath of externalHookFiles) {
|
for (let hookFilePath of externalHookFiles) {
|
||||||
hookFilePath = hookFilePath.trim();
|
hookFilePath = hookFilePath.trim();
|
||||||
try {
|
try {
|
||||||
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
||||||
const hookFile = require(hookFilePath) as IExternalHooksFileData;
|
const hookFile = require(hookFilePath) as IExternalHooksFileData;
|
||||||
this.loadHooks(hookFile);
|
this.loadHooks(hookFile);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
@@ -162,7 +161,7 @@ export class ExternalHooks {
|
|||||||
await hookFunction.apply(context, hookParameters);
|
await hookFunction.apply(context, hookParameters);
|
||||||
} catch (cause) {
|
} catch (cause) {
|
||||||
this.logger.error(`There was a problem running hook "${hookName}"`);
|
this.logger.error(`There was a problem running hook "${hookName}"`);
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
||||||
const error = new UnexpectedError(`External hook "${hookName}" failed`, { cause });
|
const error = new UnexpectedError(`External hook "${hookName}" failed`, { cause });
|
||||||
this.errorReporter.error(error, { level: 'fatal' });
|
this.errorReporter.error(error, { level: 'fatal' });
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,5 @@
|
|||||||
import { mockInstance } from '@n8n/backend-test-utils';
|
import { mockInstance } from '@n8n/backend-test-utils';
|
||||||
import { generateNanoId } from '@n8n/db';
|
import { generateNanoId, AuthIdentity, User, UserRepository } from '@n8n/db';
|
||||||
import { AuthIdentity } from '@n8n/db';
|
|
||||||
import { User } from '@n8n/db';
|
|
||||||
import { UserRepository } from '@n8n/db';
|
|
||||||
|
|
||||||
import * as helpers from '@/ldap.ee/helpers.ee';
|
import * as helpers from '@/ldap.ee/helpers.ee';
|
||||||
|
|
||||||
|
|||||||
@@ -516,7 +516,7 @@ export class LoadNodesAndCredentials {
|
|||||||
|
|
||||||
async setupHotReload() {
|
async setupHotReload() {
|
||||||
const { default: debounce } = await import('lodash/debounce');
|
const { default: debounce } = await import('lodash/debounce');
|
||||||
// eslint-disable-next-line import-x/no-extraneous-dependencies
|
|
||||||
const { watch } = await import('chokidar');
|
const { watch } = await import('chokidar');
|
||||||
|
|
||||||
const { Push } = await import('@/push');
|
const { Push } = await import('@/push');
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import type { LicenseMetricsRepository } from '@n8n/db';
|
import type { LicenseMetricsRepository, WorkflowRepository } from '@n8n/db';
|
||||||
import type { WorkflowRepository } from '@n8n/db';
|
|
||||||
import { mock } from 'jest-mock-extended';
|
import { mock } from 'jest-mock-extended';
|
||||||
|
|
||||||
import { LicenseMetricsService } from '@/metrics/license-metrics.service';
|
import { LicenseMetricsService } from '@/metrics/license-metrics.service';
|
||||||
|
|||||||
@@ -5,12 +5,12 @@ import type express from 'express';
|
|||||||
import promBundle from 'express-prom-bundle';
|
import promBundle from 'express-prom-bundle';
|
||||||
import { mock } from 'jest-mock-extended';
|
import { mock } from 'jest-mock-extended';
|
||||||
import type { InstanceSettings } from 'n8n-core';
|
import type { InstanceSettings } from 'n8n-core';
|
||||||
|
import { EventMessageTypeNames } from 'n8n-workflow';
|
||||||
import promClient from 'prom-client';
|
import promClient from 'prom-client';
|
||||||
|
|
||||||
import config from '@/config';
|
import config from '@/config';
|
||||||
import type { MessageEventBus } from '@/eventbus/message-event-bus/message-event-bus';
|
import type { MessageEventBus } from '@/eventbus/message-event-bus/message-event-bus';
|
||||||
import type { EventService } from '@/events/event.service';
|
import type { EventService } from '@/events/event.service';
|
||||||
import { EventMessageTypeNames } from 'n8n-workflow';
|
|
||||||
|
|
||||||
import { PrometheusMetricsService } from '../prometheus-metrics.service';
|
import { PrometheusMetricsService } from '../prometheus-metrics.service';
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ export class MfaService {
|
|||||||
try {
|
try {
|
||||||
await this.loadMFASettings();
|
await this.loadMFASettings();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
||||||
this.logger.warn('Failed to load MFA settings', { error });
|
this.logger.warn('Failed to load MFA settings', { error });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import { sortByQueryMiddleware } from '../sort-by';
|
|||||||
describe('List query middleware', () => {
|
describe('List query middleware', () => {
|
||||||
let mockReq: ListQuery.Request;
|
let mockReq: ListQuery.Request;
|
||||||
let mockRes: Response;
|
let mockRes: Response;
|
||||||
let nextFn: NextFunction = jest.fn();
|
const nextFn: NextFunction = jest.fn();
|
||||||
let args: [ListQuery.Request, Response, NextFunction];
|
let args: [ListQuery.Request, Response, NextFunction];
|
||||||
|
|
||||||
let sendErrorResponse: jest.SpyInstance;
|
let sendErrorResponse: jest.SpyInstance;
|
||||||
|
|||||||
@@ -1,12 +1,11 @@
|
|||||||
import { mockLogger } from '@n8n/backend-test-utils';
|
import {
|
||||||
import { createTeamProject } from '@n8n/backend-test-utils';
|
mockLogger,
|
||||||
import { createWorkflow } from '@n8n/backend-test-utils';
|
createTeamProject,
|
||||||
import { testDb } from '@n8n/backend-test-utils';
|
createWorkflow,
|
||||||
import { testModules } from '@n8n/backend-test-utils';
|
testDb,
|
||||||
import type { Project } from '@n8n/db';
|
testModules,
|
||||||
import type { WorkflowEntity } from '@n8n/db';
|
} from '@n8n/backend-test-utils';
|
||||||
import type { IWorkflowDb } from '@n8n/db';
|
import type { Project, WorkflowEntity, IWorkflowDb, SharedWorkflowRepository } from '@n8n/db';
|
||||||
import type { SharedWorkflowRepository } from '@n8n/db';
|
|
||||||
import type { WorkflowExecuteAfterContext } from '@n8n/decorators';
|
import type { WorkflowExecuteAfterContext } from '@n8n/decorators';
|
||||||
import { Container } from '@n8n/di';
|
import { Container } from '@n8n/di';
|
||||||
import { In } from '@n8n/typeorm';
|
import { In } from '@n8n/typeorm';
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
import { mockLogger } from '@n8n/backend-test-utils';
|
import {
|
||||||
import { createTeamProject } from '@n8n/backend-test-utils';
|
mockLogger,
|
||||||
import { createWorkflow } from '@n8n/backend-test-utils';
|
createTeamProject,
|
||||||
import { testDb } from '@n8n/backend-test-utils';
|
createWorkflow,
|
||||||
import { testModules } from '@n8n/backend-test-utils';
|
testDb,
|
||||||
|
testModules,
|
||||||
|
} from '@n8n/backend-test-utils';
|
||||||
import { Container } from '@n8n/di';
|
import { Container } from '@n8n/di';
|
||||||
import { mock } from 'jest-mock-extended';
|
import { mock } from 'jest-mock-extended';
|
||||||
import { DateTime } from 'luxon';
|
import { DateTime } from 'luxon';
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
import type { LicenseState } from '@n8n/backend-common';
|
import type { LicenseState } from '@n8n/backend-common';
|
||||||
import { mockLogger } from '@n8n/backend-test-utils';
|
import {
|
||||||
import { createTeamProject } from '@n8n/backend-test-utils';
|
mockLogger,
|
||||||
import { createWorkflow } from '@n8n/backend-test-utils';
|
createTeamProject,
|
||||||
import { testDb } from '@n8n/backend-test-utils';
|
createWorkflow,
|
||||||
import { testModules } from '@n8n/backend-test-utils';
|
testDb,
|
||||||
|
testModules,
|
||||||
|
} from '@n8n/backend-test-utils';
|
||||||
import { Time } from '@n8n/constants';
|
import { Time } from '@n8n/constants';
|
||||||
import { Container } from '@n8n/di';
|
import { Container } from '@n8n/di';
|
||||||
import { mock } from 'jest-mock-extended';
|
import { mock } from 'jest-mock-extended';
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
import type { InsightsDateRange } from '@n8n/api-types';
|
import type { InsightsDateRange } from '@n8n/api-types';
|
||||||
import type { LicenseState } from '@n8n/backend-common';
|
import type { LicenseState } from '@n8n/backend-common';
|
||||||
import { mockLogger } from '@n8n/backend-test-utils';
|
import {
|
||||||
import { createTeamProject } from '@n8n/backend-test-utils';
|
mockLogger,
|
||||||
import { createWorkflow } from '@n8n/backend-test-utils';
|
createTeamProject,
|
||||||
import { testDb } from '@n8n/backend-test-utils';
|
createWorkflow,
|
||||||
import { testModules } from '@n8n/backend-test-utils';
|
testDb,
|
||||||
import type { Project } from '@n8n/db';
|
testModules,
|
||||||
import type { WorkflowEntity } from '@n8n/db';
|
} from '@n8n/backend-test-utils';
|
||||||
import type { IWorkflowDb } from '@n8n/db';
|
import type { Project, WorkflowEntity, IWorkflowDb } from '@n8n/db';
|
||||||
import type { WorkflowExecuteAfterContext } from '@n8n/decorators';
|
import type { WorkflowExecuteAfterContext } from '@n8n/decorators';
|
||||||
import { Container } from '@n8n/di';
|
import { Container } from '@n8n/di';
|
||||||
import type { MockProxy } from 'jest-mock-extended';
|
import type { MockProxy } from 'jest-mock-extended';
|
||||||
|
|||||||
@@ -1,7 +1,4 @@
|
|||||||
import { createTeamProject } from '@n8n/backend-test-utils';
|
import { createTeamProject, createWorkflow, testDb, testModules } from '@n8n/backend-test-utils';
|
||||||
import { createWorkflow } from '@n8n/backend-test-utils';
|
|
||||||
import { testDb } from '@n8n/backend-test-utils';
|
|
||||||
import { testModules } from '@n8n/backend-test-utils';
|
|
||||||
import { Container } from '@n8n/di';
|
import { Container } from '@n8n/di';
|
||||||
import { DateTime } from 'luxon';
|
import { DateTime } from 'luxon';
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,4 @@
|
|||||||
import { createTeamProject } from '@n8n/backend-test-utils';
|
import { createTeamProject, createWorkflow, testDb, testModules } from '@n8n/backend-test-utils';
|
||||||
import { createWorkflow } from '@n8n/backend-test-utils';
|
|
||||||
import { testDb } from '@n8n/backend-test-utils';
|
|
||||||
import { testModules } from '@n8n/backend-test-utils';
|
|
||||||
import { Container } from '@n8n/di';
|
import { Container } from '@n8n/di';
|
||||||
import { DateTime } from 'luxon';
|
import { DateTime } from 'luxon';
|
||||||
|
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ export async function getSharedWorkflowIds(
|
|||||||
|
|
||||||
export async function getSharedWorkflow(
|
export async function getSharedWorkflow(
|
||||||
user: User,
|
user: User,
|
||||||
workflowId?: string | undefined,
|
workflowId?: string,
|
||||||
): Promise<SharedWorkflow | null> {
|
): Promise<SharedWorkflow | null> {
|
||||||
return await Container.get(SharedWorkflowRepository).findOne({
|
return await Container.get(SharedWorkflowRepository).findOne({
|
||||||
where: {
|
where: {
|
||||||
|
|||||||
@@ -94,7 +94,7 @@ export class Push extends TypedEmitter<PushEvents> {
|
|||||||
setupPushHandler(restEndpoint: string, app: Application) {
|
setupPushHandler(restEndpoint: string, app: Application) {
|
||||||
app.use(
|
app.use(
|
||||||
`/${restEndpoint}/push`,
|
`/${restEndpoint}/push`,
|
||||||
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
||||||
this.authService.createAuthMiddleware(false),
|
this.authService.createAuthMiddleware(false),
|
||||||
(req: SSEPushRequest | WebSocketPushRequest, res: PushResponse) =>
|
(req: SSEPushRequest | WebSocketPushRequest, res: PushResponse) =>
|
||||||
this.handleRequest(req, res),
|
this.handleRequest(req, res),
|
||||||
|
|||||||
@@ -1,12 +1,17 @@
|
|||||||
import type { Logger } from '@n8n/backend-common';
|
import type { Logger } from '@n8n/backend-common';
|
||||||
import type { IExecutionResponse } from '@n8n/db';
|
import type { IExecutionResponse, ExecutionRepository } from '@n8n/db';
|
||||||
import type { ExecutionRepository } from '@n8n/db';
|
|
||||||
import { mock } from 'jest-mock-extended';
|
import { mock } from 'jest-mock-extended';
|
||||||
import type { WorkflowExecute as ActualWorkflowExecute } from 'n8n-core';
|
import type { WorkflowExecute as ActualWorkflowExecute } from 'n8n-core';
|
||||||
import { ExternalSecretsProxy } from 'n8n-core';
|
import { ExternalSecretsProxy } from 'n8n-core';
|
||||||
import { mockInstance } from 'n8n-core/test/utils';
|
import { mockInstance } from 'n8n-core/test/utils';
|
||||||
import type { IPinData, ITaskData, IWorkflowExecuteAdditionalData } from 'n8n-workflow';
|
import {
|
||||||
import { Workflow, type IRunExecutionData, type WorkflowExecuteMode } from 'n8n-workflow';
|
type IPinData,
|
||||||
|
type ITaskData,
|
||||||
|
type IWorkflowExecuteAdditionalData,
|
||||||
|
Workflow,
|
||||||
|
type IRunExecutionData,
|
||||||
|
type WorkflowExecuteMode,
|
||||||
|
} from 'n8n-workflow';
|
||||||
|
|
||||||
import { CredentialsHelper } from '@/credentials-helper';
|
import { CredentialsHelper } from '@/credentials-helper';
|
||||||
import { VariablesService } from '@/environments.ee/variables/variables.service.ee';
|
import { VariablesService } from '@/environments.ee/variables/variables.service.ee';
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import { mockLogger } from '@n8n/backend-test-utils';
|
import { mockLogger, mockInstance } from '@n8n/backend-test-utils';
|
||||||
import { mockInstance } from '@n8n/backend-test-utils';
|
|
||||||
import { GlobalConfig } from '@n8n/config';
|
import { GlobalConfig } from '@n8n/config';
|
||||||
import { Container } from '@n8n/di';
|
import { Container } from '@n8n/di';
|
||||||
import * as BullModule from 'bull';
|
import * as BullModule from 'bull';
|
||||||
|
|||||||
@@ -415,7 +415,7 @@ export class Server extends AbstractServer {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Route all UI urls to index.html to support history-api
|
// Route all UI urls to index.html to support history-api
|
||||||
const nonUIRoutes: Readonly<string[]> = [
|
const nonUIRoutes: readonly string[] = [
|
||||||
'favicon.ico',
|
'favicon.ico',
|
||||||
'assets',
|
'assets',
|
||||||
'static',
|
'static',
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
import { WorkflowEntity } from '@n8n/db';
|
import { WorkflowEntity } from '@n8n/db';
|
||||||
import type { User } from '@n8n/db';
|
import type { User, SharedWorkflowRepository, WorkflowRepository } from '@n8n/db';
|
||||||
import type { SharedWorkflowRepository } from '@n8n/db';
|
|
||||||
import type { WorkflowRepository } from '@n8n/db';
|
|
||||||
import { mock } from 'jest-mock-extended';
|
import { mock } from 'jest-mock-extended';
|
||||||
|
|
||||||
import type { ActivationErrorsService } from '@/activation-errors.service';
|
import type { ActivationErrorsService } from '@/activation-errors.service';
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
import type { Logger } from '@n8n/backend-common';
|
import type { Logger } from '@n8n/backend-common';
|
||||||
import { randomName } from '@n8n/backend-test-utils';
|
import { randomName, mockInstance } from '@n8n/backend-test-utils';
|
||||||
import { mockInstance } from '@n8n/backend-test-utils';
|
|
||||||
import type { GlobalConfig } from '@n8n/config';
|
import type { GlobalConfig } from '@n8n/config';
|
||||||
import { LICENSE_FEATURES } from '@n8n/constants';
|
import { LICENSE_FEATURES } from '@n8n/constants';
|
||||||
import { InstalledNodes } from '@n8n/db';
|
import {
|
||||||
import { InstalledPackages } from '@n8n/db';
|
InstalledNodes,
|
||||||
import { InstalledNodesRepository } from '@n8n/db';
|
InstalledPackages,
|
||||||
import { InstalledPackagesRepository } from '@n8n/db';
|
InstalledNodesRepository,
|
||||||
|
InstalledPackagesRepository,
|
||||||
|
} from '@n8n/db';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import { exec } from 'child_process';
|
import { exec } from 'child_process';
|
||||||
import { mkdir, readFile, writeFile, rm, access, constants } from 'fs/promises';
|
import { mkdir, readFile, writeFile, rm, access, constants } from 'fs/promises';
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import { SharedCredentials } from '@n8n/db';
|
import { SharedCredentials } from '@n8n/db';
|
||||||
import type { CredentialsEntity } from '@n8n/db';
|
import type { CredentialsEntity, User } from '@n8n/db';
|
||||||
import type { User } from '@n8n/db';
|
|
||||||
import { Container } from '@n8n/di';
|
import { Container } from '@n8n/di';
|
||||||
import { In } from '@n8n/typeorm';
|
import { In } from '@n8n/typeorm';
|
||||||
import { mock } from 'jest-mock-extended';
|
import { mock } from 'jest-mock-extended';
|
||||||
|
|||||||
@@ -1,8 +1,11 @@
|
|||||||
import type { AuthenticatedRequest } from '@n8n/db';
|
import type {
|
||||||
import type { SettingsRepository, User } from '@n8n/db';
|
AuthenticatedRequest,
|
||||||
import type { CredentialsRepository } from '@n8n/db';
|
SettingsRepository,
|
||||||
import type { WorkflowRepository } from '@n8n/db';
|
User,
|
||||||
import type { UserRepository } from '@n8n/db';
|
CredentialsRepository,
|
||||||
|
WorkflowRepository,
|
||||||
|
UserRepository,
|
||||||
|
} from '@n8n/db';
|
||||||
import RudderStack from '@rudderstack/rudder-sdk-node';
|
import RudderStack from '@rudderstack/rudder-sdk-node';
|
||||||
import type { Response } from 'express';
|
import type { Response } from 'express';
|
||||||
import { mock } from 'jest-mock-extended';
|
import { mock } from 'jest-mock-extended';
|
||||||
|
|||||||
@@ -1,9 +1,7 @@
|
|||||||
import { mockLogger } from '@n8n/backend-test-utils';
|
import { mockLogger } from '@n8n/backend-test-utils';
|
||||||
import type { GlobalConfig } from '@n8n/config';
|
import type { GlobalConfig } from '@n8n/config';
|
||||||
import { Time } from '@n8n/constants';
|
import { Time } from '@n8n/constants';
|
||||||
import type { AuthenticatedRequest } from '@n8n/db';
|
import type { AuthenticatedRequest, User, UserRepository } from '@n8n/db';
|
||||||
import type { User } from '@n8n/db';
|
|
||||||
import type { UserRepository } from '@n8n/db';
|
|
||||||
import type { NextFunction, Response } from 'express';
|
import type { NextFunction, Response } from 'express';
|
||||||
import { mock } from 'jest-mock-extended';
|
import { mock } from 'jest-mock-extended';
|
||||||
import { DateTime } from 'luxon';
|
import { DateTime } from 'luxon';
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
import { mockInstance } from '@n8n/backend-test-utils';
|
import { mockInstance } from '@n8n/backend-test-utils';
|
||||||
import type { CredentialsEntity } from '@n8n/db';
|
import type { CredentialsEntity, WorkflowEntity } from '@n8n/db';
|
||||||
import type { WorkflowEntity } from '@n8n/db';
|
import { CredentialsRepository, WorkflowRepository } from '@n8n/db';
|
||||||
import { CredentialsRepository } from '@n8n/db';
|
|
||||||
import { WorkflowRepository } from '@n8n/db';
|
|
||||||
|
|
||||||
import { NamingService } from '@/services/naming.service';
|
import { NamingService } from '@/services/naming.service';
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,15 @@
|
|||||||
import { mockInstance } from '@n8n/backend-test-utils';
|
import { mockInstance } from '@n8n/backend-test-utils';
|
||||||
import type { SharedCredentials } from '@n8n/db';
|
import type { SharedCredentials } from '@n8n/db';
|
||||||
import { Project, SharedWorkflow, User, WorkflowEntity, ProjectRelation } from '@n8n/db';
|
import {
|
||||||
import { ProjectRelationRepository } from '@n8n/db';
|
Project,
|
||||||
import { SharedWorkflowRepository } from '@n8n/db';
|
SharedWorkflow,
|
||||||
import { UserRepository } from '@n8n/db';
|
User,
|
||||||
|
WorkflowEntity,
|
||||||
|
ProjectRelation,
|
||||||
|
ProjectRelationRepository,
|
||||||
|
SharedWorkflowRepository,
|
||||||
|
UserRepository,
|
||||||
|
} from '@n8n/db';
|
||||||
import { mock } from 'jest-mock-extended';
|
import { mock } from 'jest-mock-extended';
|
||||||
import { v4 as uuid } from 'uuid';
|
import { v4 as uuid } from 'uuid';
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import { testDb } from '@n8n/backend-test-utils';
|
import { testDb } from '@n8n/backend-test-utils';
|
||||||
import type { AuthenticatedRequest } from '@n8n/db';
|
import type { AuthenticatedRequest } from '@n8n/db';
|
||||||
import { ApiKeyRepository } from '@n8n/db';
|
import { ApiKeyRepository, UserRepository } from '@n8n/db';
|
||||||
import { UserRepository } from '@n8n/db';
|
|
||||||
import { Container } from '@n8n/di';
|
import { Container } from '@n8n/di';
|
||||||
import { getOwnerOnlyApiKeyScopes, type ApiKeyScope } from '@n8n/permissions';
|
import { getOwnerOnlyApiKeyScopes, type ApiKeyScope } from '@n8n/permissions';
|
||||||
import type { Response, NextFunction } from 'express';
|
import type { Response, NextFunction } from 'express';
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import { mockInstance } from '@n8n/backend-test-utils';
|
import { mockInstance } from '@n8n/backend-test-utils';
|
||||||
import { GlobalConfig } from '@n8n/config';
|
import { GlobalConfig } from '@n8n/config';
|
||||||
import { User } from '@n8n/db';
|
import { User, UserRepository } from '@n8n/db';
|
||||||
import { UserRepository } from '@n8n/db';
|
|
||||||
import { mock } from 'jest-mock-extended';
|
import { mock } from 'jest-mock-extended';
|
||||||
import { v4 as uuid } from 'uuid';
|
import { v4 as uuid } from 'uuid';
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,6 @@
|
|||||||
import { getPersonalProject } from '@n8n/backend-test-utils';
|
import { getPersonalProject, createWorkflow, testDb, mockInstance } from '@n8n/backend-test-utils';
|
||||||
import { createWorkflow } from '@n8n/backend-test-utils';
|
|
||||||
import { testDb } from '@n8n/backend-test-utils';
|
|
||||||
import { mockInstance } from '@n8n/backend-test-utils';
|
|
||||||
import { GlobalConfig } from '@n8n/config';
|
import { GlobalConfig } from '@n8n/config';
|
||||||
import type { IWorkflowDb, Project, WorkflowEntity } from '@n8n/db';
|
import type { IWorkflowDb, Project, WorkflowEntity, User } from '@n8n/db';
|
||||||
import type { User } from '@n8n/db';
|
|
||||||
import { WorkflowStatisticsRepository } from '@n8n/db';
|
import { WorkflowStatisticsRepository } from '@n8n/db';
|
||||||
import { Container } from '@n8n/di';
|
import { Container } from '@n8n/di';
|
||||||
import {
|
import {
|
||||||
|
|||||||
@@ -171,7 +171,7 @@ export class OidcService {
|
|||||||
} catch (error) {
|
} catch (error) {
|
||||||
this.logger.warn(
|
this.logger.warn(
|
||||||
'Failed to load OIDC configuration from database, falling back to default configuration.',
|
'Failed to load OIDC configuration from database, falling back to default configuration.',
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
||||||
{ error },
|
{ error },
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,6 @@
|
|||||||
import { mockInstance } from '@n8n/backend-test-utils';
|
import { mockInstance } from '@n8n/backend-test-utils';
|
||||||
import type { AuthIdentity } from '@n8n/db';
|
import type { AuthIdentity } from '@n8n/db';
|
||||||
import { generateNanoId } from '@n8n/db';
|
import { generateNanoId, User, AuthIdentityRepository, UserRepository } from '@n8n/db';
|
||||||
import { User } from '@n8n/db';
|
|
||||||
import { AuthIdentityRepository } from '@n8n/db';
|
|
||||||
import { UserRepository } from '@n8n/db';
|
|
||||||
|
|
||||||
import * as helpers from '@/sso.ee/saml/saml-helpers';
|
import * as helpers from '@/sso.ee/saml/saml-helpers';
|
||||||
import type { SamlUserAttributes } from '@/sso.ee/saml/types';
|
import type { SamlUserAttributes } from '@/sso.ee/saml/types';
|
||||||
|
|||||||
@@ -269,7 +269,7 @@ export class SamlService {
|
|||||||
// database.
|
// database.
|
||||||
this.logger.error(
|
this.logger.error(
|
||||||
'SAML initialization detected an invalid metadata URL in database. Trying to initialize from metadata in database if available.',
|
'SAML initialization detected an invalid metadata URL in database. Trying to initialize from metadata in database if available.',
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
||||||
{ error },
|
{ error },
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -719,7 +719,7 @@ describe('TaskBroker', () => {
|
|||||||
describe('task execution timeouts', () => {
|
describe('task execution timeouts', () => {
|
||||||
let taskBroker: TaskBroker;
|
let taskBroker: TaskBroker;
|
||||||
let config: TaskRunnersConfig;
|
let config: TaskRunnersConfig;
|
||||||
let runnerLifecycleEvents = mock<TaskRunnerLifecycleEvents>();
|
const runnerLifecycleEvents = mock<TaskRunnerLifecycleEvents>();
|
||||||
|
|
||||||
beforeAll(() => {
|
beforeAll(() => {
|
||||||
jest.useFakeTimers();
|
jest.useFakeTimers();
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import type { DataRequestResponse, TaskDataRequestParams } from '@n8n/task-runner';
|
import type { DataRequestResponse, TaskDataRequestParams } from '@n8n/task-runner';
|
||||||
import { mock } from 'jest-mock-extended';
|
import { mock } from 'jest-mock-extended';
|
||||||
import type { IWorkflowExecuteAdditionalData } from 'n8n-workflow';
|
import type { IWorkflowExecuteAdditionalData, INode, INodeExecutionData } from 'n8n-workflow';
|
||||||
import { type INode, type INodeExecutionData } from 'n8n-workflow';
|
|
||||||
|
|
||||||
import { DataRequestResponseStripper } from '../data-request-response-stripper';
|
import { DataRequestResponseStripper } from '../data-request-response-stripper';
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { mock } from 'jest-mock-extended';
|
import { mock } from 'jest-mock-extended';
|
||||||
import type { INode } from 'n8n-workflow';
|
import type { INode, Workflow } from 'n8n-workflow';
|
||||||
import { NodeOperationError, type Workflow } from 'n8n-workflow';
|
import { NodeOperationError } from 'n8n-workflow';
|
||||||
|
|
||||||
import { objectToError } from '../object-to-error';
|
import { objectToError } from '../object-to-error';
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
import { generateNanoId } from '@n8n/db';
|
import { generateNanoId } from '@n8n/db';
|
||||||
import type * as express from 'express';
|
import type * as express from 'express';
|
||||||
import { mock } from 'jest-mock-extended';
|
import { mock } from 'jest-mock-extended';
|
||||||
import type { ITaskData, IWorkflowBase } from 'n8n-workflow';
|
import type {
|
||||||
import {
|
ITaskData,
|
||||||
type IWebhookData,
|
IWorkflowBase,
|
||||||
type IWorkflowExecuteAdditionalData,
|
IWebhookData,
|
||||||
type Workflow,
|
IWorkflowExecuteAdditionalData,
|
||||||
|
Workflow,
|
||||||
} from 'n8n-workflow';
|
} from 'n8n-workflow';
|
||||||
import { v4 as uuid } from 'uuid';
|
import { v4 as uuid } from 'uuid';
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import type { IExecutionResponse } from '@n8n/db';
|
import type { IExecutionResponse, ExecutionRepository } from '@n8n/db';
|
||||||
import type { ExecutionRepository } from '@n8n/db';
|
|
||||||
import type express from 'express';
|
import type express from 'express';
|
||||||
import { mock } from 'jest-mock-extended';
|
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';
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import type { IExecutionResponse } from '@n8n/db';
|
import type { IExecutionResponse, ExecutionRepository } from '@n8n/db';
|
||||||
import type { ExecutionRepository } from '@n8n/db';
|
|
||||||
import type express from 'express';
|
import type express from 'express';
|
||||||
import { mock } from 'jest-mock-extended';
|
import { mock } from 'jest-mock-extended';
|
||||||
|
|
||||||
|
|||||||
@@ -13,14 +13,14 @@ import { WebhookService } from '@/webhooks/webhook.service';
|
|||||||
import * as WorkflowExecuteAdditionalData from '@/workflow-execute-additional-data';
|
import * as WorkflowExecuteAdditionalData from '@/workflow-execute-additional-data';
|
||||||
import { WorkflowStaticDataService } from '@/workflows/workflow-static-data.service';
|
import { WorkflowStaticDataService } from '@/workflows/workflow-static-data.service';
|
||||||
|
|
||||||
|
import { authAllowlistedNodes } from './constants';
|
||||||
|
import { sanitizeWebhookRequest } from './webhook-request-sanitizer';
|
||||||
import type {
|
import type {
|
||||||
IWebhookResponseCallbackData,
|
IWebhookResponseCallbackData,
|
||||||
IWebhookManager,
|
IWebhookManager,
|
||||||
WebhookAccessControlOptions,
|
WebhookAccessControlOptions,
|
||||||
WebhookRequest,
|
WebhookRequest,
|
||||||
} from './webhook.types';
|
} from './webhook.types';
|
||||||
import { authAllowlistedNodes } from './constants';
|
|
||||||
import { sanitizeWebhookRequest } from './webhook-request-sanitizer';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Service for handling the execution of live webhooks, i.e. webhooks
|
* Service for handling the execution of live webhooks, i.e. webhooks
|
||||||
|
|||||||
@@ -25,6 +25,8 @@ import * as WebhookHelpers from '@/webhooks/webhook-helpers';
|
|||||||
import * as WorkflowExecuteAdditionalData from '@/workflow-execute-additional-data';
|
import * as WorkflowExecuteAdditionalData from '@/workflow-execute-additional-data';
|
||||||
import type { WorkflowRequest } from '@/workflows/workflow.request';
|
import type { WorkflowRequest } from '@/workflows/workflow.request';
|
||||||
|
|
||||||
|
import { authAllowlistedNodes } from './constants';
|
||||||
|
import { sanitizeWebhookRequest } from './webhook-request-sanitizer';
|
||||||
import { WebhookService } from './webhook.service';
|
import { WebhookService } from './webhook.service';
|
||||||
import type {
|
import type {
|
||||||
IWebhookResponseCallbackData,
|
IWebhookResponseCallbackData,
|
||||||
@@ -32,8 +34,6 @@ import type {
|
|||||||
WebhookAccessControlOptions,
|
WebhookAccessControlOptions,
|
||||||
WebhookRequest,
|
WebhookRequest,
|
||||||
} from './webhook.types';
|
} from './webhook.types';
|
||||||
import { authAllowlistedNodes } from './constants';
|
|
||||||
import { sanitizeWebhookRequest } from './webhook-request-sanitizer';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Service for handling the execution of webhooks of manual executions
|
* Service for handling the execution of webhooks of manual executions
|
||||||
|
|||||||
@@ -13,8 +13,8 @@ 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 { WaitingWebhooks } from '@/webhooks/waiting-webhooks';
|
import { WaitingWebhooks } from '@/webhooks/waiting-webhooks';
|
||||||
|
|
||||||
import type { IWebhookResponseCallbackData, WaitingWebhookRequest } from './webhook.types';
|
|
||||||
import { sanitizeWebhookRequest } from './webhook-request-sanitizer';
|
import { sanitizeWebhookRequest } from './webhook-request-sanitizer';
|
||||||
|
import type { IWebhookResponseCallbackData, WaitingWebhookRequest } from './webhook.types';
|
||||||
|
|
||||||
@Service()
|
@Service()
|
||||||
export class WaitingForms extends WaitingWebhooks {
|
export class WaitingForms extends WaitingWebhooks {
|
||||||
|
|||||||
@@ -18,13 +18,13 @@ import { NodeTypes } from '@/node-types';
|
|||||||
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';
|
||||||
|
|
||||||
|
import { sanitizeWebhookRequest } from './webhook-request-sanitizer';
|
||||||
import { WebhookService } from './webhook.service';
|
import { WebhookService } from './webhook.service';
|
||||||
import type {
|
import type {
|
||||||
IWebhookResponseCallbackData,
|
IWebhookResponseCallbackData,
|
||||||
IWebhookManager,
|
IWebhookManager,
|
||||||
WaitingWebhookRequest,
|
WaitingWebhookRequest,
|
||||||
} from './webhook.types';
|
} from './webhook.types';
|
||||||
import { sanitizeWebhookRequest } from './webhook-request-sanitizer';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Service for handling the execution of webhooks of Wait nodes that use the
|
* Service for handling the execution of webhooks of Wait nodes that use the
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/* eslint-disable @typescript-eslint/no-unsafe-argument */
|
/* eslint-disable @typescript-eslint/no-unsafe-argument */
|
||||||
/* eslint-disable @typescript-eslint/prefer-optional-chain */
|
/* eslint-disable @typescript-eslint/prefer-optional-chain */
|
||||||
/* eslint-disable @typescript-eslint/no-shadow */
|
|
||||||
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
||||||
/* eslint-disable id-denylist */
|
/* eslint-disable id-denylist */
|
||||||
/* eslint-disable prefer-spread */
|
/* eslint-disable prefer-spread */
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { AUTH_COOKIE_NAME } from '@/constants';
|
|
||||||
import type { Request } from 'express';
|
import type { Request } from 'express';
|
||||||
|
|
||||||
|
import { AUTH_COOKIE_NAME } from '@/constants';
|
||||||
|
|
||||||
const BROWSER_ID_COOKIE_NAME = 'n8n-browserId';
|
const BROWSER_ID_COOKIE_NAME = 'n8n-browserId';
|
||||||
|
|
||||||
const DISALLOWED_COOKIES = new Set([AUTH_COOKIE_NAME, BROWSER_ID_COOKIE_NAME]);
|
const DISALLOWED_COOKIES = new Set([AUTH_COOKIE_NAME, BROWSER_ID_COOKIE_NAME]);
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/* eslint-disable @typescript-eslint/no-unsafe-argument */
|
/* eslint-disable @typescript-eslint/no-unsafe-argument */
|
||||||
/* eslint-disable @typescript-eslint/no-use-before-define */
|
|
||||||
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
||||||
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
||||||
import type { PushMessage, PushType } from '@n8n/api-types';
|
import type { PushMessage, PushType } from '@n8n/api-types';
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/* eslint-disable @typescript-eslint/no-unsafe-argument */
|
/* eslint-disable @typescript-eslint/no-unsafe-argument */
|
||||||
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
||||||
/* eslint-disable @typescript-eslint/no-shadow */
|
|
||||||
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
||||||
import { Logger } from '@n8n/backend-common';
|
import { Logger } from '@n8n/backend-common';
|
||||||
import { ExecutionRepository } from '@n8n/db';
|
import { ExecutionRepository } from '@n8n/db';
|
||||||
@@ -200,7 +200,7 @@ export class WorkflowRunner {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Run the workflow in current process */
|
/** Run the workflow in current process */
|
||||||
// eslint-disable-next-line complexity
|
|
||||||
private async runMainProcess(
|
private async runMainProcess(
|
||||||
executionId: string,
|
executionId: string,
|
||||||
data: IWorkflowExecutionDataProcess,
|
data: IWorkflowExecutionDataProcess,
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
import { mockLogger } from '@n8n/backend-test-utils';
|
import { mockLogger, mockInstance } from '@n8n/backend-test-utils';
|
||||||
import { mockInstance } from '@n8n/backend-test-utils';
|
import { User, WorkflowHistoryRepository } from '@n8n/db';
|
||||||
import { User } from '@n8n/db';
|
|
||||||
import { WorkflowHistoryRepository } from '@n8n/db';
|
|
||||||
import { mockClear } from 'jest-mock-extended';
|
import { mockClear } from 'jest-mock-extended';
|
||||||
|
|
||||||
import { WorkflowFinderService } from '@/workflows/workflow-finder.service';
|
import { WorkflowFinderService } from '@/workflows/workflow-finder.service';
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
import { createWorkflow } from '@n8n/backend-test-utils';
|
import { createWorkflow, testDb, mockInstance } from '@n8n/backend-test-utils';
|
||||||
import { testDb } from '@n8n/backend-test-utils';
|
|
||||||
import { mockInstance } from '@n8n/backend-test-utils';
|
|
||||||
import type { WebhookEntity } from '@n8n/db';
|
import type { WebhookEntity } from '@n8n/db';
|
||||||
import { WorkflowRepository } from '@n8n/db';
|
import { WorkflowRepository } from '@n8n/db';
|
||||||
import { Container } from '@n8n/di';
|
import { Container } from '@n8n/di';
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
import { testDb } from '@n8n/backend-test-utils';
|
import { testDb } from '@n8n/backend-test-utils';
|
||||||
import type { Project } from '@n8n/db';
|
import type { Project, User } from '@n8n/db';
|
||||||
import type { User } from '@n8n/db';
|
import {
|
||||||
import { CredentialsRepository } from '@n8n/db';
|
CredentialsRepository,
|
||||||
import { ProjectRepository } from '@n8n/db';
|
ProjectRepository,
|
||||||
import { SharedCredentialsRepository } from '@n8n/db';
|
SharedCredentialsRepository,
|
||||||
import { UserRepository } from '@n8n/db';
|
UserRepository,
|
||||||
|
} from '@n8n/db';
|
||||||
import { Container } from '@n8n/di';
|
import { Container } from '@n8n/di';
|
||||||
import { randomUUID } from 'crypto';
|
import { randomUUID } from 'crypto';
|
||||||
import { mock } from 'jest-mock-extended';
|
import { mock } from 'jest-mock-extended';
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
import type { ApiKeyWithRawValue } from '@n8n/api-types';
|
import type { ApiKeyWithRawValue } from '@n8n/api-types';
|
||||||
import { testDb } from '@n8n/backend-test-utils';
|
import { testDb, randomValidPassword, mockInstance } from '@n8n/backend-test-utils';
|
||||||
import { randomValidPassword } from '@n8n/backend-test-utils';
|
|
||||||
import { mockInstance } from '@n8n/backend-test-utils';
|
|
||||||
import { GlobalConfig } from '@n8n/config';
|
import { GlobalConfig } from '@n8n/config';
|
||||||
import type { User } from '@n8n/db';
|
import type { User } from '@n8n/db';
|
||||||
import { ApiKeyRepository } from '@n8n/db';
|
import { ApiKeyRepository } from '@n8n/db';
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import { randomValidPassword } from '@n8n/backend-test-utils';
|
import { randomValidPassword, testDb } from '@n8n/backend-test-utils';
|
||||||
import { testDb } from '@n8n/backend-test-utils';
|
|
||||||
import type { User } from '@n8n/db';
|
import type { User } from '@n8n/db';
|
||||||
import { UserRepository } from '@n8n/db';
|
import { UserRepository } from '@n8n/db';
|
||||||
import { Container } from '@n8n/di';
|
import { Container } from '@n8n/di';
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ const throwFileNotFound = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const binaryDataService = mockInstance(BinaryDataService);
|
const binaryDataService = mockInstance(BinaryDataService);
|
||||||
let testServer = setupTestServer({ endpointGroups: ['binaryData'] });
|
const testServer = setupTestServer({ endpointGroups: ['binaryData'] });
|
||||||
let authOwnerAgent: SuperAgentTest;
|
let authOwnerAgent: SuperAgentTest;
|
||||||
|
|
||||||
beforeAll(async () => {
|
beforeAll(async () => {
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
import { createWorkflow, shareWorkflowWithUsers } from '@n8n/backend-test-utils';
|
import {
|
||||||
import { testDb } from '@n8n/backend-test-utils';
|
createWorkflow,
|
||||||
import { mockInstance } from '@n8n/backend-test-utils';
|
shareWorkflowWithUsers,
|
||||||
|
testDb,
|
||||||
|
mockInstance,
|
||||||
|
} from '@n8n/backend-test-utils';
|
||||||
import type { User } from '@n8n/db';
|
import type { User } 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';
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import { getPersonalProject, mockInstance } from '@n8n/backend-test-utils';
|
import { getPersonalProject, mockInstance, testDb } from '@n8n/backend-test-utils';
|
||||||
import { testDb } from '@n8n/backend-test-utils';
|
|
||||||
import { nanoid } from 'nanoid';
|
import { nanoid } from 'nanoid';
|
||||||
|
|
||||||
import '@/zod-alias-support';
|
import '@/zod-alias-support';
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
import { mockInstance, testDb } from '@n8n/backend-test-utils';
|
import {
|
||||||
import { getPersonalProject } from '@n8n/backend-test-utils';
|
mockInstance,
|
||||||
import { getAllSharedWorkflows, getAllWorkflows } from '@n8n/backend-test-utils';
|
testDb,
|
||||||
|
getPersonalProject,
|
||||||
|
getAllSharedWorkflows,
|
||||||
|
getAllWorkflows,
|
||||||
|
} from '@n8n/backend-test-utils';
|
||||||
import { nanoid } from 'nanoid';
|
import { nanoid } from 'nanoid';
|
||||||
|
|
||||||
import '@/zod-alias-support';
|
import '@/zod-alias-support';
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user