From 1eeadc61148df503bcd9fc944f8032ecae7438be Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E0=A4=95=E0=A4=BE=E0=A4=B0=E0=A4=A4=E0=A5=8B=E0=A4=AB?=
 =?UTF-8?q?=E0=A5=8D=E0=A4=AB=E0=A5=87=E0=A4=B2=E0=A4=B8=E0=A5=8D=E0=A4=95?=
 =?UTF-8?q?=E0=A5=8D=E0=A4=B0=E0=A4=BF=E0=A4=AA=E0=A5=8D=E0=A4=9F=E2=84=A2?=
 <netroy@users.noreply.github.com>
Date: Mon, 24 Apr 2023 09:45:31 +0000
Subject: [PATCH 1/5] refactor(core): Setup decorator based RBAC (no-changelog)
 (#5787)

---
 .../UserManagement/UserManagementHelper.ts    | 24 -------
 .../cli/src/controllers/auth.controller.ts    |  6 +-
 .../cli/src/controllers/ldap.controller.ts    |  3 +-
 packages/cli/src/controllers/me.controller.ts |  3 +-
 .../src/controllers/nodeTypes.controller.ts   |  3 +-
 .../cli/src/controllers/nodes.controller.ts   | 12 +---
 .../cli/src/controllers/owner.controller.ts   |  3 +-
 .../controllers/passwordReset.controller.ts   |  3 -
 .../cli/src/controllers/tags.controller.ts    | 13 ++--
 .../src/controllers/translation.controller.ts |  3 +-
 .../cli/src/controllers/users.controller.ts   |  5 +-
 packages/cli/src/decorators/Authorized.ts     | 16 +++++
 packages/cli/src/decorators/constants.ts      |  1 +
 packages/cli/src/decorators/index.ts          |  1 +
 .../cli/src/decorators/registerController.ts  | 41 ++++++++++--
 packages/cli/src/decorators/types.ts          |  4 ++
 .../cli/src/eventbus/eventBus.controller.ts   | 30 ++++-----
 packages/cli/src/middlewares/auth.ts          | 65 ++++---------------
 packages/cli/src/middlewares/isOwner.ts       | 12 ----
 .../saml/middleware/samlEnabledMiddleware.ts  | 17 +----
 .../src/sso/saml/routes/saml.controller.ee.ts | 15 +++--
 .../cli/test/integration/shared/constants.ts  |  2 +-
 .../cli/test/integration/users.api.test.ts    | 14 +++-
 23 files changed, 132 insertions(+), 164 deletions(-)
 create mode 100644 packages/cli/src/decorators/Authorized.ts
 delete mode 100644 packages/cli/src/middlewares/isOwner.ts

diff --git a/packages/cli/src/UserManagement/UserManagementHelper.ts b/packages/cli/src/UserManagement/UserManagementHelper.ts
index 3e705efbd648c..88927f4c73acb 100644
--- a/packages/cli/src/UserManagement/UserManagementHelper.ts
+++ b/packages/cli/src/UserManagement/UserManagementHelper.ts
@@ -196,30 +196,6 @@ export async function getUserById(userId: string): Promise<User> {
 	return user;
 }
 
-/**
- * Check if a URL contains an auth-excluded endpoint.
- */
-export function isAuthExcluded(url: string, ignoredEndpoints: Readonly<string[]>): boolean {
-	return !!ignoredEndpoints
-		.filter(Boolean) // skip empty paths
-		.find((ignoredEndpoint) => url.startsWith(`/${ignoredEndpoint}`));
-}
-
-/**
- * Check if the endpoint is `POST /users/:id`.
- */
-export function isPostUsersId(req: express.Request, restEndpoint: string): boolean {
-	return (
-		req.method === 'POST' &&
-		new RegExp(`/${restEndpoint}/users/[\\w\\d-]*`).test(req.url) &&
-		!req.url.includes('reinvite')
-	);
-}
-
-export function isAuthenticatedRequest(request: express.Request): request is AuthenticatedRequest {
-	return request.user !== undefined;
-}
-
 // ----------------------------------
 //            hashing
 // ----------------------------------
diff --git a/packages/cli/src/controllers/auth.controller.ts b/packages/cli/src/controllers/auth.controller.ts
index 068522ce8700d..7aeb7e1cfe0cb 100644
--- a/packages/cli/src/controllers/auth.controller.ts
+++ b/packages/cli/src/controllers/auth.controller.ts
@@ -1,5 +1,5 @@
 import validator from 'validator';
-import { Get, Post, RestController } from '@/decorators';
+import { Authorized, Get, Post, RestController } from '@/decorators';
 import { AuthError, BadRequestError, InternalServerError } from '@/ResponseHelper';
 import { sanitizeUser, withFeatureFlags } from '@/UserManagement/UserManagementHelper';
 import { issueCookie, resolveJwt } from '@/auth/jwt';
@@ -58,7 +58,6 @@ export class AuthController {
 
 	/**
 	 * Log in a user.
-	 * Authless endpoint.
 	 */
 	@Post('/login')
 	async login(req: LoginRequest, res: Response): Promise<PublicUser | undefined> {
@@ -135,7 +134,6 @@ export class AuthController {
 
 	/**
 	 * Validate invite token to enable invitee to set up their account.
-	 * Authless endpoint.
 	 */
 	@Get('/resolve-signup-token')
 	async resolveSignupToken(req: UserRequest.ResolveSignUp) {
@@ -196,8 +194,8 @@ export class AuthController {
 
 	/**
 	 * Log out a user.
-	 * Authless endpoint.
 	 */
+	@Authorized()
 	@Post('/logout')
 	logout(req: Request, res: Response) {
 		res.clearCookie(AUTH_COOKIE_NAME);
diff --git a/packages/cli/src/controllers/ldap.controller.ts b/packages/cli/src/controllers/ldap.controller.ts
index 619a70db286b2..b354ef660021c 100644
--- a/packages/cli/src/controllers/ldap.controller.ts
+++ b/packages/cli/src/controllers/ldap.controller.ts
@@ -1,5 +1,5 @@
 import pick from 'lodash.pick';
-import { Get, Post, Put, RestController } from '@/decorators';
+import { Authorized, Get, Post, Put, RestController } from '@/decorators';
 import { getLdapConfig, getLdapSynchronizations, updateLdapConfig } from '@/Ldap/helpers';
 import { LdapService } from '@/Ldap/LdapService.ee';
 import { LdapSync } from '@/Ldap/LdapSync.ee';
@@ -8,6 +8,7 @@ import { BadRequestError } from '@/ResponseHelper';
 import { NON_SENSIBLE_LDAP_CONFIG_PROPERTIES } from '@/Ldap/constants';
 import { InternalHooks } from '@/InternalHooks';
 
+@Authorized(['global', 'owner'])
 @RestController('/ldap')
 export class LdapController {
 	constructor(
diff --git a/packages/cli/src/controllers/me.controller.ts b/packages/cli/src/controllers/me.controller.ts
index 3cf1ba409b262..0ff4cd78f0a5c 100644
--- a/packages/cli/src/controllers/me.controller.ts
+++ b/packages/cli/src/controllers/me.controller.ts
@@ -1,6 +1,6 @@
 import validator from 'validator';
 import { plainToInstance } from 'class-transformer';
-import { Delete, Get, Patch, Post, RestController } from '@/decorators';
+import { Authorized, Delete, Get, Patch, Post, RestController } from '@/decorators';
 import {
 	compareHash,
 	hashPassword,
@@ -30,6 +30,7 @@ import { randomBytes } from 'crypto';
 import { isSamlLicensedAndEnabled } from '../sso/saml/samlHelpers';
 import { UserService } from '@/user/user.service';
 
+@Authorized()
 @RestController('/me')
 export class MeController {
 	private readonly logger: ILogger;
diff --git a/packages/cli/src/controllers/nodeTypes.controller.ts b/packages/cli/src/controllers/nodeTypes.controller.ts
index 5f8af5a909f22..63002c7c122a9 100644
--- a/packages/cli/src/controllers/nodeTypes.controller.ts
+++ b/packages/cli/src/controllers/nodeTypes.controller.ts
@@ -2,11 +2,12 @@ import { readFile } from 'fs/promises';
 import get from 'lodash.get';
 import { Request } from 'express';
 import type { INodeTypeDescription, INodeTypeNameVersion } from 'n8n-workflow';
-import { Post, RestController } from '@/decorators';
+import { Authorized, Post, RestController } from '@/decorators';
 import { getNodeTranslationPath } from '@/TranslationHelpers';
 import type { Config } from '@/config';
 import type { NodeTypes } from '@/NodeTypes';
 
+@Authorized()
 @RestController('/node-types')
 export class NodeTypesController {
 	private readonly config: Config;
diff --git a/packages/cli/src/controllers/nodes.controller.ts b/packages/cli/src/controllers/nodes.controller.ts
index e82bd3e5895b8..9d872c8693d56 100644
--- a/packages/cli/src/controllers/nodes.controller.ts
+++ b/packages/cli/src/controllers/nodes.controller.ts
@@ -4,7 +4,7 @@ import {
 	STARTER_TEMPLATE_NAME,
 	UNKNOWN_FAILURE_REASON,
 } from '@/constants';
-import { Delete, Get, Middleware, Patch, Post, RestController } from '@/decorators';
+import { Authorized, Delete, Get, Middleware, Patch, Post, RestController } from '@/decorators';
 import { NodeRequest } from '@/requests';
 import { BadRequestError, InternalServerError } from '@/ResponseHelper';
 import {
@@ -30,10 +30,10 @@ import { LoadNodesAndCredentials } from '@/LoadNodesAndCredentials';
 import { InternalHooks } from '@/InternalHooks';
 import { Push } from '@/push';
 import { Config } from '@/config';
-import { isAuthenticatedRequest } from '@/UserManagement/UserManagementHelper';
 
 const { PACKAGE_NOT_INSTALLED, PACKAGE_NAME_NOT_PROVIDED } = RESPONSE_ERROR_MESSAGES;
 
+@Authorized(['global', 'owner'])
 @RestController('/nodes')
 export class NodesController {
 	constructor(
@@ -43,14 +43,6 @@ export class NodesController {
 		private internalHooks: InternalHooks,
 	) {}
 
-	// TODO: move this into a new decorator `@Authorized`
-	@Middleware()
-	checkIfOwner(req: Request, res: Response, next: NextFunction) {
-		if (!isAuthenticatedRequest(req) || req.user.globalRole.name !== 'owner')
-			res.status(403).json({ status: 'error', message: 'Unauthorized' });
-		else next();
-	}
-
 	// TODO: move this into a new decorator `@IfConfig('executions.mode', 'queue')`
 	@Middleware()
 	checkIfCommunityNodesEnabled(req: Request, res: Response, next: NextFunction) {
diff --git a/packages/cli/src/controllers/owner.controller.ts b/packages/cli/src/controllers/owner.controller.ts
index d83a1fecee17d..ae8745a9afab7 100644
--- a/packages/cli/src/controllers/owner.controller.ts
+++ b/packages/cli/src/controllers/owner.controller.ts
@@ -1,6 +1,6 @@
 import validator from 'validator';
 import { validateEntity } from '@/GenericHelpers';
-import { Get, Post, RestController } from '@/decorators';
+import { Authorized, Get, Post, RestController } from '@/decorators';
 import { BadRequestError } from '@/ResponseHelper';
 import {
 	hashPassword,
@@ -20,6 +20,7 @@ import type {
 	WorkflowRepository,
 } from '@db/repositories';
 
+@Authorized(['global', 'owner'])
 @RestController('/owner')
 export class OwnerController {
 	private readonly config: Config;
diff --git a/packages/cli/src/controllers/passwordReset.controller.ts b/packages/cli/src/controllers/passwordReset.controller.ts
index d78424f6d7303..64e46582066bd 100644
--- a/packages/cli/src/controllers/passwordReset.controller.ts
+++ b/packages/cli/src/controllers/passwordReset.controller.ts
@@ -65,7 +65,6 @@ export class PasswordResetController {
 
 	/**
 	 * Send a password reset email.
-	 * Authless endpoint.
 	 */
 	@Post('/forgot-password')
 	async forgotPassword(req: PasswordResetRequest.Email) {
@@ -171,7 +170,6 @@ export class PasswordResetController {
 
 	/**
 	 * Verify password reset token and user ID.
-	 * Authless endpoint.
 	 */
 	@Get('/resolve-password-token')
 	async resolvePasswordToken(req: PasswordResetRequest.Credentials) {
@@ -213,7 +211,6 @@ export class PasswordResetController {
 
 	/**
 	 * Verify password reset token and user ID and update password.
-	 * Authless endpoint.
 	 */
 	@Post('/change-password')
 	async changePassword(req: PasswordResetRequest.NewPassword, res: Response) {
diff --git a/packages/cli/src/controllers/tags.controller.ts b/packages/cli/src/controllers/tags.controller.ts
index d8ccb4a28ca9c..7b68d95aafb06 100644
--- a/packages/cli/src/controllers/tags.controller.ts
+++ b/packages/cli/src/controllers/tags.controller.ts
@@ -1,13 +1,14 @@
 import { Request, Response, NextFunction } from 'express';
 import type { Config } from '@/config';
-import { Delete, Get, Middleware, Patch, Post, RestController } from '@/decorators';
+import { Authorized, Delete, Get, Middleware, Patch, Post, RestController } from '@/decorators';
 import type { IDatabaseCollections, IExternalHooksClass, ITagWithCountDb } from '@/Interfaces';
 import { TagEntity } from '@db/entities/TagEntity';
 import type { TagRepository } from '@db/repositories';
 import { validateEntity } from '@/GenericHelpers';
-import { BadRequestError, UnauthorizedError } from '@/ResponseHelper';
+import { BadRequestError } from '@/ResponseHelper';
 import { TagsRequest } from '@/requests';
 
+@Authorized()
 @RestController('/tags')
 export class TagsController {
 	private config: Config;
@@ -91,15 +92,9 @@ export class TagsController {
 		return tag;
 	}
 
+	@Authorized(['global', 'owner'])
 	@Delete('/:id(\\d+)')
 	async deleteTag(req: TagsRequest.Delete) {
-		const isInstanceOwnerSetUp = this.config.getEnv('userManagement.isInstanceOwnerSetUp');
-		if (isInstanceOwnerSetUp && req.user.globalRole.name !== 'owner') {
-			throw new UnauthorizedError(
-				'You are not allowed to perform this action',
-				'Only owners can remove tags',
-			);
-		}
 		const { id } = req.params;
 		await this.externalHooks.run('tag.beforeDelete', [id]);
 
diff --git a/packages/cli/src/controllers/translation.controller.ts b/packages/cli/src/controllers/translation.controller.ts
index 8240a376a7e64..6d36d650d2e2c 100644
--- a/packages/cli/src/controllers/translation.controller.ts
+++ b/packages/cli/src/controllers/translation.controller.ts
@@ -2,7 +2,7 @@ import type { Request } from 'express';
 import { ICredentialTypes } from 'n8n-workflow';
 import { join } from 'path';
 import { access } from 'fs/promises';
-import { Get, RestController } from '@/decorators';
+import { Authorized, Get, RestController } from '@/decorators';
 import { BadRequestError, InternalServerError } from '@/ResponseHelper';
 import { Config } from '@/config';
 import { NODES_BASE_DIR } from '@/constants';
@@ -14,6 +14,7 @@ export declare namespace TranslationRequest {
 	export type Credential = Request<{}, {}, {}, { credentialType: string }>;
 }
 
+@Authorized()
 @RestController('/')
 export class TranslationController {
 	constructor(private config: Config, private credentialTypes: ICredentialTypes) {}
diff --git a/packages/cli/src/controllers/users.controller.ts b/packages/cli/src/controllers/users.controller.ts
index fc9faf06fd9e3..c2ae07d344d1d 100644
--- a/packages/cli/src/controllers/users.controller.ts
+++ b/packages/cli/src/controllers/users.controller.ts
@@ -5,7 +5,7 @@ import { ErrorReporterProxy as ErrorReporter } from 'n8n-workflow';
 import { User } from '@db/entities/User';
 import { SharedCredentials } from '@db/entities/SharedCredentials';
 import { SharedWorkflow } from '@db/entities/SharedWorkflow';
-import { Delete, Get, Post, RestController } from '@/decorators';
+import { Authorized, NoAuthRequired, Delete, Get, Post, RestController } from '@/decorators';
 import {
 	addInviteLinkToUser,
 	generateUserInviteUrl,
@@ -41,6 +41,7 @@ import type {
 	UserRepository,
 } from '@db/repositories';
 
+@Authorized(['global', 'owner'])
 @RestController('/users')
 export class UsersController {
 	private config: Config;
@@ -282,6 +283,7 @@ export class UsersController {
 	/**
 	 * Fill out user shell with first name, last name, and password.
 	 */
+	@NoAuthRequired()
 	@Post('/:id')
 	async updateUser(req: UserRequest.Update, res: Response) {
 		const { id: inviteeId } = req.params;
@@ -343,6 +345,7 @@ export class UsersController {
 		return withFeatureFlags(this.postHog, sanitizeUser(updatedUser));
 	}
 
+	@Authorized('any')
 	@Get('/')
 	async listUsers(req: UserRequest.List) {
 		const users = await this.userRepository.find({ relations: ['globalRole', 'authIdentities'] });
diff --git a/packages/cli/src/decorators/Authorized.ts b/packages/cli/src/decorators/Authorized.ts
new file mode 100644
index 0000000000000..880938ae5ce72
--- /dev/null
+++ b/packages/cli/src/decorators/Authorized.ts
@@ -0,0 +1,16 @@
+/* eslint-disable @typescript-eslint/ban-types */
+/* eslint-disable @typescript-eslint/naming-convention */
+import { CONTROLLER_AUTH_ROLES } from './constants';
+import type { AuthRoleMetadata } from './types';
+
+export function Authorized(authRole: AuthRoleMetadata[string] = 'any'): Function {
+	return function (target: Function | Object, handlerName?: string) {
+		const controllerClass = handlerName ? target.constructor : target;
+		const authRoles = (Reflect.getMetadata(CONTROLLER_AUTH_ROLES, controllerClass) ??
+			{}) as AuthRoleMetadata;
+		authRoles[handlerName ?? '*'] = authRole;
+		Reflect.defineMetadata(CONTROLLER_AUTH_ROLES, authRoles, controllerClass);
+	};
+}
+
+export const NoAuthRequired = () => Authorized('none');
diff --git a/packages/cli/src/decorators/constants.ts b/packages/cli/src/decorators/constants.ts
index 6bff0e4a6cb90..5a5efc938db6c 100644
--- a/packages/cli/src/decorators/constants.ts
+++ b/packages/cli/src/decorators/constants.ts
@@ -1,3 +1,4 @@
 export const CONTROLLER_ROUTES = 'CONTROLLER_ROUTES';
 export const CONTROLLER_BASE_PATH = 'CONTROLLER_BASE_PATH';
 export const CONTROLLER_MIDDLEWARES = 'CONTROLLER_MIDDLEWARES';
+export const CONTROLLER_AUTH_ROLES = 'CONTROLLER_AUTH_ROLES';
diff --git a/packages/cli/src/decorators/index.ts b/packages/cli/src/decorators/index.ts
index 71b82b5b69c30..0e683d410cbc9 100644
--- a/packages/cli/src/decorators/index.ts
+++ b/packages/cli/src/decorators/index.ts
@@ -1,3 +1,4 @@
+export { Authorized, NoAuthRequired } from './Authorized';
 export { RestController } from './RestController';
 export { Get, Post, Put, Patch, Delete } from './Route';
 export { Middleware } from './Middleware';
diff --git a/packages/cli/src/decorators/registerController.ts b/packages/cli/src/decorators/registerController.ts
index e20293ae21c71..fe792040b6067 100644
--- a/packages/cli/src/decorators/registerController.ts
+++ b/packages/cli/src/decorators/registerController.ts
@@ -1,10 +1,36 @@
 /* eslint-disable @typescript-eslint/naming-convention */
 import { Router } from 'express';
+import type { Application, Request, Response, RequestHandler } from 'express';
 import type { Config } from '@/config';
-import { CONTROLLER_BASE_PATH, CONTROLLER_MIDDLEWARES, CONTROLLER_ROUTES } from './constants';
+import type { AuthenticatedRequest } from '@/requests';
 import { send } from '@/ResponseHelper'; // TODO: move `ResponseHelper.send` to this file
-import type { Application, Request, Response, RequestHandler } from 'express';
-import type { Controller, MiddlewareMetadata, RouteMetadata } from './types';
+import {
+	CONTROLLER_AUTH_ROLES,
+	CONTROLLER_BASE_PATH,
+	CONTROLLER_MIDDLEWARES,
+	CONTROLLER_ROUTES,
+} from './constants';
+import type {
+	AuthRole,
+	AuthRoleMetadata,
+	Controller,
+	MiddlewareMetadata,
+	RouteMetadata,
+} from './types';
+
+export const createAuthMiddleware =
+	(authRole: AuthRole): RequestHandler =>
+	({ user }: AuthenticatedRequest, res, next) => {
+		if (authRole === 'none') return next();
+
+		if (!user) return res.status(401).json({ status: 'error', message: 'Unauthorized' });
+
+		const { globalRole } = user;
+		if (authRole === 'any' || (globalRole.scope === authRole[0] && globalRole.name === authRole[1]))
+			return next();
+
+		res.status(403).json({ status: 'error', message: 'Unauthorized' });
+	};
 
 export const registerController = (app: Application, config: Config, controller: object) => {
 	const controllerClass = controller.constructor;
@@ -14,11 +40,16 @@ export const registerController = (app: Application, config: Config, controller:
 	if (!controllerBasePath)
 		throw new Error(`${controllerClass.name} is missing the RestController decorator`);
 
+	const authRoles = Reflect.getMetadata(CONTROLLER_AUTH_ROLES, controllerClass) as
+		| AuthRoleMetadata
+		| undefined;
 	const routes = Reflect.getMetadata(CONTROLLER_ROUTES, controllerClass) as RouteMetadata[];
 	if (routes.length > 0) {
 		const router = Router({ mergeParams: true });
 		const restBasePath = config.getEnv('endpoints.rest');
-		const prefix = `/${[restBasePath, controllerBasePath].join('/')}`.replace(/\/+/g, '/');
+		const prefix = `/${[restBasePath, controllerBasePath].join('/')}`
+			.replace(/\/+/g, '/')
+			.replace(/\/$/, '');
 
 		const controllerMiddlewares = (
 			(Reflect.getMetadata(CONTROLLER_MIDDLEWARES, controllerClass) ?? []) as MiddlewareMetadata[]
@@ -28,8 +59,10 @@ export const registerController = (app: Application, config: Config, controller:
 		);
 
 		routes.forEach(({ method, path, middlewares: routeMiddlewares, handlerName }) => {
+			const authRole = authRoles && (authRoles[handlerName] ?? authRoles['*']);
 			router[method](
 				path,
+				...(authRole ? [createAuthMiddleware(authRole)] : []),
 				...controllerMiddlewares,
 				...routeMiddlewares,
 				send(async (req: Request, res: Response) =>
diff --git a/packages/cli/src/decorators/types.ts b/packages/cli/src/decorators/types.ts
index 250abf0d27c95..d118e6e6c9cbd 100644
--- a/packages/cli/src/decorators/types.ts
+++ b/packages/cli/src/decorators/types.ts
@@ -1,7 +1,11 @@
 import type { Request, Response, RequestHandler } from 'express';
+import type { RoleNames, RoleScopes } from '@db/entities/Role';
 
 export type Method = 'get' | 'post' | 'put' | 'patch' | 'delete';
 
+export type AuthRole = [RoleScopes, RoleNames] | 'any' | 'none';
+export type AuthRoleMetadata = Record<string, AuthRole>;
+
 export interface MiddlewareMetadata {
 	handlerName: string;
 }
diff --git a/packages/cli/src/eventbus/eventBus.controller.ts b/packages/cli/src/eventbus/eventBus.controller.ts
index bc18472d4c910..7c9ce21ccc5ee 100644
--- a/packages/cli/src/eventbus/eventBus.controller.ts
+++ b/packages/cli/src/eventbus/eventBus.controller.ts
@@ -28,15 +28,13 @@ import type {
 	IRunExecutionData,
 } from 'n8n-workflow';
 import { MessageEventBusDestinationTypeNames, EventMessageTypeNames } from 'n8n-workflow';
-import type { User } from '@db/entities/User';
-import * as ResponseHelper from '@/ResponseHelper';
 import type { EventMessageNodeOptions } from './EventMessageClasses/EventMessageNode';
 import { EventMessageNode } from './EventMessageClasses/EventMessageNode';
 import { recoverExecutionDataFromEventLogMessages } from './MessageEventBus/recoverEvents';
-import { RestController, Get, Post, Delete } from '@/decorators';
+import { RestController, Get, Post, Delete, Authorized } from '@/decorators';
 import type { MessageEventBusDestination } from './MessageEventBusDestination/MessageEventBusDestination.ee';
-import { isOwnerMiddleware } from '../middlewares/isOwner';
 import type { DeleteResult } from 'typeorm';
+import { AuthenticatedRequest } from '@/requests';
 
 // ----------------------------------------
 // TypeGuards
@@ -74,12 +72,14 @@ const isMessageEventBusDestinationOptions = (
 // Controller
 // ----------------------------------------
 
+@Authorized()
 @RestController('/eventbus')
 export class EventBusController {
 	// ----------------------------------------
 	// Events
 	// ----------------------------------------
-	@Get('/event', { middlewares: [isOwnerMiddleware] })
+	@Authorized(['global', 'owner'])
+	@Get('/event')
 	async getEvents(
 		req: express.Request,
 	): Promise<EventMessageTypes[] | Record<string, EventMessageTypes[]>> {
@@ -132,7 +132,8 @@ export class EventBusController {
 		return;
 	}
 
-	@Post('/event', { middlewares: [isOwnerMiddleware] })
+	@Authorized(['global', 'owner'])
+	@Post('/event')
 	async postEvent(req: express.Request): Promise<EventMessageTypes | undefined> {
 		let msg: EventMessageTypes | undefined;
 		if (isEventMessageOptions(req.body)) {
@@ -172,12 +173,9 @@ export class EventBusController {
 		}
 	}
 
-	@Post('/destination', { middlewares: [isOwnerMiddleware] })
-	async postDestination(req: express.Request): Promise<any> {
-		if (!req.user || (req.user as User).globalRole.name !== 'owner') {
-			throw new ResponseHelper.UnauthorizedError('Invalid request');
-		}
-
+	@Authorized(['global', 'owner'])
+	@Post('/destination')
+	async postDestination(req: AuthenticatedRequest): Promise<any> {
 		let result: MessageEventBusDestination | undefined;
 		if (isMessageEventBusDestinationOptions(req.body)) {
 			switch (req.body.__type) {
@@ -228,11 +226,9 @@ export class EventBusController {
 		return false;
 	}
 
-	@Delete('/destination', { middlewares: [isOwnerMiddleware] })
-	async deleteDestination(req: express.Request): Promise<DeleteResult | undefined> {
-		if (!req.user || (req.user as User).globalRole.name !== 'owner') {
-			throw new ResponseHelper.UnauthorizedError('Invalid request');
-		}
+	@Authorized(['global', 'owner'])
+	@Delete('/destination')
+	async deleteDestination(req: AuthenticatedRequest): Promise<DeleteResult | undefined> {
 		if (isWithIdString(req.query)) {
 			return eventBus.removeDestination(req.query.id);
 		} else {
diff --git a/packages/cli/src/middlewares/auth.ts b/packages/cli/src/middlewares/auth.ts
index bd0f580c8a73c..231b48beddf91 100644
--- a/packages/cli/src/middlewares/auth.ts
+++ b/packages/cli/src/middlewares/auth.ts
@@ -10,13 +10,7 @@ import type { AuthenticatedRequest } from '@/requests';
 import config from '@/config';
 import { AUTH_COOKIE_NAME, EDITOR_UI_DIST_DIR } from '@/constants';
 import { issueCookie, resolveJwtContent } from '@/auth/jwt';
-import {
-	isAuthenticatedRequest,
-	isAuthExcluded,
-	isPostUsersId,
-	isUserManagementEnabled,
-} from '@/UserManagement/UserManagementHelper';
-import { SamlUrls } from '@/sso/saml/constants';
+import { isUserManagementEnabled } from '@/UserManagement/UserManagementHelper';
 import type { UserRepository } from '@db/repositories';
 
 const jwtFromRequest = (req: Request) => {
@@ -66,6 +60,17 @@ const staticAssets = globSync(['**/*.html', '**/*.svg', '**/*.png', '**/*.ico'],
 	cwd: EDITOR_UI_DIST_DIR,
 });
 
+// TODO: delete this
+const isPostUsersId = (req: Request, restEndpoint: string): boolean =>
+	req.method === 'POST' &&
+	new RegExp(`/${restEndpoint}/users/[\\w\\d-]*`).test(req.url) &&
+	!req.url.includes('reinvite');
+
+const isAuthExcluded = (url: string, ignoredEndpoints: Readonly<string[]>): boolean =>
+	!!ignoredEndpoints
+		.filter(Boolean) // skip empty paths
+		.find((ignoredEndpoint) => url.startsWith(`/${ignoredEndpoint}`));
+
 /**
  * This sets up the auth middlewares in the correct order
  */
@@ -85,20 +90,16 @@ export const setupAuthMiddlewares = (
 			// skip authentication for preflight requests
 			req.method === 'OPTIONS' ||
 			staticAssets.includes(req.url.slice(1)) ||
+			isAuthExcluded(req.url, ignoredEndpoints) ||
 			req.url.startsWith(`/${restEndpoint}/settings`) ||
 			req.url.startsWith(`/${restEndpoint}/login`) ||
-			req.url.startsWith(`/${restEndpoint}/logout`) ||
 			req.url.startsWith(`/${restEndpoint}/resolve-signup-token`) ||
 			isPostUsersId(req, restEndpoint) ||
 			req.url.startsWith(`/${restEndpoint}/forgot-password`) ||
 			req.url.startsWith(`/${restEndpoint}/resolve-password-token`) ||
 			req.url.startsWith(`/${restEndpoint}/change-password`) ||
 			req.url.startsWith(`/${restEndpoint}/oauth2-credential/callback`) ||
-			req.url.startsWith(`/${restEndpoint}/oauth1-credential/callback`) ||
-			req.url.startsWith(`/${restEndpoint}/sso/saml${SamlUrls.metadata}`) ||
-			req.url.startsWith(`/${restEndpoint}/sso/saml${SamlUrls.initSSO}`) ||
-			req.url.startsWith(`/${restEndpoint}/sso/saml${SamlUrls.acs}`) ||
-			isAuthExcluded(req.url, ignoredEndpoints)
+			req.url.startsWith(`/${restEndpoint}/oauth1-credential/callback`)
 		) {
 			return next();
 		}
@@ -115,43 +116,5 @@ export const setupAuthMiddlewares = (
 		return passportMiddleware(req, res, next);
 	});
 
-	app.use((req: Request | AuthenticatedRequest, res: Response, next: NextFunction) => {
-		// req.user is empty for public routes, so just proceed
-		// owner can do anything, so proceed as well
-		if (!req.user || (isAuthenticatedRequest(req) && req.user.globalRole.name === 'owner')) {
-			next();
-			return;
-		}
-		// Not owner and user exists. We now protect restricted urls.
-		const postRestrictedUrls = [
-			`/${restEndpoint}/users`,
-			`/${restEndpoint}/owner`,
-			`/${restEndpoint}/ldap/sync`,
-			`/${restEndpoint}/ldap/test-connection`,
-		];
-		const getRestrictedUrls = [`/${restEndpoint}/ldap/sync`, `/${restEndpoint}/ldap/config`];
-		const putRestrictedUrls = [`/${restEndpoint}/ldap/config`];
-		const trimmedUrl = req.url.endsWith('/') ? req.url.slice(0, -1) : req.url;
-		if (
-			(req.method === 'POST' && postRestrictedUrls.includes(trimmedUrl)) ||
-			(req.method === 'GET' && getRestrictedUrls.includes(trimmedUrl)) ||
-			(req.method === 'PUT' && putRestrictedUrls.includes(trimmedUrl)) ||
-			(req.method === 'DELETE' &&
-				new RegExp(`/${restEndpoint}/users/[^/]+`, 'gm').test(trimmedUrl)) ||
-			(req.method === 'POST' &&
-				new RegExp(`/${restEndpoint}/users/[^/]+/reinvite`, 'gm').test(trimmedUrl)) ||
-			new RegExp(`/${restEndpoint}/owner/[^/]+`, 'gm').test(trimmedUrl)
-		) {
-			Logger.verbose('User attempted to access endpoint without authorization', {
-				endpoint: `${req.method} ${trimmedUrl}`,
-				userId: isAuthenticatedRequest(req) ? req.user.id : 'unknown',
-			});
-			res.status(403).json({ status: 'error', message: 'Unauthorized' });
-			return;
-		}
-
-		next();
-	});
-
 	app.use(refreshExpiringCookie);
 };
diff --git a/packages/cli/src/middlewares/isOwner.ts b/packages/cli/src/middlewares/isOwner.ts
deleted file mode 100644
index d3e3c70a0fb46..0000000000000
--- a/packages/cli/src/middlewares/isOwner.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import type { RequestHandler } from 'express';
-import { LoggerProxy } from 'n8n-workflow';
-import type { AuthenticatedRequest } from '@/requests';
-
-export const isOwnerMiddleware: RequestHandler = (req: AuthenticatedRequest, res, next) => {
-	if (req.user.globalRole.name === 'owner') {
-		next();
-	} else {
-		LoggerProxy.debug('Request failed because user is not owner');
-		res.status(401).send('Unauthorized');
-	}
-};
diff --git a/packages/cli/src/sso/saml/middleware/samlEnabledMiddleware.ts b/packages/cli/src/sso/saml/middleware/samlEnabledMiddleware.ts
index 6e4600b895f06..69015838d7f69 100644
--- a/packages/cli/src/sso/saml/middleware/samlEnabledMiddleware.ts
+++ b/packages/cli/src/sso/saml/middleware/samlEnabledMiddleware.ts
@@ -1,24 +1,11 @@
 import type { RequestHandler } from 'express';
-import type { AuthenticatedRequest } from '@/requests';
 import { isSamlLicensed, isSamlLicensedAndEnabled } from '../samlHelpers';
 
-export const samlLicensedOwnerMiddleware: RequestHandler = (
-	req: AuthenticatedRequest,
-	res,
-	next,
-) => {
-	if (isSamlLicensed() && req.user?.globalRole.name === 'owner') {
-		next();
-	} else {
-		res.status(401).json({ status: 'error', message: 'Unauthorized' });
-	}
-};
-
 export const samlLicensedAndEnabledMiddleware: RequestHandler = (req, res, next) => {
 	if (isSamlLicensedAndEnabled()) {
 		next();
 	} else {
-		res.status(401).json({ status: 'error', message: 'Unauthorized' });
+		res.status(403).json({ status: 'error', message: 'Unauthorized' });
 	}
 };
 
@@ -26,6 +13,6 @@ export const samlLicensedMiddleware: RequestHandler = (req, res, next) => {
 	if (isSamlLicensed()) {
 		next();
 	} else {
-		res.status(401).json({ status: 'error', message: 'Unauthorized' });
+		res.status(403).json({ status: 'error', message: 'Unauthorized' });
 	}
 };
diff --git a/packages/cli/src/sso/saml/routes/saml.controller.ee.ts b/packages/cli/src/sso/saml/routes/saml.controller.ee.ts
index 86e7b75cfa8c4..232020b5945f9 100644
--- a/packages/cli/src/sso/saml/routes/saml.controller.ee.ts
+++ b/packages/cli/src/sso/saml/routes/saml.controller.ee.ts
@@ -1,10 +1,9 @@
 import express from 'express';
-import { Get, Post, RestController } from '@/decorators';
+import { Authorized, Get, Post, RestController } from '@/decorators';
 import { SamlUrls } from '../constants';
 import {
 	samlLicensedAndEnabledMiddleware,
 	samlLicensedMiddleware,
-	samlLicensedOwnerMiddleware,
 } from '../middleware/samlEnabledMiddleware';
 import { SamlService } from '../saml.service.ee';
 import { SamlConfiguration } from '../types/requests';
@@ -39,7 +38,8 @@ export class SamlController {
 	 * GET /sso/saml/config
 	 * Return SAML config
 	 */
-	@Get(SamlUrls.config, { middlewares: [samlLicensedOwnerMiddleware] })
+	@Authorized(['global', 'owner'])
+	@Get(SamlUrls.config, { middlewares: [samlLicensedMiddleware] })
 	async configGet() {
 		const prefs = this.samlService.samlPreferences;
 		return {
@@ -53,7 +53,8 @@ export class SamlController {
 	 * POST /sso/saml/config
 	 * Set SAML config
 	 */
-	@Post(SamlUrls.config, { middlewares: [samlLicensedOwnerMiddleware] })
+	@Authorized(['global', 'owner'])
+	@Post(SamlUrls.config, { middlewares: [samlLicensedMiddleware] })
 	async configPost(req: SamlConfiguration.Update) {
 		const validationResult = await validate(req.body);
 		if (validationResult.length === 0) {
@@ -71,7 +72,8 @@ export class SamlController {
 	 * POST /sso/saml/config/toggle
 	 * Set SAML config
 	 */
-	@Post(SamlUrls.configToggleEnabled, { middlewares: [samlLicensedOwnerMiddleware] })
+	@Authorized(['global', 'owner'])
+	@Post(SamlUrls.configToggleEnabled, { middlewares: [samlLicensedMiddleware] })
 	async toggleEnabledPost(req: SamlConfiguration.Toggle, res: express.Response) {
 		if (req.body.loginEnabled === undefined) {
 			throw new BadRequestError('Body should contain a boolean "loginEnabled" property');
@@ -155,7 +157,8 @@ export class SamlController {
 	 * Test SAML config
 	 * This endpoint is available if SAML is licensed and the requestor is an instance owner
 	 */
-	@Get(SamlUrls.configTest, { middlewares: [samlLicensedOwnerMiddleware] })
+	@Authorized(['global', 'owner'])
+	@Get(SamlUrls.configTest, { middlewares: [samlLicensedMiddleware] })
 	async configTestGet(req: AuthenticatedRequest, res: express.Response) {
 		return this.handleInitSSO(res, getServiceProviderConfigTestReturnUrl());
 	}
diff --git a/packages/cli/test/integration/shared/constants.ts b/packages/cli/test/integration/shared/constants.ts
index 3608225eaa1e1..37798aa4d0f83 100644
--- a/packages/cli/test/integration/shared/constants.ts
+++ b/packages/cli/test/integration/shared/constants.ts
@@ -42,7 +42,7 @@ export const ROUTES_REQUIRING_AUTHORIZATION: Readonly<string[]> = [
 	'POST /users',
 	'DELETE /users/123',
 	'POST /users/123/reinvite',
-	'POST /owner/pre-setup',
+	'GET /owner/pre-setup',
 	'POST /owner/setup',
 	'POST /owner/skip-setup',
 ];
diff --git a/packages/cli/test/integration/users.api.test.ts b/packages/cli/test/integration/users.api.test.ts
index 759d12b8cb42a..966bb6d1694a7 100644
--- a/packages/cli/test/integration/users.api.test.ts
+++ b/packages/cli/test/integration/users.api.test.ts
@@ -31,6 +31,7 @@ let credentialOwnerRole: Role;
 let owner: User;
 let authlessAgent: SuperAgentTest;
 let authOwnerAgent: SuperAgentTest;
+let authAgentFor: (user: User) => SuperAgentTest;
 
 beforeAll(async () => {
 	const app = await utils.initTestServer({ endpointGroups: ['users'] });
@@ -49,7 +50,8 @@ beforeAll(async () => {
 	owner = await testDb.createUser({ globalRole: globalOwnerRole });
 
 	authlessAgent = utils.createAgent(app);
-	authOwnerAgent = utils.createAuthAgent(app)(owner);
+	authAgentFor = utils.createAuthAgent(app);
+	authOwnerAgent = authAgentFor(owner);
 });
 
 beforeEach(async () => {
@@ -69,7 +71,7 @@ afterAll(async () => {
 });
 
 describe('GET /users', () => {
-	test('should return all users', async () => {
+	test('should return all users (for owner)', async () => {
 		await testDb.createUser({ globalRole: globalMemberRole });
 
 		const response = await authOwnerAgent.get('/users');
@@ -103,6 +105,14 @@ describe('GET /users', () => {
 			expect(apiKey).not.toBeDefined();
 		});
 	});
+
+	test('should return all users (for member)', async () => {
+		const member = await testDb.createUser({ globalRole: globalMemberRole });
+		const response = await authAgentFor(member).get('/users');
+
+		expect(response.statusCode).toBe(200);
+		expect(response.body.data.length).toBe(2);
+	});
 });
 
 describe('DELETE /users/:id', () => {

From eaf70909197ed511efe9add956eb5e4f78b27e20 Mon Sep 17 00:00:00 2001
From: Cornelius Suermann <cornelius@n8n.io>
Date: Mon, 24 Apr 2023 11:46:04 +0200
Subject: [PATCH 2/5] fix(core): Skip license activation when instance was
 already activated (#6064)

---
 packages/cli/src/commands/start.ts | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/packages/cli/src/commands/start.ts b/packages/cli/src/commands/start.ts
index 359c79d584d54..358d8091eb692 100644
--- a/packages/cli/src/commands/start.ts
+++ b/packages/cli/src/commands/start.ts
@@ -189,8 +189,16 @@ export class Start extends BaseCommand {
 		await license.init(this.instanceId);
 
 		const activationKey = config.getEnv('license.activationKey');
+
 		if (activationKey) {
+			const hasCert = (await license.loadCertStr()).length > 0;
+
+			if (hasCert) {
+				return LoggerProxy.debug('Skipping license activation');
+			}
+
 			try {
+				LoggerProxy.debug('Attempting license activation');
 				await license.activate(activationKey);
 			} catch (e) {
 				LoggerProxy.error('Could not activate license', e as Error);

From 57aab63c1049cf3d0c4730fe6bf01d252e8746d5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Iv=C3=A1n=20Ovejero?= <ivov.src@gmail.com>
Date: Mon, 24 Apr 2023 12:18:24 +0200
Subject: [PATCH 3/5] refactor: Integrate `consistent-type-imports` in FE
 packages (no-changelog) (#6060)

* :shirt: Move `consistent-type-imports` to top level

* :shirt: Apply lintfixes

* :shirt: Apply more lintfixes

* :shirt: More lintfixes

* :shirt: More lintfixes
---
 packages/@n8n_io/eslint-config/base.js        |  5 ++++
 packages/cli/.eslintrc.js                     |  2 --
 packages/core/.eslintrc.js                    |  2 --
 .../N8nActionDropdown/ActionDropdown.vue      |  3 ++-
 .../N8nActionToggle/ActionToggle.vue          |  3 ++-
 .../src/components/N8nDatatable/Datatable.vue |  5 ++--
 .../components/N8nDatatable/__tests__/data.ts |  5 ++--
 .../src/components/N8nFormInput/FormInput.vue |  2 +-
 .../src/components/N8nFormInput/validators.ts |  2 +-
 .../components/N8nFormInputs/FormInputs.vue   |  6 +++--
 .../N8nInfoAccordion/InfoAccordion.vue        |  3 ++-
 .../src/components/N8nMarkdown/Markdown.vue   |  6 +++--
 .../src/components/N8nMenu/Menu.vue           |  3 ++-
 .../src/components/N8nMenuItem/MenuItem.vue   |  3 ++-
 .../NodeCreatorNode.stories.ts                |  2 +-
 .../components/N8nPagination/Pagination.vue   |  3 ++-
 .../N8nRadioButtons/RadioButtons.vue          |  3 ++-
 .../RecycleScroller.stories.ts                |  2 +-
 .../N8nRecycleScroller/RecycleScroller.vue    | 13 ++--------
 .../N8nResizeWrapper/ResizeWrapper.vue        |  3 ++-
 .../src/components/N8nTabs/Tabs.vue           |  3 ++-
 .../src/components/N8nTags/Tags.vue           |  3 ++-
 .../src/components/N8nTooltip/Tooltip.vue     |  3 ++-
 .../src/components/N8nTree/Tree.vue           |  3 ++-
 .../components/N8nUserSelect/UserSelect.vue   |  5 ++--
 .../N8nUsersList/UsersList.stories.ts         |  2 +-
 .../src/components/N8nUsersList/UsersList.vue |  3 ++-
 .../src/styleguide/ColorCircles.vue           |  3 ++-
 .../design-system/src/styleguide/Sizes.vue    |  3 ++-
 .../src/styleguide/VariableTable.vue          |  3 ++-
 packages/design-system/src/types/datatable.ts |  2 +-
 packages/editor-ui/src/Interface.ts           | 14 +++++------
 .../src/__tests__/permissions.spec.ts         |  2 +-
 .../__tests__/server/endpoints/credential.ts  |  5 ++--
 .../server/endpoints/credentialType.ts        |  5 ++--
 .../src/__tests__/server/endpoints/index.ts   |  2 +-
 .../__tests__/server/endpoints/settings.ts    |  7 +++---
 .../src/__tests__/server/endpoints/user.ts    |  5 ++--
 .../__tests__/server/endpoints/variable.ts    |  7 +++---
 .../src/__tests__/server/models/credential.ts |  2 +-
 .../src/__tests__/server/models/user.ts       |  2 +-
 .../src/__tests__/server/models/variable.ts   |  2 +-
 .../editor-ui/src/__tests__/server/types.ts   |  8 +++----
 packages/editor-ui/src/__tests__/utils.ts     |  3 ++-
 packages/editor-ui/src/api/api-keys.ts        |  2 +-
 packages/editor-ui/src/api/communityNodes.ts  |  4 ++--
 packages/editor-ui/src/api/credentials.ee.ts  |  4 ++--
 packages/editor-ui/src/api/credentials.ts     |  8 +++++--
 packages/editor-ui/src/api/curlHelper.ts      |  2 +-
 packages/editor-ui/src/api/environments.ee.ts |  4 ++--
 packages/editor-ui/src/api/eventbus.ee.ts     |  4 ++--
 packages/editor-ui/src/api/ldap.ts            |  4 ++--
 packages/editor-ui/src/api/settings.ts        |  4 ++--
 packages/editor-ui/src/api/sso.ts             |  2 +-
 packages/editor-ui/src/api/tags.ts            |  2 +-
 packages/editor-ui/src/api/templates.ts       |  4 ++--
 packages/editor-ui/src/api/usage.ts           |  2 +-
 packages/editor-ui/src/api/users.ts           |  4 ++--
 packages/editor-ui/src/api/versions.ts        |  2 +-
 .../editor-ui/src/api/workflow-webhooks.ts    |  3 ++-
 packages/editor-ui/src/api/workflows.ee.ts    |  4 ++--
 packages/editor-ui/src/api/workflows.ts       | 11 +++------
 .../src/components/BinaryDataDisplayEmbed.vue |  3 ++-
 .../src/components/ChangePasswordModal.vue    |  2 +-
 .../editor-ui/src/components/CodeEdit.vue     |  7 +++---
 .../CodeNodeEditor/CodeNodeEditor.vue         |  3 ++-
 .../src/components/CodeNodeEditor/linter.ts   |  3 ++-
 .../src/components/CodeNodeEditor/utils.ts    |  2 +-
 .../src/components/CollectionParameter.vue    |  7 +++---
 .../src/components/CollectionsCarousel.vue    |  4 ++--
 .../src/components/CommunityPackageCard.vue   |  2 +-
 .../src/components/ContactPromptModal.vue     |  2 +-
 .../src/components/CredentialCard.vue         |  7 +++---
 .../CredentialEdit/AuthTypeSelector.vue       |  4 ++--
 .../CredentialEdit/CredentialConfig.vue       |  6 ++---
 .../CredentialEdit/CredentialEdit.vue         | 12 ++++++----
 .../CredentialEdit/CredentialInfo.vue         |  2 +-
 .../CredentialEdit/CredentialInputs.vue       |  4 ++--
 .../CredentialEdit/CredentialSharing.ee.vue   |  3 ++-
 .../src/components/CredentialIcon.vue         |  2 +-
 .../src/components/CredentialsSelect.vue      |  4 ++--
 .../src/components/DeleteUserModal.vue        |  2 +-
 .../editor-ui/src/components/Draggable.vue    |  2 +-
 .../components/DuplicateWorkflowDialog.vue    |  5 ++--
 .../src/components/EnterpriseEdition.ee.vue   |  2 +-
 .../src/components/Error/NodeErrorView.vue    |  2 +-
 .../src/components/ExecutionsList.vue         |  2 +-
 .../ExecutionsView/ExecutionCard.vue          |  5 ++--
 .../ExecutionsView/ExecutionPreview.vue       |  3 ++-
 .../ExecutionsInfoAccordion.vue               |  3 ++-
 .../ExecutionsView/ExecutionsList.vue         |  8 +++----
 .../ExecutionsView/ExecutionsSidebar.vue      |  6 ++---
 .../src/components/ExpressionEdit.vue         |  2 +-
 .../src/components/FeatureComingSoon.vue      |  2 +-
 .../components/FixedCollectionParameter.vue   |  2 +-
 .../src/components/HoverableNodeIcon.vue      |  4 ++--
 .../src/components/HtmlEditor/HtmlEditor.vue  |  5 ++--
 .../src/components/ImportCurlModal.vue        |  2 +-
 .../editor-ui/src/components/InputPanel.vue   |  4 ++--
 .../src/components/InviteUsersModal.vue       |  2 +-
 .../src/components/MainHeader/MainHeader.vue  |  4 ++--
 .../components/MainHeader/WorkflowDetails.vue |  5 ++--
 .../editor-ui/src/components/MainSidebar.vue  |  2 +-
 .../src/components/MultipleParameter.vue      |  3 ++-
 .../src/components/NDVDraggablePanels.vue     |  5 ++--
 packages/editor-ui/src/components/Node.vue    | 11 ++++-----
 .../Node/NodeCreator/ActionItem.vue           |  4 ++--
 .../Node/NodeCreator/CategorizedItems.vue     |  6 ++---
 .../Node/NodeCreator/CategoryItem.vue         |  2 +-
 .../Node/NodeCreator/ItemIterator.vue         |  2 +-
 .../components/Node/NodeCreator/MainPanel.vue | 11 ++++-----
 .../components/Node/NodeCreator/NodeItem.vue  |  2 +-
 .../components/Node/NodeCreator/SearchBar.vue |  2 +-
 .../Node/NodeCreator/SubcategoryItem.vue      |  2 +-
 .../components/Node/NodeCreator/ViewItem.vue  |  2 +-
 .../src/components/NodeCredentials.vue        |  6 ++---
 .../src/components/NodeDetailsView.vue        |  6 ++---
 .../src/components/NodeExecuteButton.vue      |  4 ++--
 .../editor-ui/src/components/NodeIcon.vue     |  4 ++--
 .../editor-ui/src/components/NodeList.vue     |  2 +-
 .../editor-ui/src/components/NodeSettings.vue | 15 ++++++------
 .../src/components/NodeSettingsTabs.vue       |  4 ++--
 .../editor-ui/src/components/NodeWebhooks.vue |  2 +-
 .../editor-ui/src/components/OutputPanel.vue  |  6 ++---
 .../src/components/ParameterInput.vue         |  9 ++++---
 .../src/components/ParameterInputExpanded.vue |  4 ++--
 .../src/components/ParameterInputFull.vue     | 14 +++++++----
 .../src/components/ParameterInputList.vue     |  7 +++---
 .../src/components/ParameterInputWrapper.vue  | 10 ++++----
 .../src/components/PersonalizationModal.vue   |  4 ++--
 .../ResourceLocator/ResourceLocator.vue       | 10 ++++----
 .../ResourceLocatorDropdown.vue               |  2 +-
 packages/editor-ui/src/components/RunData.vue |  6 ++---
 .../editor-ui/src/components/RunDataJson.vue  |  6 ++---
 .../src/components/RunDataJsonActions.vue     |  6 ++---
 .../src/components/RunDataSchema.vue          |  4 ++--
 .../src/components/RunDataSchemaItem.vue      |  2 +-
 .../editor-ui/src/components/RunDataTable.vue |  7 +++---
 .../EventDestinationCard.ee.vue               | 14 +++++------
 .../EventDestinationSettingsModal.ee.vue      | 20 +++++++++-------
 .../EventSelection.ee.vue                     |  2 +-
 .../SettingsLogStreaming/Helpers.ee.ts        |  8 +++++--
 .../SettingsLogStreaming/descriptions.ee.ts   |  2 +-
 .../src/components/SettingsSidebar.vue        |  6 ++---
 packages/editor-ui/src/components/Sticky.vue  |  5 ++--
 .../src/components/TagsContainer.vue          |  2 +-
 .../editor-ui/src/components/TagsDropdown.vue |  8 +++----
 .../components/TagsManager/TagsManager.vue    |  2 +-
 .../TagsManager/TagsView/TagsTable.vue        |  6 ++---
 .../editor-ui/src/components/Telemetry.vue    |  2 +-
 .../src/components/TemplateDetails.vue        |  2 +-
 .../src/components/TemplateFilters.vue        |  2 +-
 packages/editor-ui/src/components/TimeAgo.vue |  3 ++-
 .../editor-ui/src/components/TriggerPanel.vue |  8 +++----
 .../editor-ui/src/components/UpdatesPanel.vue |  2 +-
 .../editor-ui/src/components/ValueSurvey.vue  |  2 +-
 .../src/components/VariableSelector.vue       | 12 ++++------
 .../src/components/VariableSelectorItem.vue   |  2 +-
 .../editor-ui/src/components/VariablesRow.vue |  6 +++--
 .../editor-ui/src/components/VersionCard.vue  |  2 +-
 .../editor-ui/src/components/WorkflowCard.vue |  7 +++---
 .../src/components/WorkflowPreview.vue        |  2 +-
 .../src/components/WorkflowSettings.vue       |  7 +++---
 .../src/components/WorkflowShareModal.ee.vue  | 10 ++++----
 .../__tests__/ExecutionFilter.test.ts         |  3 ++-
 .../components/__tests__/VariablesRow.spec.ts |  2 +-
 .../forms/ResourceOwnershipSelect.ee.vue      |  2 +-
 .../layouts/ResourcesListLayout.vue           |  7 +++---
 .../__tests__/useHistoryHelper.test.ts        |  2 +-
 .../src/composables/useCanvasMouseSelect.ts   |  2 +-
 .../src/composables/useHistoryHelper.ts       |  5 ++--
 .../editor-ui/src/composables/useTelemetry.ts |  3 ++-
 .../src/composables/useTitleChange.ts         |  2 +-
 .../src/composables/useUpgradeLink.ts         |  2 +-
 packages/editor-ui/src/constants.ts           |  2 +-
 .../editor-ui/src/mixins/completionManager.ts |  2 +-
 .../editor-ui/src/mixins/executionsHelpers.ts |  2 +-
 packages/editor-ui/src/mixins/nodeBase.ts     | 10 ++++----
 packages/editor-ui/src/mixins/nodeHelpers.ts  |  6 ++---
 packages/editor-ui/src/mixins/pinData.ts      |  4 ++--
 .../editor-ui/src/mixins/pushConnection.ts    |  6 ++---
 packages/editor-ui/src/mixins/restApi.ts      |  9 ++++---
 packages/editor-ui/src/mixins/showMessage.ts  |  4 ++--
 .../editor-ui/src/mixins/workflowHelpers.ts   | 16 ++++++-------
 packages/editor-ui/src/mixins/workflowRun.ts  | 13 ++++------
 packages/editor-ui/src/models/history.ts      |  6 ++---
 packages/editor-ui/src/permissions.ts         |  9 ++-----
 .../completions/__tests__/completions.test.ts |  3 ++-
 .../codemirror/completions/__tests__/mock.ts  |  6 ++---
 .../completions/datatype.completions.ts       |  5 ++--
 .../luxon.instance.docs.ts                    |  2 +-
 .../luxon.static.docs.ts                      |  2 +-
 .../codemirror/completions/typeGuards.ts      |  2 +-
 .../plugins/codemirror/completions/types.ts   |  2 +-
 .../inputHandlers/code.inputHandler.ts        |  3 ++-
 .../inputHandlers/expression.inputHandler.ts  |  3 ++-
 .../codemirror/resolvableHighlighter.ts       |  3 ++-
 .../plugins/connectors/N8nCustomConnector.ts  | 11 ++++-----
 .../plugins/endpoints/N8nPlusEndpointType.ts  |  5 ++--
 packages/editor-ui/src/plugins/i18n/index.ts  |  5 ++--
 .../editor-ui/src/plugins/telemetry/index.ts  |  6 ++---
 packages/editor-ui/src/router.ts              |  7 +++---
 .../src/stores/__tests__/environments.spec.ts |  2 +-
 .../src/stores/__tests__/posthog.test.ts      |  2 +-
 .../src/stores/__tests__/sso.test.ts          |  2 +-
 packages/editor-ui/src/stores/canvas.ts       |  7 +++---
 .../editor-ui/src/stores/communityNodes.ts    |  4 ++--
 packages/editor-ui/src/stores/credentials.ts  |  6 ++---
 .../editor-ui/src/stores/environments.ee.ts   |  2 +-
 packages/editor-ui/src/stores/history.ts      |  5 ++--
 .../editor-ui/src/stores/logStreamingStore.ts |  3 ++-
 packages/editor-ui/src/stores/n8nRootStore.ts |  4 ++--
 packages/editor-ui/src/stores/ndv.ts          | 10 ++++++--
 packages/editor-ui/src/stores/nodeCreator.ts  |  8 +++----
 packages/editor-ui/src/stores/nodeTypes.ts    |  4 ++--
 packages/editor-ui/src/stores/posthog.ts      |  5 ++--
 packages/editor-ui/src/stores/segment.ts      |  4 ++--
 packages/editor-ui/src/stores/settings.ts     | 14 ++++-------
 packages/editor-ui/src/stores/sso.ts          |  2 +-
 packages/editor-ui/src/stores/tags.ts         |  2 +-
 packages/editor-ui/src/stores/telemetry.ts    |  5 ++--
 packages/editor-ui/src/stores/templates.ts    |  2 +-
 packages/editor-ui/src/stores/ui.ts           |  5 ++--
 packages/editor-ui/src/stores/usage.ts        |  2 +-
 packages/editor-ui/src/stores/versions.ts     |  2 +-
 packages/editor-ui/src/stores/webhooks.ts     |  6 ++---
 packages/editor-ui/src/stores/workflows.ee.ts |  2 +-
 packages/editor-ui/src/stores/workflows.ts    | 10 ++++----
 .../src/utils/__tests__/mappingUtils.test.ts  |  2 +-
 .../src/utils/__tests__/typesUtils.test.ts    |  2 +-
 .../src/utils/__tests__/userUtils.test.ts     |  4 ++--
 packages/editor-ui/src/utils/apiUtils.ts      |  5 ++--
 packages/editor-ui/src/utils/canvasUtils.ts   |  8 +++----
 .../editor-ui/src/utils/executionUtils.ts     |  4 ++--
 packages/editor-ui/src/utils/forceParse.ts    |  2 +-
 packages/editor-ui/src/utils/mappingUtils.ts  |  3 ++-
 .../editor-ui/src/utils/nodeTypesUtils.ts     |  6 ++---
 packages/editor-ui/src/utils/nodeViewUtils.ts |  9 +++----
 .../editor-ui/src/utils/pairedItemUtils.ts    |  4 ++--
 packages/editor-ui/src/utils/typeGuards.ts    |  6 ++---
 packages/editor-ui/src/utils/typesUtils.ts    |  5 ++--
 packages/editor-ui/src/utils/userUtils.ts     |  4 ++--
 .../editor-ui/src/views/CanvasAddButton.vue   |  2 +-
 .../src/views/ChangePasswordView.vue          |  2 +-
 .../editor-ui/src/views/CredentialsView.vue   |  7 +++---
 .../src/views/ForgotMyPasswordView.vue        |  2 +-
 packages/editor-ui/src/views/NodeView.vue     | 24 +++++++++----------
 .../editor-ui/src/views/SamlOnboarding.vue    |  2 +-
 .../editor-ui/src/views/SettingsApiView.vue   |  2 +-
 .../src/views/SettingsCommunityNodesView.vue  |  2 +-
 .../src/views/SettingsFakeDoorView.vue        |  2 +-
 .../editor-ui/src/views/SettingsLdapView.vue  |  4 ++--
 .../src/views/SettingsLogStreamingView.vue    |  7 ++----
 .../src/views/SettingsPersonalView.vue        |  2 +-
 .../src/views/SettingsUsageAndPlan.vue        |  3 ++-
 .../editor-ui/src/views/SettingsUsersView.vue |  2 +-
 packages/editor-ui/src/views/SettingsView.vue |  2 +-
 packages/editor-ui/src/views/SetupView.vue    |  2 +-
 packages/editor-ui/src/views/SigninView.vue   |  2 +-
 packages/editor-ui/src/views/SignupView.vue   |  2 +-
 .../src/views/TemplatesCollectionView.vue     |  2 +-
 .../src/views/TemplatesSearchView.vue         |  4 ++--
 .../src/views/TemplatesWorkflowView.vue       |  2 +-
 .../editor-ui/src/views/VariablesView.vue     |  6 ++++-
 .../editor-ui/src/views/WorkflowsView.vue     |  4 ++--
 .../src/views/__tests__/SettingsSso.test.ts   |  2 +-
 packages/node-dev/.eslintrc.js                |  1 -
 packages/nodes-base/.eslintrc.js              |  2 --
 packages/workflow/.eslintrc.js                |  1 -
 269 files changed, 625 insertions(+), 570 deletions(-)

diff --git a/packages/@n8n_io/eslint-config/base.js b/packages/@n8n_io/eslint-config/base.js
index 4242429369be4..ffb4f73540f0e 100644
--- a/packages/@n8n_io/eslint-config/base.js
+++ b/packages/@n8n_io/eslint-config/base.js
@@ -194,6 +194,11 @@ const config = (module.exports = {
 		 */
 		'@typescript-eslint/consistent-type-assertions': 'error',
 
+		/**
+		 * https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/consistent-type-imports.md
+		 */
+		'@typescript-eslint/consistent-type-imports': 'error',
+
 		/**
 		 * https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/member-delimiter-style.md
 		 */
diff --git a/packages/cli/.eslintrc.js b/packages/cli/.eslintrc.js
index 3da2d993a3ca1..2a24787f80e76 100644
--- a/packages/cli/.eslintrc.js
+++ b/packages/cli/.eslintrc.js
@@ -16,8 +16,6 @@ module.exports = {
 	],
 
 	rules: {
-		'@typescript-eslint/consistent-type-imports': 'error',
-
 		// TODO: Remove this
 		'import/no-cycle': 'warn',
 		'import/order': 'off',
diff --git a/packages/core/.eslintrc.js b/packages/core/.eslintrc.js
index a1a1b8155d206..4d68086144d56 100644
--- a/packages/core/.eslintrc.js
+++ b/packages/core/.eslintrc.js
@@ -11,8 +11,6 @@ module.exports = {
 	ignorePatterns: ['bin/*.js'],
 
 	rules: {
-		'@typescript-eslint/consistent-type-imports': 'error',
-
 		// TODO: Remove this
 		'import/order': 'off',
 		'@typescript-eslint/ban-ts-comment': ['error', { 'ts-ignore': true }],
diff --git a/packages/design-system/src/components/N8nActionDropdown/ActionDropdown.vue b/packages/design-system/src/components/N8nActionDropdown/ActionDropdown.vue
index 08f0147a20575..75a785a590289 100644
--- a/packages/design-system/src/components/N8nActionDropdown/ActionDropdown.vue
+++ b/packages/design-system/src/components/N8nActionDropdown/ActionDropdown.vue
@@ -34,7 +34,8 @@
 </template>
 
 <script lang="ts">
-import { defineComponent, PropType } from 'vue';
+import type { PropType } from 'vue';
+import { defineComponent } from 'vue';
 import {
 	Dropdown as ElDropdown,
 	DropdownMenu as ElDropdownMenu,
diff --git a/packages/design-system/src/components/N8nActionToggle/ActionToggle.vue b/packages/design-system/src/components/N8nActionToggle/ActionToggle.vue
index 087770050cc78..c617ace7626d3 100644
--- a/packages/design-system/src/components/N8nActionToggle/ActionToggle.vue
+++ b/packages/design-system/src/components/N8nActionToggle/ActionToggle.vue
@@ -37,7 +37,8 @@
 </template>
 
 <script lang="ts">
-import { defineComponent, PropType } from 'vue';
+import type { PropType } from 'vue';
+import { defineComponent } from 'vue';
 import {
 	Dropdown as ElDropdown,
 	DropdownMenu as ElDropdownMenu,
diff --git a/packages/design-system/src/components/N8nDatatable/Datatable.vue b/packages/design-system/src/components/N8nDatatable/Datatable.vue
index 87c8ddcd33759..990ea94a1d3c5 100644
--- a/packages/design-system/src/components/N8nDatatable/Datatable.vue
+++ b/packages/design-system/src/components/N8nDatatable/Datatable.vue
@@ -1,6 +1,7 @@
 <script lang="ts">
-import { computed, defineComponent, PropType, ref, useCssModule } from 'vue';
-import { DatatableColumn, DatatableRow, DatatableRowDataType } from '../../types';
+import type { PropType } from 'vue';
+import { computed, defineComponent, ref, useCssModule } from 'vue';
+import type { DatatableColumn, DatatableRow, DatatableRowDataType } from '../../types';
 import { getValueByPath } from '../../utils';
 import { useI18n } from '../../composables';
 import N8nSelect from '../N8nSelect';
diff --git a/packages/design-system/src/components/N8nDatatable/__tests__/data.ts b/packages/design-system/src/components/N8nDatatable/__tests__/data.ts
index 03471152a2951..a9b2c5aa7e9a6 100644
--- a/packages/design-system/src/components/N8nDatatable/__tests__/data.ts
+++ b/packages/design-system/src/components/N8nDatatable/__tests__/data.ts
@@ -1,5 +1,6 @@
-import { defineComponent, h, PropType } from 'vue';
-import { DatatableRow } from '../../../types';
+import type { PropType } from 'vue';
+import { defineComponent, h } from 'vue';
+import type { DatatableRow } from '../../../types';
 import N8nButton from '../../N8nButton';
 
 // eslint-disable-next-line @typescript-eslint/naming-convention
diff --git a/packages/design-system/src/components/N8nFormInput/FormInput.vue b/packages/design-system/src/components/N8nFormInput/FormInput.vue
index 7030af847acbd..30622d9f6fdaf 100644
--- a/packages/design-system/src/components/N8nFormInput/FormInput.vue
+++ b/packages/design-system/src/components/N8nFormInput/FormInput.vue
@@ -95,7 +95,7 @@ import N8nCheckbox from '../N8nCheckbox';
 import { Switch as ElSwitch } from 'element-ui';
 
 import { getValidationError, VALIDATORS } from './validators';
-import { Rule, RuleGroup, IValidator, Validatable, FormState } from '../../types';
+import type { Rule, RuleGroup, IValidator, Validatable, FormState } from '../../types';
 
 import { t } from '../../locale';
 
diff --git a/packages/design-system/src/components/N8nFormInput/validators.ts b/packages/design-system/src/components/N8nFormInput/validators.ts
index 7577c139b42a2..855c3ba6a2050 100644
--- a/packages/design-system/src/components/N8nFormInput/validators.ts
+++ b/packages/design-system/src/components/N8nFormInput/validators.ts
@@ -1,4 +1,4 @@
-import { IValidator, RuleGroup, Validatable } from '../../types';
+import type { IValidator, RuleGroup, Validatable } from '../../types';
 
 export const emailRegex =
 	/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
diff --git a/packages/design-system/src/components/N8nFormInputs/FormInputs.vue b/packages/design-system/src/components/N8nFormInputs/FormInputs.vue
index 569051122f19c..e0809c1d39526 100644
--- a/packages/design-system/src/components/N8nFormInputs/FormInputs.vue
+++ b/packages/design-system/src/components/N8nFormInputs/FormInputs.vue
@@ -37,11 +37,13 @@
 </template>
 
 <script lang="ts">
-import { defineComponent, PropType } from 'vue';
+import type { PropType } from 'vue';
+import { defineComponent } from 'vue';
 import N8nFormInput from '../N8nFormInput';
 import type { IFormInput } from '../../types';
 import ResizeObserver from '../ResizeObserver';
-import { createEventBus, EventBus } from '../../utils';
+import type { EventBus } from '../../utils';
+import { createEventBus } from '../../utils';
 
 export default defineComponent({
 	name: 'n8n-form-inputs',
diff --git a/packages/design-system/src/components/N8nInfoAccordion/InfoAccordion.vue b/packages/design-system/src/components/N8nInfoAccordion/InfoAccordion.vue
index ccf718e81f0ec..7cf5d10d9d233 100644
--- a/packages/design-system/src/components/N8nInfoAccordion/InfoAccordion.vue
+++ b/packages/design-system/src/components/N8nInfoAccordion/InfoAccordion.vue
@@ -41,7 +41,8 @@
 <script lang="ts">
 import N8nText from '../N8nText';
 import N8nIcon from '../N8nIcon';
-import { defineComponent, PropType } from 'vue';
+import type { PropType } from 'vue';
+import { defineComponent } from 'vue';
 
 export interface IAccordionItem {
 	id: string;
diff --git a/packages/design-system/src/components/N8nMarkdown/Markdown.vue b/packages/design-system/src/components/N8nMarkdown/Markdown.vue
index 2f157d6185fe6..d35f1ee575784 100644
--- a/packages/design-system/src/components/N8nMarkdown/Markdown.vue
+++ b/packages/design-system/src/components/N8nMarkdown/Markdown.vue
@@ -19,13 +19,15 @@
 
 <script lang="ts">
 import N8nLoading from '../N8nLoading';
-import Markdown, { PluginSimple } from 'markdown-it';
+import type { PluginSimple } from 'markdown-it';
+import Markdown from 'markdown-it';
 
 import markdownLink from 'markdown-it-link-attributes';
 import markdownEmoji from 'markdown-it-emoji';
 import markdownTasklists from 'markdown-it-task-lists';
 
-import { defineComponent, PropType } from 'vue';
+import type { PropType } from 'vue';
+import { defineComponent } from 'vue';
 
 import xss, { friendlyAttrValue } from 'xss';
 import { escapeMarkdown } from '../../utils/markdown';
diff --git a/packages/design-system/src/components/N8nMenu/Menu.vue b/packages/design-system/src/components/N8nMenu/Menu.vue
index 868a3c050d32f..66e9d61bb46bd 100644
--- a/packages/design-system/src/components/N8nMenu/Menu.vue
+++ b/packages/design-system/src/components/N8nMenu/Menu.vue
@@ -54,7 +54,8 @@
 <script lang="ts">
 import { Menu as ElMenu } from 'element-ui';
 import N8nMenuItem from '../N8nMenuItem';
-import { defineComponent, PropType } from 'vue';
+import type { PropType } from 'vue';
+import { defineComponent } from 'vue';
 import type { IMenuItem, RouteObject } from '../../types';
 
 export default defineComponent({
diff --git a/packages/design-system/src/components/N8nMenuItem/MenuItem.vue b/packages/design-system/src/components/N8nMenuItem/MenuItem.vue
index 4094404c10193..3dbb7b327e0af 100644
--- a/packages/design-system/src/components/N8nMenuItem/MenuItem.vue
+++ b/packages/design-system/src/components/N8nMenuItem/MenuItem.vue
@@ -74,7 +74,8 @@
 import { Submenu as ElSubmenu, MenuItem as ElMenuItem } from 'element-ui';
 import N8nTooltip from '../N8nTooltip';
 import N8nIcon from '../N8nIcon';
-import { defineComponent, PropType } from 'vue';
+import type { PropType } from 'vue';
+import { defineComponent } from 'vue';
 import type { IMenuItem, RouteObject } from '../../types';
 
 export default defineComponent({
diff --git a/packages/design-system/src/components/N8nNodeCreatorNode/NodeCreatorNode.stories.ts b/packages/design-system/src/components/N8nNodeCreatorNode/NodeCreatorNode.stories.ts
index 77156838bcf42..bcd38ce4510ad 100644
--- a/packages/design-system/src/components/N8nNodeCreatorNode/NodeCreatorNode.stories.ts
+++ b/packages/design-system/src/components/N8nNodeCreatorNode/NodeCreatorNode.stories.ts
@@ -1,5 +1,5 @@
 import N8nNodeCreatorNode from './NodeCreatorNode.vue';
-import { StoryFn } from '@storybook/vue';
+import type { StoryFn } from '@storybook/vue';
 
 export default {
 	title: 'Modules/Node Creator Node',
diff --git a/packages/design-system/src/components/N8nPagination/Pagination.vue b/packages/design-system/src/components/N8nPagination/Pagination.vue
index e6968b5c21a0b..5b0f106370005 100644
--- a/packages/design-system/src/components/N8nPagination/Pagination.vue
+++ b/packages/design-system/src/components/N8nPagination/Pagination.vue
@@ -1,5 +1,6 @@
 <script lang="ts">
-import { DefineComponent, defineComponent } from 'vue';
+import type { DefineComponent } from 'vue';
+import { defineComponent } from 'vue';
 import { Pagination as ElPagination } from 'element-ui';
 
 export default defineComponent({
diff --git a/packages/design-system/src/components/N8nRadioButtons/RadioButtons.vue b/packages/design-system/src/components/N8nRadioButtons/RadioButtons.vue
index 9fc3bfc92e9a1..1972d4fd600ea 100644
--- a/packages/design-system/src/components/N8nRadioButtons/RadioButtons.vue
+++ b/packages/design-system/src/components/N8nRadioButtons/RadioButtons.vue
@@ -18,7 +18,8 @@
 <script lang="ts">
 import RadioButton from './RadioButton.vue';
 
-import { defineComponent, PropType } from 'vue';
+import type { PropType } from 'vue';
+import { defineComponent } from 'vue';
 
 export interface RadioOption {
 	label: string;
diff --git a/packages/design-system/src/components/N8nRecycleScroller/RecycleScroller.stories.ts b/packages/design-system/src/components/N8nRecycleScroller/RecycleScroller.stories.ts
index d1b1ed0e0bef2..7e75a5d51a60f 100644
--- a/packages/design-system/src/components/N8nRecycleScroller/RecycleScroller.stories.ts
+++ b/packages/design-system/src/components/N8nRecycleScroller/RecycleScroller.stories.ts
@@ -1,7 +1,7 @@
 /* eslint-disable @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment */
 import type { StoryFn } from '@storybook/vue';
 import N8nRecycleScroller from './RecycleScroller.vue';
-import { ComponentInstance } from 'vue';
+import type { ComponentInstance } from 'vue';
 
 export default {
 	title: 'Atoms/RecycleScroller',
diff --git a/packages/design-system/src/components/N8nRecycleScroller/RecycleScroller.vue b/packages/design-system/src/components/N8nRecycleScroller/RecycleScroller.vue
index 408f7db5e51b6..4c4a1073aee44 100644
--- a/packages/design-system/src/components/N8nRecycleScroller/RecycleScroller.vue
+++ b/packages/design-system/src/components/N8nRecycleScroller/RecycleScroller.vue
@@ -1,17 +1,8 @@
 <script lang="ts">
 /* eslint-disable @typescript-eslint/no-use-before-define */
 
-import {
-	computed,
-	defineComponent,
-	onMounted,
-	onBeforeMount,
-	ref,
-	PropType,
-	nextTick,
-	watch,
-	ComponentPublicInstance,
-} from 'vue';
+import type { PropType, ComponentPublicInstance } from 'vue';
+import { computed, defineComponent, onMounted, onBeforeMount, ref, nextTick, watch } from 'vue';
 
 export default defineComponent({
 	name: 'n8n-recycle-scroller',
diff --git a/packages/design-system/src/components/N8nResizeWrapper/ResizeWrapper.vue b/packages/design-system/src/components/N8nResizeWrapper/ResizeWrapper.vue
index fec202b33393c..930e4eb608d2f 100644
--- a/packages/design-system/src/components/N8nResizeWrapper/ResizeWrapper.vue
+++ b/packages/design-system/src/components/N8nResizeWrapper/ResizeWrapper.vue
@@ -13,7 +13,8 @@
 
 <script lang="ts">
 /* eslint-disable @typescript-eslint/unbound-method */
-import { defineComponent, PropType } from 'vue';
+import type { PropType } from 'vue';
+import { defineComponent } from 'vue';
 
 function closestNumber(value: number, divisor: number): number {
 	const q = value / divisor;
diff --git a/packages/design-system/src/components/N8nTabs/Tabs.vue b/packages/design-system/src/components/N8nTabs/Tabs.vue
index afbffc7dadbb2..8ce5387be8da8 100644
--- a/packages/design-system/src/components/N8nTabs/Tabs.vue
+++ b/packages/design-system/src/components/N8nTabs/Tabs.vue
@@ -47,7 +47,8 @@
 </template>
 
 <script lang="ts">
-import { defineComponent, PropType } from 'vue';
+import type { PropType } from 'vue';
+import { defineComponent } from 'vue';
 import N8nIcon from '../N8nIcon';
 
 export interface N8nTabOptions {
diff --git a/packages/design-system/src/components/N8nTags/Tags.vue b/packages/design-system/src/components/N8nTags/Tags.vue
index 63c982106e75e..40e668f3aebba 100644
--- a/packages/design-system/src/components/N8nTags/Tags.vue
+++ b/packages/design-system/src/components/N8nTags/Tags.vue
@@ -22,7 +22,8 @@
 import N8nTag from '../N8nTag';
 import N8nLink from '../N8nLink';
 import Locale from '../../mixins/locale';
-import { defineComponent, PropType } from 'vue';
+import type { PropType } from 'vue';
+import { defineComponent } from 'vue';
 
 export interface ITag {
 	id: string;
diff --git a/packages/design-system/src/components/N8nTooltip/Tooltip.vue b/packages/design-system/src/components/N8nTooltip/Tooltip.vue
index dbe2f8113d276..f9bb068ebdc1c 100644
--- a/packages/design-system/src/components/N8nTooltip/Tooltip.vue
+++ b/packages/design-system/src/components/N8nTooltip/Tooltip.vue
@@ -20,7 +20,8 @@
 </template>
 
 <script lang="ts">
-import { defineComponent, PropType } from 'vue';
+import type { PropType } from 'vue';
+import { defineComponent } from 'vue';
 import { Tooltip as ElTooltip } from 'element-ui';
 import type { IN8nButton } from '@/types';
 import N8nButton from '../N8nButton';
diff --git a/packages/design-system/src/components/N8nTree/Tree.vue b/packages/design-system/src/components/N8nTree/Tree.vue
index 3b22eb55f2a89..80a11b6670865 100644
--- a/packages/design-system/src/components/N8nTree/Tree.vue
+++ b/packages/design-system/src/components/N8nTree/Tree.vue
@@ -37,7 +37,8 @@
 </template>
 
 <script lang="ts">
-import { defineComponent, PropType } from 'vue';
+import type { PropType } from 'vue';
+import { defineComponent } from 'vue';
 
 export default defineComponent({
 	name: 'n8n-tree',
diff --git a/packages/design-system/src/components/N8nUserSelect/UserSelect.vue b/packages/design-system/src/components/N8nUserSelect/UserSelect.vue
index 815d00721747b..d4c8eec96d34d 100644
--- a/packages/design-system/src/components/N8nUserSelect/UserSelect.vue
+++ b/packages/design-system/src/components/N8nUserSelect/UserSelect.vue
@@ -33,10 +33,11 @@
 import N8nUserInfo from '../N8nUserInfo';
 import N8nSelect from '../N8nSelect';
 import N8nOption from '../N8nOption';
-import { IUser } from '../../types';
+import type { IUser } from '../../types';
 import Locale from '../../mixins/locale';
 import { t } from '../../locale';
-import { defineComponent, PropType } from 'vue';
+import type { PropType } from 'vue';
+import { defineComponent } from 'vue';
 
 export default defineComponent({
 	name: 'n8n-user-select',
diff --git a/packages/design-system/src/components/N8nUsersList/UsersList.stories.ts b/packages/design-system/src/components/N8nUsersList/UsersList.stories.ts
index c83799055718a..fb3348e7288d6 100644
--- a/packages/design-system/src/components/N8nUsersList/UsersList.stories.ts
+++ b/packages/design-system/src/components/N8nUsersList/UsersList.stories.ts
@@ -1,7 +1,7 @@
 import N8nUsersList from './UsersList.vue';
 import { action } from '@storybook/addon-actions';
 import type { StoryFn } from '@storybook/vue';
-import { IUser } from '@/types';
+import type { IUser } from '@/types';
 
 export default {
 	title: 'Modules/UsersList',
diff --git a/packages/design-system/src/components/N8nUsersList/UsersList.vue b/packages/design-system/src/components/N8nUsersList/UsersList.vue
index 52275e05f1205..9ea1075c894fd 100644
--- a/packages/design-system/src/components/N8nUsersList/UsersList.vue
+++ b/packages/design-system/src/components/N8nUsersList/UsersList.vue
@@ -37,7 +37,8 @@ import N8nActionToggle from '../N8nActionToggle';
 import N8nBadge from '../N8nBadge';
 import N8nUserInfo from '../N8nUserInfo';
 import Locale from '../../mixins/locale';
-import { defineComponent, PropType } from 'vue';
+import type { PropType } from 'vue';
+import { defineComponent } from 'vue';
 
 export default defineComponent({
 	name: 'n8n-users-list',
diff --git a/packages/design-system/src/styleguide/ColorCircles.vue b/packages/design-system/src/styleguide/ColorCircles.vue
index dd6ef8e17daee..763bc24b1d763 100644
--- a/packages/design-system/src/styleguide/ColorCircles.vue
+++ b/packages/design-system/src/styleguide/ColorCircles.vue
@@ -10,7 +10,8 @@
 </template>
 
 <script lang="ts">
-import { defineComponent, PropType } from 'vue';
+import type { PropType } from 'vue';
+import { defineComponent } from 'vue';
 
 function hslToHex(h: number, s: number, l: number): string {
 	l /= 100;
diff --git a/packages/design-system/src/styleguide/Sizes.vue b/packages/design-system/src/styleguide/Sizes.vue
index f24f4346505a7..dd5316c6799de 100644
--- a/packages/design-system/src/styleguide/Sizes.vue
+++ b/packages/design-system/src/styleguide/Sizes.vue
@@ -18,7 +18,8 @@
 </template>
 
 <script lang="ts">
-import { defineComponent, PropType } from 'vue';
+import type { PropType } from 'vue';
+import { defineComponent } from 'vue';
 
 export default defineComponent({
 	name: 'sizes',
diff --git a/packages/design-system/src/styleguide/VariableTable.vue b/packages/design-system/src/styleguide/VariableTable.vue
index fb02a3b0f09a2..9d26337900f68 100644
--- a/packages/design-system/src/styleguide/VariableTable.vue
+++ b/packages/design-system/src/styleguide/VariableTable.vue
@@ -16,7 +16,8 @@
 </template>
 
 <script lang="ts">
-import { defineComponent, PropType } from 'vue';
+import type { PropType } from 'vue';
+import { defineComponent } from 'vue';
 
 export default defineComponent({
 	name: 'variable-table',
diff --git a/packages/design-system/src/types/datatable.ts b/packages/design-system/src/types/datatable.ts
index aa568483424cd..8a31c2b1d7079 100644
--- a/packages/design-system/src/types/datatable.ts
+++ b/packages/design-system/src/types/datatable.ts
@@ -1,4 +1,4 @@
-import { VNode } from 'vue';
+import type { VNode } from 'vue';
 
 export type DatatableRowDataType = string | number | boolean | null | undefined;
 
diff --git a/packages/editor-ui/src/Interface.ts b/packages/editor-ui/src/Interface.ts
index 5bc452c578afa..d058b37f7e0a2 100644
--- a/packages/editor-ui/src/Interface.ts
+++ b/packages/editor-ui/src/Interface.ts
@@ -1,7 +1,7 @@
-import { CREDENTIAL_EDIT_MODAL_KEY } from './constants';
+import type { CREDENTIAL_EDIT_MODAL_KEY } from './constants';
 /* eslint-disable @typescript-eslint/no-explicit-any */
-import { IMenuItem } from 'n8n-design-system';
-import {
+import type { IMenuItem } from 'n8n-design-system';
+import type {
 	GenericValue,
 	IConnections,
 	ICredentialsDecrypted,
@@ -36,10 +36,10 @@ import {
 	IUserManagementSettings,
 	WorkflowSettings,
 } from 'n8n-workflow';
-import { SignInType } from './constants';
-import { FAKE_DOOR_FEATURES, TRIGGER_NODE_FILTER, REGULAR_NODE_FILTER } from './constants';
-import { BulkCommand, Undoable } from '@/models/history';
-import { PartialBy } from '@/utils/typeHelpers';
+import type { SignInType } from './constants';
+import type { FAKE_DOOR_FEATURES, TRIGGER_NODE_FILTER, REGULAR_NODE_FILTER } from './constants';
+import type { BulkCommand, Undoable } from '@/models/history';
+import type { PartialBy } from '@/utils/typeHelpers';
 
 export * from 'n8n-design-system/types';
 
diff --git a/packages/editor-ui/src/__tests__/permissions.spec.ts b/packages/editor-ui/src/__tests__/permissions.spec.ts
index 770cffa228770..8ee7edde431a5 100644
--- a/packages/editor-ui/src/__tests__/permissions.spec.ts
+++ b/packages/editor-ui/src/__tests__/permissions.spec.ts
@@ -1,5 +1,5 @@
 import { parsePermissionsTable } from '@/permissions';
-import { IUser } from '@/Interface';
+import type { IUser } from '@/Interface';
 
 describe('parsePermissionsTable()', () => {
 	const user: IUser = {
diff --git a/packages/editor-ui/src/__tests__/server/endpoints/credential.ts b/packages/editor-ui/src/__tests__/server/endpoints/credential.ts
index 949004b487f27..7aba2d99d40c6 100644
--- a/packages/editor-ui/src/__tests__/server/endpoints/credential.ts
+++ b/packages/editor-ui/src/__tests__/server/endpoints/credential.ts
@@ -1,5 +1,6 @@
-import { Response, Server } from 'miragejs';
-import { AppSchema } from '../types';
+import type { Server } from 'miragejs';
+import { Response } from 'miragejs';
+import type { AppSchema } from '../types';
 
 export function routesForCredentials(server: Server) {
 	server.get('/rest/credentials', (schema: AppSchema) => {
diff --git a/packages/editor-ui/src/__tests__/server/endpoints/credentialType.ts b/packages/editor-ui/src/__tests__/server/endpoints/credentialType.ts
index 3f9ee6eaafec3..b50d6270e2ce7 100644
--- a/packages/editor-ui/src/__tests__/server/endpoints/credentialType.ts
+++ b/packages/editor-ui/src/__tests__/server/endpoints/credentialType.ts
@@ -1,5 +1,6 @@
-import { Response, Server } from 'miragejs';
-import { AppSchema } from '../types';
+import type { Server } from 'miragejs';
+import { Response } from 'miragejs';
+import type { AppSchema } from '../types';
 
 export function routesForCredentialTypes(server: Server) {
 	server.get('/types/credentials.json', (schema: AppSchema) => {
diff --git a/packages/editor-ui/src/__tests__/server/endpoints/index.ts b/packages/editor-ui/src/__tests__/server/endpoints/index.ts
index f98c9c3823292..4ba3315e425fb 100644
--- a/packages/editor-ui/src/__tests__/server/endpoints/index.ts
+++ b/packages/editor-ui/src/__tests__/server/endpoints/index.ts
@@ -1,4 +1,4 @@
-import { Server } from 'miragejs';
+import type { Server } from 'miragejs';
 import { routesForUsers } from './user';
 import { routesForCredentials } from './credential';
 import { routesForCredentialTypes } from './credentialType';
diff --git a/packages/editor-ui/src/__tests__/server/endpoints/settings.ts b/packages/editor-ui/src/__tests__/server/endpoints/settings.ts
index e2b5b4e0eb7e7..0ffed3e14a6b1 100644
--- a/packages/editor-ui/src/__tests__/server/endpoints/settings.ts
+++ b/packages/editor-ui/src/__tests__/server/endpoints/settings.ts
@@ -1,6 +1,7 @@
-import { Response, Server } from 'miragejs';
-import { AppSchema } from '../types';
-import { IN8nUISettings } from 'n8n-workflow';
+import type { Server } from 'miragejs';
+import { Response } from 'miragejs';
+import type { AppSchema } from '../types';
+import type { IN8nUISettings } from 'n8n-workflow';
 
 const defaultSettings: IN8nUISettings = {
 	allowedModules: {},
diff --git a/packages/editor-ui/src/__tests__/server/endpoints/user.ts b/packages/editor-ui/src/__tests__/server/endpoints/user.ts
index 0400b47b96ba7..57bfdc8e1faa1 100644
--- a/packages/editor-ui/src/__tests__/server/endpoints/user.ts
+++ b/packages/editor-ui/src/__tests__/server/endpoints/user.ts
@@ -1,5 +1,6 @@
-import { Response, Server } from 'miragejs';
-import { AppSchema } from '../types';
+import type { Server } from 'miragejs';
+import { Response } from 'miragejs';
+import type { AppSchema } from '../types';
 
 export function routesForUsers(server: Server) {
 	server.get('/rest/users', (schema: AppSchema) => {
diff --git a/packages/editor-ui/src/__tests__/server/endpoints/variable.ts b/packages/editor-ui/src/__tests__/server/endpoints/variable.ts
index bbe3b87eb1eb9..c2e017c2a9392 100644
--- a/packages/editor-ui/src/__tests__/server/endpoints/variable.ts
+++ b/packages/editor-ui/src/__tests__/server/endpoints/variable.ts
@@ -1,7 +1,8 @@
-import { Request, Response, Server } from 'miragejs';
-import { AppSchema } from '../types';
+import type { Request, Server } from 'miragejs';
+import { Response } from 'miragejs';
+import type { AppSchema } from '../types';
 import { jsonParse } from 'n8n-workflow';
-import { EnvironmentVariable } from '@/Interface';
+import type { EnvironmentVariable } from '@/Interface';
 
 export function routesForVariables(server: Server) {
 	server.get('/rest/variables', (schema: AppSchema) => {
diff --git a/packages/editor-ui/src/__tests__/server/models/credential.ts b/packages/editor-ui/src/__tests__/server/models/credential.ts
index 17d4f45dcf984..8020afc06d0d8 100644
--- a/packages/editor-ui/src/__tests__/server/models/credential.ts
+++ b/packages/editor-ui/src/__tests__/server/models/credential.ts
@@ -1,4 +1,4 @@
-import { ICredentialsResponse } from '@/Interface';
+import type { ICredentialsResponse } from '@/Interface';
 import { Model } from 'miragejs';
 import type { ModelDefinition } from 'miragejs/-types';
 
diff --git a/packages/editor-ui/src/__tests__/server/models/user.ts b/packages/editor-ui/src/__tests__/server/models/user.ts
index cef64c360cf9d..2c4d22e3dbd16 100644
--- a/packages/editor-ui/src/__tests__/server/models/user.ts
+++ b/packages/editor-ui/src/__tests__/server/models/user.ts
@@ -1,4 +1,4 @@
-import { IUser } from '@/Interface';
+import type { IUser } from '@/Interface';
 import { Model } from 'miragejs';
 import type { ModelDefinition } from 'miragejs/-types';
 
diff --git a/packages/editor-ui/src/__tests__/server/models/variable.ts b/packages/editor-ui/src/__tests__/server/models/variable.ts
index 5677a4db9b980..27a2a9b238e49 100644
--- a/packages/editor-ui/src/__tests__/server/models/variable.ts
+++ b/packages/editor-ui/src/__tests__/server/models/variable.ts
@@ -1,4 +1,4 @@
-import { EnvironmentVariable } from '@/Interface';
+import type { EnvironmentVariable } from '@/Interface';
 import { Model } from 'miragejs';
 import type { ModelDefinition } from 'miragejs/-types';
 
diff --git a/packages/editor-ui/src/__tests__/server/types.ts b/packages/editor-ui/src/__tests__/server/types.ts
index bc3e75e4f3bad..ec32f7c97cede 100644
--- a/packages/editor-ui/src/__tests__/server/types.ts
+++ b/packages/editor-ui/src/__tests__/server/types.ts
@@ -1,10 +1,10 @@
-import { Registry } from 'miragejs';
+import type { Registry } from 'miragejs';
 
 // eslint-disable-next-line import/no-unresolved
-import Schema from 'miragejs/orm/schema';
+import type Schema from 'miragejs/orm/schema';
 
-import { models } from './models';
-import { factories } from './factories';
+import type { models } from './models';
+import type { factories } from './factories';
 
 type AppRegistry = Registry<typeof models, typeof factories>;
 export type AppSchema = Schema<AppRegistry>;
diff --git a/packages/editor-ui/src/__tests__/utils.ts b/packages/editor-ui/src/__tests__/utils.ts
index 9f9a7afb53059..c6d167f06c3ee 100644
--- a/packages/editor-ui/src/__tests__/utils.ts
+++ b/packages/editor-ui/src/__tests__/utils.ts
@@ -1,4 +1,5 @@
-import { ISettingsState, UserManagementAuthenticationMethod } from '@/Interface';
+import type { ISettingsState } from '@/Interface';
+import { UserManagementAuthenticationMethod } from '@/Interface';
 import { render } from '@testing-library/vue';
 import { PiniaVuePlugin } from 'pinia';
 
diff --git a/packages/editor-ui/src/api/api-keys.ts b/packages/editor-ui/src/api/api-keys.ts
index 20a72895f60b8..f864ffbe17364 100644
--- a/packages/editor-ui/src/api/api-keys.ts
+++ b/packages/editor-ui/src/api/api-keys.ts
@@ -1,4 +1,4 @@
-import { IRestApiContext } from '@/Interface';
+import type { IRestApiContext } from '@/Interface';
 import { makeRestApiRequest } from '@/utils';
 
 export function getApiKey(context: IRestApiContext): Promise<{ apiKey: string | null }> {
diff --git a/packages/editor-ui/src/api/communityNodes.ts b/packages/editor-ui/src/api/communityNodes.ts
index 453217aa83074..ec8212bff36ba 100644
--- a/packages/editor-ui/src/api/communityNodes.ts
+++ b/packages/editor-ui/src/api/communityNodes.ts
@@ -1,5 +1,5 @@
-import { IRestApiContext } from '@/Interface';
-import { PublicInstalledPackage } from 'n8n-workflow';
+import type { IRestApiContext } from '@/Interface';
+import type { PublicInstalledPackage } from 'n8n-workflow';
 import { get, post, makeRestApiRequest } from '@/utils';
 
 export async function getInstalledCommunityNodes(
diff --git a/packages/editor-ui/src/api/credentials.ee.ts b/packages/editor-ui/src/api/credentials.ee.ts
index 5a9b5b6196b8b..3067b906888d4 100644
--- a/packages/editor-ui/src/api/credentials.ee.ts
+++ b/packages/editor-ui/src/api/credentials.ee.ts
@@ -1,6 +1,6 @@
-import { ICredentialsResponse, IRestApiContext, IShareCredentialsPayload } from '@/Interface';
+import type { ICredentialsResponse, IRestApiContext, IShareCredentialsPayload } from '@/Interface';
 import { makeRestApiRequest } from '@/utils';
-import { IDataObject } from 'n8n-workflow';
+import type { IDataObject } from 'n8n-workflow';
 
 export async function setCredentialSharedWith(
 	context: IRestApiContext,
diff --git a/packages/editor-ui/src/api/credentials.ts b/packages/editor-ui/src/api/credentials.ts
index cf9d13932b94a..3bef8e9e9fe41 100644
--- a/packages/editor-ui/src/api/credentials.ts
+++ b/packages/editor-ui/src/api/credentials.ts
@@ -1,6 +1,10 @@
-import { ICredentialsDecryptedResponse, ICredentialsResponse, IRestApiContext } from '@/Interface';
+import type {
+	ICredentialsDecryptedResponse,
+	ICredentialsResponse,
+	IRestApiContext,
+} from '@/Interface';
 import { makeRestApiRequest } from '@/utils';
-import {
+import type {
 	ICredentialsDecrypted,
 	ICredentialType,
 	IDataObject,
diff --git a/packages/editor-ui/src/api/curlHelper.ts b/packages/editor-ui/src/api/curlHelper.ts
index c1927b3b82f88..7089201eb2e70 100644
--- a/packages/editor-ui/src/api/curlHelper.ts
+++ b/packages/editor-ui/src/api/curlHelper.ts
@@ -1,4 +1,4 @@
-import { CurlToJSONResponse, IRestApiContext } from '@/Interface';
+import type { CurlToJSONResponse, IRestApiContext } from '@/Interface';
 import { makeRestApiRequest } from '@/utils';
 
 export function getCurlToJson(
diff --git a/packages/editor-ui/src/api/environments.ee.ts b/packages/editor-ui/src/api/environments.ee.ts
index baf4280459e94..f5a386a059319 100644
--- a/packages/editor-ui/src/api/environments.ee.ts
+++ b/packages/editor-ui/src/api/environments.ee.ts
@@ -1,6 +1,6 @@
-import { EnvironmentVariable, IRestApiContext } from '@/Interface';
+import type { EnvironmentVariable, IRestApiContext } from '@/Interface';
 import { makeRestApiRequest } from '@/utils';
-import { IDataObject } from 'n8n-workflow';
+import type { IDataObject } from 'n8n-workflow';
 
 export async function getVariables(context: IRestApiContext): Promise<EnvironmentVariable[]> {
 	return await makeRestApiRequest(context, 'GET', '/variables');
diff --git a/packages/editor-ui/src/api/eventbus.ee.ts b/packages/editor-ui/src/api/eventbus.ee.ts
index 1b00f84630064..a979a63fe92c2 100644
--- a/packages/editor-ui/src/api/eventbus.ee.ts
+++ b/packages/editor-ui/src/api/eventbus.ee.ts
@@ -1,6 +1,6 @@
-import { IRestApiContext } from '@/Interface';
+import type { IRestApiContext } from '@/Interface';
 import { makeRestApiRequest } from '@/utils';
-import { IDataObject, MessageEventBusDestinationOptions } from 'n8n-workflow';
+import type { IDataObject, MessageEventBusDestinationOptions } from 'n8n-workflow';
 
 export async function saveDestinationToDb(
 	context: IRestApiContext,
diff --git a/packages/editor-ui/src/api/ldap.ts b/packages/editor-ui/src/api/ldap.ts
index 06bf040f7549e..2daa45905c782 100644
--- a/packages/editor-ui/src/api/ldap.ts
+++ b/packages/editor-ui/src/api/ldap.ts
@@ -1,6 +1,6 @@
-import { ILdapConfig, ILdapSyncData, IRestApiContext } from '@/Interface';
+import type { ILdapConfig, ILdapSyncData, IRestApiContext } from '@/Interface';
 import { makeRestApiRequest } from '@/utils';
-import { IDataObject } from 'n8n-workflow';
+import type { IDataObject } from 'n8n-workflow';
 
 export function getLdapConfig(context: IRestApiContext): Promise<ILdapConfig> {
 	return makeRestApiRequest(context, 'GET', '/ldap/config');
diff --git a/packages/editor-ui/src/api/settings.ts b/packages/editor-ui/src/api/settings.ts
index 2205994b7eace..cdd19d976a1f8 100644
--- a/packages/editor-ui/src/api/settings.ts
+++ b/packages/editor-ui/src/api/settings.ts
@@ -1,4 +1,4 @@
-import {
+import type {
 	IRestApiContext,
 	IN8nPrompts,
 	IN8nValueSurveyData,
@@ -6,7 +6,7 @@ import {
 } from '../Interface';
 import { makeRestApiRequest, get, post } from '@/utils';
 import { N8N_IO_BASE_URL, NPM_COMMUNITY_NODE_SEARCH_API_URL } from '@/constants';
-import { IN8nUISettings } from 'n8n-workflow';
+import type { IN8nUISettings } from 'n8n-workflow';
 
 export function getSettings(context: IRestApiContext): Promise<IN8nUISettings> {
 	return makeRestApiRequest(context, 'GET', '/settings');
diff --git a/packages/editor-ui/src/api/sso.ts b/packages/editor-ui/src/api/sso.ts
index 5fc90c8a2e4e9..867a7799f9a63 100644
--- a/packages/editor-ui/src/api/sso.ts
+++ b/packages/editor-ui/src/api/sso.ts
@@ -1,5 +1,5 @@
 import { makeRestApiRequest } from '@/utils';
-import {
+import type {
 	IRestApiContext,
 	SamlPreferencesLoginEnabled,
 	SamlPreferences,
diff --git a/packages/editor-ui/src/api/tags.ts b/packages/editor-ui/src/api/tags.ts
index 45392781251bb..88937cf2e857a 100644
--- a/packages/editor-ui/src/api/tags.ts
+++ b/packages/editor-ui/src/api/tags.ts
@@ -1,4 +1,4 @@
-import { IRestApiContext, ITag } from '@/Interface';
+import type { IRestApiContext, ITag } from '@/Interface';
 import { makeRestApiRequest } from '@/utils';
 
 export async function getTags(context: IRestApiContext, withUsageCount = false): Promise<ITag[]> {
diff --git a/packages/editor-ui/src/api/templates.ts b/packages/editor-ui/src/api/templates.ts
index 870f962d48741..46b4bf2f3e9e5 100644
--- a/packages/editor-ui/src/api/templates.ts
+++ b/packages/editor-ui/src/api/templates.ts
@@ -1,4 +1,4 @@
-import {
+import type {
 	ITemplatesCategory,
 	ITemplatesCollection,
 	ITemplatesQuery,
@@ -7,7 +7,7 @@ import {
 	ITemplatesWorkflowResponse,
 	IWorkflowTemplate,
 } from '@/Interface';
-import { IDataObject } from 'n8n-workflow';
+import type { IDataObject } from 'n8n-workflow';
 import { get } from '@/utils';
 
 function stringifyArray(arr: number[]) {
diff --git a/packages/editor-ui/src/api/usage.ts b/packages/editor-ui/src/api/usage.ts
index 5266e5a82b5b9..8d79f59e7761b 100644
--- a/packages/editor-ui/src/api/usage.ts
+++ b/packages/editor-ui/src/api/usage.ts
@@ -1,5 +1,5 @@
 import { makeRestApiRequest } from '@/utils';
-import { IRestApiContext, UsageState } from '@/Interface';
+import type { IRestApiContext, UsageState } from '@/Interface';
 
 export const getLicense = (context: IRestApiContext): Promise<UsageState['data']> => {
 	return makeRestApiRequest(context, 'GET', '/license');
diff --git a/packages/editor-ui/src/api/users.ts b/packages/editor-ui/src/api/users.ts
index 6457ec2c806ef..1b693f4fbd760 100644
--- a/packages/editor-ui/src/api/users.ts
+++ b/packages/editor-ui/src/api/users.ts
@@ -1,11 +1,11 @@
-import {
+import type {
 	CurrentUserResponse,
 	IInviteResponse,
 	IPersonalizationLatestVersion,
 	IRestApiContext,
 	IUserResponse,
 } from '@/Interface';
-import { IDataObject } from 'n8n-workflow';
+import type { IDataObject } from 'n8n-workflow';
 import { makeRestApiRequest } from '@/utils/apiUtils';
 
 export function loginCurrentUser(context: IRestApiContext): Promise<CurrentUserResponse | null> {
diff --git a/packages/editor-ui/src/api/versions.ts b/packages/editor-ui/src/api/versions.ts
index e6842342fd3bd..4896318bfa283 100644
--- a/packages/editor-ui/src/api/versions.ts
+++ b/packages/editor-ui/src/api/versions.ts
@@ -1,4 +1,4 @@
-import { IVersion } from '@/Interface';
+import type { IVersion } from '@/Interface';
 import { INSTANCE_ID_HEADER } from '@/constants';
 import { get } from '@/utils';
 
diff --git a/packages/editor-ui/src/api/workflow-webhooks.ts b/packages/editor-ui/src/api/workflow-webhooks.ts
index b31192f5da1f2..a6f4e92a67e50 100644
--- a/packages/editor-ui/src/api/workflow-webhooks.ts
+++ b/packages/editor-ui/src/api/workflow-webhooks.ts
@@ -1,4 +1,5 @@
-import { IOnboardingCallPrompt, IOnboardingCallPromptResponse, IUser } from '@/Interface';
+import type { IOnboardingCallPrompt, IUser } from '@/Interface';
+import { IOnboardingCallPromptResponse } from '@/Interface';
 import { get, post } from '@/utils';
 
 const N8N_API_BASE_URL = 'https://api.n8n.io/api';
diff --git a/packages/editor-ui/src/api/workflows.ee.ts b/packages/editor-ui/src/api/workflows.ee.ts
index 499fad502cb5f..1282a8ce86b56 100644
--- a/packages/editor-ui/src/api/workflows.ee.ts
+++ b/packages/editor-ui/src/api/workflows.ee.ts
@@ -1,6 +1,6 @@
-import { IRestApiContext, IShareWorkflowsPayload, IWorkflowsShareResponse } from '@/Interface';
+import type { IRestApiContext, IShareWorkflowsPayload, IWorkflowsShareResponse } from '@/Interface';
 import { makeRestApiRequest } from '@/utils';
-import { IDataObject } from 'n8n-workflow';
+import type { IDataObject } from 'n8n-workflow';
 
 export async function setWorkflowSharedWith(
 	context: IRestApiContext,
diff --git a/packages/editor-ui/src/api/workflows.ts b/packages/editor-ui/src/api/workflows.ts
index c641b13006f23..508ed74e4a550 100644
--- a/packages/editor-ui/src/api/workflows.ts
+++ b/packages/editor-ui/src/api/workflows.ts
@@ -1,11 +1,6 @@
-import { IExecutionsCurrentSummaryExtended, IRestApiContext } from '@/Interface';
-import {
-	ExecutionFilters,
-	ExecutionOptions,
-	ExecutionStatus,
-	IDataObject,
-	WorkflowExecuteMode,
-} from 'n8n-workflow';
+import type { IExecutionsCurrentSummaryExtended, IRestApiContext } from '@/Interface';
+import type { ExecutionFilters, ExecutionOptions, IDataObject } from 'n8n-workflow';
+import { ExecutionStatus, WorkflowExecuteMode } from 'n8n-workflow';
 import { makeRestApiRequest } from '@/utils';
 
 export async function getNewWorkflow(context: IRestApiContext, name?: string) {
diff --git a/packages/editor-ui/src/components/BinaryDataDisplayEmbed.vue b/packages/editor-ui/src/components/BinaryDataDisplayEmbed.vue
index 8bfc9889749fe..9b534b6f1f57b 100644
--- a/packages/editor-ui/src/components/BinaryDataDisplayEmbed.vue
+++ b/packages/editor-ui/src/components/BinaryDataDisplayEmbed.vue
@@ -19,7 +19,8 @@
 </template>
 
 <script lang="ts">
-import { IBinaryData, jsonParse } from 'n8n-workflow';
+import type { IBinaryData } from 'n8n-workflow';
+import { jsonParse } from 'n8n-workflow';
 import type { PropType } from 'vue';
 import VueJsonPretty from 'vue-json-pretty';
 import { mapStores } from 'pinia';
diff --git a/packages/editor-ui/src/components/ChangePasswordModal.vue b/packages/editor-ui/src/components/ChangePasswordModal.vue
index 735336a9fbc0a..e87a5bfc7e04e 100644
--- a/packages/editor-ui/src/components/ChangePasswordModal.vue
+++ b/packages/editor-ui/src/components/ChangePasswordModal.vue
@@ -33,7 +33,7 @@ import mixins from 'vue-typed-mixins';
 
 import { showMessage } from '@/mixins/showMessage';
 import Modal from './Modal.vue';
-import { IFormInputs } from '@/Interface';
+import type { IFormInputs } from '@/Interface';
 import { CHANGE_PASSWORD_MODAL_KEY } from '../constants';
 import { mapStores } from 'pinia';
 import { useUsersStore } from '@/stores/users';
diff --git a/packages/editor-ui/src/components/CodeEdit.vue b/packages/editor-ui/src/components/CodeEdit.vue
index 8198196d48c4f..b798e5d9fb3f1 100644
--- a/packages/editor-ui/src/components/CodeEdit.vue
+++ b/packages/editor-ui/src/components/CodeEdit.vue
@@ -25,15 +25,16 @@ import { genericHelpers } from '@/mixins/genericHelpers';
 import { workflowHelpers } from '@/mixins/workflowHelpers';
 
 import mixins from 'vue-typed-mixins';
-import { IExecutionResponse, INodeUi } from '@/Interface';
-import {
+import type { INodeUi } from '@/Interface';
+import { IExecutionResponse } from '@/Interface';
+import type {
 	IBinaryKeyData,
 	IDataObject,
 	INodeExecutionData,
 	IRunExecutionData,
 	IWorkflowDataProxyAdditionalKeys,
-	WorkflowDataProxy,
 } from 'n8n-workflow';
+import { WorkflowDataProxy } from 'n8n-workflow';
 
 import { PLACEHOLDER_FILLED_AT_EXECUTION_TIME } from '@/constants';
 import { CodeEditor } from './forms';
diff --git a/packages/editor-ui/src/components/CodeNodeEditor/CodeNodeEditor.vue b/packages/editor-ui/src/components/CodeNodeEditor/CodeNodeEditor.vue
index 3c95a9d01817d..8899ab74f6c7b 100644
--- a/packages/editor-ui/src/components/CodeNodeEditor/CodeNodeEditor.vue
+++ b/packages/editor-ui/src/components/CodeNodeEditor/CodeNodeEditor.vue
@@ -22,7 +22,8 @@
 import mixins from 'vue-typed-mixins';
 
 import { Compartment, EditorState } from '@codemirror/state';
-import { EditorView, ViewUpdate } from '@codemirror/view';
+import type { ViewUpdate } from '@codemirror/view';
+import { EditorView } from '@codemirror/view';
 import { javascript } from '@codemirror/lang-javascript';
 
 import { baseExtensions } from './baseExtensions';
diff --git a/packages/editor-ui/src/components/CodeNodeEditor/linter.ts b/packages/editor-ui/src/components/CodeNodeEditor/linter.ts
index d33a5c89506de..2eba90c3d9a36 100644
--- a/packages/editor-ui/src/components/CodeNodeEditor/linter.ts
+++ b/packages/editor-ui/src/components/CodeNodeEditor/linter.ts
@@ -1,5 +1,6 @@
 import Vue from 'vue';
-import { Diagnostic, linter as createLinter } from '@codemirror/lint';
+import type { Diagnostic } from '@codemirror/lint';
+import { linter as createLinter } from '@codemirror/lint';
 import * as esprima from 'esprima-next';
 
 import {
diff --git a/packages/editor-ui/src/components/CodeNodeEditor/utils.ts b/packages/editor-ui/src/components/CodeNodeEditor/utils.ts
index b6bd5b473038b..be8560a61e352 100644
--- a/packages/editor-ui/src/components/CodeNodeEditor/utils.ts
+++ b/packages/editor-ui/src/components/CodeNodeEditor/utils.ts
@@ -1,4 +1,4 @@
-import * as esprima from 'esprima-next';
+import type * as esprima from 'esprima-next';
 import type { Completion } from '@codemirror/autocomplete';
 import type { Node } from 'estree';
 import type { RangeNode } from './types';
diff --git a/packages/editor-ui/src/components/CollectionParameter.vue b/packages/editor-ui/src/components/CollectionParameter.vue
index edcadf6472933..919da56fd74e5 100644
--- a/packages/editor-ui/src/components/CollectionParameter.vue
+++ b/packages/editor-ui/src/components/CollectionParameter.vue
@@ -46,16 +46,17 @@
 </template>
 
 <script lang="ts">
-import { INodeUi, IUpdateInformation } from '@/Interface';
+import type { INodeUi, IUpdateInformation } from '@/Interface';
 
-import { deepCopy, INodeProperties, INodePropertyOptions } from 'n8n-workflow';
+import type { INodeProperties, INodePropertyOptions } from 'n8n-workflow';
+import { deepCopy } from 'n8n-workflow';
 
 import { nodeHelpers } from '@/mixins/nodeHelpers';
 
 import { get } from 'lodash-es';
 
 import mixins from 'vue-typed-mixins';
-import { Component } from 'vue';
+import type { Component } from 'vue';
 import { mapStores } from 'pinia';
 import { useNDVStore } from '@/stores/ndv';
 
diff --git a/packages/editor-ui/src/components/CollectionsCarousel.vue b/packages/editor-ui/src/components/CollectionsCarousel.vue
index cc86203f2dfd1..1672ac976e0fc 100644
--- a/packages/editor-ui/src/components/CollectionsCarousel.vue
+++ b/packages/editor-ui/src/components/CollectionsCarousel.vue
@@ -26,8 +26,8 @@
 </template>
 
 <script lang="ts">
-import { PropType } from 'vue';
-import { ITemplatesCollection } from '@/Interface';
+import type { PropType } from 'vue';
+import type { ITemplatesCollection } from '@/Interface';
 import Card from '@/components/CollectionWorkflowCard.vue';
 import CollectionCard from '@/components/CollectionCard.vue';
 import VueAgile from 'vue-agile';
diff --git a/packages/editor-ui/src/components/CommunityPackageCard.vue b/packages/editor-ui/src/components/CommunityPackageCard.vue
index eb11303650006..8fef13ae282ea 100644
--- a/packages/editor-ui/src/components/CommunityPackageCard.vue
+++ b/packages/editor-ui/src/components/CommunityPackageCard.vue
@@ -63,7 +63,7 @@
 
 <script lang="ts">
 import { useUIStore } from '@/stores/ui';
-import { PublicInstalledPackage } from 'n8n-workflow';
+import type { PublicInstalledPackage } from 'n8n-workflow';
 import { mapStores } from 'pinia';
 import mixins from 'vue-typed-mixins';
 import { NPM_PACKAGE_DOCS_BASE_URL, COMMUNITY_PACKAGE_MANAGE_ACTIONS } from '../constants';
diff --git a/packages/editor-ui/src/components/ContactPromptModal.vue b/packages/editor-ui/src/components/ContactPromptModal.vue
index 3978430ae61d1..20e5c91b92e9c 100644
--- a/packages/editor-ui/src/components/ContactPromptModal.vue
+++ b/packages/editor-ui/src/components/ContactPromptModal.vue
@@ -35,7 +35,7 @@
 <script lang="ts">
 import mixins from 'vue-typed-mixins';
 
-import { IN8nPromptResponse } from '@/Interface';
+import type { IN8nPromptResponse } from '@/Interface';
 import { VALID_EMAIL_REGEX } from '@/constants';
 import { workflowHelpers } from '@/mixins/workflowHelpers';
 import Modal from './Modal.vue';
diff --git a/packages/editor-ui/src/components/CredentialCard.vue b/packages/editor-ui/src/components/CredentialCard.vue
index 55d69ddd91fd1..c274a9c3e8a8c 100644
--- a/packages/editor-ui/src/components/CredentialCard.vue
+++ b/packages/editor-ui/src/components/CredentialCard.vue
@@ -32,12 +32,13 @@
 
 <script lang="ts">
 import mixins from 'vue-typed-mixins';
-import { ICredentialsResponse, IUser } from '@/Interface';
-import { ICredentialType } from 'n8n-workflow';
+import type { ICredentialsResponse, IUser } from '@/Interface';
+import type { ICredentialType } from 'n8n-workflow';
 import { EnterpriseEditionFeature } from '@/constants';
 import { showMessage } from '@/mixins/showMessage';
 import CredentialIcon from '@/components/CredentialIcon.vue';
-import { getCredentialPermissions, IPermissions } from '@/permissions';
+import type { IPermissions } from '@/permissions';
+import { getCredentialPermissions } from '@/permissions';
 import dateformat from 'dateformat';
 import { mapStores } from 'pinia';
 import { useUIStore } from '@/stores/ui';
diff --git a/packages/editor-ui/src/components/CredentialEdit/AuthTypeSelector.vue b/packages/editor-ui/src/components/CredentialEdit/AuthTypeSelector.vue
index 1302e574966d4..a462bca0ba578 100644
--- a/packages/editor-ui/src/components/CredentialEdit/AuthTypeSelector.vue
+++ b/packages/editor-ui/src/components/CredentialEdit/AuthTypeSelector.vue
@@ -1,6 +1,6 @@
 <script setup lang="ts">
 import ParameterInputFull from '@/components/ParameterInputFull.vue';
-import { IUpdateInformation, NodeAuthenticationOption } from '@/Interface';
+import type { IUpdateInformation, NodeAuthenticationOption } from '@/Interface';
 import { useNDVStore } from '@/stores/ndv';
 import { useNodeTypesStore } from '@/stores/nodeTypes';
 import {
@@ -9,7 +9,7 @@ import {
 	getNodeAuthOptions,
 	isAuthRelatedParameter,
 } from '@/utils';
-import { INodeProperties, INodeTypeDescription, NodeParameterValue } from 'n8n-workflow';
+import type { INodeProperties, INodeTypeDescription, NodeParameterValue } from 'n8n-workflow';
 import { computed, onMounted, ref } from 'vue';
 import Vue from 'vue';
 
diff --git a/packages/editor-ui/src/components/CredentialEdit/CredentialConfig.vue b/packages/editor-ui/src/components/CredentialEdit/CredentialConfig.vue
index c94fcba3c114c..8d173f4506c0a 100644
--- a/packages/editor-ui/src/components/CredentialEdit/CredentialConfig.vue
+++ b/packages/editor-ui/src/components/CredentialEdit/CredentialConfig.vue
@@ -128,7 +128,7 @@
 </template>
 
 <script lang="ts">
-import { ICredentialType, INodeTypeDescription } from 'n8n-workflow';
+import type { ICredentialType, INodeTypeDescription } from 'n8n-workflow';
 import { getAppNameFromCredType, isCommunityPackageName } from '@/utils';
 
 import Banner from '../Banner.vue';
@@ -137,7 +137,7 @@ import CredentialInputs from './CredentialInputs.vue';
 import OauthButton from './OauthButton.vue';
 import { addCredentialTranslation } from '@/plugins/i18n';
 import { BUILTIN_CREDENTIALS_DOCS_URL, DOCS_DOMAIN, EnterpriseEditionFeature } from '@/constants';
-import { IPermissions } from '@/permissions';
+import type { IPermissions } from '@/permissions';
 import { mapStores } from 'pinia';
 import { useUIStore } from '@/stores/ui';
 import { useWorkflowsStore } from '@/stores/workflows';
@@ -145,7 +145,7 @@ import { useRootStore } from '@/stores/n8nRootStore';
 import { useNDVStore } from '@/stores/ndv';
 import { useCredentialsStore } from '@/stores/credentials';
 import { useNodeTypesStore } from '@/stores/nodeTypes';
-import { ICredentialsResponse } from '@/Interface';
+import type { ICredentialsResponse } from '@/Interface';
 import AuthTypeSelector from '@/components/CredentialEdit/AuthTypeSelector.vue';
 import GoogleAuthButton from './GoogleAuthButton.vue';
 import Vue from 'vue';
diff --git a/packages/editor-ui/src/components/CredentialEdit/CredentialEdit.vue b/packages/editor-ui/src/components/CredentialEdit/CredentialEdit.vue
index 5f37e2b0bdc10..f7b6f816090d3 100644
--- a/packages/editor-ui/src/components/CredentialEdit/CredentialEdit.vue
+++ b/packages/editor-ui/src/components/CredentialEdit/CredentialEdit.vue
@@ -113,7 +113,7 @@ import Vue from 'vue';
 
 import type { ICredentialsResponse, IUser, NewCredentialsModal } from '@/Interface';
 
-import {
+import type {
 	CredentialInformation,
 	ICredentialDataDecryptedObject,
 	ICredentialNodeAccess,
@@ -125,8 +125,8 @@ import {
 	INodeProperties,
 	INodeTypeDescription,
 	ITelemetryTrackProperties,
-	NodeHelpers,
 } from 'n8n-workflow';
+import { NodeHelpers } from 'n8n-workflow';
 import CredentialIcon from '../CredentialIcon.vue';
 
 import mixins from 'vue-typed-mixins';
@@ -140,10 +140,12 @@ import SaveButton from '../SaveButton.vue';
 import Modal from '../Modal.vue';
 import InlineNameEdit from '../InlineNameEdit.vue';
 import { CREDENTIAL_EDIT_MODAL_KEY, EnterpriseEditionFeature } from '@/constants';
-import { IDataObject } from 'n8n-workflow';
+import type { IDataObject } from 'n8n-workflow';
 import FeatureComingSoon from '../FeatureComingSoon.vue';
-import { getCredentialPermissions, IPermissions } from '@/permissions';
-import { createEventBus, IMenuItem } from 'n8n-design-system';
+import type { IPermissions } from '@/permissions';
+import { getCredentialPermissions } from '@/permissions';
+import type { IMenuItem } from 'n8n-design-system';
+import { createEventBus } from 'n8n-design-system';
 import { mapStores } from 'pinia';
 import { useUIStore } from '@/stores/ui';
 import { useSettingsStore } from '@/stores/settings';
diff --git a/packages/editor-ui/src/components/CredentialEdit/CredentialInfo.vue b/packages/editor-ui/src/components/CredentialEdit/CredentialInfo.vue
index 0e086633e5d75..bb798284fc343 100644
--- a/packages/editor-ui/src/components/CredentialEdit/CredentialInfo.vue
+++ b/packages/editor-ui/src/components/CredentialEdit/CredentialInfo.vue
@@ -71,7 +71,7 @@
 import { defineComponent } from 'vue';
 
 import TimeAgo from '../TimeAgo.vue';
-import { INodeTypeDescription } from 'n8n-workflow';
+import type { INodeTypeDescription } from 'n8n-workflow';
 
 export default defineComponent({
 	name: 'CredentialInfo',
diff --git a/packages/editor-ui/src/components/CredentialEdit/CredentialInputs.vue b/packages/editor-ui/src/components/CredentialEdit/CredentialInputs.vue
index 9b7b01deca7f0..fd471e5f5735d 100644
--- a/packages/editor-ui/src/components/CredentialEdit/CredentialInputs.vue
+++ b/packages/editor-ui/src/components/CredentialEdit/CredentialInputs.vue
@@ -25,8 +25,8 @@
 
 <script lang="ts">
 import { defineComponent } from 'vue';
-import { IParameterLabel } from 'n8n-workflow';
-import { IUpdateInformation } from '@/Interface';
+import type { IParameterLabel } from 'n8n-workflow';
+import type { IUpdateInformation } from '@/Interface';
 import ParameterInputExpanded from '../ParameterInputExpanded.vue';
 
 export default defineComponent({
diff --git a/packages/editor-ui/src/components/CredentialEdit/CredentialSharing.ee.vue b/packages/editor-ui/src/components/CredentialEdit/CredentialSharing.ee.vue
index 5bea9fa37d62f..bf2bc27d46e9e 100644
--- a/packages/editor-ui/src/components/CredentialEdit/CredentialSharing.ee.vue
+++ b/packages/editor-ui/src/components/CredentialEdit/CredentialSharing.ee.vue
@@ -80,7 +80,8 @@
 </template>
 
 <script lang="ts">
-import { IUser, IUserListAction, UIState } from '@/Interface';
+import type { IUser, IUserListAction } from '@/Interface';
+import { UIState } from '@/Interface';
 import mixins from 'vue-typed-mixins';
 import { showMessage } from '@/mixins/showMessage';
 import { mapStores } from 'pinia';
diff --git a/packages/editor-ui/src/components/CredentialIcon.vue b/packages/editor-ui/src/components/CredentialIcon.vue
index 593e9dcbecdc7..5041d365efff3 100644
--- a/packages/editor-ui/src/components/CredentialIcon.vue
+++ b/packages/editor-ui/src/components/CredentialIcon.vue
@@ -10,7 +10,7 @@
 import { useCredentialsStore } from '@/stores/credentials';
 import { useRootStore } from '@/stores/n8nRootStore';
 import { useNodeTypesStore } from '@/stores/nodeTypes';
-import { ICredentialType, INodeTypeDescription } from 'n8n-workflow';
+import type { ICredentialType, INodeTypeDescription } from 'n8n-workflow';
 import { mapStores } from 'pinia';
 import { defineComponent } from 'vue';
 
diff --git a/packages/editor-ui/src/components/CredentialsSelect.vue b/packages/editor-ui/src/components/CredentialsSelect.vue
index bd5663017ab4b..7820cfd47500c 100644
--- a/packages/editor-ui/src/components/CredentialsSelect.vue
+++ b/packages/editor-ui/src/components/CredentialsSelect.vue
@@ -55,13 +55,13 @@
 </template>
 
 <script lang="ts">
-import { ICredentialType } from 'n8n-workflow';
+import type { ICredentialType } from 'n8n-workflow';
 import Vue, { defineComponent } from 'vue';
 import ScopesNotice from '@/components/ScopesNotice.vue';
 import NodeCredentials from '@/components/NodeCredentials.vue';
 import { mapStores } from 'pinia';
 import { useCredentialsStore } from '@/stores/credentials';
-import { N8nSelect } from 'n8n-design-system';
+import type { N8nSelect } from 'n8n-design-system';
 
 type N8nSelectRef = InstanceType<typeof N8nSelect>;
 
diff --git a/packages/editor-ui/src/components/DeleteUserModal.vue b/packages/editor-ui/src/components/DeleteUserModal.vue
index ba21d42ae6021..2b644b1d11512 100644
--- a/packages/editor-ui/src/components/DeleteUserModal.vue
+++ b/packages/editor-ui/src/components/DeleteUserModal.vue
@@ -74,7 +74,7 @@ import mixins from 'vue-typed-mixins';
 
 import { showMessage } from '@/mixins/showMessage';
 import Modal from './Modal.vue';
-import { IUser } from '../Interface';
+import type { IUser } from '../Interface';
 import { mapStores } from 'pinia';
 import { useUsersStore } from '@/stores/users';
 import { createEventBus } from '@/event-bus';
diff --git a/packages/editor-ui/src/components/Draggable.vue b/packages/editor-ui/src/components/Draggable.vue
index a92f3a2490229..ce5c9ea0c48ff 100644
--- a/packages/editor-ui/src/components/Draggable.vue
+++ b/packages/editor-ui/src/components/Draggable.vue
@@ -16,7 +16,7 @@
 </template>
 
 <script lang="ts">
-import { XYPosition } from '@/Interface';
+import type { XYPosition } from '@/Interface';
 import { useNDVStore } from '@/stores/ndv';
 import { mapStores } from 'pinia';
 import { defineComponent } from 'vue';
diff --git a/packages/editor-ui/src/components/DuplicateWorkflowDialog.vue b/packages/editor-ui/src/components/DuplicateWorkflowDialog.vue
index 2c8e65d4309e3..653030aec09c3 100644
--- a/packages/editor-ui/src/components/DuplicateWorkflowDialog.vue
+++ b/packages/editor-ui/src/components/DuplicateWorkflowDialog.vue
@@ -59,8 +59,9 @@ import Modal from './Modal.vue';
 import { mapStores } from 'pinia';
 import { useSettingsStore } from '@/stores/settings';
 import { useWorkflowsStore } from '@/stores/workflows';
-import { IWorkflowDataUpdate } from '@/Interface';
-import { getWorkflowPermissions, IPermissions } from '@/permissions';
+import type { IWorkflowDataUpdate } from '@/Interface';
+import type { IPermissions } from '@/permissions';
+import { getWorkflowPermissions } from '@/permissions';
 import { useUsersStore } from '@/stores/users';
 import { createEventBus } from '@/event-bus';
 import { useCredentialsStore } from '@/stores';
diff --git a/packages/editor-ui/src/components/EnterpriseEdition.ee.vue b/packages/editor-ui/src/components/EnterpriseEdition.ee.vue
index 5336d02244fa5..5e73ce911a3d3 100644
--- a/packages/editor-ui/src/components/EnterpriseEdition.ee.vue
+++ b/packages/editor-ui/src/components/EnterpriseEdition.ee.vue
@@ -7,7 +7,7 @@
 
 <script lang="ts">
 import { defineComponent } from 'vue';
-import { EnterpriseEditionFeature } from '@/constants';
+import type { EnterpriseEditionFeature } from '@/constants';
 import { mapStores } from 'pinia';
 import { useSettingsStore } from '@/stores/settings';
 
diff --git a/packages/editor-ui/src/components/Error/NodeErrorView.vue b/packages/editor-ui/src/components/Error/NodeErrorView.vue
index c04c6209f7a34..3386d4996923f 100644
--- a/packages/editor-ui/src/components/Error/NodeErrorView.vue
+++ b/packages/editor-ui/src/components/Error/NodeErrorView.vue
@@ -126,7 +126,7 @@ import mixins from 'vue-typed-mixins';
 import { MAX_DISPLAY_DATA_SIZE } from '@/constants';
 import { INodeUi } from '@/Interface';
 
-import { INodeProperties, INodePropertyCollection, INodePropertyOptions } from 'n8n-workflow';
+import type { INodeProperties, INodePropertyCollection, INodePropertyOptions } from 'n8n-workflow';
 import { sanitizeHtml } from '@/utils';
 import { mapStores } from 'pinia';
 import { useNDVStore } from '@/stores/ndv';
diff --git a/packages/editor-ui/src/components/ExecutionsList.vue b/packages/editor-ui/src/components/ExecutionsList.vue
index cb677762bcf6a..b5db196fb6b3f 100644
--- a/packages/editor-ui/src/components/ExecutionsList.vue
+++ b/packages/editor-ui/src/components/ExecutionsList.vue
@@ -274,7 +274,7 @@ import { VIEWS, WAIT_TIME_UNLIMITED } from '@/constants';
 import { genericHelpers } from '@/mixins/genericHelpers';
 import { executionHelpers } from '@/mixins/executionsHelpers';
 import { showMessage } from '@/mixins/showMessage';
-import {
+import type {
 	IExecutionsCurrentSummaryExtended,
 	IExecutionDeleteFilter,
 	IExecutionsListResponse,
diff --git a/packages/editor-ui/src/components/ExecutionsView/ExecutionCard.vue b/packages/editor-ui/src/components/ExecutionsView/ExecutionCard.vue
index 473df7d31a093..7778795f91c2e 100644
--- a/packages/editor-ui/src/components/ExecutionsView/ExecutionCard.vue
+++ b/packages/editor-ui/src/components/ExecutionsView/ExecutionCard.vue
@@ -81,9 +81,10 @@
 </template>
 
 <script lang="ts">
-import { IExecutionsSummary } from '@/Interface';
+import type { IExecutionsSummary } from '@/Interface';
 import mixins from 'vue-typed-mixins';
-import { executionHelpers, IExecutionUIData } from '@/mixins/executionsHelpers';
+import type { IExecutionUIData } from '@/mixins/executionsHelpers';
+import { executionHelpers } from '@/mixins/executionsHelpers';
 import { VIEWS } from '@/constants';
 import { showMessage } from '@/mixins/showMessage';
 import ExecutionTime from '@/components/ExecutionTime.vue';
diff --git a/packages/editor-ui/src/components/ExecutionsView/ExecutionPreview.vue b/packages/editor-ui/src/components/ExecutionsView/ExecutionPreview.vue
index 50c328b275b14..c4f8c7c11e049 100644
--- a/packages/editor-ui/src/components/ExecutionsView/ExecutionPreview.vue
+++ b/packages/editor-ui/src/components/ExecutionsView/ExecutionPreview.vue
@@ -129,7 +129,8 @@
 import mixins from 'vue-typed-mixins';
 import { showMessage } from '@/mixins/showMessage';
 import WorkflowPreview from '@/components/WorkflowPreview.vue';
-import { executionHelpers, IExecutionUIData } from '@/mixins/executionsHelpers';
+import type { IExecutionUIData } from '@/mixins/executionsHelpers';
+import { executionHelpers } from '@/mixins/executionsHelpers';
 import { VIEWS } from '@/constants';
 import { mapStores } from 'pinia';
 import { useUIStore } from '@/stores/ui';
diff --git a/packages/editor-ui/src/components/ExecutionsView/ExecutionsInfoAccordion.vue b/packages/editor-ui/src/components/ExecutionsView/ExecutionsInfoAccordion.vue
index d899e89698c54..105daef49d918 100644
--- a/packages/editor-ui/src/components/ExecutionsView/ExecutionsInfoAccordion.vue
+++ b/packages/editor-ui/src/components/ExecutionsView/ExecutionsInfoAccordion.vue
@@ -42,7 +42,8 @@ import { useUIStore } from '@/stores/ui';
 import { useWorkflowsStore } from '@/stores/workflows';
 import { mapStores } from 'pinia';
 import { PLACEHOLDER_EMPTY_WORKFLOW_ID, WORKFLOW_SETTINGS_MODAL_KEY } from '@/constants';
-import { deepCopy, IWorkflowSettings } from 'n8n-workflow';
+import type { IWorkflowSettings } from 'n8n-workflow';
+import { deepCopy } from 'n8n-workflow';
 import mixins from 'vue-typed-mixins';
 import { workflowHelpers } from '@/mixins/workflowHelpers';
 
diff --git a/packages/editor-ui/src/components/ExecutionsView/ExecutionsList.vue b/packages/editor-ui/src/components/ExecutionsView/ExecutionsList.vue
index 3069e844d87e1..45e4d333ef9c8 100644
--- a/packages/editor-ui/src/components/ExecutionsView/ExecutionsList.vue
+++ b/packages/editor-ui/src/components/ExecutionsView/ExecutionsList.vue
@@ -32,26 +32,26 @@ import {
 	VIEWS,
 	WEBHOOK_NODE_TYPE,
 } from '@/constants';
-import {
+import type {
 	ExecutionFilterType,
 	IExecutionsListResponse,
 	INodeUi,
 	ITag,
 	IWorkflowDb,
 } from '@/Interface';
-import {
+import type {
 	IExecutionsSummary,
 	IConnection,
 	IConnections,
 	IDataObject,
 	INodeTypeDescription,
 	INodeTypeNameVersion,
-	NodeHelpers,
 } from 'n8n-workflow';
+import { NodeHelpers } from 'n8n-workflow';
 import mixins from 'vue-typed-mixins';
 import { showMessage } from '@/mixins/showMessage';
 import { v4 as uuid } from 'uuid';
-import { Route } from 'vue-router';
+import type { Route } from 'vue-router';
 import { executionHelpers } from '@/mixins/executionsHelpers';
 import { range as _range } from 'lodash-es';
 import { debounceHelper } from '@/mixins/debounce';
diff --git a/packages/editor-ui/src/components/ExecutionsView/ExecutionsSidebar.vue b/packages/editor-ui/src/components/ExecutionsView/ExecutionsSidebar.vue
index ad0d7803dd514..df91780f8b888 100644
--- a/packages/editor-ui/src/components/ExecutionsView/ExecutionsSidebar.vue
+++ b/packages/editor-ui/src/components/ExecutionsView/ExecutionsSidebar.vue
@@ -69,13 +69,13 @@ import ExecutionsInfoAccordion from '@/components/ExecutionsView/ExecutionsInfoA
 import ExecutionFilter from '@/components/ExecutionFilter.vue';
 import { VIEWS } from '@/constants';
 import type { IExecutionsSummary } from 'n8n-workflow';
-import { Route } from 'vue-router';
+import type { Route } from 'vue-router';
 import { defineComponent } from 'vue';
-import { PropType } from 'vue';
+import type { PropType } from 'vue';
 import { mapStores } from 'pinia';
 import { useUIStore } from '@/stores/ui';
 import { useWorkflowsStore } from '@/stores/workflows';
-import { ExecutionFilterType } from '@/Interface';
+import type { ExecutionFilterType } from '@/Interface';
 
 type ExecutionCardRef = InstanceType<typeof ExecutionCard>;
 
diff --git a/packages/editor-ui/src/components/ExpressionEdit.vue b/packages/editor-ui/src/components/ExpressionEdit.vue
index 32daae6fda8bb..a8d896cee968f 100644
--- a/packages/editor-ui/src/components/ExpressionEdit.vue
+++ b/packages/editor-ui/src/components/ExpressionEdit.vue
@@ -78,7 +78,7 @@ import ExpressionEditorModalInput from '@/components/ExpressionEditorModal/Expre
 import ExpressionEditorModalOutput from '@/components/ExpressionEditorModal/ExpressionEditorModalOutput.vue';
 import VariableSelector from '@/components/VariableSelector.vue';
 
-import { IVariableItemSelected } from '@/Interface';
+import type { IVariableItemSelected } from '@/Interface';
 
 import { externalHooks } from '@/mixins/externalHooks';
 import { genericHelpers } from '@/mixins/genericHelpers';
diff --git a/packages/editor-ui/src/components/FeatureComingSoon.vue b/packages/editor-ui/src/components/FeatureComingSoon.vue
index a34205cac75db..637f1028ecbae 100644
--- a/packages/editor-ui/src/components/FeatureComingSoon.vue
+++ b/packages/editor-ui/src/components/FeatureComingSoon.vue
@@ -29,7 +29,7 @@
 </template>
 
 <script lang="ts">
-import { IFakeDoor } from '@/Interface';
+import type { IFakeDoor } from '@/Interface';
 import { useRootStore } from '@/stores/n8nRootStore';
 import { useSettingsStore } from '@/stores/settings';
 import { useUIStore } from '@/stores/ui';
diff --git a/packages/editor-ui/src/components/FixedCollectionParameter.vue b/packages/editor-ui/src/components/FixedCollectionParameter.vue
index 4d47f6c5cdcd3..b817034551054 100644
--- a/packages/editor-ui/src/components/FixedCollectionParameter.vue
+++ b/packages/editor-ui/src/components/FixedCollectionParameter.vue
@@ -116,13 +116,13 @@ import { defineComponent } from 'vue';
 import type { Component, PropType } from 'vue';
 import type { IUpdateInformation } from '@/Interface';
 
-import { deepCopy, isINodePropertyCollectionList } from 'n8n-workflow';
 import type {
 	INodeParameters,
 	INodeProperties,
 	INodePropertyCollection,
 	NodeParameterValue,
 } from 'n8n-workflow';
+import { deepCopy, isINodePropertyCollectionList } from 'n8n-workflow';
 
 import { get } from 'lodash-es';
 
diff --git a/packages/editor-ui/src/components/HoverableNodeIcon.vue b/packages/editor-ui/src/components/HoverableNodeIcon.vue
index 3507547aab365..5b6e5a634cc9c 100644
--- a/packages/editor-ui/src/components/HoverableNodeIcon.vue
+++ b/packages/editor-ui/src/components/HoverableNodeIcon.vue
@@ -42,8 +42,8 @@
 <script lang="ts">
 import { defineComponent } from 'vue';
 
-import { ITemplatesNode } from '@/Interface';
-import { INodeTypeDescription } from 'n8n-workflow';
+import type { ITemplatesNode } from '@/Interface';
+import type { INodeTypeDescription } from 'n8n-workflow';
 import { mapStores } from 'pinia';
 import { useRootStore } from '@/stores/n8nRootStore';
 
diff --git a/packages/editor-ui/src/components/HtmlEditor/HtmlEditor.vue b/packages/editor-ui/src/components/HtmlEditor/HtmlEditor.vue
index 133c9be7514e0..0d6488d9b8ad2 100644
--- a/packages/editor-ui/src/components/HtmlEditor/HtmlEditor.vue
+++ b/packages/editor-ui/src/components/HtmlEditor/HtmlEditor.vue
@@ -18,7 +18,9 @@ import {
 	indentOnInput,
 	LanguageSupport,
 } from '@codemirror/language';
-import { EditorState, Extension } from '@codemirror/state';
+import type { Extension } from '@codemirror/state';
+import { EditorState } from '@codemirror/state';
+import type { ViewUpdate } from '@codemirror/view';
 import {
 	dropCursor,
 	EditorView,
@@ -26,7 +28,6 @@ import {
 	highlightActiveLineGutter,
 	keymap,
 	lineNumbers,
-	ViewUpdate,
 } from '@codemirror/view';
 
 import { n8nCompletionSources } from '@/plugins/codemirror/completions/addCompletions';
diff --git a/packages/editor-ui/src/components/ImportCurlModal.vue b/packages/editor-ui/src/components/ImportCurlModal.vue
index 4baa06600ebdb..03b30cbd258d6 100644
--- a/packages/editor-ui/src/components/ImportCurlModal.vue
+++ b/packages/editor-ui/src/components/ImportCurlModal.vue
@@ -48,7 +48,7 @@ import {
 } from '../constants';
 import { showMessage } from '@/mixins/showMessage';
 import mixins from 'vue-typed-mixins';
-import { INodeUi } from '@/Interface';
+import type { INodeUi } from '@/Interface';
 import { mapStores } from 'pinia';
 import { useUIStore } from '@/stores/ui';
 import { useNDVStore } from '@/stores/ndv';
diff --git a/packages/editor-ui/src/components/InputPanel.vue b/packages/editor-ui/src/components/InputPanel.vue
index c52d2a1e666cf..67622724a4686 100644
--- a/packages/editor-ui/src/components/InputPanel.vue
+++ b/packages/editor-ui/src/components/InputPanel.vue
@@ -131,8 +131,8 @@
 </template>
 
 <script lang="ts">
-import { INodeUi } from '@/Interface';
-import { IConnectedNode, INodeTypeDescription, Workflow } from 'n8n-workflow';
+import type { INodeUi } from '@/Interface';
+import type { IConnectedNode, INodeTypeDescription, Workflow } from 'n8n-workflow';
 import RunData from './RunData.vue';
 import { workflowHelpers } from '@/mixins/workflowHelpers';
 import mixins from 'vue-typed-mixins';
diff --git a/packages/editor-ui/src/components/InviteUsersModal.vue b/packages/editor-ui/src/components/InviteUsersModal.vue
index 7e4422826c322..a6fca050e841d 100644
--- a/packages/editor-ui/src/components/InviteUsersModal.vue
+++ b/packages/editor-ui/src/components/InviteUsersModal.vue
@@ -69,7 +69,7 @@ import mixins from 'vue-typed-mixins';
 import { showMessage } from '@/mixins/showMessage';
 import { copyPaste } from '@/mixins/copyPaste';
 import Modal from './Modal.vue';
-import { IFormInputs, IInviteResponse, IUser } from '@/Interface';
+import type { IFormInputs, IInviteResponse, IUser } from '@/Interface';
 import { VALID_EMAIL_REGEX, INVITE_USER_MODAL_KEY } from '@/constants';
 import { ROLE } from '@/utils';
 import { mapStores } from 'pinia';
diff --git a/packages/editor-ui/src/components/MainHeader/MainHeader.vue b/packages/editor-ui/src/components/MainHeader/MainHeader.vue
index d4ab9e107fffe..66a7bb111522c 100644
--- a/packages/editor-ui/src/components/MainHeader/MainHeader.vue
+++ b/packages/editor-ui/src/components/MainHeader/MainHeader.vue
@@ -25,9 +25,9 @@ import {
 	STICKY_NODE_TYPE,
 	VIEWS,
 } from '@/constants';
-import { IExecutionsSummary, INodeUi, ITabBarItem } from '@/Interface';
+import type { IExecutionsSummary, INodeUi, ITabBarItem } from '@/Interface';
 import { workflowHelpers } from '@/mixins/workflowHelpers';
-import { Route } from 'vue-router';
+import type { Route } from 'vue-router';
 import { mapStores } from 'pinia';
 import { useUIStore } from '@/stores/ui';
 import { useNDVStore } from '@/stores/ndv';
diff --git a/packages/editor-ui/src/components/MainHeader/WorkflowDetails.vue b/packages/editor-ui/src/components/MainHeader/WorkflowDetails.vue
index a3980e16372ba..17f07f54cfd75 100644
--- a/packages/editor-ui/src/components/MainHeader/WorkflowDetails.vue
+++ b/packages/editor-ui/src/components/MainHeader/WorkflowDetails.vue
@@ -145,7 +145,7 @@ import SaveButton from '@/components/SaveButton.vue';
 import TagsDropdown from '@/components/TagsDropdown.vue';
 import InlineTextEdit from '@/components/InlineTextEdit.vue';
 import BreakpointsObserver from '@/components/BreakpointsObserver.vue';
-import { IUser, IWorkflowDataUpdate, IWorkflowDb, IWorkflowToShare } from '@/Interface';
+import type { IUser, IWorkflowDataUpdate, IWorkflowDb, IWorkflowToShare } from '@/Interface';
 
 import { saveAs } from 'file-saver';
 import { useTitleChange } from '@/composables/useTitleChange';
@@ -156,7 +156,8 @@ import { useSettingsStore } from '@/stores/settings';
 import { useWorkflowsStore } from '@/stores/workflows';
 import { useRootStore } from '@/stores/n8nRootStore';
 import { useTagsStore } from '@/stores/tags';
-import { getWorkflowPermissions, IPermissions } from '@/permissions';
+import type { IPermissions } from '@/permissions';
+import { getWorkflowPermissions } from '@/permissions';
 import { useUsersStore } from '@/stores/users';
 import { useUsageStore } from '@/stores/usage';
 import { createEventBus } from '@/event-bus';
diff --git a/packages/editor-ui/src/components/MainSidebar.vue b/packages/editor-ui/src/components/MainSidebar.vue
index dc412e48efefd..d3c3cff70179e 100644
--- a/packages/editor-ui/src/components/MainSidebar.vue
+++ b/packages/editor-ui/src/components/MainSidebar.vue
@@ -91,7 +91,7 @@
 </template>
 
 <script lang="ts">
-import { IExecutionResponse, IMenuItem, IVersion } from '../Interface';
+import type { IExecutionResponse, IMenuItem, IVersion } from '../Interface';
 
 import GiftNotificationIcon from './GiftNotificationIcon.vue';
 import WorkflowSettings from '@/components/WorkflowSettings.vue';
diff --git a/packages/editor-ui/src/components/MultipleParameter.vue b/packages/editor-ui/src/components/MultipleParameter.vue
index 7934cb2ddc2f1..2202d49e66559 100644
--- a/packages/editor-ui/src/components/MultipleParameter.vue
+++ b/packages/editor-ui/src/components/MultipleParameter.vue
@@ -87,7 +87,8 @@
 import { defineComponent } from 'vue';
 import type { PropType } from 'vue';
 import type { IUpdateInformation } from '@/Interface';
-import { deepCopy, INodeParameters, INodeProperties } from 'n8n-workflow';
+import type { INodeParameters, INodeProperties } from 'n8n-workflow';
+import { deepCopy } from 'n8n-workflow';
 import CollectionParameter from '@/components/CollectionParameter.vue';
 import ParameterInputFull from '@/components/ParameterInputFull.vue';
 
diff --git a/packages/editor-ui/src/components/NDVDraggablePanels.vue b/packages/editor-ui/src/components/NDVDraggablePanels.vue
index 25fd9662404ca..5334ee9ea37db 100644
--- a/packages/editor-ui/src/components/NDVDraggablePanels.vue
+++ b/packages/editor-ui/src/components/NDVDraggablePanels.vue
@@ -37,10 +37,11 @@
 </template>
 
 <script lang="ts">
-import Vue, { PropType } from 'vue';
+import type { PropType } from 'vue';
+import Vue from 'vue';
 import { get } from 'lodash-es';
 
-import { INodeTypeDescription } from 'n8n-workflow';
+import type { INodeTypeDescription } from 'n8n-workflow';
 import PanelDragButton from './PanelDragButton.vue';
 
 import { LOCAL_STORAGE_MAIN_PANEL_RELATIVE_WIDTH, MAIN_NODE_PANEL_WIDTH } from '@/constants';
diff --git a/packages/editor-ui/src/components/Node.vue b/packages/editor-ui/src/components/Node.vue
index 337dac50fe6c7..f4998a070b9b3 100644
--- a/packages/editor-ui/src/components/Node.vue
+++ b/packages/editor-ui/src/components/Node.vue
@@ -182,7 +182,8 @@ import { nodeHelpers } from '@/mixins/nodeHelpers';
 import { workflowHelpers } from '@/mixins/workflowHelpers';
 import { pinData } from '@/mixins/pinData';
 
-import { IDataObject, INodeTypeDescription, ITaskData, NodeHelpers } from 'n8n-workflow';
+import type { INodeTypeDescription, ITaskData } from 'n8n-workflow';
+import { IDataObject, NodeHelpers } from 'n8n-workflow';
 
 import NodeIcon from '@/components/NodeIcon.vue';
 import TitledList from '@/components/TitledList.vue';
@@ -191,12 +192,8 @@ import mixins from 'vue-typed-mixins';
 
 import { get } from 'lodash-es';
 import { getStyleTokenValue, getTriggerNodeServiceName } from '@/utils';
-import {
-	IExecutionsSummary,
-	INodeUi,
-	INodeUpdatePropertiesInformation,
-	XYPosition,
-} from '@/Interface';
+import type { IExecutionsSummary, INodeUi, XYPosition } from '@/Interface';
+import { INodeUpdatePropertiesInformation } from '@/Interface';
 import { debounceHelper } from '@/mixins/debounce';
 import { mapStores } from 'pinia';
 import { useUIStore } from '@/stores/ui';
diff --git a/packages/editor-ui/src/components/Node/NodeCreator/ActionItem.vue b/packages/editor-ui/src/components/Node/NodeCreator/ActionItem.vue
index 15c18a2e1c4df..6d059d9387e61 100644
--- a/packages/editor-ui/src/components/Node/NodeCreator/ActionItem.vue
+++ b/packages/editor-ui/src/components/Node/NodeCreator/ActionItem.vue
@@ -23,9 +23,9 @@
 
 <script setup lang="ts">
 import { reactive, computed, toRefs, getCurrentInstance } from 'vue';
-import { INodeTypeDescription, INodeActionTypeDescription } from 'n8n-workflow';
+import type { INodeTypeDescription, INodeActionTypeDescription } from 'n8n-workflow';
 import { getNewNodePosition, NODE_SIZE } from '@/utils/nodeViewUtils';
-import { IUpdateInformation } from '@/Interface';
+import type { IUpdateInformation } from '@/Interface';
 import NodeIcon from '@/components/NodeIcon.vue';
 import { useNodeCreatorStore } from '@/stores/nodeCreator';
 
diff --git a/packages/editor-ui/src/components/Node/NodeCreator/CategorizedItems.vue b/packages/editor-ui/src/components/Node/NodeCreator/CategorizedItems.vue
index 489834064ab7e..31cc8bd698c45 100644
--- a/packages/editor-ui/src/components/Node/NodeCreator/CategorizedItems.vue
+++ b/packages/editor-ui/src/components/Node/NodeCreator/CategorizedItems.vue
@@ -96,10 +96,10 @@ import {
 	nextTick,
 } from 'vue';
 import { camelCase } from 'lodash-es';
-import { INodeTypeDescription } from 'n8n-workflow';
+import type { INodeTypeDescription } from 'n8n-workflow';
 import ItemIterator from './ItemIterator.vue';
 import SearchBar from './SearchBar.vue';
-import {
+import type {
 	INodeCreateElement,
 	ISubcategoryItemProps,
 	ICategoryItemProps,
@@ -108,7 +108,7 @@ import {
 	CategoryCreateElement,
 	INodeItemProps,
 } from '@/Interface';
-import { BaseTextKey } from '@/plugins/i18n';
+import type { BaseTextKey } from '@/plugins/i18n';
 import { sublimeSearch, matchesNodeType, matchesSelectType } from '@/utils';
 import { useWorkflowsStore } from '@/stores/workflows';
 import { useRootStore } from '@/stores/n8nRootStore';
diff --git a/packages/editor-ui/src/components/Node/NodeCreator/CategoryItem.vue b/packages/editor-ui/src/components/Node/NodeCreator/CategoryItem.vue
index 9dc5eba3fb0d1..d2167b6c0b80c 100644
--- a/packages/editor-ui/src/components/Node/NodeCreator/CategoryItem.vue
+++ b/packages/editor-ui/src/components/Node/NodeCreator/CategoryItem.vue
@@ -7,7 +7,7 @@
 </template>
 
 <script lang="ts" setup>
-import { ICategoryItemProps } from '@/Interface';
+import type { ICategoryItemProps } from '@/Interface';
 
 export interface Props {
 	item: ICategoryItemProps;
diff --git a/packages/editor-ui/src/components/Node/NodeCreator/ItemIterator.vue b/packages/editor-ui/src/components/Node/NodeCreator/ItemIterator.vue
index 8889fb88b40bb..7228fb48136e1 100644
--- a/packages/editor-ui/src/components/Node/NodeCreator/ItemIterator.vue
+++ b/packages/editor-ui/src/components/Node/NodeCreator/ItemIterator.vue
@@ -57,7 +57,7 @@
 </template>
 
 <script setup lang="ts">
-import { INodeCreateElement, NodeCreateElement } from '@/Interface';
+import type { INodeCreateElement, NodeCreateElement } from '@/Interface';
 import NodeItem from './NodeItem.vue';
 import SubcategoryItem from './SubcategoryItem.vue';
 import CategoryItem from './CategoryItem.vue';
diff --git a/packages/editor-ui/src/components/Node/NodeCreator/MainPanel.vue b/packages/editor-ui/src/components/Node/NodeCreator/MainPanel.vue
index 1837528ba94e9..4933d8909f8b0 100644
--- a/packages/editor-ui/src/components/Node/NodeCreator/MainPanel.vue
+++ b/packages/editor-ui/src/components/Node/NodeCreator/MainPanel.vue
@@ -79,12 +79,9 @@
 
 <script setup lang="ts">
 import { reactive, toRefs, getCurrentInstance, computed, onUnmounted, ref } from 'vue';
-import {
-	INodeTypeDescription,
-	INodeActionTypeDescription,
-	INodeTypeNameVersion,
-} from 'n8n-workflow';
-import {
+import type { INodeTypeDescription, INodeActionTypeDescription } from 'n8n-workflow';
+import { INodeTypeNameVersion } from 'n8n-workflow';
+import type {
 	INodeCreateElement,
 	NodeCreateElement,
 	IActionItemProps,
@@ -106,7 +103,7 @@ import CategorizedItems from './CategorizedItems.vue';
 import { useNodeCreatorStore } from '@/stores/nodeCreator';
 import { getCategoriesWithNodes, getCategorizedList } from '@/utils';
 import { useNodeTypesStore } from '@/stores/nodeTypes';
-import { BaseTextKey } from '@/plugins/i18n';
+import type { BaseTextKey } from '@/plugins/i18n';
 import NoResults from './NoResults.vue';
 import { useRootStore } from '@/stores/n8nRootStore';
 import useMainPanelView from './useMainPanelView';
diff --git a/packages/editor-ui/src/components/Node/NodeCreator/NodeItem.vue b/packages/editor-ui/src/components/Node/NodeCreator/NodeItem.vue
index 62dd517abc4fb..bb4acccec7c41 100644
--- a/packages/editor-ui/src/components/Node/NodeCreator/NodeItem.vue
+++ b/packages/editor-ui/src/components/Node/NodeCreator/NodeItem.vue
@@ -40,7 +40,7 @@
 
 <script setup lang="ts">
 import { reactive, computed, toRefs, getCurrentInstance } from 'vue';
-import { INodeTypeDescription } from 'n8n-workflow';
+import type { INodeTypeDescription } from 'n8n-workflow';
 
 import { getNewNodePosition, NODE_SIZE } from '@/utils/nodeViewUtils';
 import { isCommunityPackageName } from '@/utils';
diff --git a/packages/editor-ui/src/components/Node/NodeCreator/SearchBar.vue b/packages/editor-ui/src/components/Node/NodeCreator/SearchBar.vue
index 97f19c9d13a14..5e1c5ecea1b0d 100644
--- a/packages/editor-ui/src/components/Node/NodeCreator/SearchBar.vue
+++ b/packages/editor-ui/src/components/Node/NodeCreator/SearchBar.vue
@@ -25,7 +25,7 @@
 
 <script setup lang="ts">
 import { onMounted, reactive, toRefs, onBeforeUnmount } from 'vue';
-import { EventBus } from '@/event-bus';
+import type { EventBus } from '@/event-bus';
 import { useExternalHooks } from '@/composables';
 
 export interface Props {
diff --git a/packages/editor-ui/src/components/Node/NodeCreator/SubcategoryItem.vue b/packages/editor-ui/src/components/Node/NodeCreator/SubcategoryItem.vue
index 903b45cb3e38c..cd1dc00f58c8d 100644
--- a/packages/editor-ui/src/components/Node/NodeCreator/SubcategoryItem.vue
+++ b/packages/editor-ui/src/components/Node/NodeCreator/SubcategoryItem.vue
@@ -13,7 +13,7 @@
 </template>
 
 <script setup lang="ts">
-import { ISubcategoryItemProps } from '@/Interface';
+import type { ISubcategoryItemProps } from '@/Interface';
 import { camelCase } from 'lodash-es';
 import { computed } from 'vue';
 export interface Props {
diff --git a/packages/editor-ui/src/components/Node/NodeCreator/ViewItem.vue b/packages/editor-ui/src/components/Node/NodeCreator/ViewItem.vue
index b331301137922..66b24bc14eb24 100644
--- a/packages/editor-ui/src/components/Node/NodeCreator/ViewItem.vue
+++ b/packages/editor-ui/src/components/Node/NodeCreator/ViewItem.vue
@@ -21,7 +21,7 @@
 </template>
 
 <script setup lang="ts">
-import { ViewItemProps } from '@/Interface';
+import type { ViewItemProps } from '@/Interface';
 
 export interface Props {
 	view: ViewItemProps;
diff --git a/packages/editor-ui/src/components/NodeCredentials.vue b/packages/editor-ui/src/components/NodeCredentials.vue
index 796a83cda43f4..134a1d64d36d4 100644
--- a/packages/editor-ui/src/components/NodeCredentials.vue
+++ b/packages/editor-ui/src/components/NodeCredentials.vue
@@ -97,14 +97,14 @@
 </template>
 
 <script lang="ts">
-import { PropType } from 'vue';
-import {
+import type { PropType } from 'vue';
+import type {
 	ICredentialsResponse,
 	INodeUi,
 	INodeUpdatePropertiesInformation,
 	IUser,
 } from '@/Interface';
-import {
+import type {
 	ICredentialType,
 	INodeCredentialDescription,
 	INodeCredentialsDetails,
diff --git a/packages/editor-ui/src/components/NodeDetailsView.vue b/packages/editor-ui/src/components/NodeDetailsView.vue
index 5dd3ed32fd800..3b1f61035c60f 100644
--- a/packages/editor-ui/src/components/NodeDetailsView.vue
+++ b/packages/editor-ui/src/components/NodeDetailsView.vue
@@ -124,15 +124,15 @@
 </template>
 
 <script lang="ts">
-import {
+import type {
 	INodeConnections,
 	INodeTypeDescription,
 	IRunData,
 	IRunExecutionData,
 	Workflow,
-	jsonParse,
 } from 'n8n-workflow';
-import { IExecutionResponse, INodeUi, IUpdateInformation, TargetItem } from '@/Interface';
+import { jsonParse } from 'n8n-workflow';
+import type { IExecutionResponse, INodeUi, IUpdateInformation, TargetItem } from '@/Interface';
 
 import { externalHooks } from '@/mixins/externalHooks';
 import { nodeHelpers } from '@/mixins/nodeHelpers';
diff --git a/packages/editor-ui/src/components/NodeExecuteButton.vue b/packages/editor-ui/src/components/NodeExecuteButton.vue
index 490ddb21c1180..bd43cc2bc889a 100644
--- a/packages/editor-ui/src/components/NodeExecuteButton.vue
+++ b/packages/editor-ui/src/components/NodeExecuteButton.vue
@@ -19,8 +19,8 @@
 
 <script lang="ts">
 import { WEBHOOK_NODE_TYPE, MANUAL_TRIGGER_NODE_TYPE } from '@/constants';
-import { INodeUi } from '@/Interface';
-import { INodeTypeDescription } from 'n8n-workflow';
+import type { INodeUi } from '@/Interface';
+import type { INodeTypeDescription } from 'n8n-workflow';
 import mixins from 'vue-typed-mixins';
 import { workflowRun } from '@/mixins/workflowRun';
 import { pinData } from '@/mixins/pinData';
diff --git a/packages/editor-ui/src/components/NodeIcon.vue b/packages/editor-ui/src/components/NodeIcon.vue
index 71ab7776390fb..17428e4430dca 100644
--- a/packages/editor-ui/src/components/NodeIcon.vue
+++ b/packages/editor-ui/src/components/NodeIcon.vue
@@ -14,9 +14,9 @@
 </template>
 
 <script lang="ts">
-import { IVersionNode } from '@/Interface';
+import type { IVersionNode } from '@/Interface';
 import { useRootStore } from '@/stores/n8nRootStore';
-import { INodeTypeDescription } from 'n8n-workflow';
+import type { INodeTypeDescription } from 'n8n-workflow';
 import { mapStores } from 'pinia';
 import { defineComponent } from 'vue';
 
diff --git a/packages/editor-ui/src/components/NodeList.vue b/packages/editor-ui/src/components/NodeList.vue
index b041f21d525ce..39254c975e4cb 100644
--- a/packages/editor-ui/src/components/NodeList.vue
+++ b/packages/editor-ui/src/components/NodeList.vue
@@ -15,7 +15,7 @@
 <script lang="ts">
 import NodeIcon from '@/components/NodeIcon.vue';
 import { genericHelpers } from '@/mixins/genericHelpers';
-import { ITemplatesNode } from '@/Interface';
+import type { ITemplatesNode } from '@/Interface';
 import mixins from 'vue-typed-mixins';
 import { filterTemplateNodes } from '@/utils';
 export default mixins(genericHelpers).extend({
diff --git a/packages/editor-ui/src/components/NodeSettings.vue b/packages/editor-ui/src/components/NodeSettings.vue
index 65e678568aef9..4653b6c446a8a 100644
--- a/packages/editor-ui/src/components/NodeSettings.vue
+++ b/packages/editor-ui/src/components/NodeSettings.vue
@@ -157,23 +157,22 @@
 </template>
 
 <script lang="ts">
-import Vue, { PropType } from 'vue';
-import {
+import type { PropType } from 'vue';
+import Vue from 'vue';
+import type {
 	INodeTypeDescription,
 	INodeParameters,
 	INodeProperties,
-	NodeHelpers,
 	NodeParameterValue,
-	deepCopy,
 } from 'n8n-workflow';
-import {
-	ICredentialsResponse,
+import { NodeHelpers, deepCopy } from 'n8n-workflow';
+import type {
 	INodeUi,
 	INodeUpdatePropertiesInformation,
 	IUpdateInformation,
 	IUsedCredential,
-	IUser,
 } from '@/Interface';
+import { ICredentialsResponse, IUser } from '@/Interface';
 
 import {
 	COMMUNITY_NODES_INSTALLATION_DOCS_URL,
@@ -205,7 +204,7 @@ import { useHistoryStore } from '@/stores/history';
 import { RenameNodeCommand } from '@/models/history';
 import useWorkflowsEEStore from '@/stores/workflows.ee';
 import { useCredentialsStore } from '@/stores/credentials';
-import { EventBus } from '@/event-bus';
+import type { EventBus } from '@/event-bus';
 
 export default mixins(externalHooks, nodeHelpers).extend({
 	name: 'NodeSettings',
diff --git a/packages/editor-ui/src/components/NodeSettingsTabs.vue b/packages/editor-ui/src/components/NodeSettingsTabs.vue
index 977c9b98e5450..737a4527f0414 100644
--- a/packages/editor-ui/src/components/NodeSettingsTabs.vue
+++ b/packages/editor-ui/src/components/NodeSettingsTabs.vue
@@ -9,10 +9,10 @@ import {
 	COMMUNITY_NODES_INSTALLATION_DOCS_URL,
 	NPM_PACKAGE_DOCS_BASE_URL,
 } from '@/constants';
-import { INodeUi, ITab } from '@/Interface';
+import type { INodeUi, ITab } from '@/Interface';
 import { useNDVStore } from '@/stores/ndv';
 import { useWorkflowsStore } from '@/stores/workflows';
-import { INodeTypeDescription } from 'n8n-workflow';
+import type { INodeTypeDescription } from 'n8n-workflow';
 import { mapStores } from 'pinia';
 
 import mixins from 'vue-typed-mixins';
diff --git a/packages/editor-ui/src/components/NodeWebhooks.vue b/packages/editor-ui/src/components/NodeWebhooks.vue
index f6d8d34592cdd..9e50397f45529 100644
--- a/packages/editor-ui/src/components/NodeWebhooks.vue
+++ b/packages/editor-ui/src/components/NodeWebhooks.vue
@@ -58,7 +58,7 @@
 </template>
 
 <script lang="ts">
-import { INodeTypeDescription, IWebhookDescription } from 'n8n-workflow';
+import type { INodeTypeDescription, IWebhookDescription } from 'n8n-workflow';
 
 import { WEBHOOK_NODE_TYPE } from '@/constants';
 import { copyPaste } from '@/mixins/copyPaste';
diff --git a/packages/editor-ui/src/components/OutputPanel.vue b/packages/editor-ui/src/components/OutputPanel.vue
index 5c764637c0ddd..ae84c84a53ce9 100644
--- a/packages/editor-ui/src/components/OutputPanel.vue
+++ b/packages/editor-ui/src/components/OutputPanel.vue
@@ -98,9 +98,9 @@
 </template>
 
 <script lang="ts">
-import { IExecutionResponse, INodeUi } from '@/Interface';
-import { INodeTypeDescription, IRunData, IRunExecutionData, ITaskData } from 'n8n-workflow';
-import Vue from 'vue';
+import type { IExecutionResponse, INodeUi } from '@/Interface';
+import type { INodeTypeDescription, IRunData, IRunExecutionData, ITaskData } from 'n8n-workflow';
+import type Vue from 'vue';
 import RunData, { EnterEditModeArgs } from './RunData.vue';
 import RunInfo from './RunInfo.vue';
 import { pinData } from '@/mixins/pinData';
diff --git a/packages/editor-ui/src/components/ParameterInput.vue b/packages/editor-ui/src/components/ParameterInput.vue
index 5936310e3178b..840c56599304f 100644
--- a/packages/editor-ui/src/components/ParameterInput.vue
+++ b/packages/editor-ui/src/components/ParameterInput.vue
@@ -329,10 +329,8 @@
 
 import { get } from 'lodash-es';
 
-import { INodeUi, INodeUpdatePropertiesInformation } from '@/Interface';
-import {
-	NodeHelpers,
-	NodeParameterValue,
+import type { INodeUi, INodeUpdatePropertiesInformation } from '@/Interface';
+import type {
 	ILoadOptions,
 	INodeParameters,
 	INodePropertyOptions,
@@ -341,6 +339,7 @@ import {
 	INodePropertyCollection,
 	NodeParameterValueType,
 } from 'n8n-workflow';
+import { NodeHelpers, NodeParameterValue } from 'n8n-workflow';
 
 import CodeEdit from '@/components/CodeEdit.vue';
 import CredentialsSelect from '@/components/CredentialsSelect.vue';
@@ -366,7 +365,7 @@ import { hasExpressionMapping, isValueExpression, isResourceLocatorValue } from
 import mixins from 'vue-typed-mixins';
 import { CUSTOM_API_CALL_KEY, HTML_NODE_TYPE } from '@/constants';
 import { CODE_NODE_TYPE } from '@/constants';
-import { PropType } from 'vue';
+import type { PropType } from 'vue';
 import { debounceHelper } from '@/mixins/debounce';
 import { mapStores } from 'pinia';
 import { useWorkflowsStore } from '@/stores/workflows';
diff --git a/packages/editor-ui/src/components/ParameterInputExpanded.vue b/packages/editor-ui/src/components/ParameterInputExpanded.vue
index ea88d0d013b27..8f427d8c56af4 100644
--- a/packages/editor-ui/src/components/ParameterInputExpanded.vue
+++ b/packages/editor-ui/src/components/ParameterInputExpanded.vue
@@ -56,13 +56,13 @@
 </template>
 
 <script lang="ts">
-import { IUpdateInformation } from '@/Interface';
+import type { IUpdateInformation } from '@/Interface';
 import ParameterOptions from './ParameterOptions.vue';
 import { defineComponent } from 'vue';
 import type { PropType } from 'vue';
 import ParameterInputWrapper from './ParameterInputWrapper.vue';
 import { isValueExpression } from '@/utils';
-import { INodeParameterResourceLocator, INodeProperties, IParameterLabel } from 'n8n-workflow';
+import type { INodeParameterResourceLocator, INodeProperties, IParameterLabel } from 'n8n-workflow';
 import { mapStores } from 'pinia';
 import { useWorkflowsStore } from '@/stores/workflows';
 
diff --git a/packages/editor-ui/src/components/ParameterInputFull.vue b/packages/editor-ui/src/components/ParameterInputFull.vue
index 35a15f7d2c866..90e0690bc67bd 100644
--- a/packages/editor-ui/src/components/ParameterInputFull.vue
+++ b/packages/editor-ui/src/components/ParameterInputFull.vue
@@ -69,9 +69,10 @@
 </template>
 
 <script lang="ts">
-import Vue, { PropType } from 'vue';
+import type { PropType } from 'vue';
+import type Vue from 'vue';
 
-import { IN8nButton, INodeUi, IRunDataDisplayMode, IUpdateInformation } from '@/Interface';
+import type { IN8nButton, INodeUi, IRunDataDisplayMode, IUpdateInformation } from '@/Interface';
 
 import ParameterOptions from '@/components/ParameterOptions.vue';
 import DraggableTarget from '@/components/DraggableTarget.vue';
@@ -84,8 +85,13 @@ import {
 	isValueExpression,
 } from '@/utils';
 import ParameterInputWrapper from '@/components/ParameterInputWrapper.vue';
-import { INodeParameters, INodeProperties, INodePropertyMode, IParameterLabel } from 'n8n-workflow';
-import { BaseTextKey } from '@/plugins/i18n';
+import type {
+	INodeParameters,
+	INodeProperties,
+	INodePropertyMode,
+	IParameterLabel,
+} from 'n8n-workflow';
+import type { BaseTextKey } from '@/plugins/i18n';
 import { mapStores } from 'pinia';
 import { useNDVStore } from '@/stores/ndv';
 import { useSegment } from '@/stores/segment';
diff --git a/packages/editor-ui/src/components/ParameterInputList.vue b/packages/editor-ui/src/components/ParameterInputList.vue
index 668ed3588a209..ec0f005191828 100644
--- a/packages/editor-ui/src/components/ParameterInputList.vue
+++ b/packages/editor-ui/src/components/ParameterInputList.vue
@@ -115,9 +115,10 @@
 </template>
 
 <script lang="ts">
-import { deepCopy, INodeParameters, INodeProperties, NodeParameterValue } from 'n8n-workflow';
+import type { INodeParameters, INodeProperties, NodeParameterValue } from 'n8n-workflow';
+import { deepCopy } from 'n8n-workflow';
 
-import { INodeUi, IUpdateInformation } from '@/Interface';
+import type { INodeUi, IUpdateInformation } from '@/Interface';
 
 import MultipleParameter from '@/components/MultipleParameter.vue';
 import { workflowHelpers } from '@/mixins/workflowHelpers';
@@ -127,7 +128,7 @@ import ImportParameter from '@/components/ImportParameter.vue';
 import { get, set } from 'lodash-es';
 
 import mixins from 'vue-typed-mixins';
-import { Component, PropType } from 'vue';
+import type { Component, PropType } from 'vue';
 import { mapStores } from 'pinia';
 import { useNDVStore } from '@/stores/ndv';
 import { useNodeTypesStore } from '@/stores/nodeTypes';
diff --git a/packages/editor-ui/src/components/ParameterInputWrapper.vue b/packages/editor-ui/src/components/ParameterInputWrapper.vue
index 34bfb4d3ead4e..8e29c162cc47f 100644
--- a/packages/editor-ui/src/components/ParameterInputWrapper.vue
+++ b/packages/editor-ui/src/components/ParameterInputWrapper.vue
@@ -42,21 +42,21 @@
 </template>
 
 <script lang="ts">
-import Vue, { PropType } from 'vue';
+import type { PropType } from 'vue';
+import type Vue from 'vue';
 
 import ParameterInput from '@/components/ParameterInput.vue';
 import InputHint from './ParameterInputHint.vue';
 import mixins from 'vue-typed-mixins';
 import { showMessage } from '@/mixins/showMessage';
-import {
+import type {
 	INodeProperties,
 	INodePropertyMode,
-	IRunData,
-	isResourceLocatorValue,
 	NodeParameterValue,
 	NodeParameterValueType,
 } from 'n8n-workflow';
-import { INodeUi, IUpdateInformation, TargetItem } from '@/Interface';
+import { IRunData, isResourceLocatorValue } from 'n8n-workflow';
+import type { INodeUi, IUpdateInformation, TargetItem } from '@/Interface';
 import { workflowHelpers } from '@/mixins/workflowHelpers';
 import { isValueExpression } from '@/utils';
 import { mapStores } from 'pinia';
diff --git a/packages/editor-ui/src/components/PersonalizationModal.vue b/packages/editor-ui/src/components/PersonalizationModal.vue
index 7d38d9de97793..1046bdc2cac0b 100644
--- a/packages/editor-ui/src/components/PersonalizationModal.vue
+++ b/packages/editor-ui/src/components/PersonalizationModal.vue
@@ -127,9 +127,9 @@ import {
 import { workflowHelpers } from '@/mixins/workflowHelpers';
 import { showMessage } from '@/mixins/showMessage';
 import Modal from './Modal.vue';
-import { IFormInputs, IPersonalizationLatestVersion, IUser } from '@/Interface';
+import type { IFormInputs, IPersonalizationLatestVersion, IUser } from '@/Interface';
 import { getAccountAge } from '@/utils';
-import { GenericValue } from 'n8n-workflow';
+import type { GenericValue } from 'n8n-workflow';
 import { mapStores } from 'pinia';
 import { useUIStore } from '@/stores/ui';
 import { useSettingsStore } from '@/stores/settings';
diff --git a/packages/editor-ui/src/components/ResourceLocator/ResourceLocator.vue b/packages/editor-ui/src/components/ResourceLocator/ResourceLocator.vue
index 7ce47af422489..cdb56afbc98e1 100644
--- a/packages/editor-ui/src/components/ResourceLocator/ResourceLocator.vue
+++ b/packages/editor-ui/src/components/ResourceLocator/ResourceLocator.vue
@@ -135,25 +135,27 @@
 <script lang="ts">
 import mixins from 'vue-typed-mixins';
 
-import {
+import type {
 	ILoadOptions,
 	INode,
 	INodeCredentials,
 	INodeListSearchItems,
-	INodeListSearchResult,
 	INodeParameterResourceLocator,
 	INodeParameters,
 	INodeProperties,
 	INodePropertyMode,
 	NodeParameterValue,
 } from 'n8n-workflow';
+import { INodeListSearchResult } from 'n8n-workflow';
 import ExpressionParameterInput from '@/components/ExpressionParameterInput.vue';
 import DraggableTarget from '@/components/DraggableTarget.vue';
 import ExpressionEdit from '@/components/ExpressionEdit.vue';
 import ParameterIssues from '@/components/ParameterIssues.vue';
 import ResourceLocatorDropdown from './ResourceLocatorDropdown.vue';
-import Vue, { PropType } from 'vue';
-import { INodeUi, IResourceLocatorReqParams, IResourceLocatorResultExpanded } from '@/Interface';
+import type { PropType } from 'vue';
+import type Vue from 'vue';
+import type { IResourceLocatorReqParams, IResourceLocatorResultExpanded } from '@/Interface';
+import { INodeUi } from '@/Interface';
 import { debounceHelper } from '@/mixins/debounce';
 import stringify from 'fast-json-stable-stringify';
 import { workflowHelpers } from '@/mixins/workflowHelpers';
diff --git a/packages/editor-ui/src/components/ResourceLocator/ResourceLocatorDropdown.vue b/packages/editor-ui/src/components/ResourceLocator/ResourceLocatorDropdown.vue
index 41755d4d0f6ad..f2702d6a0d767 100644
--- a/packages/editor-ui/src/components/ResourceLocator/ResourceLocatorDropdown.vue
+++ b/packages/editor-ui/src/components/ResourceLocator/ResourceLocatorDropdown.vue
@@ -78,7 +78,7 @@
 </template>
 
 <script lang="ts">
-import { IResourceLocatorResultExpanded } from '@/Interface';
+import type { IResourceLocatorResultExpanded } from '@/Interface';
 import { defineComponent } from 'vue';
 import type { PropType } from 'vue';
 
diff --git a/packages/editor-ui/src/components/RunData.vue b/packages/editor-ui/src/components/RunData.vue
index 2476dbad9a3bc..ef2851a2e8943 100644
--- a/packages/editor-ui/src/components/RunData.vue
+++ b/packages/editor-ui/src/components/RunData.vue
@@ -459,10 +459,10 @@
 </template>
 
 <script lang="ts">
-import { PropType } from 'vue';
+import type { PropType } from 'vue';
 import mixins from 'vue-typed-mixins';
 import { saveAs } from 'file-saver';
-import {
+import type {
 	IBinaryData,
 	IBinaryKeyData,
 	IDataObject,
@@ -472,7 +472,7 @@ import {
 	IRunExecutionData,
 } from 'n8n-workflow';
 
-import {
+import type {
 	IExecutionResponse,
 	INodeUi,
 	INodeUpdatePropertiesInformation,
diff --git a/packages/editor-ui/src/components/RunDataJson.vue b/packages/editor-ui/src/components/RunDataJson.vue
index ea6718d2b526f..83866246a9fcd 100644
--- a/packages/editor-ui/src/components/RunDataJson.vue
+++ b/packages/editor-ui/src/components/RunDataJson.vue
@@ -70,13 +70,13 @@
 </template>
 
 <script lang="ts">
-import { PropType } from 'vue';
+import type { PropType } from 'vue';
 import mixins from 'vue-typed-mixins';
 import VueJsonPretty from 'vue-json-pretty';
-import { IDataObject, INodeExecutionData } from 'n8n-workflow';
+import type { IDataObject, INodeExecutionData } from 'n8n-workflow';
 import Draggable from '@/components/Draggable.vue';
 import { executionDataToJson, isString, shorten } from '@/utils';
-import { INodeUi } from '@/Interface';
+import type { INodeUi } from '@/Interface';
 import { externalHooks } from '@/mixins/externalHooks';
 import { mapStores } from 'pinia';
 import { useNDVStore } from '@/stores/ndv';
diff --git a/packages/editor-ui/src/components/RunDataJsonActions.vue b/packages/editor-ui/src/components/RunDataJsonActions.vue
index d682349948403..ae8776a3de031 100644
--- a/packages/editor-ui/src/components/RunDataJsonActions.vue
+++ b/packages/editor-ui/src/components/RunDataJsonActions.vue
@@ -27,11 +27,11 @@
 </template>
 
 <script lang="ts">
-import { PropType } from 'vue';
+import type { PropType } from 'vue';
 import mixins from 'vue-typed-mixins';
 import jp from 'jsonpath';
-import { INodeUi } from '@/Interface';
-import { IDataObject } from 'n8n-workflow';
+import type { INodeUi } from '@/Interface';
+import type { IDataObject } from 'n8n-workflow';
 import { copyPaste } from '@/mixins/copyPaste';
 import { pinData } from '@/mixins/pinData';
 import { nodeHelpers } from '@/mixins/nodeHelpers';
diff --git a/packages/editor-ui/src/components/RunDataSchema.vue b/packages/editor-ui/src/components/RunDataSchema.vue
index fd8afc8d96587..329e9151e5e9a 100644
--- a/packages/editor-ui/src/components/RunDataSchema.vue
+++ b/packages/editor-ui/src/components/RunDataSchema.vue
@@ -1,13 +1,13 @@
 <script lang="ts" setup>
 import { computed, ref } from 'vue';
 import { merge } from 'lodash-es';
-import { INodeUi, Schema } from '@/Interface';
+import type { INodeUi, Schema } from '@/Interface';
 import RunDataSchemaItem from '@/components/RunDataSchemaItem.vue';
 import Draggable from '@/components/Draggable.vue';
 import { useNDVStore } from '@/stores/ndv';
 import { useWebhooksStore } from '@/stores/webhooks';
 import { telemetry } from '@/plugins/telemetry';
-import { IDataObject } from 'n8n-workflow';
+import type { IDataObject } from 'n8n-workflow';
 import { getSchema, isEmpty, runExternalHook } from '@/utils';
 import { i18n } from '@/plugins/i18n';
 import MappingPill from './MappingPill.vue';
diff --git a/packages/editor-ui/src/components/RunDataSchemaItem.vue b/packages/editor-ui/src/components/RunDataSchemaItem.vue
index 3af9a04e4ef0b..b9d0ae7d39182 100644
--- a/packages/editor-ui/src/components/RunDataSchemaItem.vue
+++ b/packages/editor-ui/src/components/RunDataSchemaItem.vue
@@ -1,6 +1,6 @@
 <script lang="ts" setup>
 import { computed } from 'vue';
-import { INodeUi, Schema } from '@/Interface';
+import type { INodeUi, Schema } from '@/Interface';
 import { checkExhaustive, shorten } from '@/utils';
 import { getMappedExpression } from '@/utils/mappingUtils';
 
diff --git a/packages/editor-ui/src/components/RunDataTable.vue b/packages/editor-ui/src/components/RunDataTable.vue
index a295ec913dc6a..20ba934a014a2 100644
--- a/packages/editor-ui/src/components/RunDataTable.vue
+++ b/packages/editor-ui/src/components/RunDataTable.vue
@@ -162,11 +162,12 @@
 
 <script lang="ts">
 /* eslint-disable prefer-spread */
-import { INodeUi, ITableData, NDVState } from '@/Interface';
+import type { INodeUi, ITableData, NDVState } from '@/Interface';
 import { getPairedItemId } from '@/utils';
-import Vue, { PropType } from 'vue';
+import type { PropType } from 'vue';
+import type Vue from 'vue';
 import mixins from 'vue-typed-mixins';
-import { GenericValue, IDataObject, INodeExecutionData } from 'n8n-workflow';
+import type { GenericValue, IDataObject, INodeExecutionData } from 'n8n-workflow';
 import Draggable from './Draggable.vue';
 import { shorten } from '@/utils';
 import { externalHooks } from '@/mixins/externalHooks';
diff --git a/packages/editor-ui/src/components/SettingsLogStreaming/EventDestinationCard.ee.vue b/packages/editor-ui/src/components/SettingsLogStreaming/EventDestinationCard.ee.vue
index a66f1dcf3bd1a..4edc63d535a8c 100644
--- a/packages/editor-ui/src/components/SettingsLogStreaming/EventDestinationCard.ee.vue
+++ b/packages/editor-ui/src/components/SettingsLogStreaming/EventDestinationCard.ee.vue
@@ -51,15 +51,13 @@ import mixins from 'vue-typed-mixins';
 import { EnterpriseEditionFeature } from '@/constants';
 import { showMessage } from '@/mixins/showMessage';
 import { useLogStreamingStore } from '../../stores/logStreamingStore';
-import Vue, { PropType } from 'vue';
+import type { PropType } from 'vue';
+import Vue from 'vue';
 import { mapStores } from 'pinia';
-import {
-	deepCopy,
-	defaultMessageEventBusDestinationOptions,
-	MessageEventBusDestinationOptions,
-} from 'n8n-workflow';
-import { BaseTextKey } from '../../plugins/i18n';
-import { EventBus } from '@/event-bus';
+import type { MessageEventBusDestinationOptions } from 'n8n-workflow';
+import { deepCopy, defaultMessageEventBusDestinationOptions } from 'n8n-workflow';
+import type { BaseTextKey } from '../../plugins/i18n';
+import type { EventBus } from '@/event-bus';
 
 export const DESTINATION_LIST_ITEM_ACTIONS = {
 	OPEN: 'open',
diff --git a/packages/editor-ui/src/components/SettingsLogStreaming/EventDestinationSettingsModal.ee.vue b/packages/editor-ui/src/components/SettingsLogStreaming/EventDestinationSettingsModal.ee.vue
index 8a1fc3f125aa1..78e00e080a899 100644
--- a/packages/editor-ui/src/components/SettingsLogStreaming/EventDestinationSettingsModal.ee.vue
+++ b/packages/editor-ui/src/components/SettingsLogStreaming/EventDestinationSettingsModal.ee.vue
@@ -180,20 +180,23 @@ import { useNDVStore } from '../../stores/ndv';
 import { useWorkflowsStore } from '../../stores/workflows';
 import ParameterInputList from '@/components/ParameterInputList.vue';
 import NodeCredentials from '@/components/NodeCredentials.vue';
-import { IMenuItem, INodeUi, ITab, IUpdateInformation } from '../../Interface';
+import type { IMenuItem, INodeUi, ITab, IUpdateInformation } from '../../Interface';
+import type {
+	IDataObject,
+	INodeCredentials,
+	NodeParameterValue,
+	MessageEventBusDestinationOptions,
+} from 'n8n-workflow';
 import {
 	deepCopy,
 	defaultMessageEventBusDestinationOptions,
 	defaultMessageEventBusDestinationWebhookOptions,
-	IDataObject,
-	INodeCredentials,
-	NodeParameterValue,
 	MessageEventBusDestinationTypeNames,
-	MessageEventBusDestinationOptions,
 	defaultMessageEventBusDestinationSyslogOptions,
 	defaultMessageEventBusDestinationSentryOptions,
 } from 'n8n-workflow';
-import Vue, { PropType } from 'vue';
+import type { PropType } from 'vue';
+import Vue from 'vue';
 import { LOG_STREAM_MODAL_KEY } from '../../constants';
 import Modal from '@/components/Modal.vue';
 import { showMessage } from '@/mixins/showMessage';
@@ -205,12 +208,13 @@ import {
 	sentryModalDescription,
 	syslogModalDescription,
 } from './descriptions.ee';
-import { BaseTextKey } from '../../plugins/i18n';
+import type { BaseTextKey } from '../../plugins/i18n';
 import InlineNameEdit from '../InlineNameEdit.vue';
 import SaveButton from '../SaveButton.vue';
 import EventSelection from '@/components/SettingsLogStreaming/EventSelection.ee.vue';
 import { Checkbox } from 'element-ui';
-import { createEventBus, EventBus } from '@/event-bus';
+import type { EventBus } from '@/event-bus';
+import { createEventBus } from '@/event-bus';
 
 export default mixins(showMessage).extend({
 	name: 'event-destination-settings-modal',
diff --git a/packages/editor-ui/src/components/SettingsLogStreaming/EventSelection.ee.vue b/packages/editor-ui/src/components/SettingsLogStreaming/EventSelection.ee.vue
index a7d0f13b41ed4..0ed8883ef3bae 100644
--- a/packages/editor-ui/src/components/SettingsLogStreaming/EventSelection.ee.vue
+++ b/packages/editor-ui/src/components/SettingsLogStreaming/EventSelection.ee.vue
@@ -71,7 +71,7 @@
 <script lang="ts">
 import { Checkbox } from 'element-ui';
 import { mapStores } from 'pinia';
-import { BaseTextKey } from '../../plugins/i18n';
+import type { BaseTextKey } from '../../plugins/i18n';
 import { useLogStreamingStore } from '../../stores/logStreamingStore';
 
 export default {
diff --git a/packages/editor-ui/src/components/SettingsLogStreaming/Helpers.ee.ts b/packages/editor-ui/src/components/SettingsLogStreaming/Helpers.ee.ts
index 1f367ed9c1971..23984bc8cf4a2 100644
--- a/packages/editor-ui/src/components/SettingsLogStreaming/Helpers.ee.ts
+++ b/packages/editor-ui/src/components/SettingsLogStreaming/Helpers.ee.ts
@@ -1,5 +1,9 @@
-import { INodeCredentials, INodeParameters, MessageEventBusDestinationOptions } from 'n8n-workflow';
-import { INodeUi } from '../../Interface';
+import type {
+	INodeCredentials,
+	INodeParameters,
+	MessageEventBusDestinationOptions,
+} from 'n8n-workflow';
+import type { INodeUi } from '../../Interface';
 
 export function destinationToFakeINodeUi(
 	destination: MessageEventBusDestinationOptions,
diff --git a/packages/editor-ui/src/components/SettingsLogStreaming/descriptions.ee.ts b/packages/editor-ui/src/components/SettingsLogStreaming/descriptions.ee.ts
index 1cfa03d2d2cf7..421d9f1451a38 100644
--- a/packages/editor-ui/src/components/SettingsLogStreaming/descriptions.ee.ts
+++ b/packages/editor-ui/src/components/SettingsLogStreaming/descriptions.ee.ts
@@ -1,4 +1,4 @@
-import { INodeProperties } from 'n8n-workflow';
+import type { INodeProperties } from 'n8n-workflow';
 
 export const webhookModalDescription = [
 	{
diff --git a/packages/editor-ui/src/components/SettingsSidebar.vue b/packages/editor-ui/src/components/SettingsSidebar.vue
index eb3c3628fb927..e024bd96be2a4 100644
--- a/packages/editor-ui/src/components/SettingsSidebar.vue
+++ b/packages/editor-ui/src/components/SettingsSidebar.vue
@@ -24,9 +24,9 @@
 import mixins from 'vue-typed-mixins';
 import { ABOUT_MODAL_KEY, VERSIONS_MODAL_KEY, VIEWS } from '@/constants';
 import { userHelpers } from '@/mixins/userHelpers';
-import { IFakeDoor } from '@/Interface';
-import { IMenuItem } from 'n8n-design-system';
-import { BaseTextKey } from '@/plugins/i18n';
+import type { IFakeDoor } from '@/Interface';
+import type { IMenuItem } from 'n8n-design-system';
+import type { BaseTextKey } from '@/plugins/i18n';
 import { mapStores } from 'pinia';
 import { useUIStore } from '@/stores/ui';
 import { useSettingsStore } from '@/stores/settings';
diff --git a/packages/editor-ui/src/components/Sticky.vue b/packages/editor-ui/src/components/Sticky.vue
index 9150637600047..c01c09514f556 100644
--- a/packages/editor-ui/src/components/Sticky.vue
+++ b/packages/editor-ui/src/components/Sticky.vue
@@ -64,14 +64,15 @@ import { nodeBase } from '@/mixins/nodeBase';
 import { nodeHelpers } from '@/mixins/nodeHelpers';
 import { workflowHelpers } from '@/mixins/workflowHelpers';
 import { getStyleTokenValue, isNumber, isString } from '@/utils';
-import {
+import type {
 	INodeUi,
 	INodeUpdatePropertiesInformation,
 	IUpdateInformation,
 	XYPosition,
 } from '@/Interface';
 
-import { IDataObject, INodeTypeDescription } from 'n8n-workflow';
+import type { INodeTypeDescription } from 'n8n-workflow';
+import { IDataObject } from 'n8n-workflow';
 import { QUICKSTART_NOTE_NAME } from '@/constants';
 import { mapStores } from 'pinia';
 import { useUIStore } from '@/stores/ui';
diff --git a/packages/editor-ui/src/components/TagsContainer.vue b/packages/editor-ui/src/components/TagsContainer.vue
index 364042820e28a..d46ac3f89801e 100644
--- a/packages/editor-ui/src/components/TagsContainer.vue
+++ b/packages/editor-ui/src/components/TagsContainer.vue
@@ -41,7 +41,7 @@
 <script lang="ts">
 import Vue, { defineComponent } from 'vue';
 
-import { ITag } from '@/Interface';
+import type { ITag } from '@/Interface';
 import IntersectionObserver from './IntersectionObserver.vue';
 import IntersectionObserved from './IntersectionObserved.vue';
 import { mapStores } from 'pinia';
diff --git a/packages/editor-ui/src/components/TagsDropdown.vue b/packages/editor-ui/src/components/TagsDropdown.vue
index 48a8c001c2aec..a028d81722e05 100644
--- a/packages/editor-ui/src/components/TagsDropdown.vue
+++ b/packages/editor-ui/src/components/TagsDropdown.vue
@@ -57,16 +57,16 @@
 <script lang="ts">
 import mixins from 'vue-typed-mixins';
 
-import { ITag } from '@/Interface';
+import type { ITag } from '@/Interface';
 import { MAX_TAG_NAME_LENGTH, TAGS_MANAGER_MODAL_KEY } from '@/constants';
 
 import { showMessage } from '@/mixins/showMessage';
 import { mapStores } from 'pinia';
 import { useUIStore } from '@/stores/ui';
 import { useTagsStore } from '@/stores/tags';
-import { EventBus } from '@/event-bus';
-import { PropType } from 'vue';
-import { N8nOption, N8nSelect } from 'n8n-design-system';
+import type { EventBus } from '@/event-bus';
+import type { PropType } from 'vue';
+import type { N8nOption, N8nSelect } from 'n8n-design-system';
 
 type SelectRef = InstanceType<typeof N8nSelect>;
 type TagRef = InstanceType<typeof N8nOption>;
diff --git a/packages/editor-ui/src/components/TagsManager/TagsManager.vue b/packages/editor-ui/src/components/TagsManager/TagsManager.vue
index da54eb6f3b544..fc2bbc56f86c6 100644
--- a/packages/editor-ui/src/components/TagsManager/TagsManager.vue
+++ b/packages/editor-ui/src/components/TagsManager/TagsManager.vue
@@ -31,7 +31,7 @@
 import Vue from 'vue';
 import mixins from 'vue-typed-mixins';
 
-import { ITag } from '@/Interface';
+import type { ITag } from '@/Interface';
 
 import { showMessage } from '@/mixins/showMessage';
 import TagsView from '@/components/TagsManager/TagsView/TagsView.vue';
diff --git a/packages/editor-ui/src/components/TagsManager/TagsView/TagsTable.vue b/packages/editor-ui/src/components/TagsManager/TagsView/TagsTable.vue
index a93e25d9859d2..8b2d43c465c3c 100644
--- a/packages/editor-ui/src/components/TagsManager/TagsView/TagsTable.vue
+++ b/packages/editor-ui/src/components/TagsManager/TagsView/TagsTable.vue
@@ -107,11 +107,11 @@
 </template>
 
 <script lang="ts">
-import { Table as ElTable } from 'element-ui';
+import type { Table as ElTable } from 'element-ui';
 import { MAX_TAG_NAME_LENGTH } from '@/constants';
-import { ITagRow } from '@/Interface';
+import type { ITagRow } from '@/Interface';
 import { defineComponent } from 'vue';
-import { N8nInput } from 'n8n-design-system';
+import type { N8nInput } from 'n8n-design-system';
 
 type TableRef = InstanceType<typeof ElTable>;
 type N8nInputRef = InstanceType<typeof N8nInput>;
diff --git a/packages/editor-ui/src/components/Telemetry.vue b/packages/editor-ui/src/components/Telemetry.vue
index 26b5279832020..f9c40b0d6c2c8 100644
--- a/packages/editor-ui/src/components/Telemetry.vue
+++ b/packages/editor-ui/src/components/Telemetry.vue
@@ -6,7 +6,7 @@
 import { useRootStore } from '@/stores/n8nRootStore';
 import { useSettingsStore } from '@/stores/settings';
 import { useUsersStore } from '@/stores/users';
-import { ITelemetrySettings } from 'n8n-workflow';
+import type { ITelemetrySettings } from 'n8n-workflow';
 import { mapStores } from 'pinia';
 import mixins from 'vue-typed-mixins';
 import { externalHooks } from '@/mixins/externalHooks';
diff --git a/packages/editor-ui/src/components/TemplateDetails.vue b/packages/editor-ui/src/components/TemplateDetails.vue
index f0a430e36330c..816dd61ff00cc 100644
--- a/packages/editor-ui/src/components/TemplateDetails.vue
+++ b/packages/editor-ui/src/components/TemplateDetails.vue
@@ -52,7 +52,7 @@ import type { PropType } from 'vue';
 import TemplateDetailsBlock from '@/components/TemplateDetailsBlock.vue';
 import NodeIcon from '@/components/NodeIcon.vue';
 import { abbreviateNumber, filterTemplateNodes } from '@/utils';
-import { ITemplatesNode, ITemplatesWorkflow, ITemplatesWorkflowFull } from '@/Interface';
+import type { ITemplatesNode, ITemplatesWorkflow, ITemplatesWorkflowFull } from '@/Interface';
 import { mapStores } from 'pinia';
 import { useTemplatesStore } from '@/stores/templates';
 
diff --git a/packages/editor-ui/src/components/TemplateFilters.vue b/packages/editor-ui/src/components/TemplateFilters.vue
index 3c8debd1e66c1..14a5d13b68f16 100644
--- a/packages/editor-ui/src/components/TemplateFilters.vue
+++ b/packages/editor-ui/src/components/TemplateFilters.vue
@@ -38,7 +38,7 @@
 
 <script lang="ts">
 import { genericHelpers } from '@/mixins/genericHelpers';
-import { ITemplatesCategory } from '@/Interface';
+import type { ITemplatesCategory } from '@/Interface';
 import mixins from 'vue-typed-mixins';
 
 export default mixins(genericHelpers).extend({
diff --git a/packages/editor-ui/src/components/TimeAgo.vue b/packages/editor-ui/src/components/TimeAgo.vue
index d49b6e06e9cee..85e4969bca8a0 100644
--- a/packages/editor-ui/src/components/TimeAgo.vue
+++ b/packages/editor-ui/src/components/TimeAgo.vue
@@ -5,7 +5,8 @@
 </template>
 
 <script lang="ts">
-import { format, LocaleFunc, register } from 'timeago.js';
+import type { LocaleFunc } from 'timeago.js';
+import { format, register } from 'timeago.js';
 import { convertToHumanReadableDate } from '@/utils';
 import { defineComponent } from 'vue';
 import { mapStores } from 'pinia';
diff --git a/packages/editor-ui/src/components/TriggerPanel.vue b/packages/editor-ui/src/components/TriggerPanel.vue
index 8c3e2fc50f0e8..bdba1c976fffe 100644
--- a/packages/editor-ui/src/components/TriggerPanel.vue
+++ b/packages/editor-ui/src/components/TriggerPanel.vue
@@ -97,8 +97,8 @@
 
 <script lang="ts">
 import { EXECUTIONS_MODAL_KEY, WEBHOOK_NODE_TYPE, WORKFLOW_SETTINGS_MODAL_KEY } from '@/constants';
-import { INodeUi } from '@/Interface';
-import { INodeTypeDescription } from 'n8n-workflow';
+import type { INodeUi } from '@/Interface';
+import type { INodeTypeDescription } from 'n8n-workflow';
 import { getTriggerNodeServiceName } from '@/utils';
 import NodeExecuteButton from './NodeExecuteButton.vue';
 import { workflowHelpers } from '@/mixins/workflowHelpers';
@@ -107,13 +107,13 @@ import CopyInput from './CopyInput.vue';
 import NodeIcon from './NodeIcon.vue';
 import { copyPaste } from '@/mixins/copyPaste';
 import { showMessage } from '@/mixins/showMessage';
-import Vue from 'vue';
+import type Vue from 'vue';
 import { mapStores } from 'pinia';
 import { useUIStore } from '@/stores/ui';
 import { useWorkflowsStore } from '@/stores/workflows';
 import { useNDVStore } from '@/stores/ndv';
 import { useNodeTypesStore } from '@/stores/nodeTypes';
-import { N8nInfoAccordion } from 'n8n-design-system';
+import type { N8nInfoAccordion } from 'n8n-design-system';
 
 type HelpRef = InstanceType<typeof N8nInfoAccordion>;
 
diff --git a/packages/editor-ui/src/components/UpdatesPanel.vue b/packages/editor-ui/src/components/UpdatesPanel.vue
index f145b9352ccd6..76db9ab412976 100644
--- a/packages/editor-ui/src/components/UpdatesPanel.vue
+++ b/packages/editor-ui/src/components/UpdatesPanel.vue
@@ -51,7 +51,7 @@ import VersionCard from './VersionCard.vue';
 import { VERSIONS_MODAL_KEY } from '../constants';
 import { mapStores } from 'pinia';
 import { useVersionsStore } from '@/stores/versions';
-import { IVersion } from '@/Interface';
+import type { IVersion } from '@/Interface';
 
 export default defineComponent({
 	name: 'UpdatesPanel',
diff --git a/packages/editor-ui/src/components/ValueSurvey.vue b/packages/editor-ui/src/components/ValueSurvey.vue
index cbc3d22f017c2..39274dd2fb84e 100644
--- a/packages/editor-ui/src/components/ValueSurvey.vue
+++ b/packages/editor-ui/src/components/ValueSurvey.vue
@@ -57,7 +57,7 @@
 
 <script lang="ts">
 import { VALID_EMAIL_REGEX, VALUE_SURVEY_MODAL_KEY } from '@/constants';
-import { IN8nPromptResponse } from '@/Interface';
+import type { IN8nPromptResponse } from '@/Interface';
 
 import ModalDrawer from './ModalDrawer.vue';
 
diff --git a/packages/editor-ui/src/components/VariableSelector.vue b/packages/editor-ui/src/components/VariableSelector.vue
index f6b979e6f128a..0afe604c5201b 100644
--- a/packages/editor-ui/src/components/VariableSelector.vue
+++ b/packages/editor-ui/src/components/VariableSelector.vue
@@ -26,7 +26,7 @@
 /* eslint-disable prefer-spread */
 import { PLACEHOLDER_FILLED_AT_EXECUTION_TIME, STICKY_NODE_TYPE } from '@/constants';
 
-import {
+import type {
 	GenericValue,
 	IContextObject,
 	IDataObject,
@@ -36,16 +36,12 @@ import {
 	IRunExecutionData,
 	IWorkflowDataProxyAdditionalKeys,
 	Workflow,
-	WorkflowDataProxy,
 } from 'n8n-workflow';
+import { WorkflowDataProxy } from 'n8n-workflow';
 
 import VariableSelectorItem from '@/components/VariableSelectorItem.vue';
-import {
-	IExecutionResponse,
-	INodeUi,
-	IVariableItemSelected,
-	IVariableSelectorOption,
-} from '@/Interface';
+import type { INodeUi, IVariableItemSelected, IVariableSelectorOption } from '@/Interface';
+import { IExecutionResponse } from '@/Interface';
 
 import { workflowHelpers } from '@/mixins/workflowHelpers';
 
diff --git a/packages/editor-ui/src/components/VariableSelectorItem.vue b/packages/editor-ui/src/components/VariableSelectorItem.vue
index aeb595824d813..138ab476fcd67 100644
--- a/packages/editor-ui/src/components/VariableSelectorItem.vue
+++ b/packages/editor-ui/src/components/VariableSelectorItem.vue
@@ -59,7 +59,7 @@
 </template>
 
 <script lang="ts">
-import { IVariableSelectorOption, IVariableItemSelected } from '@/Interface';
+import type { IVariableSelectorOption, IVariableItemSelected } from '@/Interface';
 import { externalHooks } from '@/mixins/externalHooks';
 import mixins from 'vue-typed-mixins';
 
diff --git a/packages/editor-ui/src/components/VariablesRow.vue b/packages/editor-ui/src/components/VariablesRow.vue
index 7b0861a2d9279..2c1f16260690e 100644
--- a/packages/editor-ui/src/components/VariablesRow.vue
+++ b/packages/editor-ui/src/components/VariablesRow.vue
@@ -1,6 +1,8 @@
 <script lang="ts" setup>
-import { ComponentPublicInstance, computed, nextTick, onMounted, PropType, ref, watch } from 'vue';
-import { EnvironmentVariable, IValidator, Rule, RuleGroup, Validatable } from '@/Interface';
+import type { ComponentPublicInstance, PropType } from 'vue';
+import { computed, nextTick, onMounted, ref, watch } from 'vue';
+import type { EnvironmentVariable, Rule, RuleGroup } from '@/Interface';
+import { IValidator, Validatable } from '@/Interface';
 import { useI18n, useToast, useCopyToClipboard } from '@/composables';
 import { EnterpriseEditionFeature } from '@/constants';
 import { useSettingsStore, useUsersStore } from '@/stores';
diff --git a/packages/editor-ui/src/components/VersionCard.vue b/packages/editor-ui/src/components/VersionCard.vue
index c145be50db2ed..a444786e3bb3b 100644
--- a/packages/editor-ui/src/components/VersionCard.vue
+++ b/packages/editor-ui/src/components/VersionCard.vue
@@ -60,7 +60,7 @@ import NodeIcon from './NodeIcon.vue';
 import TimeAgo from './TimeAgo.vue';
 import Badge from './Badge.vue';
 import WarningTooltip from './WarningTooltip.vue';
-import { IVersionNode } from '@/Interface';
+import type { IVersionNode } from '@/Interface';
 
 Vue.component('NodeIcon', NodeIcon);
 Vue.component('TimeAgo', TimeAgo);
diff --git a/packages/editor-ui/src/components/WorkflowCard.vue b/packages/editor-ui/src/components/WorkflowCard.vue
index a62ced3c33a18..06561c155f101 100644
--- a/packages/editor-ui/src/components/WorkflowCard.vue
+++ b/packages/editor-ui/src/components/WorkflowCard.vue
@@ -63,7 +63,7 @@
 
 <script lang="ts">
 import mixins from 'vue-typed-mixins';
-import { IWorkflowDb, IUser, ITag } from '@/Interface';
+import type { IWorkflowDb, IUser, ITag } from '@/Interface';
 import {
 	DUPLICATE_MODAL_KEY,
 	EnterpriseEditionFeature,
@@ -71,10 +71,11 @@ import {
 	WORKFLOW_SHARE_MODAL_KEY,
 } from '@/constants';
 import { showMessage } from '@/mixins/showMessage';
-import { getWorkflowPermissions, IPermissions } from '@/permissions';
+import type { IPermissions } from '@/permissions';
+import { getWorkflowPermissions } from '@/permissions';
 import dateformat from 'dateformat';
 import WorkflowActivator from '@/components/WorkflowActivator.vue';
-import Vue from 'vue';
+import type Vue from 'vue';
 import { mapStores } from 'pinia';
 import { useUIStore } from '@/stores/ui';
 import { useSettingsStore } from '@/stores/settings';
diff --git a/packages/editor-ui/src/components/WorkflowPreview.vue b/packages/editor-ui/src/components/WorkflowPreview.vue
index 09cc2f9465e84..5ea1a06342e45 100644
--- a/packages/editor-ui/src/components/WorkflowPreview.vue
+++ b/packages/editor-ui/src/components/WorkflowPreview.vue
@@ -24,7 +24,7 @@
 <script lang="ts">
 import mixins from 'vue-typed-mixins';
 import { showMessage } from '@/mixins/showMessage';
-import { IWorkflowDb } from '../Interface';
+import type { IWorkflowDb } from '../Interface';
 import { mapStores } from 'pinia';
 import { useRootStore } from '@/stores/n8nRootStore';
 
diff --git a/packages/editor-ui/src/components/WorkflowSettings.vue b/packages/editor-ui/src/components/WorkflowSettings.vue
index ace78db66c33c..a3c062213ddca 100644
--- a/packages/editor-ui/src/components/WorkflowSettings.vue
+++ b/packages/editor-ui/src/components/WorkflowSettings.vue
@@ -329,15 +329,15 @@ import Vue from 'vue';
 import { externalHooks } from '@/mixins/externalHooks';
 import { genericHelpers } from '@/mixins/genericHelpers';
 import { showMessage } from '@/mixins/showMessage';
-import {
+import type {
 	ITimeoutHMS,
 	IUser,
 	IWorkflowDataUpdate,
 	IWorkflowDb,
 	IWorkflowSettings,
 	IWorkflowShortResponse,
-	WorkflowCallerPolicyDefaultOption,
 } from '@/Interface';
+import { WorkflowCallerPolicyDefaultOption } from '@/Interface';
 import Modal from './Modal.vue';
 import {
 	EnterpriseEditionFeature,
@@ -347,7 +347,8 @@ import {
 
 import mixins from 'vue-typed-mixins';
 
-import { WorkflowSettings, deepCopy } from 'n8n-workflow';
+import type { WorkflowSettings } from 'n8n-workflow';
+import { deepCopy } from 'n8n-workflow';
 import { mapStores } from 'pinia';
 import { useWorkflowsStore } from '@/stores/workflows';
 import { useSettingsStore } from '@/stores/settings';
diff --git a/packages/editor-ui/src/components/WorkflowShareModal.ee.vue b/packages/editor-ui/src/components/WorkflowShareModal.ee.vue
index fc3597cd80704..9bb1fd90a48e1 100644
--- a/packages/editor-ui/src/components/WorkflowShareModal.ee.vue
+++ b/packages/editor-ui/src/components/WorkflowShareModal.ee.vue
@@ -130,8 +130,10 @@ import {
 	VIEWS,
 	WORKFLOW_SHARE_MODAL_KEY,
 } from '../constants';
-import { IUser, IWorkflowDb, UIState } from '@/Interface';
-import { getWorkflowPermissions, IPermissions } from '@/permissions';
+import type { IUser, IWorkflowDb } from '@/Interface';
+import { UIState } from '@/Interface';
+import type { IPermissions } from '@/permissions';
+import { getWorkflowPermissions } from '@/permissions';
 import mixins from 'vue-typed-mixins';
 import { showMessage } from '@/mixins/showMessage';
 import { createEventBus, nodeViewEventBus } from '@/event-bus';
@@ -141,9 +143,9 @@ import { useUIStore } from '@/stores/ui';
 import { useUsersStore } from '@/stores/users';
 import { useWorkflowsStore } from '@/stores/workflows';
 import { useWorkflowsEEStore } from '@/stores/workflows.ee';
-import { ITelemetryTrackProperties } from 'n8n-workflow';
+import type { ITelemetryTrackProperties } from 'n8n-workflow';
 import { useUsageStore } from '@/stores/usage';
-import { BaseTextKey } from '@/plugins/i18n';
+import type { BaseTextKey } from '@/plugins/i18n';
 import { isNavigationFailure } from 'vue-router';
 
 export default mixins(showMessage).extend({
diff --git a/packages/editor-ui/src/components/__tests__/ExecutionFilter.test.ts b/packages/editor-ui/src/components/__tests__/ExecutionFilter.test.ts
index b209b0e6198b3..80a3cace0bd42 100644
--- a/packages/editor-ui/src/components/__tests__/ExecutionFilter.test.ts
+++ b/packages/editor-ui/src/components/__tests__/ExecutionFilter.test.ts
@@ -2,7 +2,8 @@ import { describe, test, expect } from 'vitest';
 import Vue from 'vue';
 import { PiniaVuePlugin } from 'pinia';
 import { createTestingPinia } from '@pinia/testing';
-import { render, RenderOptions } from '@testing-library/vue';
+import type { RenderOptions } from '@testing-library/vue';
+import { render } from '@testing-library/vue';
 import userEvent from '@testing-library/user-event';
 import { faker } from '@faker-js/faker';
 import ExecutionFilter from '@/components/ExecutionFilter.vue';
diff --git a/packages/editor-ui/src/components/__tests__/VariablesRow.spec.ts b/packages/editor-ui/src/components/__tests__/VariablesRow.spec.ts
index c368370915db8..2a68e87a2a0a9 100644
--- a/packages/editor-ui/src/components/__tests__/VariablesRow.spec.ts
+++ b/packages/editor-ui/src/components/__tests__/VariablesRow.spec.ts
@@ -1,5 +1,5 @@
 import VariablesRow from '../VariablesRow.vue';
-import { EnvironmentVariable } from '@/Interface';
+import type { EnvironmentVariable } from '@/Interface';
 import { fireEvent } from '@testing-library/vue';
 import { createPinia, setActivePinia } from 'pinia';
 import { setupServer } from '@/__tests__/server';
diff --git a/packages/editor-ui/src/components/forms/ResourceOwnershipSelect.ee.vue b/packages/editor-ui/src/components/forms/ResourceOwnershipSelect.ee.vue
index c23117f6fd894..1c5ccc865782d 100644
--- a/packages/editor-ui/src/components/forms/ResourceOwnershipSelect.ee.vue
+++ b/packages/editor-ui/src/components/forms/ResourceOwnershipSelect.ee.vue
@@ -9,7 +9,7 @@
 
 <script lang="ts">
 import { defineComponent } from 'vue';
-import { IMenuItem } from 'n8n-design-system';
+import type { IMenuItem } from 'n8n-design-system';
 
 export default defineComponent({
 	props: {
diff --git a/packages/editor-ui/src/components/layouts/ResourcesListLayout.vue b/packages/editor-ui/src/components/layouts/ResourcesListLayout.vue
index efdeb285beb8d..8cc4512b4cbcd 100644
--- a/packages/editor-ui/src/components/layouts/ResourcesListLayout.vue
+++ b/packages/editor-ui/src/components/layouts/ResourcesListLayout.vue
@@ -182,21 +182,22 @@
 
 <script lang="ts">
 import { showMessage } from '@/mixins/showMessage';
-import { IUser } from '@/Interface';
+import type { IUser } from '@/Interface';
 import mixins from 'vue-typed-mixins';
 
 import PageViewLayout from '@/components/layouts/PageViewLayout.vue';
 import PageViewLayoutList from '@/components/layouts/PageViewLayoutList.vue';
 import { EnterpriseEditionFeature } from '@/constants';
 import TemplateCard from '@/components/TemplateCard.vue';
-import Vue, { PropType } from 'vue';
+import type { PropType } from 'vue';
+import type Vue from 'vue';
 import { debounceHelper } from '@/mixins/debounce';
 import ResourceOwnershipSelect from '@/components/forms/ResourceOwnershipSelect.ee.vue';
 import ResourceFiltersDropdown from '@/components/forms/ResourceFiltersDropdown.vue';
 import { mapStores } from 'pinia';
 import { useSettingsStore } from '@/stores/settings';
 import { useUsersStore } from '@/stores/users';
-import { N8nInput } from 'n8n-design-system';
+import type { N8nInput } from 'n8n-design-system';
 import type { DatatableColumn } from 'n8n-design-system';
 
 export interface IResource {
diff --git a/packages/editor-ui/src/composables/__tests__/useHistoryHelper.test.ts b/packages/editor-ui/src/composables/__tests__/useHistoryHelper.test.ts
index e31753736886c..069b2f30b7196 100644
--- a/packages/editor-ui/src/composables/__tests__/useHistoryHelper.test.ts
+++ b/packages/editor-ui/src/composables/__tests__/useHistoryHelper.test.ts
@@ -4,7 +4,7 @@ import { render } from '@testing-library/vue';
 import userEvent from '@testing-library/user-event';
 import { useHistoryHelper } from '../useHistoryHelper';
 import { defineComponent } from 'vue';
-import { Route } from 'vue-router';
+import type { Route } from 'vue-router';
 
 const undoMock = vi.fn();
 const redoMock = vi.fn();
diff --git a/packages/editor-ui/src/composables/useCanvasMouseSelect.ts b/packages/editor-ui/src/composables/useCanvasMouseSelect.ts
index 51b1eac9d8c06..a00d57cb064cd 100644
--- a/packages/editor-ui/src/composables/useCanvasMouseSelect.ts
+++ b/packages/editor-ui/src/composables/useCanvasMouseSelect.ts
@@ -1,4 +1,4 @@
-import { INodeUi, XYPosition } from '@/Interface';
+import type { INodeUi, XYPosition } from '@/Interface';
 
 import useDeviceSupport from './useDeviceSupport';
 import { useUIStore } from '@/stores/ui';
diff --git a/packages/editor-ui/src/composables/useHistoryHelper.ts b/packages/editor-ui/src/composables/useHistoryHelper.ts
index 79fc5f6d72049..c4c0241adb4fe 100644
--- a/packages/editor-ui/src/composables/useHistoryHelper.ts
+++ b/packages/editor-ui/src/composables/useHistoryHelper.ts
@@ -1,6 +1,7 @@
 import { MAIN_HEADER_TABS } from '@/constants';
 import { useNDVStore } from '@/stores/ndv';
-import { BulkCommand, Undoable } from '@/models/history';
+import type { Undoable } from '@/models/history';
+import { BulkCommand } from '@/models/history';
 import { useHistoryStore } from '@/stores/history';
 import { useUIStore } from '@/stores/ui';
 
@@ -9,7 +10,7 @@ import { Command } from '@/models/history';
 import { useDebounceHelper } from './useDebounce';
 import useDeviceSupportHelpers from './useDeviceSupport';
 import { getNodeViewTab } from '@/utils';
-import { Route } from 'vue-router';
+import type { Route } from 'vue-router';
 
 const UNDO_REDO_DEBOUNCE_INTERVAL = 100;
 
diff --git a/packages/editor-ui/src/composables/useTelemetry.ts b/packages/editor-ui/src/composables/useTelemetry.ts
index 856b15477b84e..9c88b3e57d729 100644
--- a/packages/editor-ui/src/composables/useTelemetry.ts
+++ b/packages/editor-ui/src/composables/useTelemetry.ts
@@ -1,4 +1,5 @@
-import { Telemetry, telemetry } from '@/plugins/telemetry';
+import type { Telemetry } from '@/plugins/telemetry';
+import { telemetry } from '@/plugins/telemetry';
 
 export function useTelemetry(): Telemetry {
 	return telemetry;
diff --git a/packages/editor-ui/src/composables/useTitleChange.ts b/packages/editor-ui/src/composables/useTitleChange.ts
index 45ed1ab0139ee..55cd41988fbae 100644
--- a/packages/editor-ui/src/composables/useTitleChange.ts
+++ b/packages/editor-ui/src/composables/useTitleChange.ts
@@ -1,4 +1,4 @@
-import { WorkflowTitleStatus } from '@/Interface';
+import type { WorkflowTitleStatus } from '@/Interface';
 
 export function useTitleChange() {
 	return {
diff --git a/packages/editor-ui/src/composables/useUpgradeLink.ts b/packages/editor-ui/src/composables/useUpgradeLink.ts
index 89cbaeeb4aca5..0b9dd7889d0a3 100644
--- a/packages/editor-ui/src/composables/useUpgradeLink.ts
+++ b/packages/editor-ui/src/composables/useUpgradeLink.ts
@@ -1,4 +1,4 @@
-import { BaseTextKey } from '@/plugins/i18n';
+import type { BaseTextKey } from '@/plugins/i18n';
 import { useUIStore, useUsageStore } from '@/stores';
 import { useI18n } from '@/composables';
 import { computed } from 'vue';
diff --git a/packages/editor-ui/src/constants.ts b/packages/editor-ui/src/constants.ts
index c4b0914103a5d..9fbf469b31d0a 100644
--- a/packages/editor-ui/src/constants.ts
+++ b/packages/editor-ui/src/constants.ts
@@ -1,4 +1,4 @@
-import { NodeCreatorOpenSource } from './Interface';
+import type { NodeCreatorOpenSource } from './Interface';
 
 export const MAX_WORKFLOW_SIZE = 16777216; // Workflow size limit in bytes
 export const MAX_WORKFLOW_PINNED_DATA_SIZE = 12582912; // Workflow pinned data size limit in bytes
diff --git a/packages/editor-ui/src/mixins/completionManager.ts b/packages/editor-ui/src/mixins/completionManager.ts
index ba4c39dbfd4b8..6b73ea645b296 100644
--- a/packages/editor-ui/src/mixins/completionManager.ts
+++ b/packages/editor-ui/src/mixins/completionManager.ts
@@ -1,6 +1,6 @@
 import mixins from 'vue-typed-mixins';
 import { ExpressionExtensions } from 'n8n-workflow';
-import { EditorView, ViewUpdate } from '@codemirror/view';
+import type { EditorView, ViewUpdate } from '@codemirror/view';
 
 import { expressionManager } from './expressionManager';
 
diff --git a/packages/editor-ui/src/mixins/executionsHelpers.ts b/packages/editor-ui/src/mixins/executionsHelpers.ts
index 2887fe7da77fc..d3bcb7555bff4 100644
--- a/packages/editor-ui/src/mixins/executionsHelpers.ts
+++ b/packages/editor-ui/src/mixins/executionsHelpers.ts
@@ -3,7 +3,7 @@ import { i18n as locale } from '@/plugins/i18n';
 import { mapStores } from 'pinia';
 import mixins from 'vue-typed-mixins';
 import { genericHelpers } from './genericHelpers';
-import { IExecutionsSummary } from 'n8n-workflow';
+import type { IExecutionsSummary } from 'n8n-workflow';
 
 export interface IExecutionUIData {
 	name: string;
diff --git a/packages/editor-ui/src/mixins/nodeBase.ts b/packages/editor-ui/src/mixins/nodeBase.ts
index 10e9f3b0d8c34..79f95814ff426 100644
--- a/packages/editor-ui/src/mixins/nodeBase.ts
+++ b/packages/editor-ui/src/mixins/nodeBase.ts
@@ -1,16 +1,16 @@
-import { PropType } from 'vue';
+import type { PropType } from 'vue';
 import mixins from 'vue-typed-mixins';
-import { INodeUi } from '@/Interface';
+import type { INodeUi } from '@/Interface';
 import { deviceSupportHelpers } from '@/mixins/deviceSupportHelpers';
 import { NO_OP_NODE_TYPE } from '@/constants';
 
-import { INodeTypeDescription } from 'n8n-workflow';
+import type { INodeTypeDescription } from 'n8n-workflow';
 import { mapStores } from 'pinia';
 import { useUIStore } from '@/stores/ui';
 import { useWorkflowsStore } from '@/stores/workflows';
 import { useNodeTypesStore } from '@/stores/nodeTypes';
-import { BrowserJsPlumbInstance } from '@jsplumb/browser-ui';
-import { Endpoint, EndpointOptions } from '@jsplumb/core';
+import type { BrowserJsPlumbInstance } from '@jsplumb/browser-ui';
+import type { Endpoint, EndpointOptions } from '@jsplumb/core';
 import * as NodeViewUtils from '@/utils/nodeViewUtils';
 import { useHistoryStore } from '@/stores/history';
 import { useCanvasStore } from '@/stores/canvas';
diff --git a/packages/editor-ui/src/mixins/nodeHelpers.ts b/packages/editor-ui/src/mixins/nodeHelpers.ts
index eb4cea7e5c820..2a959684b9546 100644
--- a/packages/editor-ui/src/mixins/nodeHelpers.ts
+++ b/packages/editor-ui/src/mixins/nodeHelpers.ts
@@ -6,11 +6,10 @@ import {
 	EnterpriseEditionFeature,
 } from '@/constants';
 
-import {
+import type {
 	IBinaryKeyData,
 	ICredentialType,
 	INodeCredentialDescription,
-	NodeHelpers,
 	INodeCredentialsDetails,
 	INodeExecutionData,
 	INodeIssues,
@@ -24,8 +23,9 @@ import {
 	INodePropertyOptions,
 	IDataObject,
 } from 'n8n-workflow';
+import { NodeHelpers } from 'n8n-workflow';
 
-import {
+import type {
 	ICredentialsResponse,
 	INodeUi,
 	INodeUpdatePropertiesInformation,
diff --git a/packages/editor-ui/src/mixins/pinData.ts b/packages/editor-ui/src/mixins/pinData.ts
index dbaa4e79361bb..990d8a2b903bf 100644
--- a/packages/editor-ui/src/mixins/pinData.ts
+++ b/packages/editor-ui/src/mixins/pinData.ts
@@ -1,6 +1,6 @@
 import Vue from 'vue';
-import { INodeUi } from '@/Interface';
-import { INodeTypeDescription, IPinData } from 'n8n-workflow';
+import type { INodeUi } from '@/Interface';
+import type { INodeTypeDescription, IPinData } from 'n8n-workflow';
 import { stringSizeInBytes } from '@/utils';
 import { MAX_WORKFLOW_PINNED_DATA_SIZE, PIN_DATA_NODE_TYPES_DENYLIST } from '@/constants';
 import { mapStores } from 'pinia';
diff --git a/packages/editor-ui/src/mixins/pushConnection.ts b/packages/editor-ui/src/mixins/pushConnection.ts
index 01b40ceaa99e9..6759174e398f9 100644
--- a/packages/editor-ui/src/mixins/pushConnection.ts
+++ b/packages/editor-ui/src/mixins/pushConnection.ts
@@ -1,4 +1,4 @@
-import {
+import type {
 	IExecutionResponse,
 	IExecutionsCurrentSummaryExtended,
 	IPushData,
@@ -11,7 +11,7 @@ import { showMessage } from '@/mixins/showMessage';
 import { useTitleChange } from '@/composables/useTitleChange';
 import { workflowHelpers } from '@/mixins/workflowHelpers';
 
-import {
+import type {
 	ExpressionError,
 	IDataObject,
 	INodeTypeNameVersion,
@@ -19,8 +19,8 @@ import {
 	IRunExecutionData,
 	IWorkflowBase,
 	SubworkflowOperationError,
-	TelemetryHelpers,
 } from 'n8n-workflow';
+import { TelemetryHelpers } from 'n8n-workflow';
 
 import mixins from 'vue-typed-mixins';
 import { WORKFLOW_SETTINGS_MODAL_KEY } from '@/constants';
diff --git a/packages/editor-ui/src/mixins/restApi.ts b/packages/editor-ui/src/mixins/restApi.ts
index 7663eb1a7b204..5caab3ace4573 100644
--- a/packages/editor-ui/src/mixins/restApi.ts
+++ b/packages/editor-ui/src/mixins/restApi.ts
@@ -1,8 +1,8 @@
 import { defineComponent } from 'vue';
 import { parse } from 'flatted';
 
-import { Method } from 'axios';
-import {
+import type { Method } from 'axios';
+import type {
 	IActivationError,
 	IExecutionsCurrentSummaryExtended,
 	IExecutionDeleteFilter,
@@ -16,11 +16,10 @@ import {
 	IWorkflowShortResponse,
 	IRestApi,
 	IWorkflowDataUpdate,
-	INodeTranslationHeaders,
 } from '@/Interface';
+import { INodeTranslationHeaders } from '@/Interface';
+import type { IAbstractEventMessage, IDataObject } from 'n8n-workflow';
 import {
-	IAbstractEventMessage,
-	IDataObject,
 	ILoadOptions,
 	INodeCredentials,
 	INodeParameters,
diff --git a/packages/editor-ui/src/mixins/showMessage.ts b/packages/editor-ui/src/mixins/showMessage.ts
index 6edb2b99eb933..1158cc187f1a0 100644
--- a/packages/editor-ui/src/mixins/showMessage.ts
+++ b/packages/editor-ui/src/mixins/showMessage.ts
@@ -1,9 +1,9 @@
 // @ts-ignore
-import { ElNotificationComponent, ElNotificationOptions } from 'element-ui/types/notification';
+import type { ElNotificationComponent, ElNotificationOptions } from 'element-ui/types/notification';
 import mixins from 'vue-typed-mixins';
 
 import { externalHooks } from '@/mixins/externalHooks';
-import { IExecuteContextData, IRunExecutionData } from 'n8n-workflow';
+import type { IExecuteContextData, IRunExecutionData } from 'n8n-workflow';
 import type { ElMessageBoxOptions } from 'element-ui/types/message-box';
 import type { ElMessageComponent, ElMessageOptions, MessageType } from 'element-ui/types/message';
 import { sanitizeHtml } from '@/utils';
diff --git a/packages/editor-ui/src/mixins/workflowHelpers.ts b/packages/editor-ui/src/mixins/workflowHelpers.ts
index eeceac097c71d..7f9a00b6148cd 100644
--- a/packages/editor-ui/src/mixins/workflowHelpers.ts
+++ b/packages/editor-ui/src/mixins/workflowHelpers.ts
@@ -8,7 +8,7 @@ import {
 	EnterpriseEditionFeature,
 } from '@/constants';
 
-import {
+import type {
 	IConnections,
 	IDataObject,
 	INode,
@@ -19,20 +19,17 @@ import {
 	INodeCredentials,
 	INodeType,
 	INodeTypes,
-	INodeTypeData,
-	IPinData,
 	IRunExecutionData,
 	IWorkflowIssues,
 	IWorkflowDataProxyAdditionalKeys,
 	Workflow,
-	NodeHelpers,
 	IExecuteData,
 	INodeConnection,
 	IWebhookDescription,
-	deepCopy,
 } from 'n8n-workflow';
+import { INodeTypeData, IPinData, NodeHelpers, deepCopy } from 'n8n-workflow';
 
-import {
+import type {
 	INodeTypesMaxCount,
 	INodeUi,
 	IWorkflowData,
@@ -56,14 +53,15 @@ import { mapStores } from 'pinia';
 import { useUIStore } from '@/stores/ui';
 import { useWorkflowsStore } from '@/stores/workflows';
 import { useRootStore } from '@/stores/n8nRootStore';
-import { IWorkflowSettings } from 'n8n-workflow';
+import type { IWorkflowSettings } from 'n8n-workflow';
 import { useNDVStore } from '@/stores/ndv';
 import { useTemplatesStore } from '@/stores/templates';
 import { useNodeTypesStore } from '@/stores/nodeTypes';
 import { useWorkflowsEEStore } from '@/stores/workflows.ee';
 import { useUsersStore } from '@/stores/users';
-import { getWorkflowPermissions, IPermissions } from '@/permissions';
-import { ICredentialsResponse } from '@/Interface';
+import type { IPermissions } from '@/permissions';
+import { getWorkflowPermissions } from '@/permissions';
+import type { ICredentialsResponse } from '@/Interface';
 import { useEnvironmentsStore } from '@/stores';
 
 export function resolveParameter(
diff --git a/packages/editor-ui/src/mixins/workflowRun.ts b/packages/editor-ui/src/mixins/workflowRun.ts
index 714d810ac8e66..f848ae670a1de 100644
--- a/packages/editor-ui/src/mixins/workflowRun.ts
+++ b/packages/editor-ui/src/mixins/workflowRun.ts
@@ -1,12 +1,7 @@
-import { IExecutionPushResponse, IExecutionResponse, IStartRunData } from '@/Interface';
-
-import {
-	IRunData,
-	IRunExecutionData,
-	IWorkflowBase,
-	NodeHelpers,
-	TelemetryHelpers,
-} from 'n8n-workflow';
+import type { IExecutionPushResponse, IExecutionResponse, IStartRunData } from '@/Interface';
+
+import type { IRunData, IRunExecutionData, IWorkflowBase } from 'n8n-workflow';
+import { NodeHelpers, TelemetryHelpers } from 'n8n-workflow';
 
 import { externalHooks } from '@/mixins/externalHooks';
 import { workflowHelpers } from '@/mixins/workflowHelpers';
diff --git a/packages/editor-ui/src/models/history.ts b/packages/editor-ui/src/models/history.ts
index 72733ab5ed155..f907af1a615c1 100644
--- a/packages/editor-ui/src/models/history.ts
+++ b/packages/editor-ui/src/models/history.ts
@@ -1,6 +1,6 @@
-import { INodeUi } from '@/Interface';
-import { IConnection } from 'n8n-workflow';
-import { XYPosition } from '../Interface';
+import type { INodeUi } from '@/Interface';
+import type { IConnection } from 'n8n-workflow';
+import type { XYPosition } from '../Interface';
 import { createEventBus } from '@/event-bus';
 
 // Command names don't serve any particular purpose in the app
diff --git a/packages/editor-ui/src/permissions.ts b/packages/editor-ui/src/permissions.ts
index 0635491cc9943..d2f0503c3fa95 100644
--- a/packages/editor-ui/src/permissions.ts
+++ b/packages/editor-ui/src/permissions.ts
@@ -4,13 +4,8 @@
  * @usage getCredentialPermissions(user, credential).isOwner;
  */
 
-import {
-	IUser,
-	ICredentialsResponse,
-	IRootState,
-	IWorkflowDb,
-	EnvironmentVariable,
-} from '@/Interface';
+import type { IUser, ICredentialsResponse, IWorkflowDb } from '@/Interface';
+import { IRootState, EnvironmentVariable } from '@/Interface';
 import { EnterpriseEditionFeature, PLACEHOLDER_EMPTY_WORKFLOW_ID } from '@/constants';
 import { useSettingsStore } from './stores/settings';
 
diff --git a/packages/editor-ui/src/plugins/codemirror/completions/__tests__/completions.test.ts b/packages/editor-ui/src/plugins/codemirror/completions/__tests__/completions.test.ts
index 7d8d89c5064cc..d99e41eea06cf 100644
--- a/packages/editor-ui/src/plugins/codemirror/completions/__tests__/completions.test.ts
+++ b/packages/editor-ui/src/plugins/codemirror/completions/__tests__/completions.test.ts
@@ -13,7 +13,8 @@ import {
 } from '@/plugins/codemirror/completions/datatype.completions';
 
 import { mockNodes, mockProxy } from './mock';
-import { CompletionContext, CompletionSource, CompletionResult } from '@codemirror/autocomplete';
+import type { CompletionSource, CompletionResult } from '@codemirror/autocomplete';
+import { CompletionContext } from '@codemirror/autocomplete';
 import { EditorState } from '@codemirror/state';
 import { n8nLang } from '@/plugins/codemirror/n8nLang';
 
diff --git a/packages/editor-ui/src/plugins/codemirror/completions/__tests__/mock.ts b/packages/editor-ui/src/plugins/codemirror/completions/__tests__/mock.ts
index 811e4276af4ff..9616deb087b58 100644
--- a/packages/editor-ui/src/plugins/codemirror/completions/__tests__/mock.ts
+++ b/packages/editor-ui/src/plugins/codemirror/completions/__tests__/mock.ts
@@ -1,17 +1,15 @@
 import { v4 as uuidv4 } from 'uuid';
-import {
+import type {
 	INode,
 	IConnections,
 	IRunExecutionData,
-	Workflow,
 	IExecuteData,
-	WorkflowDataProxy,
 	INodeType,
 	INodeTypeData,
 	INodeTypes,
 	IVersionedNodeType,
-	NodeHelpers,
 } from 'n8n-workflow';
+import { Workflow, WorkflowDataProxy, NodeHelpers } from 'n8n-workflow';
 
 class NodeTypesClass implements INodeTypes {
 	nodeTypes: INodeTypeData = {
diff --git a/packages/editor-ui/src/plugins/codemirror/completions/datatype.completions.ts b/packages/editor-ui/src/plugins/codemirror/completions/datatype.completions.ts
index 060a9604fc584..b2ad69094a5d6 100644
--- a/packages/editor-ui/src/plugins/codemirror/completions/datatype.completions.ts
+++ b/packages/editor-ui/src/plugins/codemirror/completions/datatype.completions.ts
@@ -1,4 +1,5 @@
-import { ExpressionExtensions, NativeMethods, IDataObject, DocMetadata } from 'n8n-workflow';
+import type { IDataObject, DocMetadata } from 'n8n-workflow';
+import { ExpressionExtensions, NativeMethods } from 'n8n-workflow';
 import { DateTime } from 'luxon';
 import { i18n } from '@/plugins/i18n';
 import { resolveParameter } from '@/mixins/workflowHelpers';
@@ -16,7 +17,7 @@ import {
 import type { Completion, CompletionContext, CompletionResult } from '@codemirror/autocomplete';
 import type { AutocompleteOptionType, ExtensionTypeName, FnToDoc, Resolved } from './types';
 import { sanitizeHtml } from '@/utils';
-import { NativeDoc } from 'n8n-workflow/src/Extensions/Extensions';
+import type { NativeDoc } from 'n8n-workflow/src/Extensions/Extensions';
 import { isFunctionOption } from './typeGuards';
 import { luxonInstanceDocs } from './nativesAutocompleteDocs/luxon.instance.docs';
 import { luxonStaticDocs } from './nativesAutocompleteDocs/luxon.static.docs';
diff --git a/packages/editor-ui/src/plugins/codemirror/completions/nativesAutocompleteDocs/luxon.instance.docs.ts b/packages/editor-ui/src/plugins/codemirror/completions/nativesAutocompleteDocs/luxon.instance.docs.ts
index 61e7f3e27cde6..9df1f5b6c86cb 100644
--- a/packages/editor-ui/src/plugins/codemirror/completions/nativesAutocompleteDocs/luxon.instance.docs.ts
+++ b/packages/editor-ui/src/plugins/codemirror/completions/nativesAutocompleteDocs/luxon.instance.docs.ts
@@ -1,4 +1,4 @@
-import { NativeDoc } from 'n8n-workflow/src/Extensions/Extensions';
+import type { NativeDoc } from 'n8n-workflow/src/Extensions/Extensions';
 
 // Autocomplete documentation definition for DateTime instance props and methods
 // Descriptions are added dynamically so they can be localized
diff --git a/packages/editor-ui/src/plugins/codemirror/completions/nativesAutocompleteDocs/luxon.static.docs.ts b/packages/editor-ui/src/plugins/codemirror/completions/nativesAutocompleteDocs/luxon.static.docs.ts
index db5fa9f3019dd..8d1ed738c2964 100644
--- a/packages/editor-ui/src/plugins/codemirror/completions/nativesAutocompleteDocs/luxon.static.docs.ts
+++ b/packages/editor-ui/src/plugins/codemirror/completions/nativesAutocompleteDocs/luxon.static.docs.ts
@@ -1,4 +1,4 @@
-import { NativeDoc } from 'n8n-workflow/src/Extensions/Extensions';
+import type { NativeDoc } from 'n8n-workflow/src/Extensions/Extensions';
 
 // Autocomplete documentation definition for DateTime class static props and methods
 // Descriptions are added dynamically so they can be localized
diff --git a/packages/editor-ui/src/plugins/codemirror/completions/typeGuards.ts b/packages/editor-ui/src/plugins/codemirror/completions/typeGuards.ts
index a27b9970111e2..74cbe9ec47a6e 100644
--- a/packages/editor-ui/src/plugins/codemirror/completions/typeGuards.ts
+++ b/packages/editor-ui/src/plugins/codemirror/completions/typeGuards.ts
@@ -1,4 +1,4 @@
-import { AutocompleteOptionType, FunctionOptionType } from './types';
+import type { AutocompleteOptionType, FunctionOptionType } from './types';
 
 export const isFunctionOption = (value: AutocompleteOptionType): value is FunctionOptionType => {
 	return value === 'native-function' || value === 'extension-function';
diff --git a/packages/editor-ui/src/plugins/codemirror/completions/types.ts b/packages/editor-ui/src/plugins/codemirror/completions/types.ts
index 4e12a5db6ff20..e85f05196e9bc 100644
--- a/packages/editor-ui/src/plugins/codemirror/completions/types.ts
+++ b/packages/editor-ui/src/plugins/codemirror/completions/types.ts
@@ -1,4 +1,4 @@
-import { resolveParameter } from '@/mixins/workflowHelpers';
+import type { resolveParameter } from '@/mixins/workflowHelpers';
 import type { DocMetadata } from 'n8n-workflow';
 
 export type Resolved = ReturnType<typeof resolveParameter>;
diff --git a/packages/editor-ui/src/plugins/codemirror/inputHandlers/code.inputHandler.ts b/packages/editor-ui/src/plugins/codemirror/inputHandlers/code.inputHandler.ts
index 74e026b321032..13bb282908652 100644
--- a/packages/editor-ui/src/plugins/codemirror/inputHandlers/code.inputHandler.ts
+++ b/packages/editor-ui/src/plugins/codemirror/inputHandlers/code.inputHandler.ts
@@ -1,5 +1,6 @@
 import { closeBrackets, completionStatus, insertBracket } from '@codemirror/autocomplete';
-import { codePointAt, codePointSize, Extension } from '@codemirror/state';
+import type { Extension } from '@codemirror/state';
+import { codePointAt, codePointSize } from '@codemirror/state';
 import { EditorView } from '@codemirror/view';
 
 const handler = EditorView.inputHandler.of((view, from, to, insert) => {
diff --git a/packages/editor-ui/src/plugins/codemirror/inputHandlers/expression.inputHandler.ts b/packages/editor-ui/src/plugins/codemirror/inputHandlers/expression.inputHandler.ts
index 01f07b5bfec5d..5337e847c6e7b 100644
--- a/packages/editor-ui/src/plugins/codemirror/inputHandlers/expression.inputHandler.ts
+++ b/packages/editor-ui/src/plugins/codemirror/inputHandlers/expression.inputHandler.ts
@@ -4,7 +4,8 @@ import {
 	insertBracket,
 	startCompletion,
 } from '@codemirror/autocomplete';
-import { codePointAt, codePointSize, Extension } from '@codemirror/state';
+import type { Extension } from '@codemirror/state';
+import { codePointAt, codePointSize } from '@codemirror/state';
 import { EditorView } from '@codemirror/view';
 
 const handler = EditorView.inputHandler.of((view, from, to, insert) => {
diff --git a/packages/editor-ui/src/plugins/codemirror/resolvableHighlighter.ts b/packages/editor-ui/src/plugins/codemirror/resolvableHighlighter.ts
index 489d637453a2f..8b5baa51fa082 100644
--- a/packages/editor-ui/src/plugins/codemirror/resolvableHighlighter.ts
+++ b/packages/editor-ui/src/plugins/codemirror/resolvableHighlighter.ts
@@ -1,4 +1,5 @@
-import { EditorView, Decoration, DecorationSet } from '@codemirror/view';
+import type { DecorationSet } from '@codemirror/view';
+import { EditorView, Decoration } from '@codemirror/view';
 import { StateField, StateEffect } from '@codemirror/state';
 import { tags } from '@lezer/highlight';
 import { syntaxHighlighting, HighlightStyle } from '@codemirror/language';
diff --git a/packages/editor-ui/src/plugins/connectors/N8nCustomConnector.ts b/packages/editor-ui/src/plugins/connectors/N8nCustomConnector.ts
index 75ec0a6ec5831..ac790dcc4aa1f 100644
--- a/packages/editor-ui/src/plugins/connectors/N8nCustomConnector.ts
+++ b/packages/editor-ui/src/plugins/connectors/N8nCustomConnector.ts
@@ -1,16 +1,15 @@
-import { PointXY, log, extend, quadrant } from '@jsplumb/util';
+import type { PointXY } from '@jsplumb/util';
+import { log, extend, quadrant } from '@jsplumb/util';
 
-import {
+import type {
 	Connection,
-	ArcSegment,
-	AbstractConnector,
 	ConnectorComputeParams,
 	PaintGeometry,
 	Endpoint,
-	StraightSegment,
 	Orientation,
 } from '@jsplumb/core';
-import { AnchorPlacement, ConnectorOptions, Geometry, PaintAxis } from '@jsplumb/common';
+import { ArcSegment, AbstractConnector, StraightSegment } from '@jsplumb/core';
+import type { AnchorPlacement, ConnectorOptions, Geometry, PaintAxis } from '@jsplumb/common';
 import { BezierSegment } from '@jsplumb/connector-bezier';
 import { isArray } from 'lodash-es';
 import { deepCopy } from 'n8n-workflow';
diff --git a/packages/editor-ui/src/plugins/endpoints/N8nPlusEndpointType.ts b/packages/editor-ui/src/plugins/endpoints/N8nPlusEndpointType.ts
index 377bba677001f..8481a2e350faf 100644
--- a/packages/editor-ui/src/plugins/endpoints/N8nPlusEndpointType.ts
+++ b/packages/editor-ui/src/plugins/endpoints/N8nPlusEndpointType.ts
@@ -1,5 +1,6 @@
-import { EndpointHandler, Endpoint, EndpointRepresentation, Overlay } from '@jsplumb/core';
-import { AnchorPlacement, EndpointRepresentationParams } from '@jsplumb/common';
+import type { EndpointHandler, Endpoint, Overlay } from '@jsplumb/core';
+import { EndpointRepresentation } from '@jsplumb/core';
+import type { AnchorPlacement, EndpointRepresentationParams } from '@jsplumb/common';
 import {
 	createElement,
 	EVENT_ENDPOINT_MOUSEOVER,
diff --git a/packages/editor-ui/src/plugins/i18n/index.ts b/packages/editor-ui/src/plugins/i18n/index.ts
index bb3daaf5f70fa..61e8c62be4586 100644
--- a/packages/editor-ui/src/plugins/i18n/index.ts
+++ b/packages/editor-ui/src/plugins/i18n/index.ts
@@ -1,7 +1,8 @@
 import Vue from 'vue';
 import axios from 'axios';
 import VueI18n from 'vue-i18n';
-import { INodeTranslationHeaders, IRootState } from '@/Interface';
+import type { INodeTranslationHeaders } from '@/Interface';
+import { IRootState } from '@/Interface';
 import {
 	deriveMiddleKey,
 	isNestedInCollectionLike,
@@ -13,7 +14,7 @@ import { locale } from 'n8n-design-system';
 import englishBaseText from './locales/en.json';
 import { useUIStore } from '@/stores/ui';
 import { useNDVStore } from '@/stores/ndv';
-import { INodeProperties, INodePropertyCollection, INodePropertyOptions } from 'n8n-workflow';
+import type { INodeProperties, INodePropertyCollection, INodePropertyOptions } from 'n8n-workflow';
 
 Vue.use(VueI18n);
 locale.use('en');
diff --git a/packages/editor-ui/src/plugins/telemetry/index.ts b/packages/editor-ui/src/plugins/telemetry/index.ts
index f4fcbdfb3c760..8d213483c649a 100644
--- a/packages/editor-ui/src/plugins/telemetry/index.ts
+++ b/packages/editor-ui/src/plugins/telemetry/index.ts
@@ -1,6 +1,6 @@
-import _Vue from 'vue';
-import { ITelemetrySettings, ITelemetryTrackProperties, IDataObject } from 'n8n-workflow';
-import { Route } from 'vue-router';
+import type _Vue from 'vue';
+import type { ITelemetrySettings, ITelemetryTrackProperties, IDataObject } from 'n8n-workflow';
+import type { Route } from 'vue-router';
 
 import type { INodeCreateElement } from '@/Interface';
 import type { IUserNodesPanelSession } from './telemetry.types';
diff --git a/packages/editor-ui/src/router.ts b/packages/editor-ui/src/router.ts
index 1fb6f0059a650..2d7920a06b518 100644
--- a/packages/editor-ui/src/router.ts
+++ b/packages/editor-ui/src/router.ts
@@ -20,7 +20,8 @@ import SettingsFakeDoorView from './views/SettingsFakeDoorView.vue';
 import SetupView from './views/SetupView.vue';
 import SigninView from './views/SigninView.vue';
 import SignupView from './views/SignupView.vue';
-import Router, { Route } from 'vue-router';
+import type { Route } from 'vue-router';
+import Router from 'vue-router';
 
 import TemplatesCollectionView from '@/views/TemplatesCollectionView.vue';
 import TemplatesWorkflowView from '@/views/TemplatesWorkflowView.vue';
@@ -29,9 +30,9 @@ import CredentialsView from '@/views/CredentialsView.vue';
 import ExecutionsView from '@/views/ExecutionsView.vue';
 import WorkflowsView from '@/views/WorkflowsView.vue';
 import VariablesView from '@/views/VariablesView.vue';
-import { IPermissions } from './Interface';
+import type { IPermissions } from './Interface';
 import { LOGIN_STATUS, ROLE } from '@/utils';
-import { RouteConfigSingleView } from 'vue-router/types/router';
+import type { RouteConfigSingleView } from 'vue-router/types/router';
 import { TEMPLATE_EXPERIMENT, VIEWS } from './constants';
 import { useSettingsStore } from './stores/settings';
 import { useTemplatesStore } from './stores/templates';
diff --git a/packages/editor-ui/src/stores/__tests__/environments.spec.ts b/packages/editor-ui/src/stores/__tests__/environments.spec.ts
index 3df3f6b28d165..c6fcd61b83a80 100644
--- a/packages/editor-ui/src/stores/__tests__/environments.spec.ts
+++ b/packages/editor-ui/src/stores/__tests__/environments.spec.ts
@@ -2,7 +2,7 @@ import { afterAll, beforeAll } from 'vitest';
 import { setActivePinia, createPinia } from 'pinia';
 import { setupServer } from '@/__tests__/server';
 import { useEnvironmentsStore } from '@/stores/environments.ee';
-import { EnvironmentVariable } from '@/Interface';
+import type { EnvironmentVariable } from '@/Interface';
 
 describe('store', () => {
 	let server: ReturnType<typeof setupServer>;
diff --git a/packages/editor-ui/src/stores/__tests__/posthog.test.ts b/packages/editor-ui/src/stores/__tests__/posthog.test.ts
index dbc870fc09598..b7054b232fb3f 100644
--- a/packages/editor-ui/src/stores/__tests__/posthog.test.ts
+++ b/packages/editor-ui/src/stores/__tests__/posthog.test.ts
@@ -4,7 +4,7 @@ import { useUsersStore } from '@/stores/users';
 import { useSettingsStore } from '@/stores/settings';
 import { useRootStore } from '@/stores/n8nRootStore';
 import { useTelemetryStore } from '@/stores/telemetry';
-import { IN8nUISettings } from 'n8n-workflow';
+import type { IN8nUISettings } from 'n8n-workflow';
 
 const DEFAULT_POSTHOG_SETTINGS: IN8nUISettings['posthog'] = {
 	enabled: true,
diff --git a/packages/editor-ui/src/stores/__tests__/sso.test.ts b/packages/editor-ui/src/stores/__tests__/sso.test.ts
index 1e2f0b437b2c2..d07cf3747ef8f 100644
--- a/packages/editor-ui/src/stores/__tests__/sso.test.ts
+++ b/packages/editor-ui/src/stores/__tests__/sso.test.ts
@@ -3,7 +3,7 @@ import { useSettingsStore } from '@/stores/settings';
 import { useSSOStore } from '@/stores/sso';
 import { merge } from 'lodash-es';
 import { SETTINGS_STORE_DEFAULT_STATE } from '@/__tests__/utils';
-import { IN8nUISettings } from 'n8n-workflow';
+import type { IN8nUISettings } from 'n8n-workflow';
 
 let ssoStore: ReturnType<typeof useSSOStore>;
 let settingsStore: ReturnType<typeof useSettingsStore>;
diff --git a/packages/editor-ui/src/stores/canvas.ts b/packages/editor-ui/src/stores/canvas.ts
index 7fa8329cb7500..8643c9261610b 100644
--- a/packages/editor-ui/src/stores/canvas.ts
+++ b/packages/editor-ui/src/stores/canvas.ts
@@ -6,7 +6,7 @@ import { useWorkflowsStore } from '@/stores/workflows';
 import { useNodeTypesStore } from '@/stores/nodeTypes';
 import { useUIStore } from '@/stores/ui';
 import { useHistoryStore } from '@/stores/history';
-import { INodeUi, XYPosition } from '@/Interface';
+import type { INodeUi, XYPosition } from '@/Interface';
 import { scaleBigger, scaleReset, scaleSmaller } from '@/utils';
 import { START_NODE_TYPE } from '@/constants';
 import type {
@@ -18,7 +18,8 @@ import { newInstance } from '@jsplumb/browser-ui';
 import { N8nPlusEndpointHandler } from '@/plugins/endpoints/N8nPlusEndpointType';
 import * as N8nPlusEndpointRenderer from '@/plugins/endpoints/N8nPlusEndpointRenderer';
 import { N8nConnector } from '@/plugins/connectors/N8nCustomConnector';
-import { EndpointFactory, Connectors, Connection } from '@jsplumb/core';
+import type { Connection } from '@jsplumb/core';
+import { EndpointFactory, Connectors } from '@jsplumb/core';
 import { MoveNodeCommand } from '@/models/history';
 import {
 	DEFAULT_PLACEHOLDER_TRIGGER_BUTTON,
@@ -32,7 +33,7 @@ import {
 	CONNECTOR_PAINT_STYLE_PRIMARY,
 	CONNECTOR_ARROW_OVERLAYS,
 } from '@/utils/nodeViewUtils';
-import { PointXY } from '@jsplumb/util';
+import type { PointXY } from '@jsplumb/util';
 
 export const useCanvasStore = defineStore('canvas', () => {
 	const workflowStore = useWorkflowsStore();
diff --git a/packages/editor-ui/src/stores/communityNodes.ts b/packages/editor-ui/src/stores/communityNodes.ts
index 4caa452a8f141..e8702b3ad8714 100644
--- a/packages/editor-ui/src/stores/communityNodes.ts
+++ b/packages/editor-ui/src/stores/communityNodes.ts
@@ -7,9 +7,9 @@ import {
 import { getAvailableCommunityPackageCount } from '@/api/settings';
 import { defineStore } from 'pinia';
 import { useRootStore } from './n8nRootStore';
-import { PublicInstalledPackage } from 'n8n-workflow';
+import type { PublicInstalledPackage } from 'n8n-workflow';
 import Vue from 'vue';
-import { CommunityNodesState, CommunityPackageMap } from '@/Interface';
+import type { CommunityNodesState, CommunityPackageMap } from '@/Interface';
 import { STORES } from '@/constants';
 
 const LOADER_DELAY = 300;
diff --git a/packages/editor-ui/src/stores/credentials.ts b/packages/editor-ui/src/stores/credentials.ts
index 0a622f8384930..d96fc2063ee87 100644
--- a/packages/editor-ui/src/stores/credentials.ts
+++ b/packages/editor-ui/src/stores/credentials.ts
@@ -1,4 +1,4 @@
-import { INodeUi, IUsedCredential } from './../Interface';
+import type { INodeUi, IUsedCredential } from './../Interface';
 import {
 	createNewCredential,
 	deleteCredential,
@@ -14,7 +14,7 @@ import {
 import { setCredentialSharedWith } from '@/api/credentials.ee';
 import { getAppNameFromCredType, makeRestApiRequest } from '@/utils';
 import { EnterpriseEditionFeature, STORES } from '@/constants';
-import {
+import type {
 	ICredentialMap,
 	ICredentialsDecryptedResponse,
 	ICredentialsResponse,
@@ -22,7 +22,7 @@ import {
 	ICredentialTypeMap,
 } from '@/Interface';
 import { i18n } from '@/plugins/i18n';
-import {
+import type {
 	ICredentialsDecrypted,
 	ICredentialType,
 	INodeCredentialTestResult,
diff --git a/packages/editor-ui/src/stores/environments.ee.ts b/packages/editor-ui/src/stores/environments.ee.ts
index ac28effe9a737..d5c78e28212cf 100644
--- a/packages/editor-ui/src/stores/environments.ee.ts
+++ b/packages/editor-ui/src/stores/environments.ee.ts
@@ -1,7 +1,7 @@
 import { defineStore } from 'pinia';
 import { useSettingsStore } from '@/stores/settings';
 import { computed, ref } from 'vue';
-import { EnvironmentVariable } from '@/Interface';
+import type { EnvironmentVariable } from '@/Interface';
 import * as environmentsApi from '@/api/environments.ee';
 import { useRootStore } from '@/stores/n8nRootStore';
 import { createVariable } from '@/api/environments.ee';
diff --git a/packages/editor-ui/src/stores/history.ts b/packages/editor-ui/src/stores/history.ts
index 5f79df10c9c79..db5095607d6eb 100644
--- a/packages/editor-ui/src/stores/history.ts
+++ b/packages/editor-ui/src/stores/history.ts
@@ -1,7 +1,8 @@
 import { AddConnectionCommand, COMMANDS, RemoveConnectionCommand } from './../models/history';
-import { BulkCommand, Command, Undoable, MoveNodeCommand } from '@/models/history';
+import type { Command, Undoable } from '@/models/history';
+import { BulkCommand, MoveNodeCommand } from '@/models/history';
 import { STORES } from '@/constants';
-import { HistoryState } from '@/Interface';
+import type { HistoryState } from '@/Interface';
 import { defineStore } from 'pinia';
 
 const STACK_LIMIT = 100;
diff --git a/packages/editor-ui/src/stores/logStreamingStore.ts b/packages/editor-ui/src/stores/logStreamingStore.ts
index 3c1794cbe53a2..e1b3a33661072 100644
--- a/packages/editor-ui/src/stores/logStreamingStore.ts
+++ b/packages/editor-ui/src/stores/logStreamingStore.ts
@@ -1,4 +1,5 @@
-import { deepCopy, MessageEventBusDestinationOptions } from 'n8n-workflow';
+import type { MessageEventBusDestinationOptions } from 'n8n-workflow';
+import { deepCopy } from 'n8n-workflow';
 import { defineStore } from 'pinia';
 import {
 	deleteDestinationFromDb,
diff --git a/packages/editor-ui/src/stores/n8nRootStore.ts b/packages/editor-ui/src/stores/n8nRootStore.ts
index 8abd800004797..8f071afe6fdff 100644
--- a/packages/editor-ui/src/stores/n8nRootStore.ts
+++ b/packages/editor-ui/src/stores/n8nRootStore.ts
@@ -1,6 +1,6 @@
 import { STORES } from '@/constants';
-import { IRestApiContext, RootState } from '@/Interface';
-import { IDataObject } from 'n8n-workflow';
+import type { IRestApiContext, RootState } from '@/Interface';
+import type { IDataObject } from 'n8n-workflow';
 import { defineStore } from 'pinia';
 import Vue from 'vue';
 import { useNodeTypesStore } from './nodeTypes';
diff --git a/packages/editor-ui/src/stores/ndv.ts b/packages/editor-ui/src/stores/ndv.ts
index caf76b11d9680..937c8b07b620f 100644
--- a/packages/editor-ui/src/stores/ndv.ts
+++ b/packages/editor-ui/src/stores/ndv.ts
@@ -1,6 +1,12 @@
 import { LOCAL_STORAGE_MAPPING_IS_ONBOARDED, STORES } from '@/constants';
-import { INodeUi, IRunDataDisplayMode, NDVState, NodePanelType, XYPosition } from '@/Interface';
-import { IRunData } from 'n8n-workflow';
+import type {
+	INodeUi,
+	IRunDataDisplayMode,
+	NDVState,
+	NodePanelType,
+	XYPosition,
+} from '@/Interface';
+import type { IRunData } from 'n8n-workflow';
 import { defineStore } from 'pinia';
 import Vue from 'vue';
 import { useWorkflowsStore } from './workflows';
diff --git a/packages/editor-ui/src/stores/nodeCreator.ts b/packages/editor-ui/src/stores/nodeCreator.ts
index f3709cd5e1d35..23ce3f4eef4b9 100644
--- a/packages/editor-ui/src/stores/nodeCreator.ts
+++ b/packages/editor-ui/src/stores/nodeCreator.ts
@@ -1,15 +1,15 @@
 import { startCase } from 'lodash-es';
 import { defineStore } from 'pinia';
-import {
+import type {
 	INodePropertyCollection,
 	INodePropertyOptions,
 	IDataObject,
 	INodeProperties,
 	INodeTypeDescription,
-	deepCopy,
 	INodeParameters,
 	INodeActionTypeDescription,
 } from 'n8n-workflow';
+import { deepCopy } from 'n8n-workflow';
 import {
 	STORES,
 	MANUAL_TRIGGER_NODE_TYPE,
@@ -21,9 +21,9 @@ import {
 import { useNodeTypesStore } from '@/stores/nodeTypes';
 import { useWorkflowsStore } from './workflows';
 import { CUSTOM_API_CALL_KEY } from '@/constants';
-import { INodeCreatorState, INodeFilterType, IUpdateInformation } from '@/Interface';
+import type { INodeCreatorState, INodeFilterType, IUpdateInformation } from '@/Interface';
 import { i18n } from '@/plugins/i18n';
-import { Telemetry } from '@/plugins/telemetry';
+import type { Telemetry } from '@/plugins/telemetry';
 import { runExternalHook } from '@/utils';
 import { useWebhooksStore } from '@/stores/webhooks';
 
diff --git a/packages/editor-ui/src/stores/nodeTypes.ts b/packages/editor-ui/src/stores/nodeTypes.ts
index d8d63e13d1c98..ff6259e79ae97 100644
--- a/packages/editor-ui/src/stores/nodeTypes.ts
+++ b/packages/editor-ui/src/stores/nodeTypes.ts
@@ -6,7 +6,7 @@ import {
 	getResourceLocatorResults,
 } from '@/api/nodeTypes';
 import { DEFAULT_NODETYPE_VERSION, STORES } from '@/constants';
-import {
+import type {
 	ICategoriesWithNodes,
 	INodeCreateElement,
 	INodeTypesState,
@@ -14,7 +14,7 @@ import {
 } from '@/Interface';
 import { addHeaders, addNodeTranslation } from '@/plugins/i18n';
 import { omit, getCategoriesWithNodes, getCategorizedList } from '@/utils';
-import {
+import type {
 	ILoadOptions,
 	INodeCredentials,
 	INodeListSearchResult,
diff --git a/packages/editor-ui/src/stores/posthog.ts b/packages/editor-ui/src/stores/posthog.ts
index 8c9d088b465a6..1e627eb287b5b 100644
--- a/packages/editor-ui/src/stores/posthog.ts
+++ b/packages/editor-ui/src/stores/posthog.ts
@@ -1,9 +1,10 @@
-import { ref, Ref } from 'vue';
+import type { Ref } from 'vue';
+import { ref } from 'vue';
 import { defineStore } from 'pinia';
 import { useUsersStore } from '@/stores/users';
 import { useRootStore } from '@/stores/n8nRootStore';
 import { useSettingsStore } from '@/stores/settings';
-import { FeatureFlags } from 'n8n-workflow';
+import type { FeatureFlags } from 'n8n-workflow';
 import {
 	EXPERIMENTS_TO_TRACK,
 	LOCAL_STORAGE_EXPERIMENT_OVERRIDES,
diff --git a/packages/editor-ui/src/stores/segment.ts b/packages/editor-ui/src/stores/segment.ts
index e51987c787eaf..d8b106add14e2 100644
--- a/packages/editor-ui/src/stores/segment.ts
+++ b/packages/editor-ui/src/stores/segment.ts
@@ -6,10 +6,10 @@ import {
 	SET_NODE_TYPE,
 	WEBHOOK_NODE_TYPE,
 } from '@/constants';
-import { ITelemetryTrackProperties } from 'n8n-workflow';
+import type { ITelemetryTrackProperties } from 'n8n-workflow';
 import { defineStore } from 'pinia';
 import { useSettingsStore } from '@/stores/settings';
-import { INodeTypeDescription, IRun } from 'n8n-workflow';
+import type { INodeTypeDescription, IRun } from 'n8n-workflow';
 import { useWorkflowsStore } from '@/stores/workflows';
 import { useNodeTypesStore } from '@/stores/nodeTypes';
 
diff --git a/packages/editor-ui/src/stores/settings.ts b/packages/editor-ui/src/stores/settings.ts
index a468d4b447970..04769f8edcea0 100644
--- a/packages/editor-ui/src/stores/settings.ts
+++ b/packages/editor-ui/src/stores/settings.ts
@@ -8,21 +8,17 @@ import {
 } from '@/api/ldap';
 import { getPromptsData, getSettings, submitContactInfo, submitValueSurvey } from '@/api/settings';
 import { testHealthEndpoint } from '@/api/templates';
-import {
-	CONTACT_PROMPT_MODAL_KEY,
-	EnterpriseEditionFeature,
-	STORES,
-	VALUE_SURVEY_MODAL_KEY,
-} from '@/constants';
-import {
+import type { EnterpriseEditionFeature } from '@/constants';
+import { CONTACT_PROMPT_MODAL_KEY, STORES, VALUE_SURVEY_MODAL_KEY } from '@/constants';
+import type {
 	ILdapConfig,
 	IN8nPromptResponse,
 	IN8nPrompts,
 	IN8nValueSurveyData,
 	ISettingsState,
-	UserManagementAuthenticationMethod,
 } from '@/Interface';
-import {
+import { UserManagementAuthenticationMethod } from '@/Interface';
+import type {
 	IDataObject,
 	ILogLevel,
 	IN8nUISettings,
diff --git a/packages/editor-ui/src/stores/sso.ts b/packages/editor-ui/src/stores/sso.ts
index 3de019a01a1ad..93fb389772d68 100644
--- a/packages/editor-ui/src/stores/sso.ts
+++ b/packages/editor-ui/src/stores/sso.ts
@@ -4,7 +4,7 @@ import { EnterpriseEditionFeature } from '@/constants';
 import { useRootStore } from '@/stores/n8nRootStore';
 import { useSettingsStore } from '@/stores/settings';
 import * as ssoApi from '@/api/sso';
-import { SamlPreferences } from '@/Interface';
+import type { SamlPreferences } from '@/Interface';
 import { updateCurrentUser } from '@/api/users';
 import { useUsersStore } from '@/stores/users';
 
diff --git a/packages/editor-ui/src/stores/tags.ts b/packages/editor-ui/src/stores/tags.ts
index 870b01a573189..70e37bc5f0a3d 100644
--- a/packages/editor-ui/src/stores/tags.ts
+++ b/packages/editor-ui/src/stores/tags.ts
@@ -1,6 +1,6 @@
 import { createTag, deleteTag, getTags, updateTag } from '@/api/tags';
 import { STORES } from '@/constants';
-import { ITag, ITagsState } from '@/Interface';
+import type { ITag, ITagsState } from '@/Interface';
 import { defineStore } from 'pinia';
 import Vue from 'vue';
 import { useRootStore } from './n8nRootStore';
diff --git a/packages/editor-ui/src/stores/telemetry.ts b/packages/editor-ui/src/stores/telemetry.ts
index 26338651a439e..ed3b68bbf01f4 100644
--- a/packages/editor-ui/src/stores/telemetry.ts
+++ b/packages/editor-ui/src/stores/telemetry.ts
@@ -1,7 +1,8 @@
 import type { Telemetry } from '@/plugins/telemetry';
-import { ITelemetryTrackProperties } from 'n8n-workflow';
+import type { ITelemetryTrackProperties } from 'n8n-workflow';
 import { defineStore } from 'pinia';
-import { ref, Ref } from 'vue';
+import type { Ref } from 'vue';
+import { ref } from 'vue';
 
 export const useTelemetryStore = defineStore('telemetry', () => {
 	const telemetry: Ref<Telemetry | undefined> = ref();
diff --git a/packages/editor-ui/src/stores/templates.ts b/packages/editor-ui/src/stores/templates.ts
index 9b59e30cd6514..694a5ca284879 100644
--- a/packages/editor-ui/src/stores/templates.ts
+++ b/packages/editor-ui/src/stores/templates.ts
@@ -1,6 +1,6 @@
 import { defineStore } from 'pinia';
 import { STORES } from '@/constants';
-import {
+import type {
 	ITemplatesCategory,
 	ITemplatesCollection,
 	ITemplatesCollectionFull,
diff --git a/packages/editor-ui/src/stores/ui.ts b/packages/editor-ui/src/stores/ui.ts
index e9b18cef260ba..cc9ce72dccca3 100644
--- a/packages/editor-ui/src/stores/ui.ts
+++ b/packages/editor-ui/src/stores/ui.ts
@@ -32,7 +32,7 @@ import {
 	WORKFLOW_SHARE_MODAL_KEY,
 	USER_ACTIVATION_SURVEY_MODAL,
 } from '@/constants';
-import {
+import type {
 	CurlToJSONResponse,
 	IFakeDoorLocation,
 	IMenuItem,
@@ -49,7 +49,8 @@ import { getCurlToJson } from '@/api/curlHelper';
 import { useWorkflowsStore } from './workflows';
 import { useSettingsStore } from './settings';
 import { useUsageStore } from './usage';
-import { i18n as locale, BaseTextKey } from '@/plugins/i18n';
+import type { BaseTextKey } from '@/plugins/i18n';
+import { i18n as locale } from '@/plugins/i18n';
 
 export const useUIStore = defineStore(STORES.UI, {
 	state: (): UIState => ({
diff --git a/packages/editor-ui/src/stores/usage.ts b/packages/editor-ui/src/stores/usage.ts
index e9e1b7dc77df2..49df9cb2f1bda 100644
--- a/packages/editor-ui/src/stores/usage.ts
+++ b/packages/editor-ui/src/stores/usage.ts
@@ -1,6 +1,6 @@
 import { computed, reactive } from 'vue';
 import { defineStore } from 'pinia';
-import { UsageState } from '@/Interface';
+import type { UsageState } from '@/Interface';
 import { activateLicenseKey, getLicense, renewLicense } from '@/api/usage';
 import { useRootStore } from '@/stores/n8nRootStore';
 import { useSettingsStore } from '@/stores/settings';
diff --git a/packages/editor-ui/src/stores/versions.ts b/packages/editor-ui/src/stores/versions.ts
index cc16d0c2da145..6642e71dad498 100644
--- a/packages/editor-ui/src/stores/versions.ts
+++ b/packages/editor-ui/src/stores/versions.ts
@@ -1,6 +1,6 @@
 import { getNextVersions } from '@/api/versions';
 import { STORES } from '@/constants';
-import { IVersion, IVersionNotificationSettings, IVersionsState } from '@/Interface';
+import type { IVersion, IVersionNotificationSettings, IVersionsState } from '@/Interface';
 import { defineStore } from 'pinia';
 import { useRootStore } from './n8nRootStore';
 
diff --git a/packages/editor-ui/src/stores/webhooks.ts b/packages/editor-ui/src/stores/webhooks.ts
index a628b3d301fc8..1aee8ed27773a 100644
--- a/packages/editor-ui/src/stores/webhooks.ts
+++ b/packages/editor-ui/src/stores/webhooks.ts
@@ -1,7 +1,7 @@
 import { STORES } from '@/constants';
-import { IFakeDoor, INodeUi, IRootState, NestedRecord } from '@/Interface';
-import { IMenuItem } from 'n8n-design-system';
-import { IWorkflowSettings } from 'n8n-workflow';
+import type { IFakeDoor, INodeUi, IRootState, NestedRecord } from '@/Interface';
+import type { IMenuItem } from 'n8n-design-system';
+import type { IWorkflowSettings } from 'n8n-workflow';
 import { defineStore } from 'pinia';
 import { useRootStore } from './n8nRootStore';
 import { useNDVStore } from './ndv';
diff --git a/packages/editor-ui/src/stores/workflows.ee.ts b/packages/editor-ui/src/stores/workflows.ee.ts
index 78f95173db9b9..0f9fcb83b971b 100644
--- a/packages/editor-ui/src/stores/workflows.ee.ts
+++ b/packages/editor-ui/src/stores/workflows.ee.ts
@@ -1,5 +1,5 @@
 import Vue from 'vue';
-import { IUser } from '../Interface';
+import type { IUser } from '../Interface';
 import { setWorkflowSharedWith } from '@/api/workflows.ee';
 import { EnterpriseEditionFeature, STORES } from '@/constants';
 import { useRootStore } from '@/stores/n8nRootStore';
diff --git a/packages/editor-ui/src/stores/workflows.ts b/packages/editor-ui/src/stores/workflows.ts
index bbfad903d9c50..e784a3a804083 100644
--- a/packages/editor-ui/src/stores/workflows.ts
+++ b/packages/editor-ui/src/stores/workflows.ts
@@ -8,7 +8,7 @@ import {
 	START_NODE_TYPE,
 	STORES,
 } from '@/constants';
-import {
+import type {
 	ExecutionsQueryFilter,
 	IActivationError,
 	IExecutionDeleteFilter,
@@ -32,12 +32,10 @@ import {
 	WorkflowsState,
 } from '@/Interface';
 import { defineStore } from 'pinia';
-import {
-	deepCopy,
+import type {
 	IAbstractEventMessage,
 	IConnection,
 	IConnections,
-	IDataObject,
 	IExecutionsSummary,
 	INode,
 	INodeConnections,
@@ -54,9 +52,9 @@ import {
 	IRunExecutionData,
 	ITaskData,
 	IWorkflowSettings,
-	NodeHelpers,
-	Workflow,
 } from 'n8n-workflow';
+import type { IDataObject } from 'n8n-workflow';
+import { deepCopy, NodeHelpers, Workflow } from 'n8n-workflow';
 import Vue from 'vue';
 
 import { useRootStore } from './n8nRootStore';
diff --git a/packages/editor-ui/src/utils/__tests__/mappingUtils.test.ts b/packages/editor-ui/src/utils/__tests__/mappingUtils.test.ts
index d8246a150fc04..51862efecab61 100644
--- a/packages/editor-ui/src/utils/__tests__/mappingUtils.test.ts
+++ b/packages/editor-ui/src/utils/__tests__/mappingUtils.test.ts
@@ -1,4 +1,4 @@
-import { INodeProperties } from 'n8n-workflow';
+import type { INodeProperties } from 'n8n-workflow';
 import { getMappedResult, getMappedExpression } from '../mappingUtils';
 
 const RLC_PARAM: INodeProperties = {
diff --git a/packages/editor-ui/src/utils/__tests__/typesUtils.test.ts b/packages/editor-ui/src/utils/__tests__/typesUtils.test.ts
index 5c87c1a5315d8..d914146b0d3cb 100644
--- a/packages/editor-ui/src/utils/__tests__/typesUtils.test.ts
+++ b/packages/editor-ui/src/utils/__tests__/typesUtils.test.ts
@@ -1,6 +1,6 @@
 import jp from 'jsonpath';
 import { isEmpty, intersection, getSchema, isValidDate } from '@/utils';
-import { Schema } from '@/Interface';
+import type { Schema } from '@/Interface';
 
 describe('Types Utils', () => {
 	describe('isEmpty', () => {
diff --git a/packages/editor-ui/src/utils/__tests__/userUtils.test.ts b/packages/editor-ui/src/utils/__tests__/userUtils.test.ts
index fbebefc4b45d5..b5ed96815724d 100644
--- a/packages/editor-ui/src/utils/__tests__/userUtils.test.ts
+++ b/packages/editor-ui/src/utils/__tests__/userUtils.test.ts
@@ -4,11 +4,11 @@ import { merge } from 'lodash-es';
 import { isAuthorized } from '@/utils';
 import { useSettingsStore } from '@/stores/settings';
 import { useSSOStore } from '@/stores/sso';
-import { IUser } from '@/Interface';
+import type { IUser } from '@/Interface';
 import { routes } from '@/router';
 import { VIEWS } from '@/constants';
 import { SETTINGS_STORE_DEFAULT_STATE } from '@/__tests__/utils';
-import { IN8nUISettings } from 'n8n-workflow';
+import type { IN8nUISettings } from 'n8n-workflow';
 
 const DEFAULT_SETTINGS: IN8nUISettings = SETTINGS_STORE_DEFAULT_STATE.settings;
 
diff --git a/packages/editor-ui/src/utils/apiUtils.ts b/packages/editor-ui/src/utils/apiUtils.ts
index e6a8900920c3e..6d7b809036366 100644
--- a/packages/editor-ui/src/utils/apiUtils.ts
+++ b/packages/editor-ui/src/utils/apiUtils.ts
@@ -1,5 +1,6 @@
-import axios, { AxiosRequestConfig, Method } from 'axios';
-import { IDataObject } from 'n8n-workflow';
+import type { AxiosRequestConfig, Method } from 'axios';
+import axios from 'axios';
+import type { IDataObject } from 'n8n-workflow';
 import type {
 	IExecutionFlattedResponse,
 	IExecutionResponse,
diff --git a/packages/editor-ui/src/utils/canvasUtils.ts b/packages/editor-ui/src/utils/canvasUtils.ts
index 258a0b3e9cdf4..5996802a8880c 100644
--- a/packages/editor-ui/src/utils/canvasUtils.ts
+++ b/packages/editor-ui/src/utils/canvasUtils.ts
@@ -1,9 +1,9 @@
 import { MAIN_HEADER_TABS, VIEWS } from '@/constants';
-import { IZoomConfig } from '@/Interface';
+import type { IZoomConfig } from '@/Interface';
 import { useWorkflowsStore } from '@/stores/workflows';
-import { ConnectionDetachedParams } from '@jsplumb/core';
-import { IConnection } from 'n8n-workflow';
-import { Route } from 'vue-router';
+import type { ConnectionDetachedParams } from '@jsplumb/core';
+import type { IConnection } from 'n8n-workflow';
+import type { Route } from 'vue-router';
 
 /*
 	Constants and utility functions mainly used by canvas store
diff --git a/packages/editor-ui/src/utils/executionUtils.ts b/packages/editor-ui/src/utils/executionUtils.ts
index 5c9babc306d4d..06a64b60d6a7a 100644
--- a/packages/editor-ui/src/utils/executionUtils.ts
+++ b/packages/editor-ui/src/utils/executionUtils.ts
@@ -1,5 +1,5 @@
-import { ExecutionStatus, IDataObject } from 'n8n-workflow';
-import { ExecutionFilterType, ExecutionsQueryFilter } from '@/Interface';
+import type { ExecutionStatus, IDataObject } from 'n8n-workflow';
+import type { ExecutionFilterType, ExecutionsQueryFilter } from '@/Interface';
 import { isEmpty } from '@/utils/typesUtils';
 
 export const executionFilterToQueryFilter = (
diff --git a/packages/editor-ui/src/utils/forceParse.ts b/packages/editor-ui/src/utils/forceParse.ts
index 427babd4ce76b..1b0136f0a4ebd 100644
--- a/packages/editor-ui/src/utils/forceParse.ts
+++ b/packages/editor-ui/src/utils/forceParse.ts
@@ -1,4 +1,4 @@
-import { EditorView } from '@codemirror/view';
+import type { EditorView } from '@codemirror/view';
 
 /**
  * Simulate user action to force parser to catch up during scroll.
diff --git a/packages/editor-ui/src/utils/mappingUtils.ts b/packages/editor-ui/src/utils/mappingUtils.ts
index bf07289b25141..47adeffdec228 100644
--- a/packages/editor-ui/src/utils/mappingUtils.ts
+++ b/packages/editor-ui/src/utils/mappingUtils.ts
@@ -1,4 +1,5 @@
-import { INodeProperties, isResourceLocatorValue, NodeParameterValueType } from 'n8n-workflow';
+import type { INodeProperties, NodeParameterValueType } from 'n8n-workflow';
+import { isResourceLocatorValue } from 'n8n-workflow';
 
 export function generatePath(root: string, path: Array<string | number>): string {
 	return path.reduce((accu: string, part: string | number) => {
diff --git a/packages/editor-ui/src/utils/nodeTypesUtils.ts b/packages/editor-ui/src/utils/nodeTypesUtils.ts
index 2d07bf93e95e4..0068601616a55 100644
--- a/packages/editor-ui/src/utils/nodeTypesUtils.ts
+++ b/packages/editor-ui/src/utils/nodeTypesUtils.ts
@@ -1,7 +1,7 @@
 import { MAIN_AUTH_FIELD_NAME, NODE_RESOURCE_FIELD_NAME } from './../constants';
 import { useWorkflowsStore } from '@/stores/workflows';
 import { useNodeTypesStore } from './../stores/nodeTypes';
-import { INodeCredentialDescription } from './../../../workflow/src/Interfaces';
+import type { INodeCredentialDescription } from './../../../workflow/src/Interfaces';
 import {
 	CORE_NODES_CATEGORY,
 	CUSTOM_NODES_CATEGORY,
@@ -16,7 +16,7 @@ import {
 	ALL_NODE_FILTER,
 	MAPPING_PARAMS,
 } from '@/constants';
-import {
+import type {
 	INodeCreateElement,
 	ICategoriesWithNodes,
 	INodeUi,
@@ -25,7 +25,7 @@ import {
 	NodeAuthenticationOption,
 	INodeUpdatePropertiesInformation,
 } from '@/Interface';
-import {
+import type {
 	IDataObject,
 	INodeExecutionData,
 	INodeProperties,
diff --git a/packages/editor-ui/src/utils/nodeViewUtils.ts b/packages/editor-ui/src/utils/nodeViewUtils.ts
index 6884924a38ac9..5398c8aade97e 100644
--- a/packages/editor-ui/src/utils/nodeViewUtils.ts
+++ b/packages/editor-ui/src/utils/nodeViewUtils.ts
@@ -1,12 +1,13 @@
 import { getStyleTokenValue } from '@/utils/htmlUtils';
 import { isNumber } from '@/utils';
 import { NODE_OUTPUT_DEFAULT_KEY, STICKY_NODE_TYPE, QUICKSTART_NOTE_NAME } from '@/constants';
-import { EndpointStyle, IBounds, INodeUi, XYPosition } from '@/Interface';
-import { ArrayAnchorSpec, ConnectorSpec, OverlaySpec, PaintStyle } from '@jsplumb/common';
-import { Endpoint, Connection, ConnectionEstablishedParams } from '@jsplumb/core';
+import type { EndpointStyle, IBounds, INodeUi, XYPosition } from '@/Interface';
+import type { ArrayAnchorSpec, ConnectorSpec, OverlaySpec, PaintStyle } from '@jsplumb/common';
+import type { Endpoint, Connection } from '@jsplumb/core';
+import { ConnectionEstablishedParams } from '@jsplumb/core';
 import { N8nConnector } from '@/plugins/connectors/N8nCustomConnector';
 import { closestNumberDivisibleBy } from '@/utils';
-import {
+import type {
 	IConnection,
 	INode,
 	ITaskData,
diff --git a/packages/editor-ui/src/utils/pairedItemUtils.ts b/packages/editor-ui/src/utils/pairedItemUtils.ts
index 3f1d2efc41846..0f5c0fc95ad94 100644
--- a/packages/editor-ui/src/utils/pairedItemUtils.ts
+++ b/packages/editor-ui/src/utils/pairedItemUtils.ts
@@ -1,5 +1,5 @@
-import { IPairedItemData, IRunData, ITaskData } from 'n8n-workflow';
-import { IExecutionResponse, TargetItem } from '../Interface';
+import type { IPairedItemData, IRunData, ITaskData } from 'n8n-workflow';
+import type { IExecutionResponse, TargetItem } from '../Interface';
 import { isNotNull } from '@/utils';
 
 /*
diff --git a/packages/editor-ui/src/utils/typeGuards.ts b/packages/editor-ui/src/utils/typeGuards.ts
index 0ccfa9b4613df..595505aff183d 100644
--- a/packages/editor-ui/src/utils/typeGuards.ts
+++ b/packages/editor-ui/src/utils/typeGuards.ts
@@ -1,6 +1,6 @@
-import { NewCredentialsModal } from './../Interface';
-import { INodeParameterResourceLocator } from 'n8n-workflow';
-import { ICredentialsResponse } from '@/Interface';
+import type { NewCredentialsModal } from './../Interface';
+import type { INodeParameterResourceLocator } from 'n8n-workflow';
+import type { ICredentialsResponse } from '@/Interface';
 
 /*
 	Type guards used in editor-ui project
diff --git a/packages/editor-ui/src/utils/typesUtils.ts b/packages/editor-ui/src/utils/typesUtils.ts
index 4a4f5d28b48f4..f3d158977c392 100644
--- a/packages/editor-ui/src/utils/typesUtils.ts
+++ b/packages/editor-ui/src/utils/typesUtils.ts
@@ -1,6 +1,7 @@
 import dateformat from 'dateformat';
-import { IDataObject, jsonParse } from 'n8n-workflow';
-import { Schema, Optional, Primitives } from '@/Interface';
+import type { IDataObject } from 'n8n-workflow';
+import { jsonParse } from 'n8n-workflow';
+import type { Schema, Optional, Primitives } from '@/Interface';
 import { isObj } from '@/utils/typeGuards';
 import { generatePath } from '@/utils/mappingUtils';
 import { DateTime } from 'luxon';
diff --git a/packages/editor-ui/src/utils/userUtils.ts b/packages/editor-ui/src/utils/userUtils.ts
index 2d7b1ce01b9e2..b745ea9c59184 100644
--- a/packages/editor-ui/src/utils/userUtils.ts
+++ b/packages/editor-ui/src/utils/userUtils.ts
@@ -60,7 +60,7 @@ import {
 	GOOGLE_SHEETS_NODE_TYPE,
 	CODE_NODE_TYPE,
 } from '@/constants';
-import {
+import type {
 	IPermissions,
 	IPersonalizationSurveyAnswersV1,
 	IPersonalizationSurveyAnswersV2,
@@ -69,7 +69,7 @@ import {
 	IPersonalizationSurveyVersions,
 	IUser,
 } from '@/Interface';
-import { ILogInStatus, IRole, IUserPermissions } from '@/Interface';
+import type { ILogInStatus, IRole, IUserPermissions } from '@/Interface';
 
 /*
 	Utility functions used to handle users in n8n
diff --git a/packages/editor-ui/src/views/CanvasAddButton.vue b/packages/editor-ui/src/views/CanvasAddButton.vue
index 945f8151b457d..5fa33c79c41fb 100644
--- a/packages/editor-ui/src/views/CanvasAddButton.vue
+++ b/packages/editor-ui/src/views/CanvasAddButton.vue
@@ -26,7 +26,7 @@
 
 <script setup lang="ts">
 import { computed } from 'vue';
-import { XYPosition } from '@/Interface';
+import type { XYPosition } from '@/Interface';
 import { useNodeCreatorStore } from '@/stores/nodeCreator';
 
 export interface Props {
diff --git a/packages/editor-ui/src/views/ChangePasswordView.vue b/packages/editor-ui/src/views/ChangePasswordView.vue
index a40bfefbe27ac..e88df40ca4467 100644
--- a/packages/editor-ui/src/views/ChangePasswordView.vue
+++ b/packages/editor-ui/src/views/ChangePasswordView.vue
@@ -13,7 +13,7 @@ import AuthView from './AuthView.vue';
 import { showMessage } from '@/mixins/showMessage';
 
 import mixins from 'vue-typed-mixins';
-import { IFormBoxConfig } from '@/Interface';
+import type { IFormBoxConfig } from '@/Interface';
 import { VIEWS } from '@/constants';
 import { mapStores } from 'pinia';
 import { useUsersStore } from '@/stores/users';
diff --git a/packages/editor-ui/src/views/CredentialsView.vue b/packages/editor-ui/src/views/CredentialsView.vue
index 7c037bce62da4..f05c52942a689 100644
--- a/packages/editor-ui/src/views/CredentialsView.vue
+++ b/packages/editor-ui/src/views/CredentialsView.vue
@@ -45,7 +45,8 @@
 
 <script lang="ts">
 import { showMessage } from '@/mixins/showMessage';
-import { ICredentialsResponse, ICredentialTypeMap, IUser } from '@/Interface';
+import type { ICredentialsResponse, ICredentialTypeMap } from '@/Interface';
+import { IUser } from '@/Interface';
 import mixins from 'vue-typed-mixins';
 
 import SettingsView from './SettingsView.vue';
@@ -53,13 +54,13 @@ import ResourcesListLayout from '@/components/layouts/ResourcesListLayout.vue';
 import PageViewLayout from '@/components/layouts/PageViewLayout.vue';
 import PageViewLayoutList from '@/components/layouts/PageViewLayoutList.vue';
 import CredentialCard from '@/components/CredentialCard.vue';
-import { ICredentialType } from 'n8n-workflow';
+import type { ICredentialType } from 'n8n-workflow';
 import TemplateCard from '@/components/TemplateCard.vue';
 import { debounceHelper } from '@/mixins/debounce';
 import ResourceOwnershipSelect from '@/components/forms/ResourceOwnershipSelect.ee.vue';
 import ResourceFiltersDropdown from '@/components/forms/ResourceFiltersDropdown.vue';
 import { CREDENTIAL_SELECT_MODAL_KEY } from '@/constants';
-import Vue from 'vue';
+import type Vue from 'vue';
 import { mapStores } from 'pinia';
 import { useUIStore } from '@/stores/ui';
 import { useUsersStore } from '@/stores/users';
diff --git a/packages/editor-ui/src/views/ForgotMyPasswordView.vue b/packages/editor-ui/src/views/ForgotMyPasswordView.vue
index e930f6285eb3d..4ae66a0200470 100644
--- a/packages/editor-ui/src/views/ForgotMyPasswordView.vue
+++ b/packages/editor-ui/src/views/ForgotMyPasswordView.vue
@@ -7,7 +7,7 @@ import AuthView from './AuthView.vue';
 import { showMessage } from '@/mixins/showMessage';
 
 import mixins from 'vue-typed-mixins';
-import { IFormBoxConfig } from '@/Interface';
+import type { IFormBoxConfig } from '@/Interface';
 import { mapStores } from 'pinia';
 import { useSettingsStore } from '@/stores/settings';
 import { useUsersStore } from '@/stores/users';
diff --git a/packages/editor-ui/src/views/NodeView.vue b/packages/editor-ui/src/views/NodeView.vue
index d5eaae0ecd164..d838c5812ed66 100644
--- a/packages/editor-ui/src/views/NodeView.vue
+++ b/packages/editor-ui/src/views/NodeView.vue
@@ -165,18 +165,20 @@
 import Vue from 'vue';
 import { mapStores } from 'pinia';
 
-import {
+import type {
 	Endpoint,
 	Connection,
-	EVENT_CONNECTION,
 	ConnectionEstablishedParams,
-	EVENT_CONNECTION_DETACHED,
-	EVENT_CONNECTION_MOVED,
-	INTERCEPT_BEFORE_DROP,
 	BeforeDropParams,
 	ConnectionDetachedParams,
 	ConnectionMovedParams,
 } from '@jsplumb/core';
+import {
+	EVENT_CONNECTION,
+	EVENT_CONNECTION_DETACHED,
+	EVENT_CONNECTION_MOVED,
+	INTERCEPT_BEFORE_DROP,
+} from '@jsplumb/core';
 import type { MessageBoxInputData } from 'element-ui/types/message-box';
 
 import {
@@ -220,8 +222,7 @@ import Sticky from '@/components/Sticky.vue';
 import CanvasAddButton from './CanvasAddButton.vue';
 import mixins from 'vue-typed-mixins';
 import { v4 as uuid } from 'uuid';
-import {
-	deepCopy,
+import type {
 	IConnection,
 	IConnections,
 	IDataObject,
@@ -237,10 +238,9 @@ import {
 	ITaskData,
 	ITelemetryTrackProperties,
 	IWorkflowBase,
-	NodeHelpers,
-	TelemetryHelpers,
 	Workflow,
 } from 'n8n-workflow';
+import { deepCopy, NodeHelpers, TelemetryHelpers } from 'n8n-workflow';
 import type {
 	ICredentialsResponse,
 	IExecutionResponse,
@@ -264,7 +264,7 @@ import { debounceHelper } from '@/mixins/debounce';
 import { useUIStore } from '@/stores/ui';
 import { useSettingsStore } from '@/stores/settings';
 import { useUsersStore } from '@/stores/users';
-import { Route, RawLocation } from 'vue-router';
+import type { Route, RawLocation } from 'vue-router';
 import { dataPinningEventBus, nodeViewEventBus } from '@/event-bus';
 import { useWorkflowsStore } from '@/stores/workflows';
 import { useRootStore } from '@/stores/n8nRootStore';
@@ -290,6 +290,7 @@ import {
 	RenameNodeCommand,
 	historyBus,
 } from '@/models/history';
+import type { BrowserJsPlumbInstance } from '@jsplumb/browser-ui';
 import {
 	EVENT_ENDPOINT_MOUSEOVER,
 	EVENT_ENDPOINT_MOUSEOUT,
@@ -298,11 +299,10 @@ import {
 	EVENT_CONNECTION_ABORT,
 	EVENT_CONNECTION_MOUSEOUT,
 	EVENT_CONNECTION_MOUSEOVER,
-	BrowserJsPlumbInstance,
 	ready,
 } from '@jsplumb/browser-ui';
+import type { N8nPlusEndpoint } from '@/plugins/endpoints/N8nPlusEndpointType';
 import {
-	N8nPlusEndpoint,
 	N8nPlusEndpointType,
 	EVENT_PLUS_ENDPOINT_CLICK,
 } from '@/plugins/endpoints/N8nPlusEndpointType';
diff --git a/packages/editor-ui/src/views/SamlOnboarding.vue b/packages/editor-ui/src/views/SamlOnboarding.vue
index 4a33f6a988678..a57fd8cbc0f22 100644
--- a/packages/editor-ui/src/views/SamlOnboarding.vue
+++ b/packages/editor-ui/src/views/SamlOnboarding.vue
@@ -2,7 +2,7 @@
 import { reactive, ref } from 'vue';
 import { useRouter } from 'vue-router/composables';
 import { Notification } from 'element-ui';
-import { IFormBoxConfig } from 'n8n-design-system';
+import type { IFormBoxConfig } from 'n8n-design-system';
 import AuthView from '@/views/AuthView.vue';
 import { i18n as locale } from '@/plugins/i18n';
 import { useSSOStore } from '@/stores/sso';
diff --git a/packages/editor-ui/src/views/SettingsApiView.vue b/packages/editor-ui/src/views/SettingsApiView.vue
index 21c7ce3abaf50..6321440d3b0c9 100644
--- a/packages/editor-ui/src/views/SettingsApiView.vue
+++ b/packages/editor-ui/src/views/SettingsApiView.vue
@@ -76,7 +76,7 @@
 
 <script lang="ts">
 import { showMessage } from '@/mixins/showMessage';
-import { IUser } from '@/Interface';
+import type { IUser } from '@/Interface';
 import mixins from 'vue-typed-mixins';
 
 import CopyInput from '@/components/CopyInput.vue';
diff --git a/packages/editor-ui/src/views/SettingsCommunityNodesView.vue b/packages/editor-ui/src/views/SettingsCommunityNodesView.vue
index c6e4dbfd6d9c4..694b8cccc1c26 100644
--- a/packages/editor-ui/src/views/SettingsCommunityNodesView.vue
+++ b/packages/editor-ui/src/views/SettingsCommunityNodesView.vue
@@ -61,7 +61,7 @@ import CommunityPackageCard from '@/components/CommunityPackageCard.vue';
 import { showMessage } from '@/mixins/showMessage';
 import { pushConnection } from '@/mixins/pushConnection';
 import mixins from 'vue-typed-mixins';
-import { PublicInstalledPackage } from 'n8n-workflow';
+import type { PublicInstalledPackage } from 'n8n-workflow';
 
 import { useCommunityNodesStore } from '@/stores/communityNodes';
 import { useUIStore } from '@/stores/ui';
diff --git a/packages/editor-ui/src/views/SettingsFakeDoorView.vue b/packages/editor-ui/src/views/SettingsFakeDoorView.vue
index b7da2f8c9db2e..2a15637b8a630 100644
--- a/packages/editor-ui/src/views/SettingsFakeDoorView.vue
+++ b/packages/editor-ui/src/views/SettingsFakeDoorView.vue
@@ -3,7 +3,7 @@
 </template>
 
 <script lang="ts">
-import { IFakeDoor } from '@/Interface';
+import type { IFakeDoor } from '@/Interface';
 import { defineComponent } from 'vue';
 import FeatureComingSoon from '@/components/FeatureComingSoon.vue';
 import { mapStores } from 'pinia';
diff --git a/packages/editor-ui/src/views/SettingsLdapView.vue b/packages/editor-ui/src/views/SettingsLdapView.vue
index bf3b449b1ddc4..75f9884c6042c 100644
--- a/packages/editor-ui/src/views/SettingsLdapView.vue
+++ b/packages/editor-ui/src/views/SettingsLdapView.vue
@@ -149,7 +149,7 @@
 <script lang="ts">
 import { convertToDisplayDate } from '@/utils';
 import { showMessage } from '@/mixins/showMessage';
-import {
+import type {
 	ILdapConfig,
 	ILdapSyncData,
 	ILdapSyncTable,
@@ -170,7 +170,7 @@ import { useSettingsStore } from '@/stores/settings';
 import { getLdapSynchronizations } from '@/api/ldap';
 import { N8N_CONTACT_EMAIL, N8N_SALES_EMAIL } from '@/constants';
 import { createEventBus } from '@/event-bus';
-import { N8nFormInputs } from 'n8n-design-system';
+import type { N8nFormInputs } from 'n8n-design-system';
 
 type N8nFormInputsRef = InstanceType<typeof N8nFormInputs>;
 
diff --git a/packages/editor-ui/src/views/SettingsLogStreamingView.vue b/packages/editor-ui/src/views/SettingsLogStreamingView.vue
index 0508462ed786b..47d63c35e593d 100644
--- a/packages/editor-ui/src/views/SettingsLogStreamingView.vue
+++ b/packages/editor-ui/src/views/SettingsLogStreamingView.vue
@@ -89,11 +89,8 @@ import { useLogStreamingStore } from '../stores/logStreamingStore';
 import { useSettingsStore } from '../stores/settings';
 import { useUIStore } from '../stores/ui';
 import { LOG_STREAM_MODAL_KEY, EnterpriseEditionFeature } from '../constants';
-import {
-	deepCopy,
-	defaultMessageEventBusDestinationOptions,
-	MessageEventBusDestinationOptions,
-} from 'n8n-workflow';
+import type { MessageEventBusDestinationOptions } from 'n8n-workflow';
+import { deepCopy, defaultMessageEventBusDestinationOptions } from 'n8n-workflow';
 import PageViewLayout from '@/components/layouts/PageViewLayout.vue';
 import EventDestinationCard from '@/components/SettingsLogStreaming/EventDestinationCard.ee.vue';
 import { createEventBus } from '@/event-bus';
diff --git a/packages/editor-ui/src/views/SettingsPersonalView.vue b/packages/editor-ui/src/views/SettingsPersonalView.vue
index 91263038cc675..edc5671d0cced 100644
--- a/packages/editor-ui/src/views/SettingsPersonalView.vue
+++ b/packages/editor-ui/src/views/SettingsPersonalView.vue
@@ -60,7 +60,7 @@
 <script lang="ts">
 import { showMessage } from '@/mixins/showMessage';
 import { CHANGE_PASSWORD_MODAL_KEY, SignInType } from '@/constants';
-import { IFormInputs, IUser } from '@/Interface';
+import type { IFormInputs, IUser } from '@/Interface';
 import { useUIStore } from '@/stores/ui';
 import { useUsersStore } from '@/stores/users';
 import { useSettingsStore } from '@/stores/settings';
diff --git a/packages/editor-ui/src/views/SettingsUsageAndPlan.vue b/packages/editor-ui/src/views/SettingsUsageAndPlan.vue
index e9e8803768200..5623e48fa4c4f 100644
--- a/packages/editor-ui/src/views/SettingsUsageAndPlan.vue
+++ b/packages/editor-ui/src/views/SettingsUsageAndPlan.vue
@@ -2,7 +2,8 @@
 import { computed, onMounted, ref } from 'vue';
 import { useRoute, useRouter } from 'vue-router/composables';
 import { Notification } from 'element-ui';
-import { UsageTelemetry, useUsageStore } from '@/stores/usage';
+import type { UsageTelemetry } from '@/stores/usage';
+import { useUsageStore } from '@/stores/usage';
 import { telemetry } from '@/plugins/telemetry';
 import { i18n as locale } from '@/plugins/i18n';
 import { N8N_PRICING_PAGE_URL } from '@/constants';
diff --git a/packages/editor-ui/src/views/SettingsUsersView.vue b/packages/editor-ui/src/views/SettingsUsersView.vue
index 56d724a2c3475..1a0f995328230 100644
--- a/packages/editor-ui/src/views/SettingsUsersView.vue
+++ b/packages/editor-ui/src/views/SettingsUsersView.vue
@@ -62,7 +62,7 @@
 import { EnterpriseEditionFeature, INVITE_USER_MODAL_KEY, VIEWS } from '@/constants';
 
 import PageAlert from '../components/PageAlert.vue';
-import { IUser, IUserListAction } from '@/Interface';
+import type { IUser, IUserListAction } from '@/Interface';
 import mixins from 'vue-typed-mixins';
 import { showMessage } from '@/mixins/showMessage';
 import { copyPaste } from '@/mixins/copyPaste';
diff --git a/packages/editor-ui/src/views/SettingsView.vue b/packages/editor-ui/src/views/SettingsView.vue
index a5016ce6a9cd8..37adbe9c609fc 100644
--- a/packages/editor-ui/src/views/SettingsView.vue
+++ b/packages/editor-ui/src/views/SettingsView.vue
@@ -15,7 +15,7 @@
 
 <script lang="ts">
 import { defineComponent } from 'vue';
-import { Route } from 'vue-router';
+import type { Route } from 'vue-router';
 
 import { VIEWS } from '@/constants';
 import SettingsSidebar from '@/components/SettingsSidebar.vue';
diff --git a/packages/editor-ui/src/views/SetupView.vue b/packages/editor-ui/src/views/SetupView.vue
index 15a290a905c6b..264c9c22ee76d 100644
--- a/packages/editor-ui/src/views/SetupView.vue
+++ b/packages/editor-ui/src/views/SetupView.vue
@@ -13,7 +13,7 @@ import AuthView from './AuthView.vue';
 import { showMessage } from '@/mixins/showMessage';
 
 import mixins from 'vue-typed-mixins';
-import { IFormBoxConfig } from '@/Interface';
+import type { IFormBoxConfig } from '@/Interface';
 import { VIEWS } from '@/constants';
 import { mapStores } from 'pinia';
 import { useUIStore } from '@/stores/ui';
diff --git a/packages/editor-ui/src/views/SigninView.vue b/packages/editor-ui/src/views/SigninView.vue
index 33eed26eec0bf..e758f79218c75 100644
--- a/packages/editor-ui/src/views/SigninView.vue
+++ b/packages/editor-ui/src/views/SigninView.vue
@@ -13,7 +13,7 @@ import AuthView from './AuthView.vue';
 import { showMessage } from '@/mixins/showMessage';
 
 import mixins from 'vue-typed-mixins';
-import { IFormBoxConfig } from '@/Interface';
+import type { IFormBoxConfig } from '@/Interface';
 import { VIEWS } from '@/constants';
 import { mapStores } from 'pinia';
 import { useUsersStore } from '@/stores/users';
diff --git a/packages/editor-ui/src/views/SignupView.vue b/packages/editor-ui/src/views/SignupView.vue
index f46e26a5b191d..012f0920182d9 100644
--- a/packages/editor-ui/src/views/SignupView.vue
+++ b/packages/editor-ui/src/views/SignupView.vue
@@ -12,7 +12,7 @@ import AuthView from './AuthView.vue';
 import { showMessage } from '@/mixins/showMessage';
 
 import mixins from 'vue-typed-mixins';
-import { IFormBoxConfig } from '@/Interface';
+import type { IFormBoxConfig } from '@/Interface';
 import { VIEWS } from '@/constants';
 import { mapStores } from 'pinia';
 import { useUIStore } from '@/stores/ui';
diff --git a/packages/editor-ui/src/views/TemplatesCollectionView.vue b/packages/editor-ui/src/views/TemplatesCollectionView.vue
index 08e5dc90bebca..720a7929b4ff6 100644
--- a/packages/editor-ui/src/views/TemplatesCollectionView.vue
+++ b/packages/editor-ui/src/views/TemplatesCollectionView.vue
@@ -55,7 +55,7 @@ import TemplateList from '@/components/TemplateList.vue';
 import TemplatesView from './TemplatesView.vue';
 
 import { workflowHelpers } from '@/mixins/workflowHelpers';
-import {
+import type {
 	ITemplatesCollection,
 	ITemplatesCollectionFull,
 	ITemplatesWorkflow,
diff --git a/packages/editor-ui/src/views/TemplatesSearchView.vue b/packages/editor-ui/src/views/TemplatesSearchView.vue
index 4fb65f08215e2..6a4670af49d4f 100644
--- a/packages/editor-ui/src/views/TemplatesSearchView.vue
+++ b/packages/editor-ui/src/views/TemplatesSearchView.vue
@@ -81,14 +81,14 @@ import TemplateList from '@/components/TemplateList.vue';
 import TemplatesView from './TemplatesView.vue';
 
 import { genericHelpers } from '@/mixins/genericHelpers';
-import {
+import type {
 	ITemplatesCollection,
 	ITemplatesWorkflow,
 	ITemplatesQuery,
 	ITemplatesCategory,
 } from '@/Interface';
 import mixins from 'vue-typed-mixins';
-import { IDataObject } from 'n8n-workflow';
+import type { IDataObject } from 'n8n-workflow';
 import { setPageTitle } from '@/utils';
 import { VIEWS } from '@/constants';
 import { debounceHelper } from '@/mixins/debounce';
diff --git a/packages/editor-ui/src/views/TemplatesWorkflowView.vue b/packages/editor-ui/src/views/TemplatesWorkflowView.vue
index 8d1812203f62c..47139550d23c9 100644
--- a/packages/editor-ui/src/views/TemplatesWorkflowView.vue
+++ b/packages/editor-ui/src/views/TemplatesWorkflowView.vue
@@ -59,7 +59,7 @@ import TemplateDetails from '@/components/TemplateDetails.vue';
 import TemplatesView from './TemplatesView.vue';
 import WorkflowPreview from '@/components/WorkflowPreview.vue';
 
-import { ITemplatesWorkflow, ITemplatesWorkflowFull } from '@/Interface';
+import type { ITemplatesWorkflow, ITemplatesWorkflowFull } from '@/Interface';
 import { workflowHelpers } from '@/mixins/workflowHelpers';
 import mixins from 'vue-typed-mixins';
 import { setPageTitle } from '@/utils';
diff --git a/packages/editor-ui/src/views/VariablesView.vue b/packages/editor-ui/src/views/VariablesView.vue
index 8f4b0a242a91c..d3dd983858c76 100644
--- a/packages/editor-ui/src/views/VariablesView.vue
+++ b/packages/editor-ui/src/views/VariablesView.vue
@@ -7,7 +7,11 @@ import ResourcesListLayout from '@/components/layouts/ResourcesListLayout.vue';
 import VariablesRow from '@/components/VariablesRow.vue';
 
 import { EnterpriseEditionFeature } from '@/constants';
-import { DatatableColumn, EnvironmentVariable, TemporaryEnvironmentVariable } from '@/Interface';
+import type {
+	DatatableColumn,
+	EnvironmentVariable,
+	TemporaryEnvironmentVariable,
+} from '@/Interface';
 import { uid } from 'n8n-design-system/utils';
 import { getVariablesPermissions } from '@/permissions';
 
diff --git a/packages/editor-ui/src/views/WorkflowsView.vue b/packages/editor-ui/src/views/WorkflowsView.vue
index dec78a5880d96..34716ed45958c 100644
--- a/packages/editor-ui/src/views/WorkflowsView.vue
+++ b/packages/editor-ui/src/views/WorkflowsView.vue
@@ -100,8 +100,8 @@ import WorkflowCard from '@/components/WorkflowCard.vue';
 import TemplateCard from '@/components/TemplateCard.vue';
 import { EnterpriseEditionFeature, ASSUMPTION_EXPERIMENT, VIEWS } from '@/constants';
 import { debounceHelper } from '@/mixins/debounce';
-import Vue from 'vue';
-import { ITag, IUser, IWorkflowDb } from '@/Interface';
+import type Vue from 'vue';
+import type { ITag, IUser, IWorkflowDb } from '@/Interface';
 import TagsDropdown from '@/components/TagsDropdown.vue';
 import { mapStores } from 'pinia';
 import { useUIStore } from '@/stores/ui';
diff --git a/packages/editor-ui/src/views/__tests__/SettingsSso.test.ts b/packages/editor-ui/src/views/__tests__/SettingsSso.test.ts
index a5675017186aa..20c64a8f7fefc 100644
--- a/packages/editor-ui/src/views/__tests__/SettingsSso.test.ts
+++ b/packages/editor-ui/src/views/__tests__/SettingsSso.test.ts
@@ -9,7 +9,7 @@ import { useSSOStore } from '@/stores/sso';
 import { STORES } from '@/constants';
 import { SETTINGS_STORE_DEFAULT_STATE, waitAllPromises } from '@/__tests__/utils';
 import { i18nInstance } from '@/plugins/i18n';
-import { SamlPreferences, SamlPreferencesExtractedData } from '@/Interface';
+import type { SamlPreferences, SamlPreferencesExtractedData } from '@/Interface';
 
 let pinia: ReturnType<typeof createTestingPinia>;
 let ssoStore: ReturnType<typeof useSSOStore>;
diff --git a/packages/node-dev/.eslintrc.js b/packages/node-dev/.eslintrc.js
index 8efac7bc90e71..228cb3e921520 100644
--- a/packages/node-dev/.eslintrc.js
+++ b/packages/node-dev/.eslintrc.js
@@ -10,7 +10,6 @@ module.exports = {
 		'templates/**', // TODO: remove this
 	],
 	rules: {
-		'@typescript-eslint/consistent-type-imports': 'error',
 		'import/order': 'off', // TODO: remove this
 		'@typescript-eslint/ban-ts-comment': ['warn', { 'ts-ignore': true }],
 	},
diff --git a/packages/nodes-base/.eslintrc.js b/packages/nodes-base/.eslintrc.js
index a06183204c694..a3cf1ef0fc6f5 100644
--- a/packages/nodes-base/.eslintrc.js
+++ b/packages/nodes-base/.eslintrc.js
@@ -11,8 +11,6 @@ module.exports = {
 	ignorePatterns: ['index.js'],
 
 	rules: {
-		'@typescript-eslint/consistent-type-imports': 'error',
-
 		// TODO: remove all the following rules
 		eqeqeq: 'off',
 		'id-denylist': 'off',
diff --git a/packages/workflow/.eslintrc.js b/packages/workflow/.eslintrc.js
index 52e41e2d2d03a..51b395f058b56 100644
--- a/packages/workflow/.eslintrc.js
+++ b/packages/workflow/.eslintrc.js
@@ -9,7 +9,6 @@ module.exports = {
 	...sharedOptions(__dirname),
 
 	rules: {
-		'@typescript-eslint/consistent-type-imports': 'error',
 		'import/order': 'off', // TODO: remove this
 	},
 };

From 03be725cef3ea533ec032a9554df5da15f725b78 Mon Sep 17 00:00:00 2001
From: Jimw383 <47244243+Jimw383@users.noreply.github.com>
Date: Mon, 24 Apr 2023 12:36:50 +0200
Subject: [PATCH 4/5] SSO/SAML : add Base URL to redirects in acsHandler
 (#5923)

add Base URL to redirects in acsHandler

I modified the redirections to include the base URL of the instance so that the redirects remain correct even if the instance is accessed from a subdirectory.

Co-authored-by: Michael Auerswald <michael.auerswald@gmail.com>
---
 packages/cli/src/sso/saml/routes/saml.controller.ee.ts | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/packages/cli/src/sso/saml/routes/saml.controller.ee.ts b/packages/cli/src/sso/saml/routes/saml.controller.ee.ts
index 232020b5945f9..c6b04cae460ef 100644
--- a/packages/cli/src/sso/saml/routes/saml.controller.ee.ts
+++ b/packages/cli/src/sso/saml/routes/saml.controller.ee.ts
@@ -1,4 +1,5 @@
 import express from 'express';
+import { getInstanceBaseUrl } from '@/UserManagement/UserManagementHelper';
 import { Authorized, Get, Post, RestController } from '@/decorators';
 import { SamlUrls } from '../constants';
 import {
@@ -125,9 +126,9 @@ export class SamlController {
 				if (isSamlLicensedAndEnabled()) {
 					await issueCookie(res, loginResult.authenticatedUser);
 					if (loginResult.onboardingRequired) {
-						return res.redirect(SamlUrls.samlOnboarding);
+						return res.redirect(getInstanceBaseUrl() + SamlUrls.samlOnboarding);
 					} else {
-						return res.redirect(SamlUrls.defaultRedirect);
+						return res.redirect(getInstanceBaseUrl() + SamlUrls.defaultRedirect);
 					}
 				} else {
 					return res.status(202).send(loginResult.attributes);

From 308a94311fe6e20617dde62e9ac87e9e547c7c9d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E0=A4=95=E0=A4=BE=E0=A4=B0=E0=A4=A4=E0=A5=8B=E0=A4=AB?=
 =?UTF-8?q?=E0=A5=8D=E0=A4=AB=E0=A5=87=E0=A4=B2=E0=A4=B8=E0=A5=8D=E0=A4=95?=
 =?UTF-8?q?=E0=A5=8D=E0=A4=B0=E0=A4=BF=E0=A4=AA=E0=A5=8D=E0=A4=9F=E2=84=A2?=
 <netroy@users.noreply.github.com>
Date: Mon, 24 Apr 2023 11:17:08 +0000
Subject: [PATCH 5/5] refactor: Async functions don't need to explicitly return
 promises (no-changelog) (#6041)

---
 packages/cli/src/CredentialsHelper.ts         |  4 +-
 packages/cli/src/InternalHooks.ts             |  6 +-
 packages/cli/src/Ldap/LdapService.ee.ts       |  2 +-
 packages/cli/src/posthog/index.ts             |  2 +-
 packages/cli/src/sso/saml/saml.service.ee.ts  |  3 +-
 packages/cli/src/telemetry/index.ts           |  2 +-
 .../test/integration/ldap/ldap.api.test.ts    | 28 ++----
 packages/cli/test/integration/shared/utils.ts |  4 +-
 .../cli/test/unit/ActiveExecutions.test.ts    |  2 +-
 .../test/unit/ActiveWorkflowRunner.test.ts    |  9 +-
 .../WorkflowExecuteAdditionalData.test.ts     |  2 +-
 .../core/src/BinaryDataManager/FileSystem.ts  | 98 +++++++++----------
 packages/core/src/BinaryDataManager/index.ts  | 20 ++--
 packages/core/src/WorkflowExecute.ts          | 12 +--
 .../src/components/ExecutionsList.vue         | 15 ++-
 .../layouts/ResourcesListLayout.vue           |  2 +-
 .../editor-ui/src/mixins/workflowHelpers.ts   | 12 +--
 packages/editor-ui/src/plugins/i18n/index.ts  |  8 +-
 packages/editor-ui/src/stores/settings.ts     | 30 +++---
 packages/editor-ui/src/views/NodeView.vue     | 21 ++--
 packages/nodes-base/nodes/Code/Code.node.ts   |  4 +-
 .../nodes/Function/Function.node.ts           |  2 +-
 .../nodes/FunctionItem/FunctionItem.node.ts   |  4 +-
 .../nodes/Google/Ads/CampaignDescription.ts   | 18 ++--
 .../test/v2/node/executeQuery.test.ts         |  9 +-
 .../test/v2/node/insert.autoMapMode.test.ts   |  9 +-
 .../test/v2/node/insert.manualMode.test.ts    | 11 +--
 .../nodes/MySql/test/v2/operations.test.ts    |  6 +-
 .../nodes/MySql/test/v2/runQueries.test.ts    |  4 +-
 .../nodes/Postgres/test/v2/operations.test.ts |  2 +-
 packages/workflow/src/Workflow.ts             |  8 +-
 31 files changed, 149 insertions(+), 210 deletions(-)

diff --git a/packages/cli/src/CredentialsHelper.ts b/packages/cli/src/CredentialsHelper.ts
index 2851638360576..cfc86bfd263af 100644
--- a/packages/cli/src/CredentialsHelper.ts
+++ b/packages/cli/src/CredentialsHelper.ts
@@ -542,10 +542,10 @@ export class CredentialsHelper extends ICredentialsHelper {
 	): Promise<INodeCredentialTestResult> {
 		const credentialTestFunction = this.getCredentialTestFunction(credentialType);
 		if (credentialTestFunction === undefined) {
-			return Promise.resolve({
+			return {
 				status: 'Error',
 				message: 'No testing function found for this credential.',
-			});
+			};
 		}
 
 		if (credentialsDecrypted.data) {
diff --git a/packages/cli/src/InternalHooks.ts b/packages/cli/src/InternalHooks.ts
index 6a1ab61b64715..965f84642b6fa 100644
--- a/packages/cli/src/InternalHooks.ts
+++ b/packages/cli/src/InternalHooks.ts
@@ -271,12 +271,12 @@ export class InternalHooks implements IInternalHooksClass {
 		runData?: IRun,
 		userId?: string,
 	): Promise<void> {
-		const promises = [Promise.resolve()];
-
 		if (!workflow.id) {
-			return Promise.resolve();
+			return;
 		}
 
+		const promises = [];
+
 		const properties: IExecutionTrackProperties = {
 			workflow_id: workflow.id,
 			is_manual: false,
diff --git a/packages/cli/src/Ldap/LdapService.ee.ts b/packages/cli/src/Ldap/LdapService.ee.ts
index bc5432cbea6ef..63394a4145fe4 100644
--- a/packages/cli/src/Ldap/LdapService.ee.ts
+++ b/packages/cli/src/Ldap/LdapService.ee.ts
@@ -82,7 +82,7 @@ export class LdapService {
 			await this.client.unbind();
 			return searchEntries;
 		}
-		return Promise.resolve([]);
+		return [];
 	}
 
 	/**
diff --git a/packages/cli/src/posthog/index.ts b/packages/cli/src/posthog/index.ts
index e513e366366cf..df390c53b39a8 100644
--- a/packages/cli/src/posthog/index.ts
+++ b/packages/cli/src/posthog/index.ts
@@ -44,7 +44,7 @@ export class PostHogClient {
 	}
 
 	async getFeatureFlags(user: Pick<PublicUser, 'id' | 'createdAt'>): Promise<FeatureFlags> {
-		if (!this.postHog) return Promise.resolve({});
+		if (!this.postHog) return {};
 
 		const fullId = [this.instanceId, user.id].join('#');
 
diff --git a/packages/cli/src/sso/saml/saml.service.ee.ts b/packages/cli/src/sso/saml/saml.service.ee.ts
index b1a764c724094..b16d14600e1d8 100644
--- a/packages/cli/src/sso/saml/saml.service.ee.ts
+++ b/packages/cli/src/sso/saml/saml.service.ee.ts
@@ -73,9 +73,8 @@ export class SamlService {
 			validate: async (response: string) => {
 				const valid = await validateResponse(response);
 				if (!valid) {
-					return Promise.reject(new Error('Invalid SAML response'));
+					throw new Error('Invalid SAML response');
 				}
-				return Promise.resolve();
 			},
 		});
 	}
diff --git a/packages/cli/src/telemetry/index.ts b/packages/cli/src/telemetry/index.ts
index cdc7b96f8be74..7edb6f6172f41 100644
--- a/packages/cli/src/telemetry/index.ts
+++ b/packages/cli/src/telemetry/index.ts
@@ -76,7 +76,7 @@ export class Telemetry {
 
 	private async pulse(): Promise<unknown> {
 		if (!this.rudderStack) {
-			return Promise.resolve();
+			return;
 		}
 
 		const allPromises = Object.keys(this.executionCountsBuffer).map(async (workflowId) => {
diff --git a/packages/cli/test/integration/ldap/ldap.api.test.ts b/packages/cli/test/integration/ldap/ldap.api.test.ts
index 2bb766be937b9..eaffa15494f23 100644
--- a/packages/cli/test/integration/ldap/ldap.api.test.ts
+++ b/packages/cli/test/integration/ldap/ldap.api.test.ts
@@ -205,9 +205,7 @@ test('GET /ldap/config route should retrieve current configuration', async () =>
 
 describe('POST /ldap/test-connection', () => {
 	test('route should success', async () => {
-		jest
-			.spyOn(LdapService.prototype, 'testConnection')
-			.mockImplementation(async () => Promise.resolve());
+		jest.spyOn(LdapService.prototype, 'testConnection').mockResolvedValue();
 
 		const response = await authAgent(owner).post('/ldap/test-connection');
 		expect(response.statusCode).toBe(200);
@@ -216,9 +214,7 @@ describe('POST /ldap/test-connection', () => {
 	test('route should fail', async () => {
 		const errorMessage = 'Invalid connection';
 
-		jest
-			.spyOn(LdapService.prototype, 'testConnection')
-			.mockImplementation(async () => Promise.reject(new Error(errorMessage)));
+		jest.spyOn(LdapService.prototype, 'testConnection').mockRejectedValue(new Error(errorMessage));
 
 		const response = await authAgent(owner).post('/ldap/test-connection');
 		expect(response.statusCode).toBe(400);
@@ -240,9 +236,7 @@ describe('POST /ldap/sync', () => {
 
 	describe('dry mode', () => {
 		const runTest = async (ldapUsers: LdapUser[]) => {
-			jest
-				.spyOn(LdapService.prototype, 'searchWithAdminBinding')
-				.mockImplementation(async () => Promise.resolve(ldapUsers));
+			jest.spyOn(LdapService.prototype, 'searchWithAdminBinding').mockResolvedValue(ldapUsers);
 
 			const response = await authAgent(owner).post('/ldap/sync').send({ type: 'dry' });
 
@@ -337,9 +331,7 @@ describe('POST /ldap/sync', () => {
 
 	describe('live mode', () => {
 		const runTest = async (ldapUsers: LdapUser[]) => {
-			jest
-				.spyOn(LdapService.prototype, 'searchWithAdminBinding')
-				.mockImplementation(async () => Promise.resolve(ldapUsers));
+			jest.spyOn(LdapService.prototype, 'searchWithAdminBinding').mockResolvedValue(ldapUsers);
 
 			const response = await authAgent(owner).post('/ldap/sync').send({ type: 'live' });
 
@@ -467,9 +459,7 @@ describe('POST /ldap/sync', () => {
 		test('should remove user instance access once the user is disabled during synchronization', async () => {
 			const member = await testDb.createLdapUser({ globalRole: globalMemberRole }, uniqueId());
 
-			jest
-				.spyOn(LdapService.prototype, 'searchWithAdminBinding')
-				.mockImplementation(async () => Promise.resolve([]));
+			jest.spyOn(LdapService.prototype, 'searchWithAdminBinding').mockResolvedValue([]);
 
 			await authAgent(owner).post('/ldap/sync').send({ type: 'live' });
 
@@ -508,13 +498,9 @@ describe('POST /login', () => {
 
 		const authlessAgent = utils.createAgent(app);
 
-		jest
-			.spyOn(LdapService.prototype, 'searchWithAdminBinding')
-			.mockImplementation(async () => Promise.resolve([ldapUser]));
+		jest.spyOn(LdapService.prototype, 'searchWithAdminBinding').mockResolvedValue([ldapUser]);
 
-		jest
-			.spyOn(LdapService.prototype, 'validUser')
-			.mockImplementation(async () => Promise.resolve());
+		jest.spyOn(LdapService.prototype, 'validUser').mockResolvedValue();
 
 		const response = await authlessAgent
 			.post('/login')
diff --git a/packages/cli/test/integration/shared/utils.ts b/packages/cli/test/integration/shared/utils.ts
index 3625caf661a84..9e8e4aa2b1ab8 100644
--- a/packages/cli/test/integration/shared/utils.ts
+++ b/packages/cli/test/integration/shared/utils.ts
@@ -799,11 +799,11 @@ export function installedNodePayload(packageName: string): InstalledNodePayload
 	};
 }
 
-export const emptyPackage = () => {
+export const emptyPackage = async () => {
 	const installedPackage = new InstalledPackages();
 	installedPackage.installedNodes = [];
 
-	return Promise.resolve(installedPackage);
+	return installedPackage;
 };
 
 // ----------------------------------
diff --git a/packages/cli/test/unit/ActiveExecutions.test.ts b/packages/cli/test/unit/ActiveExecutions.test.ts
index 19c1d316e6a5b..3f27677052db8 100644
--- a/packages/cli/test/unit/ActiveExecutions.test.ts
+++ b/packages/cli/test/unit/ActiveExecutions.test.ts
@@ -18,7 +18,7 @@ jest.mock('@/Db', () => {
 	return {
 		collections: {
 			Execution: {
-				save: jest.fn(async () => Promise.resolve({ id: FAKE_EXECUTION_ID })),
+				save: jest.fn(async () => ({ id: FAKE_EXECUTION_ID })),
 				update: jest.fn(),
 			},
 		},
diff --git a/packages/cli/test/unit/ActiveWorkflowRunner.test.ts b/packages/cli/test/unit/ActiveWorkflowRunner.test.ts
index efe6fe22960c8..ab1232cde6e62 100644
--- a/packages/cli/test/unit/ActiveWorkflowRunner.test.ts
+++ b/packages/cli/test/unit/ActiveWorkflowRunner.test.ts
@@ -99,12 +99,11 @@ jest.mock('@/Db', () => {
 	return {
 		collections: {
 			Workflow: {
-				find: jest.fn(async () => Promise.resolve(generateWorkflows(databaseActiveWorkflowsCount))),
+				find: jest.fn(async () => generateWorkflows(databaseActiveWorkflowsCount)),
 				findOne: jest.fn(async (searchParams) => {
-					const foundWorkflow = databaseActiveWorkflowsList.find(
+					return databaseActiveWorkflowsList.find(
 						(workflow) => workflow.id.toString() === searchParams.where.id.toString(),
 					);
-					return Promise.resolve(foundWorkflow);
 				}),
 				update: jest.fn(),
 				createQueryBuilder: jest.fn(() => {
@@ -112,7 +111,7 @@ jest.mock('@/Db', () => {
 						update: () => fakeQueryBuilder,
 						set: () => fakeQueryBuilder,
 						where: () => fakeQueryBuilder,
-						execute: () => Promise.resolve(),
+						execute: async () => {},
 					};
 					return fakeQueryBuilder;
 				}),
@@ -246,7 +245,7 @@ describe('ActiveWorkflowRunner', () => {
 		const workflow = generateWorkflows(1);
 		const additionalData = await WorkflowExecuteAdditionalData.getBase('fake-user-id');
 
-		workflowRunnerRun.mockImplementationOnce(() => Promise.resolve('invalid-execution-id'));
+		workflowRunnerRun.mockResolvedValueOnce('invalid-execution-id');
 
 		await activeWorkflowRunner.runWorkflow(
 			workflow[0],
diff --git a/packages/cli/test/unit/WorkflowExecuteAdditionalData.test.ts b/packages/cli/test/unit/WorkflowExecuteAdditionalData.test.ts
index 9d364bd788939..6007c0dd74b81 100644
--- a/packages/cli/test/unit/WorkflowExecuteAdditionalData.test.ts
+++ b/packages/cli/test/unit/WorkflowExecuteAdditionalData.test.ts
@@ -6,7 +6,7 @@ jest.mock('@/Db', () => {
 	return {
 		collections: {
 			ExecutionMetadata: {
-				save: jest.fn(async () => Promise.resolve([])),
+				save: jest.fn(async () => []),
 			},
 		},
 	};
diff --git a/packages/core/src/BinaryDataManager/FileSystem.ts b/packages/core/src/BinaryDataManager/FileSystem.ts
index df033569752f1..011a5cd5eedae 100644
--- a/packages/core/src/BinaryDataManager/FileSystem.ts
+++ b/packages/core/src/BinaryDataManager/FileSystem.ts
@@ -134,63 +134,58 @@ export class BinaryDataFileSystem implements IBinaryDataManager {
 
 		const execsAdded: { [key: string]: number } = {};
 
-		const proms = metaFileNames.reduce(
-			(prev, curr) => {
-				const [prefix, executionId, ts] = curr.split('_');
+		const promises = metaFileNames.reduce<Array<Promise<void>>>((prev, curr) => {
+			const [prefix, executionId, ts] = curr.split('_');
 
-				if (prefix !== filePrefix) {
+			if (prefix !== filePrefix) {
+				return prev;
+			}
+
+			const execTimestamp = parseInt(ts, 10);
+
+			if (execTimestamp < currentTimeValue) {
+				if (execsAdded[executionId]) {
+					// do not delete data, only meta file
+					prev.push(this.deleteMetaFileByPath(path.join(metaPath, curr)));
 					return prev;
 				}
 
-				const execTimestamp = parseInt(ts, 10);
-
-				if (execTimestamp < currentTimeValue) {
-					if (execsAdded[executionId]) {
-						// do not delete data, only meta file
-						prev.push(this.deleteMetaFileByPath(path.join(metaPath, curr)));
-						return prev;
-					}
-
-					execsAdded[executionId] = 1;
-					prev.push(
-						this.deleteBinaryDataByExecutionId(executionId).then(async () =>
-							this.deleteMetaFileByPath(path.join(metaPath, curr)),
-						),
-					);
-				}
+				execsAdded[executionId] = 1;
+				prev.push(
+					this.deleteBinaryDataByExecutionId(executionId).then(async () =>
+						this.deleteMetaFileByPath(path.join(metaPath, curr)),
+					),
+				);
+			}
 
-				return prev;
-			},
-			[Promise.resolve()],
-		);
+			return prev;
+		}, []);
 
-		return Promise.all(proms).then(() => {});
+		await Promise.all(promises);
 	}
 
 	async duplicateBinaryDataByIdentifier(binaryDataId: string, prefix: string): Promise<string> {
 		const newBinaryDataId = this.generateFileName(prefix);
 
-		return fs
-			.copyFile(this.resolveStoragePath(binaryDataId), this.resolveStoragePath(newBinaryDataId))
-			.then(() => newBinaryDataId);
+		await fs.copyFile(
+			this.resolveStoragePath(binaryDataId),
+			this.resolveStoragePath(newBinaryDataId),
+		);
+		return newBinaryDataId;
 	}
 
 	async deleteBinaryDataByExecutionId(executionId: string): Promise<void> {
 		const regex = new RegExp(`${executionId}_*`);
 		const filenames = await fs.readdir(this.storagePath);
 
-		const proms = filenames.reduce(
-			(allProms, filename) => {
-				if (regex.test(filename)) {
-					allProms.push(fs.rm(this.resolveStoragePath(filename)));
-				}
-
-				return allProms;
-			},
-			[Promise.resolve()],
-		);
+		const promises = filenames.reduce<Array<Promise<void>>>((allProms, filename) => {
+			if (regex.test(filename)) {
+				allProms.push(fs.rm(this.resolveStoragePath(filename)));
+			}
+			return allProms;
+		}, []);
 
-		return Promise.all(proms).then(async () => Promise.resolve());
+		await Promise.all(promises);
 	}
 
 	async deleteBinaryDataByIdentifier(identifier: string): Promise<void> {
@@ -198,20 +193,17 @@ export class BinaryDataFileSystem implements IBinaryDataManager {
 	}
 
 	async persistBinaryDataForExecutionId(executionId: string): Promise<void> {
-		return fs.readdir(this.getBinaryDataPersistMetaPath()).then(async (metafiles) => {
-			const proms = metafiles.reduce(
-				(prev, curr) => {
-					if (curr.startsWith(`${PREFIX_PERSISTED_METAFILE}_${executionId}_`)) {
-						prev.push(fs.rm(path.join(this.getBinaryDataPersistMetaPath(), curr)));
-						return prev;
-					}
-
+		return fs.readdir(this.getBinaryDataPersistMetaPath()).then(async (metaFiles) => {
+			const promises = metaFiles.reduce<Array<Promise<void>>>((prev, curr) => {
+				if (curr.startsWith(`${PREFIX_PERSISTED_METAFILE}_${executionId}_`)) {
+					prev.push(fs.rm(path.join(this.getBinaryDataPersistMetaPath(), curr)));
 					return prev;
-				},
-				[Promise.resolve()],
-			);
+				}
+
+				return prev;
+			}, []);
 
-			return Promise.all(proms).then(() => {});
+			await Promise.all(promises);
 		});
 	}
 
@@ -227,8 +219,8 @@ export class BinaryDataFileSystem implements IBinaryDataManager {
 		return path.join(this.storagePath, 'persistMeta');
 	}
 
-	private async deleteMetaFileByPath(metafilePath: string): Promise<void> {
-		return fs.rm(metafilePath);
+	private async deleteMetaFileByPath(metaFilePath: string): Promise<void> {
+		return fs.rm(metaFilePath);
 	}
 
 	private async deleteFromLocalStorage(identifier: string) {
diff --git a/packages/core/src/BinaryDataManager/index.ts b/packages/core/src/BinaryDataManager/index.ts
index b3ddb8738d6c6..d1c85f5b797ed 100644
--- a/packages/core/src/BinaryDataManager/index.ts
+++ b/packages/core/src/BinaryDataManager/index.ts
@@ -158,38 +158,30 @@ export class BinaryDataManager {
 
 	async markDataForDeletionByExecutionId(executionId: string): Promise<void> {
 		if (this.managers[this.binaryDataMode]) {
-			return this.managers[this.binaryDataMode].markDataForDeletionByExecutionId(executionId);
+			await this.managers[this.binaryDataMode].markDataForDeletionByExecutionId(executionId);
 		}
-
-		return Promise.resolve();
 	}
 
 	async markDataForDeletionByExecutionIds(executionIds: string[]): Promise<void> {
 		if (this.managers[this.binaryDataMode]) {
-			return Promise.all(
+			await Promise.all(
 				executionIds.map(async (id) =>
 					this.managers[this.binaryDataMode].markDataForDeletionByExecutionId(id),
 				),
-			).then(() => {});
+			);
 		}
-
-		return Promise.resolve();
 	}
 
 	async persistBinaryDataForExecutionId(executionId: string): Promise<void> {
 		if (this.managers[this.binaryDataMode]) {
-			return this.managers[this.binaryDataMode].persistBinaryDataForExecutionId(executionId);
+			await this.managers[this.binaryDataMode].persistBinaryDataForExecutionId(executionId);
 		}
-
-		return Promise.resolve();
 	}
 
 	async deleteBinaryDataByExecutionId(executionId: string): Promise<void> {
 		if (this.managers[this.binaryDataMode]) {
-			return this.managers[this.binaryDataMode].deleteBinaryDataByExecutionId(executionId);
+			await this.managers[this.binaryDataMode].deleteBinaryDataByExecutionId(executionId);
 		}
-
-		return Promise.resolve();
 	}
 
 	async duplicateBinaryData(
@@ -218,7 +210,7 @@ export class BinaryDataManager {
 			return Promise.all(returnInputData);
 		}
 
-		return Promise.resolve(inputData as INodeExecutionData[][]);
+		return inputData as INodeExecutionData[][];
 	}
 
 	private generateBinaryId(filename: string) {
diff --git a/packages/core/src/WorkflowExecute.ts b/packages/core/src/WorkflowExecute.ts
index 480a2b2f80e0c..00e7a3f84f01c 100644
--- a/packages/core/src/WorkflowExecute.ts
+++ b/packages/core/src/WorkflowExecute.ts
@@ -792,7 +792,7 @@ export class WorkflowExecute {
 					}
 
 					if (gotCancel) {
-						return Promise.resolve();
+						return;
 					}
 
 					nodeSuccessData = null;
@@ -919,7 +919,7 @@ export class WorkflowExecute {
 
 					for (let tryIndex = 0; tryIndex < maxTries; tryIndex++) {
 						if (gotCancel) {
-							return Promise.resolve();
+							return;
 						}
 						try {
 							if (tryIndex !== 0) {
@@ -1175,10 +1175,8 @@ export class WorkflowExecute {
 									outputIndex
 								]) {
 									if (!workflow.nodes.hasOwnProperty(connectionData.node)) {
-										return Promise.reject(
-											new Error(
-												`The node "${executionNode.name}" connects to not found node "${connectionData.node}"`,
-											),
+										throw new Error(
+											`The node "${executionNode.name}" connects to not found node "${connectionData.node}"`,
 										);
 									}
 
@@ -1212,7 +1210,7 @@ export class WorkflowExecute {
 					]);
 				}
 
-				return Promise.resolve();
+				return;
 			})()
 				.then(async () => {
 					if (gotCancel && executionError === undefined) {
diff --git a/packages/editor-ui/src/components/ExecutionsList.vue b/packages/editor-ui/src/components/ExecutionsList.vue
index b5db196fb6b3f..a26d349a40cb8 100644
--- a/packages/editor-ui/src/components/ExecutionsList.vue
+++ b/packages/editor-ui/src/components/ExecutionsList.vue
@@ -527,15 +527,12 @@ export default mixins(externalHooks, genericHelpers, executionHelpers, showMessa
 			// Suppose 504 finishes before 500, 501, 502 and 503.
 			// iF you use firstId, filtering id >= 504 you won't
 			// ever get ids 500, 501, 502 and 503 when they finish
-			const pastExecutionsPromise: Promise<IExecutionsListResponse> =
-				this.workflowsStore.getPastExecutions(filter, this.requestItemsPerRequest);
-			const currentExecutionsPromise: Promise<IExecutionsCurrentSummaryExtended[]> = isEmpty(
-				filter.metadata,
-			)
-				? this.workflowsStore.getCurrentExecutions({})
-				: Promise.resolve([]);
-
-			const results = await Promise.all([pastExecutionsPromise, currentExecutionsPromise]);
+			const promises = [this.workflowsStore.getPastExecutions(filter, this.requestItemsPerRequest)];
+			if (isEmpty(filter.metadata)) {
+				promises.push(this.workflowsStore.getCurrentExecutions({}));
+			}
+
+			const results = await Promise.all(promises);
 
 			for (const activeExecution of results[1]) {
 				if (
diff --git a/packages/editor-ui/src/components/layouts/ResourcesListLayout.vue b/packages/editor-ui/src/components/layouts/ResourcesListLayout.vue
index 8cc4512b4cbcd..9ac79df859a43 100644
--- a/packages/editor-ui/src/components/layouts/ResourcesListLayout.vue
+++ b/packages/editor-ui/src/components/layouts/ResourcesListLayout.vue
@@ -250,7 +250,7 @@ export default mixins(showMessage, debounceHelper).extend({
 		},
 		initialize: {
 			type: Function as PropType<() => Promise<void>>,
-			default: () => () => Promise.resolve(),
+			default: () => async () => {},
 		},
 		filters: {
 			type: Object,
diff --git a/packages/editor-ui/src/mixins/workflowHelpers.ts b/packages/editor-ui/src/mixins/workflowHelpers.ts
index 7f9a00b6148cd..6550a39a384f5 100644
--- a/packages/editor-ui/src/mixins/workflowHelpers.ts
+++ b/packages/editor-ui/src/mixins/workflowHelpers.ts
@@ -460,7 +460,7 @@ export const workflowHelpers = mixins(externalHooks, nodeHelpers, showMessage).e
 		},
 
 		// Returns the currently loaded workflow as JSON.
-		getWorkflowDataToSave(): Promise<IWorkflowData> {
+		async getWorkflowDataToSave(): Promise<IWorkflowData> {
 			const workflowNodes = this.workflowsStore.allNodes;
 			const workflowConnections = this.workflowsStore.allConnections;
 
@@ -468,12 +468,8 @@ export const workflowHelpers = mixins(externalHooks, nodeHelpers, showMessage).e
 
 			const nodes = [];
 			for (let nodeIndex = 0; nodeIndex < workflowNodes.length; nodeIndex++) {
-				try {
-					// @ts-ignore
-					nodeData = this.getNodeDataToSave(workflowNodes[nodeIndex]);
-				} catch (e) {
-					return Promise.reject(e);
-				}
+				// @ts-ignore
+				nodeData = this.getNodeDataToSave(workflowNodes[nodeIndex]);
 
 				nodes.push(nodeData);
 			}
@@ -494,7 +490,7 @@ export const workflowHelpers = mixins(externalHooks, nodeHelpers, showMessage).e
 				data.id = workflowId;
 			}
 
-			return Promise.resolve(data);
+			return data;
 		},
 
 		// Returns all node-types
diff --git a/packages/editor-ui/src/plugins/i18n/index.ts b/packages/editor-ui/src/plugins/i18n/index.ts
index 61e8c62be4586..579f66d91837e 100644
--- a/packages/editor-ui/src/plugins/i18n/index.ts
+++ b/packages/editor-ui/src/plugins/i18n/index.ts
@@ -535,14 +535,16 @@ function setLanguage(language: string) {
 }
 
 export async function loadLanguage(language?: string) {
-	if (!language) return Promise.resolve();
+	if (!language) return;
 
 	if (i18nInstance.locale === language) {
-		return Promise.resolve(setLanguage(language));
+		setLanguage(language);
+		return;
 	}
 
 	if (loadedLanguages.includes(language)) {
-		return Promise.resolve(setLanguage(language));
+		setLanguage(language);
+		return;
 	}
 
 	const { numberFormats, ...rest } = (await import(`./locales/${language}.json`)).default;
diff --git a/packages/editor-ui/src/stores/settings.ts b/packages/editor-ui/src/stores/settings.ts
index 04769f8edcea0..12e7edcc901a2 100644
--- a/packages/editor-ui/src/stores/settings.ts
+++ b/packages/editor-ui/src/stores/settings.ts
@@ -243,27 +243,23 @@ export const useSettingsStore = defineStore(STORES.SETTINGS, {
 		},
 		async fetchPromptsData(): Promise<void> {
 			if (!this.isTelemetryEnabled) {
-				Promise.resolve();
+				return;
 			}
-			try {
-				const uiStore = useUIStore();
-				const usersStore = useUsersStore();
-				const promptsData: IN8nPrompts = await getPromptsData(
-					this.settings.instanceId,
-					usersStore.currentUserId || '',
-				);
 
-				if (promptsData && promptsData.showContactPrompt) {
-					uiStore.openModal(CONTACT_PROMPT_MODAL_KEY);
-				} else if (promptsData && promptsData.showValueSurvey) {
-					uiStore.openModal(VALUE_SURVEY_MODAL_KEY);
-				}
+			const uiStore = useUIStore();
+			const usersStore = useUsersStore();
+			const promptsData: IN8nPrompts = await getPromptsData(
+				this.settings.instanceId,
+				usersStore.currentUserId || '',
+			);
 
-				this.setPromptsData(promptsData);
-				Promise.resolve();
-			} catch (error) {
-				Promise.reject(error);
+			if (promptsData && promptsData.showContactPrompt) {
+				uiStore.openModal(CONTACT_PROMPT_MODAL_KEY);
+			} else if (promptsData && promptsData.showValueSurvey) {
+				uiStore.openModal(VALUE_SURVEY_MODAL_KEY);
 			}
+
+			this.setPromptsData(promptsData);
 		},
 		async submitContactInfo(email: string): Promise<IN8nPromptResponse | undefined> {
 			try {
diff --git a/packages/editor-ui/src/views/NodeView.vue b/packages/editor-ui/src/views/NodeView.vue
index d838c5812ed66..323b1e922ad8f 100644
--- a/packages/editor-ui/src/views/NodeView.vue
+++ b/packages/editor-ui/src/views/NodeView.vue
@@ -445,7 +445,7 @@ export default mixins(
 				}
 			} else if (confirmModal === MODAL_CANCEL) {
 				this.workflowsStore.setWorkflowId(PLACEHOLDER_EMPTY_WORKFLOW_ID);
-				await this.resetWorkspace();
+				this.resetWorkspace();
 				this.uiStore.stateIsDirty = false;
 				next();
 			}
@@ -2529,7 +2529,7 @@ export default mixins(
 		},
 		async newWorkflow(): Promise<void> {
 			this.startLoading();
-			await this.resetWorkspace();
+			this.resetWorkspace();
 			this.workflowData = await this.workflowsStore.getNewWorkflowData();
 			this.workflowsStore.currentWorkflowExecutions = [];
 			this.workflowsStore.activeWorkflowExecution = null;
@@ -2551,7 +2551,7 @@ export default mixins(
 				// In case the workflow got saved we do not have to run init
 				// as only the route changed but all the needed data is already loaded
 				this.uiStore.stateIsDirty = false;
-				return Promise.resolve();
+				return;
 			}
 			if (this.blankRedirect) {
 				this.blankRedirect = false;
@@ -2573,7 +2573,7 @@ export default mixins(
 						const saved = await this.saveCurrentWorkflow();
 						if (saved) await this.settingsStore.fetchPromptsData();
 					} else if (confirmModal === MODAL_CLOSE) {
-						return Promise.resolve();
+						return;
 					}
 				}
 				// Load a workflow
@@ -3473,7 +3473,7 @@ export default mixins(
 				connections: tempWorkflow.connectionsBySourceNode,
 			};
 		},
-		getSelectedNodesToSave(): Promise<IWorkflowData> {
+		async getSelectedNodesToSave(): Promise<IWorkflowData> {
 			const data: IWorkflowData = {
 				nodes: [],
 				connections: {},
@@ -3484,12 +3484,8 @@ export default mixins(
 			const exportNodeNames: string[] = [];
 
 			for (const node of this.uiStore.getSelectedNodes) {
-				try {
-					nodeData = this.getNodeDataToSave(node);
-					exportNodeNames.push(node.name);
-				} catch (e) {
-					return Promise.reject(e);
-				}
+				nodeData = this.getNodeDataToSave(node);
+				exportNodeNames.push(node.name);
 
 				data.nodes.push(nodeData);
 			}
@@ -3539,7 +3535,7 @@ export default mixins(
 				}
 			});
 
-			return Promise.resolve(data);
+			return data;
 		},
 		resetWorkspace() {
 			this.workflowsStore.resetWorkflow();
@@ -3581,7 +3577,6 @@ export default mixins(
 			this.uiStore.nodeViewOffsetPosition = [0, 0];
 
 			this.credentialsUpdated = false;
-			return Promise.resolve();
 		},
 		async loadActiveWorkflows(): Promise<void> {
 			await this.workflowsStore.fetchActiveWorkflows();
diff --git a/packages/nodes-base/nodes/Code/Code.node.ts b/packages/nodes-base/nodes/Code/Code.node.ts
index ac64931d25fc7..a14b6ec73a862 100644
--- a/packages/nodes-base/nodes/Code/Code.node.ts
+++ b/packages/nodes-base/nodes/Code/Code.node.ts
@@ -88,7 +88,7 @@ export class Code implements INodeType {
 			try {
 				result = await sandbox.runCodeAllItems();
 			} catch (error) {
-				if (!this.continueOnFail()) return Promise.reject(error);
+				if (!this.continueOnFail()) throw error;
 				result = [{ json: { error: error.message } }];
 			}
 
@@ -122,7 +122,7 @@ export class Code implements INodeType {
 			try {
 				result = await sandbox.runCodeEachItem(index);
 			} catch (error) {
-				if (!this.continueOnFail()) return Promise.reject(error);
+				if (!this.continueOnFail()) throw error;
 				returnData.push({ json: { error: error.message } });
 			}
 
diff --git a/packages/nodes-base/nodes/Function/Function.node.ts b/packages/nodes-base/nodes/Function/Function.node.ts
index cdf1a110edd42..f681676fe7900 100644
--- a/packages/nodes-base/nodes/Function/Function.node.ts
+++ b/packages/nodes-base/nodes/Function/Function.node.ts
@@ -233,7 +233,7 @@ return items;`,
 					}
 				}
 
-				return Promise.reject(error);
+				throw error;
 			}
 		}
 
diff --git a/packages/nodes-base/nodes/FunctionItem/FunctionItem.node.ts b/packages/nodes-base/nodes/FunctionItem/FunctionItem.node.ts
index a81948fcb9987..e0971f339ed20 100644
--- a/packages/nodes-base/nodes/FunctionItem/FunctionItem.node.ts
+++ b/packages/nodes-base/nodes/FunctionItem/FunctionItem.node.ts
@@ -208,14 +208,14 @@ return item;`,
 								const lineNumber = lineParts.splice(-2, 1);
 								if (!isNaN(lineNumber as number)) {
 									error.message = `${error.message} [Line ${lineNumber} | Item Index: ${itemIndex}]`;
-									return Promise.reject(error);
+									throw error;
 								}
 							}
 						}
 
 						error.message = `${error.message} [Item Index: ${itemIndex}]`;
 
-						return Promise.reject(error);
+						throw error;
 					}
 				}
 
diff --git a/packages/nodes-base/nodes/Google/Ads/CampaignDescription.ts b/packages/nodes-base/nodes/Google/Ads/CampaignDescription.ts
index b5ce28439ac99..3e86ce50d2f2a 100644
--- a/packages/nodes-base/nodes/Google/Ads/CampaignDescription.ts
+++ b/packages/nodes-base/nodes/Google/Ads/CampaignDescription.ts
@@ -13,17 +13,13 @@ async function processCampaignSearchResponse(
 ): Promise<INodeExecutionData[]> {
 	const results = (responseData.body as IDataObject).results as GoogleAdsCampaignElement;
 
-	return Promise.resolve(
-		results.map((result) => {
-			return {
-				json: {
-					...result.campaign,
-					...result.metrics,
-					...result.campaignBudget,
-				},
-			};
-		}),
-	);
+	return results.map((result) => ({
+		json: {
+			...result.campaign,
+			...result.metrics,
+			...result.campaignBudget,
+		},
+	}));
 }
 
 export const campaignOperations: INodeProperties[] = [
diff --git a/packages/nodes-base/nodes/Google/BigQuery/test/v2/node/executeQuery.test.ts b/packages/nodes-base/nodes/Google/BigQuery/test/v2/node/executeQuery.test.ts
index 7991f36da60e5..e424ba7a11cf8 100644
--- a/packages/nodes-base/nodes/Google/BigQuery/test/v2/node/executeQuery.test.ts
+++ b/packages/nodes-base/nodes/Google/BigQuery/test/v2/node/executeQuery.test.ts
@@ -14,21 +14,20 @@ jest.mock('../../../v2/transport', () => {
 		...originalModule,
 		googleApiRequest: jest.fn(async (method: string, resource: string) => {
 			if (resource === '/v2/projects/test-project/jobs' && method === 'POST') {
-				return Promise.resolve({
+				return {
 					jobReference: {
 						jobId: 'job_123',
 					},
 					status: {
 						state: 'DONE',
 					},
-				});
+				};
 			}
 			if (resource === '/v2/projects/test-project/queries/job_123' && method === 'GET') {
-				return Promise.resolve({});
+				return {};
 			}
-			return Promise.resolve();
 		}),
-		// googleApiRequestAllItems: jest.fn(async () => Promise.resolve()),
+		// googleApiRequestAllItems: jest.fn(async () => {}),
 	};
 });
 
diff --git a/packages/nodes-base/nodes/Google/BigQuery/test/v2/node/insert.autoMapMode.test.ts b/packages/nodes-base/nodes/Google/BigQuery/test/v2/node/insert.autoMapMode.test.ts
index 14d5771f1b792..c79556283223d 100644
--- a/packages/nodes-base/nodes/Google/BigQuery/test/v2/node/insert.autoMapMode.test.ts
+++ b/packages/nodes-base/nodes/Google/BigQuery/test/v2/node/insert.autoMapMode.test.ts
@@ -17,25 +17,24 @@ jest.mock('../../../v2/transport', () => {
 					'/v2/projects/test-project/datasets/bigquery_node_dev_test_dataset/tables/num_text' &&
 				method === 'GET'
 			) {
-				return Promise.resolve({
+				return {
 					schema: {
 						fields: [
 							{ name: 'id', type: 'INT' },
 							{ name: 'test', type: 'STRING' },
 						],
 					},
-				});
+				};
 			}
 			if (
 				resource ===
 					'/v2/projects/test-project/datasets/bigquery_node_dev_test_dataset/tables/num_text/insertAll' &&
 				method === 'POST'
 			) {
-				return Promise.resolve({ kind: 'bigquery#tableDataInsertAllResponse' });
+				return { kind: 'bigquery#tableDataInsertAllResponse' };
 			}
-			return Promise.resolve();
 		}),
-		googleApiRequestAllItems: jest.fn(async () => Promise.resolve()),
+		googleApiRequestAllItems: jest.fn(async () => {}),
 	};
 });
 
diff --git a/packages/nodes-base/nodes/Google/BigQuery/test/v2/node/insert.manualMode.test.ts b/packages/nodes-base/nodes/Google/BigQuery/test/v2/node/insert.manualMode.test.ts
index c4181e9495452..52005cb834e88 100644
--- a/packages/nodes-base/nodes/Google/BigQuery/test/v2/node/insert.manualMode.test.ts
+++ b/packages/nodes-base/nodes/Google/BigQuery/test/v2/node/insert.manualMode.test.ts
@@ -17,7 +17,7 @@ jest.mock('../../../v2/transport', () => {
 					'/v2/projects/test-project/datasets/bigquery_node_dev_test_dataset/tables/test_json' &&
 				method === 'GET'
 			) {
-				return Promise.resolve({
+				return {
 					schema: {
 						fields: [
 							{ name: 'json', type: 'JSON' },
@@ -25,22 +25,21 @@ jest.mock('../../../v2/transport', () => {
 							{ name: 'active', type: 'BOOLEAN' },
 						],
 					},
-				});
+				};
 			}
 			if (
 				resource ===
 					'/v2/projects/test-project/datasets/bigquery_node_dev_test_dataset/tables/test_json/insertAll' &&
 				method === 'POST'
 			) {
-				return Promise.resolve({ kind: 'bigquery#tableDataInsertAllResponse' });
+				return { kind: 'bigquery#tableDataInsertAllResponse' };
 			}
-			return Promise.resolve();
 		}),
-		googleApiRequestAllItems: jest.fn(async () => Promise.resolve()),
+		googleApiRequestAllItems: jest.fn(async () => {}),
 	};
 });
 
-describe('Test Google BigQuery V2, insert define manualy', () => {
+describe('Test Google BigQuery V2, insert define manually', () => {
 	const workflows = ['nodes/Google/BigQuery/test/v2/node/insert.manualMode.workflow.json'];
 	const tests = workflowToTests(workflows);
 
diff --git a/packages/nodes-base/nodes/MySql/test/v2/operations.test.ts b/packages/nodes-base/nodes/MySql/test/v2/operations.test.ts
index 8f24baf49815e..a131e929be103 100644
--- a/packages/nodes-base/nodes/MySql/test/v2/operations.test.ts
+++ b/packages/nodes-base/nodes/MySql/test/v2/operations.test.ts
@@ -29,7 +29,7 @@ const fakeConnection = {
 	format(query: string, values: any[]) {
 		return mysql2.format(query, values);
 	},
-	query: jest.fn(async (_query = ''): Promise<any> => Promise.resolve([{}])),
+	query: jest.fn(async (_query = '') => [{}]),
 	release: jest.fn(),
 	beginTransaction: jest.fn(),
 	commit: jest.fn(),
@@ -41,7 +41,7 @@ const createFakePool = (connection: IDataObject) => {
 		getConnection() {
 			return connection;
 		},
-		query: jest.fn(async () => Promise.resolve([{}])),
+		query: jest.fn(async () => [{}]),
 	} as unknown as Mysql2Pool;
 };
 
@@ -214,7 +214,7 @@ describe('Test MySql V2, operations', () => {
 			} else {
 				result.push({});
 			}
-			return Promise.resolve(result);
+			return result;
 		});
 		const pool = createFakePool(fakeConnectionCopy);
 
diff --git a/packages/nodes-base/nodes/MySql/test/v2/runQueries.test.ts b/packages/nodes-base/nodes/MySql/test/v2/runQueries.test.ts
index 73a0eb3418ac5..3fd5ffce4eecb 100644
--- a/packages/nodes-base/nodes/MySql/test/v2/runQueries.test.ts
+++ b/packages/nodes-base/nodes/MySql/test/v2/runQueries.test.ts
@@ -23,7 +23,7 @@ const fakeConnection = {
 	format(query: string, values: any[]) {
 		return mysql2.format(query, values);
 	},
-	query: jest.fn(async () => Promise.resolve([{}])),
+	query: jest.fn(async () => [{}]),
 	release: jest.fn(),
 	beginTransaction: jest.fn(),
 	commit: jest.fn(),
@@ -35,7 +35,7 @@ const createFakePool = (connection: IDataObject) => {
 		getConnection() {
 			return connection;
 		},
-		query: jest.fn(async () => Promise.resolve([{}])),
+		query: jest.fn(async () => [{}]),
 	} as unknown as Mysql2Pool;
 };
 
diff --git a/packages/nodes-base/nodes/Postgres/test/v2/operations.test.ts b/packages/nodes-base/nodes/Postgres/test/v2/operations.test.ts
index 4de24f6b4cf96..4d0e30fa59fef 100644
--- a/packages/nodes-base/nodes/Postgres/test/v2/operations.test.ts
+++ b/packages/nodes-base/nodes/Postgres/test/v2/operations.test.ts
@@ -52,7 +52,7 @@ const createMockDb = (columnInfo: ColumnInfo[]) => {
 	} as unknown as PgpDatabase;
 };
 
-// if node parameters copied from canvas all default parameters has to be added manualy as JSON would not have them
+// if node parameters copied from canvas all default parameters has to be added manually as JSON would not have them
 describe('Test PostgresV2, deleteTable operation', () => {
 	afterEach(() => {
 		jest.clearAllMocks();
diff --git a/packages/workflow/src/Workflow.ts b/packages/workflow/src/Workflow.ts
index feb9c699d88fd..a3befc4580b46 100644
--- a/packages/workflow/src/Workflow.ts
+++ b/packages/workflow/src/Workflow.ts
@@ -1236,13 +1236,7 @@ export class Workflow {
 				return { data: null };
 			}
 
-			let promiseResults;
-			try {
-				promiseResults = await Promise.all(returnPromises);
-			} catch (error) {
-				return Promise.reject(error);
-			}
-
+			const promiseResults = await Promise.all(returnPromises);
 			if (promiseResults) {
 				return { data: [promiseResults] };
 			}