@n8n/expression-runtime 0.2.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ARCHITECTURE.md +5 -6
- package/LICENSE_EE.md +27 -0
- package/README.md +11 -11
- package/dist/bundle/runtime.esm.js +45 -0
- package/dist/bundle/runtime.esm.js.map +7 -0
- package/dist/bundle/runtime.iife.js +45 -0
- package/dist/bundle/runtime.iife.js.map +7 -0
- package/dist/cjs/bridge/isolated-vm-bridge.d.ts +132 -0
- package/dist/cjs/bridge/isolated-vm-bridge.d.ts.map +1 -0
- package/dist/cjs/bridge/isolated-vm-bridge.js +500 -0
- package/dist/cjs/bridge/isolated-vm-bridge.js.map +1 -0
- package/dist/cjs/build.tsbuildinfo +1 -0
- package/dist/cjs/evaluator/expression-evaluator.d.ts +23 -0
- package/dist/cjs/evaluator/expression-evaluator.d.ts.map +1 -0
- package/dist/cjs/evaluator/expression-evaluator.js +87 -0
- package/dist/cjs/evaluator/expression-evaluator.js.map +1 -0
- package/dist/cjs/extensions/array-extensions.d.ts +34 -0
- package/dist/cjs/extensions/array-extensions.d.ts.map +1 -0
- package/dist/cjs/extensions/array-extensions.js +632 -0
- package/dist/cjs/extensions/array-extensions.js.map +1 -0
- package/dist/cjs/extensions/boolean-extensions.d.ts +6 -0
- package/dist/cjs/extensions/boolean-extensions.d.ts.map +1 -0
- package/dist/cjs/extensions/boolean-extensions.js +49 -0
- package/dist/cjs/extensions/boolean-extensions.js.map +1 -0
- package/dist/cjs/extensions/date-extensions.d.ts +3 -0
- package/dist/cjs/extensions/date-extensions.d.ts.map +1 -0
- package/dist/cjs/extensions/date-extensions.js +528 -0
- package/dist/cjs/extensions/date-extensions.js.map +1 -0
- package/dist/cjs/extensions/expression-extension-error.d.ts +7 -0
- package/dist/cjs/extensions/expression-extension-error.d.ts.map +1 -0
- package/dist/cjs/extensions/expression-extension-error.js +25 -0
- package/dist/cjs/extensions/expression-extension-error.js.map +1 -0
- package/dist/cjs/extensions/extend.d.ts +12 -0
- package/dist/cjs/extensions/extend.d.ts.map +1 -0
- package/dist/cjs/extensions/extend.js +149 -0
- package/dist/cjs/extensions/extend.js.map +1 -0
- package/dist/cjs/extensions/extensions.d.ts +43 -0
- package/dist/cjs/extensions/extensions.d.ts.map +1 -0
- package/dist/cjs/extensions/extensions.js +13 -0
- package/dist/cjs/extensions/extensions.js.map +1 -0
- package/dist/cjs/extensions/number-extensions.d.ts +27 -0
- package/dist/cjs/extensions/number-extensions.d.ts.map +1 -0
- package/dist/cjs/extensions/number-extensions.js +235 -0
- package/dist/cjs/extensions/number-extensions.js.map +1 -0
- package/dist/cjs/extensions/object-extensions.d.ts +46 -0
- package/dist/cjs/extensions/object-extensions.d.ts.map +1 -0
- package/dist/cjs/extensions/object-extensions.js +297 -0
- package/dist/cjs/extensions/object-extensions.js.map +1 -0
- package/dist/cjs/extensions/string-extensions.d.ts +38 -0
- package/dist/cjs/extensions/string-extensions.d.ts.map +1 -0
- package/dist/cjs/extensions/string-extensions.js +753 -0
- package/dist/cjs/extensions/string-extensions.js.map +1 -0
- package/dist/cjs/extensions/utils.d.ts +4 -0
- package/dist/cjs/extensions/utils.d.ts.map +1 -0
- package/dist/cjs/extensions/utils.js +42 -0
- package/dist/cjs/extensions/utils.js.map +1 -0
- package/dist/cjs/index.d.ts +7 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +34 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/runtime/index.d.ts +17 -0
- package/dist/cjs/runtime/index.d.ts.map +1 -0
- package/dist/cjs/runtime/index.js +35 -0
- package/dist/cjs/runtime/index.js.map +1 -0
- package/dist/cjs/runtime/lazy-proxy.d.ts +22 -0
- package/dist/cjs/runtime/lazy-proxy.d.ts.map +1 -0
- package/dist/cjs/runtime/lazy-proxy.js +179 -0
- package/dist/cjs/runtime/lazy-proxy.js.map +1 -0
- package/dist/cjs/runtime/reset.d.ts +16 -0
- package/dist/cjs/runtime/reset.d.ts.map +1 -0
- package/dist/cjs/runtime/reset.js +137 -0
- package/dist/cjs/runtime/reset.js.map +1 -0
- package/dist/cjs/runtime/safe-globals.d.ts +21 -0
- package/dist/cjs/runtime/safe-globals.d.ts.map +1 -0
- package/dist/cjs/runtime/safe-globals.js +125 -0
- package/dist/cjs/runtime/safe-globals.js.map +1 -0
- package/dist/{types → cjs/types}/bridge.d.ts +2 -0
- package/dist/cjs/types/bridge.d.ts.map +1 -0
- package/dist/cjs/types/bridge.js +26 -0
- package/dist/cjs/types/bridge.js.map +1 -0
- package/dist/{types → cjs/types}/evaluator.d.ts +1 -4
- package/dist/cjs/types/evaluator.d.ts.map +1 -0
- package/dist/cjs/types/evaluator.js +47 -0
- package/dist/cjs/types/evaluator.js.map +1 -0
- package/dist/{types → cjs/types}/index.d.ts +2 -2
- package/dist/cjs/types/index.d.ts.map +1 -0
- package/dist/cjs/types/index.js +30 -0
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/types/runtime.d.ts +20 -0
- package/dist/cjs/types/runtime.d.ts.map +1 -0
- package/dist/cjs/types/runtime.js +39 -0
- package/dist/cjs/types/runtime.js.map +1 -0
- package/dist/esm/bridge/isolated-vm-bridge.d.ts +132 -0
- package/dist/esm/bridge/isolated-vm-bridge.d.ts.map +1 -0
- package/dist/esm/bridge/isolated-vm-bridge.js +450 -0
- package/dist/esm/bridge/isolated-vm-bridge.js.map +1 -0
- package/dist/esm/build.tsbuildinfo +1 -0
- package/dist/esm/evaluator/expression-evaluator.d.ts +23 -0
- package/dist/esm/evaluator/expression-evaluator.d.ts.map +1 -0
- package/dist/esm/evaluator/expression-evaluator.js +73 -0
- package/dist/esm/evaluator/expression-evaluator.js.map +1 -0
- package/dist/esm/extensions/array-extensions.d.ts +34 -0
- package/dist/esm/extensions/array-extensions.d.ts.map +1 -0
- package/dist/esm/extensions/array-extensions.js +610 -0
- package/dist/esm/extensions/array-extensions.js.map +1 -0
- package/dist/esm/extensions/boolean-extensions.d.ts +6 -0
- package/dist/esm/extensions/boolean-extensions.d.ts.map +1 -0
- package/dist/esm/extensions/boolean-extensions.js +33 -0
- package/dist/esm/extensions/boolean-extensions.js.map +1 -0
- package/dist/esm/extensions/date-extensions.d.ts +3 -0
- package/dist/esm/extensions/date-extensions.d.ts.map +1 -0
- package/dist/esm/extensions/date-extensions.js +515 -0
- package/dist/esm/extensions/date-extensions.js.map +1 -0
- package/dist/esm/extensions/expression-extension-error.d.ts +7 -0
- package/dist/esm/extensions/expression-extension-error.d.ts.map +1 -0
- package/dist/esm/extensions/expression-extension-error.js +11 -0
- package/dist/esm/extensions/expression-extension-error.js.map +1 -0
- package/dist/esm/extensions/extend.d.ts +12 -0
- package/dist/esm/extensions/extend.d.ts.map +1 -0
- package/dist/esm/extensions/extend.js +134 -0
- package/dist/esm/extensions/extend.js.map +1 -0
- package/dist/esm/extensions/extensions.d.ts +43 -0
- package/dist/esm/extensions/extensions.d.ts.map +1 -0
- package/dist/esm/extensions/extensions.js +2 -0
- package/dist/esm/extensions/extensions.js.map +1 -0
- package/dist/esm/extensions/number-extensions.d.ts +27 -0
- package/dist/esm/extensions/number-extensions.d.ts.map +1 -0
- package/dist/esm/extensions/number-extensions.js +221 -0
- package/dist/esm/extensions/number-extensions.js.map +1 -0
- package/dist/esm/extensions/object-extensions.d.ts +46 -0
- package/dist/esm/extensions/object-extensions.d.ts.map +1 -0
- package/dist/esm/extensions/object-extensions.js +277 -0
- package/dist/esm/extensions/object-extensions.js.map +1 -0
- package/dist/esm/extensions/string-extensions.d.ts +38 -0
- package/dist/esm/extensions/string-extensions.d.ts.map +1 -0
- package/dist/esm/extensions/string-extensions.js +735 -0
- package/dist/esm/extensions/string-extensions.js.map +1 -0
- package/dist/esm/extensions/utils.d.ts +4 -0
- package/dist/esm/extensions/utils.d.ts.map +1 -0
- package/dist/esm/extensions/utils.js +27 -0
- package/dist/esm/extensions/utils.js.map +1 -0
- package/dist/esm/index.d.ts +7 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +10 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/runtime/index.d.ts +17 -0
- package/dist/esm/runtime/index.d.ts.map +1 -0
- package/dist/esm/runtime/index.js +23 -0
- package/dist/esm/runtime/index.js.map +1 -0
- package/dist/esm/runtime/lazy-proxy.d.ts +22 -0
- package/dist/esm/runtime/lazy-proxy.d.ts.map +1 -0
- package/dist/esm/runtime/lazy-proxy.js +164 -0
- package/dist/esm/runtime/lazy-proxy.js.map +1 -0
- package/dist/esm/runtime/reset.d.ts +16 -0
- package/dist/esm/runtime/reset.d.ts.map +1 -0
- package/dist/esm/runtime/reset.js +124 -0
- package/dist/esm/runtime/reset.js.map +1 -0
- package/dist/esm/runtime/safe-globals.d.ts +21 -0
- package/dist/esm/runtime/safe-globals.d.ts.map +1 -0
- package/dist/esm/runtime/safe-globals.js +110 -0
- package/dist/esm/runtime/safe-globals.js.map +1 -0
- package/dist/esm/types/bridge.d.ts +63 -0
- package/dist/esm/types/bridge.d.ts.map +1 -0
- package/dist/{types → esm/types}/bridge.js +6 -1
- package/dist/esm/types/bridge.js.map +1 -0
- package/dist/esm/types/evaluator.d.ts +194 -0
- package/dist/esm/types/evaluator.d.ts.map +1 -0
- package/dist/esm/types/evaluator.js.map +1 -0
- package/dist/esm/types/index.d.ts +11 -0
- package/dist/esm/types/index.d.ts.map +1 -0
- package/dist/{types → esm/types}/index.js +2 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/types/runtime.d.ts +20 -0
- package/dist/esm/types/runtime.d.ts.map +1 -0
- package/dist/{types → esm/types}/runtime.js +0 -6
- package/dist/esm/types/runtime.js.map +1 -0
- package/package.json +29 -6
- package/dist/build.tsbuildinfo +0 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -2
- package/dist/index.js.map +0 -1
- package/dist/types/bridge.d.ts.map +0 -1
- package/dist/types/bridge.js.map +0 -1
- package/dist/types/evaluator.d.ts.map +0 -1
- package/dist/types/evaluator.js.map +0 -1
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js.map +0 -1
- package/dist/types/runtime.d.ts +0 -122
- package/dist/types/runtime.d.ts.map +0 -1
- package/dist/types/runtime.js.map +0 -1
- /package/dist/{types → esm/types}/evaluator.js +0 -0
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// Safe Wrappers for Security-Sensitive Globals
|
|
3
|
+
// ============================================================================
|
|
4
|
+
/**
|
|
5
|
+
* SafeObject - Blocks dangerous Object methods that could lead to RCE
|
|
6
|
+
*
|
|
7
|
+
* Blocked methods:
|
|
8
|
+
* - defineProperty, setPrototypeOf: Prevent prototype pollution
|
|
9
|
+
* - getOwnPropertyDescriptor: Prevent property descriptor manipulation
|
|
10
|
+
* - __defineGetter__, __defineSetter__: Legacy descriptor manipulation
|
|
11
|
+
*/
|
|
12
|
+
export const SafeObject = new Proxy(Object, {
|
|
13
|
+
get(target, prop) {
|
|
14
|
+
// Block dangerous methods (return undefined)
|
|
15
|
+
const blockedMethods = [
|
|
16
|
+
'defineProperty',
|
|
17
|
+
'defineProperties',
|
|
18
|
+
'setPrototypeOf',
|
|
19
|
+
'getOwnPropertyDescriptor',
|
|
20
|
+
'getOwnPropertyDescriptors',
|
|
21
|
+
'__defineGetter__',
|
|
22
|
+
'__defineSetter__',
|
|
23
|
+
'__lookupGetter__',
|
|
24
|
+
'__lookupSetter__',
|
|
25
|
+
];
|
|
26
|
+
if (blockedMethods.includes(prop)) {
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
// Block getPrototypeOf by throwing (more secure than returning undefined)
|
|
30
|
+
if (prop === 'getPrototypeOf') {
|
|
31
|
+
throw new Error('Object.getPrototypeOf is not allowed');
|
|
32
|
+
}
|
|
33
|
+
// Allow other Object methods
|
|
34
|
+
const value = target[prop];
|
|
35
|
+
if (typeof value === 'function') {
|
|
36
|
+
// Use arrow function wrapper to preserve 'this' binding
|
|
37
|
+
return (...args) => value.apply(target, args);
|
|
38
|
+
}
|
|
39
|
+
return value;
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
/**
|
|
43
|
+
* SafeError - Blocks stack manipulation methods
|
|
44
|
+
*
|
|
45
|
+
* Blocked properties:
|
|
46
|
+
* - stackTraceLimit, captureStackTrace, prepareStackTrace: Prevent stack manipulation attacks
|
|
47
|
+
*/
|
|
48
|
+
export const SafeError = new Proxy(Error, {
|
|
49
|
+
get(target, prop) {
|
|
50
|
+
// Block stack manipulation (return undefined)
|
|
51
|
+
const blockedProps = ['stackTraceLimit', 'captureStackTrace', 'prepareStackTrace'];
|
|
52
|
+
if (blockedProps.includes(prop)) {
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
// Block dangerous methods
|
|
56
|
+
const blockedMethods = ['__defineGetter__', '__defineSetter__'];
|
|
57
|
+
if (blockedMethods.includes(prop)) {
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
const value = target[prop];
|
|
61
|
+
if (typeof value === 'function') {
|
|
62
|
+
return (...args) => value.apply(target, args);
|
|
63
|
+
}
|
|
64
|
+
return value;
|
|
65
|
+
},
|
|
66
|
+
set(target, prop, value) {
|
|
67
|
+
// Block setting prepareStackTrace
|
|
68
|
+
if (prop === 'prepareStackTrace') {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
target[prop] = value;
|
|
72
|
+
return true;
|
|
73
|
+
},
|
|
74
|
+
});
|
|
75
|
+
// ============================================================================
|
|
76
|
+
// ExpressionError - used by tournament-generated error handlers
|
|
77
|
+
// ============================================================================
|
|
78
|
+
export class ExpressionError extends Error {
|
|
79
|
+
constructor(message) {
|
|
80
|
+
super(message);
|
|
81
|
+
this.name = 'ExpressionError';
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// ============================================================================
|
|
85
|
+
// Runtime sanitizer for dynamic property access
|
|
86
|
+
// Generated by PrototypeSanitizer: obj[expr] → obj[this.__sanitize(expr)]
|
|
87
|
+
// Must match the blocklist in packages/workflow/src/expression-sandboxing.ts
|
|
88
|
+
// ============================================================================
|
|
89
|
+
const unsafeObjectProperties = new Set([
|
|
90
|
+
'__proto__',
|
|
91
|
+
'prototype',
|
|
92
|
+
'constructor',
|
|
93
|
+
'__defineGetter__',
|
|
94
|
+
'__defineSetter__',
|
|
95
|
+
'__lookupGetter__',
|
|
96
|
+
'__lookupSetter__',
|
|
97
|
+
'toString',
|
|
98
|
+
'valueOf',
|
|
99
|
+
'toLocaleString',
|
|
100
|
+
'hasOwnProperty',
|
|
101
|
+
'isPrototypeOf',
|
|
102
|
+
'propertyIsEnumerable',
|
|
103
|
+
]);
|
|
104
|
+
export function __sanitize(value) {
|
|
105
|
+
if (typeof value === 'string' && unsafeObjectProperties.has(value)) {
|
|
106
|
+
throw new ExpressionError(`Cannot access "${value}" due to security concerns`);
|
|
107
|
+
}
|
|
108
|
+
return value;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=safe-globals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safe-globals.js","sourceRoot":"","sources":["../../../src/runtime/safe-globals.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Abstract interface for runtime bridges.
|
|
3
|
+
*
|
|
4
|
+
* A bridge manages communication between the host process and the isolated context.
|
|
5
|
+
* Different bridge implementations support different isolation mechanisms:
|
|
6
|
+
* - IsolatedVmBridge: Uses isolated-vm for Node.js backend (secure isolation with memory limits)
|
|
7
|
+
* - WebWorkerBridge: Uses Web Workers for browser frontend (Phase 2+)
|
|
8
|
+
* - Task Runner: TBD - May use IsolatedVmBridge locally or direct evaluation (Phase 2+)
|
|
9
|
+
*/
|
|
10
|
+
export interface RuntimeBridge {
|
|
11
|
+
/**
|
|
12
|
+
* Initialize the isolated context and load runtime code.
|
|
13
|
+
* Must be called before any execute() calls.
|
|
14
|
+
*/
|
|
15
|
+
initialize(): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* Execute JavaScript code in the isolated context.
|
|
18
|
+
*
|
|
19
|
+
* @param code - Transformed JavaScript code to execute
|
|
20
|
+
* @param data - Workflow data proxy from WorkflowDataProxy.getDataProxy()
|
|
21
|
+
* @returns Result of the expression evaluation.
|
|
22
|
+
* Must be JSON-serializable (no functions, symbols, etc.)
|
|
23
|
+
*
|
|
24
|
+
* Note: Synchronous for Node.js vm module (Slice 1).
|
|
25
|
+
* Will be async for isolated-vm (Slice 2).
|
|
26
|
+
*/
|
|
27
|
+
execute(code: string, data: Record<string, unknown>): unknown;
|
|
28
|
+
/**
|
|
29
|
+
* Dispose of the isolated context and free resources.
|
|
30
|
+
* After disposal, the bridge cannot be used again.
|
|
31
|
+
*/
|
|
32
|
+
dispose(): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Check if the bridge has been disposed.
|
|
35
|
+
* Disposed bridges cannot execute code.
|
|
36
|
+
*/
|
|
37
|
+
isDisposed(): boolean;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Configuration for runtime bridges.
|
|
41
|
+
*/
|
|
42
|
+
export interface BridgeConfig {
|
|
43
|
+
/**
|
|
44
|
+
* Memory limit in MB for isolated context.
|
|
45
|
+
* Default: 128MB
|
|
46
|
+
*/
|
|
47
|
+
memoryLimit?: number;
|
|
48
|
+
/**
|
|
49
|
+
* Timeout in milliseconds for expression execution.
|
|
50
|
+
* Default: 5000ms
|
|
51
|
+
*/
|
|
52
|
+
timeout?: number;
|
|
53
|
+
/**
|
|
54
|
+
* Enable debug mode (inspector protocol).
|
|
55
|
+
* Default: false
|
|
56
|
+
*
|
|
57
|
+
* Phase 2+: Chrome DevTools debugging support
|
|
58
|
+
*/
|
|
59
|
+
debug?: boolean;
|
|
60
|
+
}
|
|
61
|
+
/** Default values for BridgeConfig. Bridge implementations should use this as their baseline. */
|
|
62
|
+
export declare const DEFAULT_BRIDGE_CONFIG: Required<BridgeConfig>;
|
|
63
|
+
//# sourceMappingURL=bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../../src/types/bridge.ts"],"names":[],"mappings":"AAOA;;;;;;;;GAQG;AACH,MAAM,WAAW,aAAa;IAC7B;;;OAGG;IACH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC;IAE9D;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzB;;;OAGG;IACH,UAAU,IAAI,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,iGAAiG;AACjG,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,YAAY,CAIxD,CAAC"}
|
|
@@ -4,5 +4,10 @@
|
|
|
4
4
|
// This is the main interface all environments must implement.
|
|
5
5
|
// Start here for CLI/backend (IsolatedVmBridge) or frontend (WebWorkerBridge).
|
|
6
6
|
// ============================================================================
|
|
7
|
-
|
|
7
|
+
/** Default values for BridgeConfig. Bridge implementations should use this as their baseline. */
|
|
8
|
+
export const DEFAULT_BRIDGE_CONFIG = {
|
|
9
|
+
memoryLimit: 128,
|
|
10
|
+
timeout: 5000,
|
|
11
|
+
debug: false,
|
|
12
|
+
};
|
|
8
13
|
//# sourceMappingURL=bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../../src/types/bridge.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,uDAAuD;AACvD,EAAE;AACF,8DAA8D;AAC9D,+EAA+E;AAC/E,+EAA+E;AAqE/E,iGAAiG;AACjG,MAAM,CAAC,MAAM,qBAAqB,GAA2B;IAC5D,WAAW,EAAE,GAAG;IAChB,OAAO,EAAE,IAAI;IACb,KAAK,EAAE,KAAK;CACZ,CAAC"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import type { TournamentHooks } from '@n8n/tournament';
|
|
2
|
+
import type { RuntimeBridge } from './bridge';
|
|
3
|
+
/**
|
|
4
|
+
* Configuration for ExpressionEvaluator.
|
|
5
|
+
*
|
|
6
|
+
* Note: Slice 1 keeps this minimal. Tournament integration and code caching
|
|
7
|
+
* will be added in later slices.
|
|
8
|
+
*/
|
|
9
|
+
export interface EvaluatorConfig {
|
|
10
|
+
/**
|
|
11
|
+
* Runtime bridge implementation.
|
|
12
|
+
*/
|
|
13
|
+
bridge: RuntimeBridge;
|
|
14
|
+
/**
|
|
15
|
+
* Observability provider for metrics, traces, and logs.
|
|
16
|
+
*/
|
|
17
|
+
observability?: ObservabilityProvider;
|
|
18
|
+
/**
|
|
19
|
+
* AST security hooks for tournament expression transformation.
|
|
20
|
+
* Provided by the caller (e.g., workflow package's expression-sandboxing.ts).
|
|
21
|
+
* If omitted, expressions are transformed with no security hooks (dev/testing use).
|
|
22
|
+
*/
|
|
23
|
+
hooks?: TournamentHooks;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Expression evaluator - main public API.
|
|
27
|
+
*
|
|
28
|
+
* This is the primary interface used by the workflow package.
|
|
29
|
+
*/
|
|
30
|
+
export interface IExpressionEvaluator {
|
|
31
|
+
/**
|
|
32
|
+
* Initialize the evaluator and bridge.
|
|
33
|
+
* Must be called before evaluate().
|
|
34
|
+
*/
|
|
35
|
+
initialize(): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Evaluate an expression string against workflow data.
|
|
38
|
+
*
|
|
39
|
+
* @param expression - Expression string (e.g., "{{ $json.email }}")
|
|
40
|
+
* @param data - Workflow data context
|
|
41
|
+
* @param options - Evaluation options
|
|
42
|
+
* @returns Result of the expression
|
|
43
|
+
*
|
|
44
|
+
* Note: Synchronous for Slice 1 (Node.js vm module).
|
|
45
|
+
* Will be async for Slice 2 (isolated-vm).
|
|
46
|
+
*/
|
|
47
|
+
evaluate(expression: string, data: WorkflowData, options?: EvaluateOptions): unknown;
|
|
48
|
+
/**
|
|
49
|
+
* Dispose of the evaluator and free resources.
|
|
50
|
+
*/
|
|
51
|
+
dispose(): Promise<void>;
|
|
52
|
+
/**
|
|
53
|
+
* Check if the evaluator has been disposed.
|
|
54
|
+
*/
|
|
55
|
+
isDisposed(): boolean;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Workflow data proxy from WorkflowDataProxy.getDataProxy().
|
|
59
|
+
*
|
|
60
|
+
* For Slice 1: We pass this directly via VM context (simple pass-through).
|
|
61
|
+
* Later: Will implement deep lazy proxy for field-level data fetching.
|
|
62
|
+
*/
|
|
63
|
+
export type WorkflowData = Record<string, unknown>;
|
|
64
|
+
/**
|
|
65
|
+
* Options for evaluate().
|
|
66
|
+
*/
|
|
67
|
+
/**
|
|
68
|
+
* Options for evaluate().
|
|
69
|
+
*
|
|
70
|
+
* Note: Slice 1 is minimal. Tournament options will be added later.
|
|
71
|
+
*/
|
|
72
|
+
export interface EvaluateOptions {
|
|
73
|
+
/**
|
|
74
|
+
* Custom timeout for this evaluation (in milliseconds).
|
|
75
|
+
* Overrides the bridge's default timeout.
|
|
76
|
+
*/
|
|
77
|
+
timeout?: number;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Observability provider interface.
|
|
81
|
+
*
|
|
82
|
+
* Implementations: NoOpProvider, OpenTelemetryProvider, PostHogProvider
|
|
83
|
+
*/
|
|
84
|
+
export interface ObservabilityProvider {
|
|
85
|
+
/**
|
|
86
|
+
* Metrics API.
|
|
87
|
+
*/
|
|
88
|
+
metrics: MetricsAPI;
|
|
89
|
+
/**
|
|
90
|
+
* Traces API.
|
|
91
|
+
*/
|
|
92
|
+
traces: TracesAPI;
|
|
93
|
+
/**
|
|
94
|
+
* Logs API.
|
|
95
|
+
*/
|
|
96
|
+
logs: LogsAPI;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Metrics API.
|
|
100
|
+
*/
|
|
101
|
+
export interface MetricsAPI {
|
|
102
|
+
/**
|
|
103
|
+
* Increment a counter.
|
|
104
|
+
*/
|
|
105
|
+
counter(name: string, value: number, tags?: Record<string, string>): void;
|
|
106
|
+
/**
|
|
107
|
+
* Set a gauge value.
|
|
108
|
+
*/
|
|
109
|
+
gauge(name: string, value: number, tags?: Record<string, string>): void;
|
|
110
|
+
/**
|
|
111
|
+
* Record a histogram value.
|
|
112
|
+
*/
|
|
113
|
+
histogram(name: string, value: number, tags?: Record<string, string>): void;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Traces API.
|
|
117
|
+
*/
|
|
118
|
+
export interface TracesAPI {
|
|
119
|
+
/**
|
|
120
|
+
* Start a new span.
|
|
121
|
+
*/
|
|
122
|
+
startSpan(name: string, attributes?: Record<string, unknown>): Span;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Span interface.
|
|
126
|
+
*/
|
|
127
|
+
export interface Span {
|
|
128
|
+
/**
|
|
129
|
+
* Set span status.
|
|
130
|
+
*/
|
|
131
|
+
setStatus(status: 'ok' | 'error'): void;
|
|
132
|
+
/**
|
|
133
|
+
* Set span attribute.
|
|
134
|
+
*/
|
|
135
|
+
setAttribute(key: string, value: unknown): void;
|
|
136
|
+
/**
|
|
137
|
+
* Record an exception.
|
|
138
|
+
*/
|
|
139
|
+
recordException(error: Error): void;
|
|
140
|
+
/**
|
|
141
|
+
* End the span.
|
|
142
|
+
*/
|
|
143
|
+
end(): void;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Logs API.
|
|
147
|
+
*/
|
|
148
|
+
export interface LogsAPI {
|
|
149
|
+
/**
|
|
150
|
+
* Log an error.
|
|
151
|
+
*/
|
|
152
|
+
error(message: string, error?: Error, context?: Record<string, unknown>): void;
|
|
153
|
+
/**
|
|
154
|
+
* Log a warning.
|
|
155
|
+
*/
|
|
156
|
+
warn(message: string, context?: Record<string, unknown>): void;
|
|
157
|
+
/**
|
|
158
|
+
* Log info.
|
|
159
|
+
*/
|
|
160
|
+
info(message: string, context?: Record<string, unknown>): void;
|
|
161
|
+
/**
|
|
162
|
+
* Log debug.
|
|
163
|
+
*/
|
|
164
|
+
debug(message: string, context?: Record<string, unknown>): void;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Expression evaluation error.
|
|
168
|
+
*/
|
|
169
|
+
export declare class ExpressionError extends Error {
|
|
170
|
+
context: {
|
|
171
|
+
expression?: string;
|
|
172
|
+
workflowId?: string;
|
|
173
|
+
nodeId?: string;
|
|
174
|
+
[key: string]: unknown;
|
|
175
|
+
};
|
|
176
|
+
constructor(message: string, context: {
|
|
177
|
+
expression?: string;
|
|
178
|
+
workflowId?: string;
|
|
179
|
+
nodeId?: string;
|
|
180
|
+
[key: string]: unknown;
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Specific error types.
|
|
185
|
+
*/
|
|
186
|
+
export declare class MemoryLimitError extends ExpressionError {
|
|
187
|
+
}
|
|
188
|
+
export declare class TimeoutError extends ExpressionError {
|
|
189
|
+
}
|
|
190
|
+
export declare class SecurityViolationError extends ExpressionError {
|
|
191
|
+
}
|
|
192
|
+
export declare class SyntaxError extends ExpressionError {
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=evaluator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluator.d.ts","sourceRoot":"","sources":["../../../src/types/evaluator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../../src/types/evaluator.ts"],"names":[],"mappings":"AA8MA,+EAA+E;AAC/E,uDAAuD;AACvD,EAAE;AACF,0DAA0D;AAC1D,wDAAwD;AACxD,+EAA+E;AAE/E;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAGjC;IAFR,YACC,OAAe,EACR,OAKN;QAED,KAAK,CAAC,OAAO,CAAC,CAAC;QAPR,YAAO,GAAP,OAAO,CAKb;QAGD,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAC/B,CAAC;CACD;AAED;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,eAAe;CAAG;AACxD,MAAM,OAAO,YAAa,SAAQ,eAAe;CAAG;AACpD,MAAM,OAAO,sBAAuB,SAAQ,eAAe;CAAG;AAC9D,MAAM,OAAO,WAAY,SAAQ,eAAe;CAAG"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Expression Runtime Types
|
|
3
|
+
*
|
|
4
|
+
* This module exports all TypeScript interfaces and types for the expression runtime.
|
|
5
|
+
*/
|
|
6
|
+
export type { RuntimeBridge, BridgeConfig } from './bridge';
|
|
7
|
+
export { DEFAULT_BRIDGE_CONFIG } from './bridge';
|
|
8
|
+
export { RuntimeError } from './runtime';
|
|
9
|
+
export type { EvaluatorConfig, IExpressionEvaluator, WorkflowData, EvaluateOptions, ObservabilityProvider, MetricsAPI, TracesAPI, Span, LogsAPI, } from './evaluator';
|
|
10
|
+
export { ExpressionError, MemoryLimitError, TimeoutError, SecurityViolationError, SyntaxError, } from './evaluator';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAGjD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGzC,YAAY,EACX,eAAe,EACf,oBAAoB,EACpB,YAAY,EACZ,eAAe,EACf,qBAAqB,EACrB,UAAU,EACV,SAAS,EACT,IAAI,EACJ,OAAO,GACP,MAAM,aAAa,CAAC;AAErB,OAAO,EACN,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,sBAAsB,EACtB,WAAW,GACX,MAAM,aAAa,CAAC"}
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* This module exports all TypeScript interfaces and types for the expression runtime.
|
|
5
5
|
*/
|
|
6
|
+
export { DEFAULT_BRIDGE_CONFIG } from './bridge';
|
|
7
|
+
// Runtime types
|
|
6
8
|
export { RuntimeError } from './runtime';
|
|
7
9
|
export { ExpressionError, MemoryLimitError, TimeoutError, SecurityViolationError, SyntaxError, } from './evaluator';
|
|
8
10
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAEjD,gBAAgB;AAChB,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAezC,OAAO,EACN,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,sBAAsB,EACtB,WAAW,GACX,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime error thrown inside isolated context.
|
|
3
|
+
*
|
|
4
|
+
* These errors are thrown by the runtime code when something goes wrong during
|
|
5
|
+
* expression evaluation. The bridge must catch these and translate them to the
|
|
6
|
+
* appropriate ExpressionError subclass (see evaluator.ts).
|
|
7
|
+
*
|
|
8
|
+
* Translation mapping:
|
|
9
|
+
* - code: 'MEMORY_LIMIT' → MemoryLimitError
|
|
10
|
+
* - code: 'TIMEOUT' → TimeoutError
|
|
11
|
+
* - code: 'SECURITY_VIOLATION' → SecurityViolationError
|
|
12
|
+
* - code: 'SYNTAX_ERROR' → SyntaxError
|
|
13
|
+
* - other → ExpressionError
|
|
14
|
+
*/
|
|
15
|
+
export declare class RuntimeError extends Error {
|
|
16
|
+
code: string;
|
|
17
|
+
details?: Record<string, unknown> | undefined;
|
|
18
|
+
constructor(message: string, code: string, details?: Record<string, unknown> | undefined);
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/types/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,qBAAa,YAAa,SAAQ,KAAK;IAG9B,IAAI,EAAE,MAAM;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBAFxC,OAAO,EAAE,MAAM,EACR,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAA;CAKzC"}
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
// ============================================================================
|
|
2
|
-
// Phase 1.1: Runtime Interfaces (IMPLEMENT WITH BRIDGE)
|
|
3
|
-
//
|
|
4
|
-
// These interfaces define how the runtime (inside isolation) communicates
|
|
5
|
-
// with the host. Implement these when building the runtime code.
|
|
6
|
-
// ============================================================================
|
|
7
1
|
/**
|
|
8
2
|
* Runtime error thrown inside isolated context.
|
|
9
3
|
*
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../src/types/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,YAAa,SAAQ,KAAK;IAG9B;IACA;IAHR,YACC,OAAe,EACR,IAAY,EACZ,OAAiC;QAExC,KAAK,CAAC,OAAO,CAAC,CAAC;QAHR,SAAI,GAAJ,IAAI,CAAQ;QACZ,YAAO,GAAP,OAAO,CAA0B;QAGxC,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC5B,CAAC;CACD"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@n8n/expression-runtime",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Secure, isolated expression evaluation runtime for n8n",
|
|
5
|
-
"main": "dist/index.js",
|
|
6
|
-
"
|
|
5
|
+
"main": "dist/cjs/index.js",
|
|
6
|
+
"module": "dist/esm/index.js",
|
|
7
|
+
"types": "dist/esm/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/esm/index.d.ts",
|
|
11
|
+
"import": "./dist/esm/index.js",
|
|
12
|
+
"require": "./dist/cjs/index.js"
|
|
13
|
+
},
|
|
14
|
+
"./*": "./*"
|
|
15
|
+
},
|
|
7
16
|
"keywords": [
|
|
8
17
|
"n8n",
|
|
9
18
|
"expression",
|
|
@@ -14,6 +23,8 @@
|
|
|
14
23
|
],
|
|
15
24
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
16
25
|
"dependencies": {
|
|
26
|
+
"@n8n/tournament": "1.0.6",
|
|
27
|
+
"isolated-vm": "^6.0.2",
|
|
17
28
|
"js-base64": "3.7.2",
|
|
18
29
|
"jssha": "3.3.1",
|
|
19
30
|
"lodash": "4.17.23",
|
|
@@ -27,15 +38,27 @@
|
|
|
27
38
|
"@types/luxon": "3.2.0",
|
|
28
39
|
"@types/md5": "^2.3.5",
|
|
29
40
|
"typescript": "5.9.2",
|
|
30
|
-
"vitest": "^3.1.3"
|
|
41
|
+
"vitest": "^3.1.3",
|
|
42
|
+
"@n8n/typescript-config": "1.3.0"
|
|
31
43
|
},
|
|
32
44
|
"files": [
|
|
33
45
|
"dist",
|
|
34
46
|
"ARCHITECTURE.md",
|
|
35
|
-
"LICENSE.md"
|
|
47
|
+
"LICENSE.md",
|
|
48
|
+
"LICENSE_EE.md"
|
|
36
49
|
],
|
|
50
|
+
"homepage": "https://n8n.io",
|
|
51
|
+
"author": {
|
|
52
|
+
"name": "Jan Oberhauser",
|
|
53
|
+
"email": "jan@n8n.io"
|
|
54
|
+
},
|
|
55
|
+
"repository": {
|
|
56
|
+
"type": "git",
|
|
57
|
+
"url": "git+https://github.com/n8n-io/n8n.git"
|
|
58
|
+
},
|
|
37
59
|
"scripts": {
|
|
38
|
-
"build": "tsc
|
|
60
|
+
"build": "tsc --build tsconfig.build.esm.json tsconfig.build.cjs.json && pnpm build:runtime",
|
|
61
|
+
"build:runtime": "node esbuild.config.js",
|
|
39
62
|
"test": "vitest run",
|
|
40
63
|
"test:dev": "vitest --watch --silent false",
|
|
41
64
|
"typecheck": "tsc --noEmit"
|