mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-16 17:46:45 +00:00
fix(core): Fix disallowed module error in task runner (#18190)
This commit is contained in:
@@ -1008,7 +1008,7 @@ describe('JsTaskRunner', () => {
|
||||
code: `return require('${module}')`,
|
||||
inputItems,
|
||||
}),
|
||||
).rejects.toThrow(`Cannot find module '${module}'`);
|
||||
).rejects.toThrow(`Module '${module}' is disallowed`);
|
||||
},
|
||||
);
|
||||
|
||||
@@ -1020,7 +1020,7 @@ describe('JsTaskRunner', () => {
|
||||
code: `return require('${module}')`,
|
||||
inputItems,
|
||||
}),
|
||||
).rejects.toThrow(`Cannot find module '${module}'`);
|
||||
).rejects.toThrow(`Module '${module}' is disallowed`);
|
||||
},
|
||||
);
|
||||
});
|
||||
@@ -1138,7 +1138,7 @@ describe('JsTaskRunner', () => {
|
||||
inputItems,
|
||||
runner,
|
||||
}),
|
||||
).rejects.toThrow(`Cannot find module '${moduleName}'`);
|
||||
).rejects.toThrow(`Module '${moduleName}' is disallowed`);
|
||||
},
|
||||
);
|
||||
|
||||
@@ -1151,7 +1151,7 @@ describe('JsTaskRunner', () => {
|
||||
inputItems,
|
||||
runner,
|
||||
}),
|
||||
).rejects.toThrow(`Cannot find module '${moduleName}'`);
|
||||
).rejects.toThrow(`Module '${moduleName}' is disallowed`);
|
||||
},
|
||||
);
|
||||
});
|
||||
@@ -1200,7 +1200,7 @@ describe('JsTaskRunner', () => {
|
||||
inputItems,
|
||||
runner,
|
||||
}),
|
||||
).rejects.toThrow(`Cannot find module '${moduleName}'`);
|
||||
).rejects.toThrow(`Module '${moduleName}' is disallowed`);
|
||||
},
|
||||
);
|
||||
|
||||
@@ -1213,7 +1213,7 @@ describe('JsTaskRunner', () => {
|
||||
inputItems,
|
||||
runner,
|
||||
}),
|
||||
).rejects.toThrow(`Cannot find module '${moduleName}'`);
|
||||
).rejects.toThrow(`Module '${moduleName}' is disallowed`);
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import { ApplicationError } from '@n8n/errors';
|
||||
|
||||
import { ExecutionError } from '@/js-task-runner/errors/execution-error';
|
||||
|
||||
import { DisallowedModuleError } from '../errors/disallowed-module.error';
|
||||
import { createRequireResolver, type RequireResolverOpts } from '../require-resolver';
|
||||
|
||||
describe('require resolver', () => {
|
||||
@@ -44,10 +43,10 @@ describe('require resolver', () => {
|
||||
expect(() => resolver('lodash')).not.toThrow();
|
||||
});
|
||||
|
||||
it('should throw when requiring non-whitelisted external modules', () => {
|
||||
it('should throw when requiring non-allowlisted external modules', () => {
|
||||
const resolver = createRequireResolver(defaultOpts);
|
||||
expect(() => resolver('express')).toThrow(
|
||||
new ExecutionError(new ApplicationError("Cannot find module 'express'")),
|
||||
new ExecutionError(new DisallowedModuleError('express')),
|
||||
);
|
||||
});
|
||||
|
||||
@@ -63,7 +62,7 @@ describe('require resolver', () => {
|
||||
});
|
||||
|
||||
describe('error handling', () => {
|
||||
it('should wrap ApplicationError in ExecutionError', () => {
|
||||
it('should wrap DisallowedModuleError in ExecutionError', () => {
|
||||
const resolver = createRequireResolver(defaultOpts);
|
||||
expect(() => resolver('non-existent-module')).toThrow(ExecutionError);
|
||||
});
|
||||
@@ -71,7 +70,7 @@ describe('require resolver', () => {
|
||||
it('should include the module name in the error message', () => {
|
||||
const resolver = createRequireResolver(defaultOpts);
|
||||
expect(() => resolver('non-existent-module')).toThrow(
|
||||
"Cannot find module 'non-existent-module'",
|
||||
"Module 'non-existent-module' is disallowed",
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
import { UserError } from 'n8n-workflow';
|
||||
|
||||
export class DisallowedModuleError extends UserError {
|
||||
constructor(moduleName: string) {
|
||||
super(`Module '${moduleName}' is disallowed`);
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
import { ApplicationError } from '@n8n/errors';
|
||||
import { isBuiltin } from 'node:module';
|
||||
|
||||
import { DisallowedModuleError } from './errors/disallowed-module.error';
|
||||
import { ExecutionError } from './errors/execution-error';
|
||||
|
||||
export type RequireResolverOpts = {
|
||||
@@ -33,7 +33,7 @@ export function createRequireResolver({
|
||||
: checkIsAllowed(allowedExternalModules, request);
|
||||
|
||||
if (!isAllowed) {
|
||||
const error = new ApplicationError(`Cannot find module '${request}'`);
|
||||
const error = new DisallowedModuleError(request);
|
||||
throw new ExecutionError(error);
|
||||
}
|
||||
|
||||
|
||||
@@ -234,7 +234,7 @@ describe('JS TaskRunner execution on internal mode', () => {
|
||||
expect(result).toEqual({
|
||||
ok: false,
|
||||
error: expect.objectContaining({
|
||||
message: "Cannot find module 'fs' [line 2]",
|
||||
message: "Module 'fs' is disallowed [line 2]",
|
||||
}),
|
||||
});
|
||||
});
|
||||
@@ -262,7 +262,7 @@ describe('JS TaskRunner execution on internal mode', () => {
|
||||
expect(result).toEqual({
|
||||
ok: false,
|
||||
error: expect.objectContaining({
|
||||
message: "Cannot find module 'lodash' [line 2]",
|
||||
message: "Module 'lodash' is disallowed [line 2]",
|
||||
}),
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user