@n8n/expression-runtime 0.3.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/README.md +3 -3
- package/dist/bundle/runtime.esm.js +2 -2
- package/dist/bundle/runtime.esm.js.map +3 -3
- package/dist/bundle/runtime.iife.js +2 -2
- package/dist/bundle/runtime.iife.js.map +3 -3
- 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.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.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.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.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.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.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.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.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.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.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.map +1 -0
- package/dist/cjs/runtime/index.js +35 -0
- package/dist/cjs/runtime/index.js.map +1 -0
- package/dist/{runtime → cjs/runtime}/lazy-proxy.d.ts +4 -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.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.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 -1
- 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.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/{bridge → esm/bridge}/isolated-vm-bridge.js +34 -11
- 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.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.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.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.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.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.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.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.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.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.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.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/{runtime → esm/runtime}/lazy-proxy.js +20 -6
- 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.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.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 +1 -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/esm/types/runtime.js.map +1 -0
- package/package.json +16 -5
- package/dist/bridge/isolated-vm-bridge.d.ts.map +0 -1
- package/dist/bridge/isolated-vm-bridge.js.map +0 -1
- package/dist/build.tsbuildinfo +0 -1
- package/dist/extensions/array-extensions.d.ts.map +0 -1
- package/dist/extensions/array-extensions.js.map +0 -1
- package/dist/extensions/boolean-extensions.d.ts.map +0 -1
- package/dist/extensions/boolean-extensions.js.map +0 -1
- package/dist/extensions/date-extensions.d.ts.map +0 -1
- package/dist/extensions/date-extensions.js.map +0 -1
- package/dist/extensions/expression-extension-error.d.ts.map +0 -1
- package/dist/extensions/expression-extension-error.js.map +0 -1
- package/dist/extensions/extend.d.ts.map +0 -1
- package/dist/extensions/extend.js.map +0 -1
- package/dist/extensions/extensions.d.ts.map +0 -1
- package/dist/extensions/extensions.js.map +0 -1
- package/dist/extensions/number-extensions.d.ts.map +0 -1
- package/dist/extensions/number-extensions.js.map +0 -1
- package/dist/extensions/object-extensions.d.ts.map +0 -1
- package/dist/extensions/object-extensions.js.map +0 -1
- package/dist/extensions/string-extensions.d.ts.map +0 -1
- package/dist/extensions/string-extensions.js.map +0 -1
- package/dist/extensions/utils.d.ts.map +0 -1
- package/dist/extensions/utils.js.map +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/runtime/index.d.ts.map +0 -1
- package/dist/runtime/index.js.map +0 -1
- package/dist/runtime/lazy-proxy.d.ts.map +0 -1
- package/dist/runtime/lazy-proxy.js.map +0 -1
- package/dist/runtime/reset.d.ts.map +0 -1
- package/dist/runtime/reset.js.map +0 -1
- package/dist/runtime/safe-globals.d.ts.map +0 -1
- package/dist/runtime/safe-globals.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.map +0 -1
- package/dist/types/runtime.js.map +0 -1
- /package/dist/{bridge → cjs/bridge}/isolated-vm-bridge.d.ts +0 -0
- /package/dist/{extensions → cjs/extensions}/array-extensions.d.ts +0 -0
- /package/dist/{extensions → cjs/extensions}/boolean-extensions.d.ts +0 -0
- /package/dist/{extensions → cjs/extensions}/date-extensions.d.ts +0 -0
- /package/dist/{extensions → cjs/extensions}/expression-extension-error.d.ts +0 -0
- /package/dist/{extensions → cjs/extensions}/extend.d.ts +0 -0
- /package/dist/{extensions → cjs/extensions}/extensions.d.ts +0 -0
- /package/dist/{extensions → cjs/extensions}/number-extensions.d.ts +0 -0
- /package/dist/{extensions → cjs/extensions}/object-extensions.d.ts +0 -0
- /package/dist/{extensions → cjs/extensions}/string-extensions.d.ts +0 -0
- /package/dist/{extensions → cjs/extensions}/utils.d.ts +0 -0
- /package/dist/{runtime → cjs/runtime}/index.d.ts +0 -0
- /package/dist/{runtime → cjs/runtime}/reset.d.ts +0 -0
- /package/dist/{runtime → cjs/runtime}/safe-globals.d.ts +0 -0
- /package/dist/{types → cjs/types}/runtime.d.ts +0 -0
- /package/dist/{extensions → esm/extensions}/array-extensions.js +0 -0
- /package/dist/{extensions → esm/extensions}/boolean-extensions.js +0 -0
- /package/dist/{extensions → esm/extensions}/date-extensions.js +0 -0
- /package/dist/{extensions → esm/extensions}/expression-extension-error.js +0 -0
- /package/dist/{extensions → esm/extensions}/extend.js +0 -0
- /package/dist/{extensions → esm/extensions}/extensions.js +0 -0
- /package/dist/{extensions → esm/extensions}/number-extensions.js +0 -0
- /package/dist/{extensions → esm/extensions}/object-extensions.js +0 -0
- /package/dist/{extensions → esm/extensions}/string-extensions.js +0 -0
- /package/dist/{extensions → esm/extensions}/utils.js +0 -0
- /package/dist/{runtime → esm/runtime}/index.js +0 -0
- /package/dist/{runtime → esm/runtime}/reset.js +0 -0
- /package/dist/{runtime → esm/runtime}/safe-globals.js +0 -0
- /package/dist/{types → esm/types}/evaluator.js +0 -0
- /package/dist/{types → esm/types}/runtime.js +0 -0
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// Safe Wrappers for Security-Sensitive Globals
|
|
3
|
+
// ============================================================================
|
|
4
|
+
(function (factory) {
|
|
5
|
+
if (typeof module === "object" && typeof module.exports === "object") {
|
|
6
|
+
var v = factory(require, exports);
|
|
7
|
+
if (v !== undefined) module.exports = v;
|
|
8
|
+
}
|
|
9
|
+
else if (typeof define === "function" && define.amd) {
|
|
10
|
+
define(["require", "exports"], factory);
|
|
11
|
+
}
|
|
12
|
+
})(function (require, exports) {
|
|
13
|
+
"use strict";
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.ExpressionError = exports.SafeError = exports.SafeObject = void 0;
|
|
16
|
+
exports.__sanitize = __sanitize;
|
|
17
|
+
/**
|
|
18
|
+
* SafeObject - Blocks dangerous Object methods that could lead to RCE
|
|
19
|
+
*
|
|
20
|
+
* Blocked methods:
|
|
21
|
+
* - defineProperty, setPrototypeOf: Prevent prototype pollution
|
|
22
|
+
* - getOwnPropertyDescriptor: Prevent property descriptor manipulation
|
|
23
|
+
* - __defineGetter__, __defineSetter__: Legacy descriptor manipulation
|
|
24
|
+
*/
|
|
25
|
+
exports.SafeObject = new Proxy(Object, {
|
|
26
|
+
get(target, prop) {
|
|
27
|
+
// Block dangerous methods (return undefined)
|
|
28
|
+
const blockedMethods = [
|
|
29
|
+
'defineProperty',
|
|
30
|
+
'defineProperties',
|
|
31
|
+
'setPrototypeOf',
|
|
32
|
+
'getOwnPropertyDescriptor',
|
|
33
|
+
'getOwnPropertyDescriptors',
|
|
34
|
+
'__defineGetter__',
|
|
35
|
+
'__defineSetter__',
|
|
36
|
+
'__lookupGetter__',
|
|
37
|
+
'__lookupSetter__',
|
|
38
|
+
];
|
|
39
|
+
if (blockedMethods.includes(prop)) {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
// Block getPrototypeOf by throwing (more secure than returning undefined)
|
|
43
|
+
if (prop === 'getPrototypeOf') {
|
|
44
|
+
throw new Error('Object.getPrototypeOf is not allowed');
|
|
45
|
+
}
|
|
46
|
+
// Allow other Object methods
|
|
47
|
+
const value = target[prop];
|
|
48
|
+
if (typeof value === 'function') {
|
|
49
|
+
// Use arrow function wrapper to preserve 'this' binding
|
|
50
|
+
return (...args) => value.apply(target, args);
|
|
51
|
+
}
|
|
52
|
+
return value;
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
/**
|
|
56
|
+
* SafeError - Blocks stack manipulation methods
|
|
57
|
+
*
|
|
58
|
+
* Blocked properties:
|
|
59
|
+
* - stackTraceLimit, captureStackTrace, prepareStackTrace: Prevent stack manipulation attacks
|
|
60
|
+
*/
|
|
61
|
+
exports.SafeError = new Proxy(Error, {
|
|
62
|
+
get(target, prop) {
|
|
63
|
+
// Block stack manipulation (return undefined)
|
|
64
|
+
const blockedProps = ['stackTraceLimit', 'captureStackTrace', 'prepareStackTrace'];
|
|
65
|
+
if (blockedProps.includes(prop)) {
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
// Block dangerous methods
|
|
69
|
+
const blockedMethods = ['__defineGetter__', '__defineSetter__'];
|
|
70
|
+
if (blockedMethods.includes(prop)) {
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
const value = target[prop];
|
|
74
|
+
if (typeof value === 'function') {
|
|
75
|
+
return (...args) => value.apply(target, args);
|
|
76
|
+
}
|
|
77
|
+
return value;
|
|
78
|
+
},
|
|
79
|
+
set(target, prop, value) {
|
|
80
|
+
// Block setting prepareStackTrace
|
|
81
|
+
if (prop === 'prepareStackTrace') {
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
target[prop] = value;
|
|
85
|
+
return true;
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
// ============================================================================
|
|
89
|
+
// ExpressionError - used by tournament-generated error handlers
|
|
90
|
+
// ============================================================================
|
|
91
|
+
class ExpressionError extends Error {
|
|
92
|
+
constructor(message) {
|
|
93
|
+
super(message);
|
|
94
|
+
this.name = 'ExpressionError';
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
exports.ExpressionError = ExpressionError;
|
|
98
|
+
// ============================================================================
|
|
99
|
+
// Runtime sanitizer for dynamic property access
|
|
100
|
+
// Generated by PrototypeSanitizer: obj[expr] → obj[this.__sanitize(expr)]
|
|
101
|
+
// Must match the blocklist in packages/workflow/src/expression-sandboxing.ts
|
|
102
|
+
// ============================================================================
|
|
103
|
+
const unsafeObjectProperties = new Set([
|
|
104
|
+
'__proto__',
|
|
105
|
+
'prototype',
|
|
106
|
+
'constructor',
|
|
107
|
+
'__defineGetter__',
|
|
108
|
+
'__defineSetter__',
|
|
109
|
+
'__lookupGetter__',
|
|
110
|
+
'__lookupSetter__',
|
|
111
|
+
'toString',
|
|
112
|
+
'valueOf',
|
|
113
|
+
'toLocaleString',
|
|
114
|
+
'hasOwnProperty',
|
|
115
|
+
'isPrototypeOf',
|
|
116
|
+
'propertyIsEnumerable',
|
|
117
|
+
]);
|
|
118
|
+
function __sanitize(value) {
|
|
119
|
+
if (typeof value === 'string' && unsafeObjectProperties.has(value)) {
|
|
120
|
+
throw new ExpressionError(`Cannot access "${value}" due to security concerns`);
|
|
121
|
+
}
|
|
122
|
+
return value;
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
//# sourceMappingURL=safe-globals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safe-globals.js","sourceRoot":"","sources":["../../../src/runtime/safe-globals.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,+CAA+C;AAC/C,+EAA+E;;;;;;;;;;;;;IAiH/E,gCAKC;IApHD;;;;;;;OAOG;IACU,QAAA,UAAU,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE;QAC3C,GAAG,CAAC,MAAM,EAAE,IAAI;YACf,6CAA6C;YAC7C,MAAM,cAAc,GAAG;gBACtB,gBAAgB;gBAChB,kBAAkB;gBAClB,gBAAgB;gBAChB,0BAA0B;gBAC1B,2BAA2B;gBAC3B,kBAAkB;gBAClB,kBAAkB;gBAClB,kBAAkB;gBAClB,kBAAkB;aAClB,CAAC;YAEF,IAAI,cAAc,CAAC,QAAQ,CAAC,IAAc,CAAC,EAAE,CAAC;gBAC7C,OAAO,SAAS,CAAC;YAClB,CAAC;YAED,0EAA0E;YAC1E,IAAI,IAAI,KAAK,gBAAgB,EAAE,CAAC;gBAC/B,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;YACzD,CAAC;YAED,6BAA6B;YAC7B,MAAM,KAAK,GAAI,MAAc,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;gBACjC,wDAAwD;gBACxD,OAAO,CAAC,GAAG,IAAW,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACtD,CAAC;YACD,OAAO,KAAK,CAAC;QACd,CAAC;KACD,CAAC,CAAC;IAEH;;;;;OAKG;IACU,QAAA,SAAS,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE;QACzC,GAAG,CAAC,MAAM,EAAE,IAAI;YACf,8CAA8C;YAC9C,MAAM,YAAY,GAAG,CAAC,iBAAiB,EAAE,mBAAmB,EAAE,mBAAmB,CAAC,CAAC;YACnF,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAc,CAAC,EAAE,CAAC;gBAC3C,OAAO,SAAS,CAAC;YAClB,CAAC;YAED,0BAA0B;YAC1B,MAAM,cAAc,GAAG,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC;YAChE,IAAI,cAAc,CAAC,QAAQ,CAAC,IAAc,CAAC,EAAE,CAAC;gBAC7C,OAAO,SAAS,CAAC;YAClB,CAAC;YAED,MAAM,KAAK,GAAI,MAAc,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;gBACjC,OAAO,CAAC,GAAG,IAAW,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACtD,CAAC;YACD,OAAO,KAAK,CAAC;QACd,CAAC;QACD,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK;YACtB,kCAAkC;YAClC,IAAI,IAAI,KAAK,mBAAmB,EAAE,CAAC;gBAClC,OAAO,KAAK,CAAC;YACd,CAAC;YACA,MAAc,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;YAC9B,OAAO,IAAI,CAAC;QACb,CAAC;KACD,CAAC,CAAC;IAEH,+EAA+E;IAC/E,gEAAgE;IAChE,+EAA+E;IAE/E,MAAa,eAAgB,SAAQ,KAAK;QACzC,YAAY,OAAe;YAC1B,KAAK,CAAC,OAAO,CAAC,CAAC;YACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC/B,CAAC;KACD;IALD,0CAKC;IAED,+EAA+E;IAC/E,gDAAgD;IAChD,0EAA0E;IAC1E,6EAA6E;IAC7E,+EAA+E;IAE/E,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC;QACtC,WAAW;QACX,WAAW;QACX,aAAa;QACb,kBAAkB;QAClB,kBAAkB;QAClB,kBAAkB;QAClB,kBAAkB;QAClB,UAAU;QACV,SAAS;QACT,gBAAgB;QAChB,gBAAgB;QAChB,eAAe;QACf,sBAAsB;KACtB,CAAC,CAAC;IAEH,SAAgB,UAAU,CAAC,KAAc;QACxC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,sBAAsB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACpE,MAAM,IAAI,eAAe,CAAC,kBAAkB,KAAK,4BAA4B,CAAC,CAAC;QAChF,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC"}
|
|
@@ -58,4 +58,6 @@ export interface BridgeConfig {
|
|
|
58
58
|
*/
|
|
59
59
|
debug?: boolean;
|
|
60
60
|
}
|
|
61
|
+
/** Default values for BridgeConfig. Bridge implementations should use this as their baseline. */
|
|
62
|
+
export declare const DEFAULT_BRIDGE_CONFIG: Required<BridgeConfig>;
|
|
61
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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// Phase 1.1: Bridge Interface (CORE - IMPLEMENT FIRST)
|
|
3
|
+
//
|
|
4
|
+
// This is the main interface all environments must implement.
|
|
5
|
+
// Start here for CLI/backend (IsolatedVmBridge) or frontend (WebWorkerBridge).
|
|
6
|
+
// ============================================================================
|
|
7
|
+
(function (factory) {
|
|
8
|
+
if (typeof module === "object" && typeof module.exports === "object") {
|
|
9
|
+
var v = factory(require, exports);
|
|
10
|
+
if (v !== undefined) module.exports = v;
|
|
11
|
+
}
|
|
12
|
+
else if (typeof define === "function" && define.amd) {
|
|
13
|
+
define(["require", "exports"], factory);
|
|
14
|
+
}
|
|
15
|
+
})(function (require, exports) {
|
|
16
|
+
"use strict";
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.DEFAULT_BRIDGE_CONFIG = void 0;
|
|
19
|
+
/** Default values for BridgeConfig. Bridge implementations should use this as their baseline. */
|
|
20
|
+
exports.DEFAULT_BRIDGE_CONFIG = {
|
|
21
|
+
memoryLimit: 128,
|
|
22
|
+
timeout: 5000,
|
|
23
|
+
debug: false,
|
|
24
|
+
};
|
|
25
|
+
});
|
|
26
|
+
//# 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;;;;;;;;;;;;;IAqE/E,iGAAiG;IACpF,QAAA,qBAAqB,GAA2B;QAC5D,WAAW,EAAE,GAAG;QAChB,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,KAAK;KACZ,CAAC"}
|
|
@@ -1,8 +1,5 @@
|
|
|
1
|
+
import type { TournamentHooks } from '@n8n/tournament';
|
|
1
2
|
import type { RuntimeBridge } from './bridge';
|
|
2
|
-
export interface TournamentHooks {
|
|
3
|
-
before?: Array<(ast: unknown) => unknown>;
|
|
4
|
-
after?: Array<(ast: unknown) => unknown>;
|
|
5
|
-
}
|
|
6
3
|
/**
|
|
7
4
|
* Configuration for ExpressionEvaluator.
|
|
8
5
|
*
|
|
@@ -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,47 @@
|
|
|
1
|
+
(function (factory) {
|
|
2
|
+
if (typeof module === "object" && typeof module.exports === "object") {
|
|
3
|
+
var v = factory(require, exports);
|
|
4
|
+
if (v !== undefined) module.exports = v;
|
|
5
|
+
}
|
|
6
|
+
else if (typeof define === "function" && define.amd) {
|
|
7
|
+
define(["require", "exports"], factory);
|
|
8
|
+
}
|
|
9
|
+
})(function (require, exports) {
|
|
10
|
+
"use strict";
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.SyntaxError = exports.SecurityViolationError = exports.TimeoutError = exports.MemoryLimitError = exports.ExpressionError = void 0;
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// Phase 1.4: Error Handling (IMPLEMENT WITH EVALUATOR)
|
|
15
|
+
//
|
|
16
|
+
// These error types provide structured error information.
|
|
17
|
+
// Start with basic Error, add these types in Phase 1.4.
|
|
18
|
+
// ============================================================================
|
|
19
|
+
/**
|
|
20
|
+
* Expression evaluation error.
|
|
21
|
+
*/
|
|
22
|
+
class ExpressionError extends Error {
|
|
23
|
+
context;
|
|
24
|
+
constructor(message, context) {
|
|
25
|
+
super(message);
|
|
26
|
+
this.context = context;
|
|
27
|
+
this.name = 'ExpressionError';
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.ExpressionError = ExpressionError;
|
|
31
|
+
/**
|
|
32
|
+
* Specific error types.
|
|
33
|
+
*/
|
|
34
|
+
class MemoryLimitError extends ExpressionError {
|
|
35
|
+
}
|
|
36
|
+
exports.MemoryLimitError = MemoryLimitError;
|
|
37
|
+
class TimeoutError extends ExpressionError {
|
|
38
|
+
}
|
|
39
|
+
exports.TimeoutError = TimeoutError;
|
|
40
|
+
class SecurityViolationError extends ExpressionError {
|
|
41
|
+
}
|
|
42
|
+
exports.SecurityViolationError = SecurityViolationError;
|
|
43
|
+
class SyntaxError extends ExpressionError {
|
|
44
|
+
}
|
|
45
|
+
exports.SyntaxError = SyntaxError;
|
|
46
|
+
});
|
|
47
|
+
//# sourceMappingURL=evaluator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../../src/types/evaluator.ts"],"names":[],"mappings":";;;;;;;;;;;;IA8MA,+EAA+E;IAC/E,uDAAuD;IACvD,EAAE;IACF,0DAA0D;IAC1D,wDAAwD;IACxD,+EAA+E;IAE/E;;OAEG;IACH,MAAa,eAAgB,SAAQ,KAAK;QAGjC;QAFR,YACC,OAAe,EACR,OAKN;YAED,KAAK,CAAC,OAAO,CAAC,CAAC;YAPR,YAAO,GAAP,OAAO,CAKb;YAGD,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC/B,CAAC;KACD;IAbD,0CAaC;IAED;;OAEG;IACH,MAAa,gBAAiB,SAAQ,eAAe;KAAG;IAAxD,4CAAwD;IACxD,MAAa,YAAa,SAAQ,eAAe;KAAG;IAApD,oCAAoD;IACpD,MAAa,sBAAuB,SAAQ,eAAe;KAAG;IAA9D,wDAA8D;IAC9D,MAAa,WAAY,SAAQ,eAAe;KAAG;IAAnD,kCAAmD"}
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
* This module exports all TypeScript interfaces and types for the expression runtime.
|
|
5
5
|
*/
|
|
6
6
|
export type { RuntimeBridge, BridgeConfig } from './bridge';
|
|
7
|
+
export { DEFAULT_BRIDGE_CONFIG } from './bridge';
|
|
7
8
|
export { RuntimeError } from './runtime';
|
|
8
|
-
export type { EvaluatorConfig, IExpressionEvaluator, WorkflowData, EvaluateOptions, ObservabilityProvider, MetricsAPI, TracesAPI, Span, LogsAPI,
|
|
9
|
+
export type { EvaluatorConfig, IExpressionEvaluator, WorkflowData, EvaluateOptions, ObservabilityProvider, MetricsAPI, TracesAPI, Span, LogsAPI, } from './evaluator';
|
|
9
10
|
export { ExpressionError, MemoryLimitError, TimeoutError, SecurityViolationError, SyntaxError, } from './evaluator';
|
|
10
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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Expression Runtime Types
|
|
3
|
+
*
|
|
4
|
+
* This module exports all TypeScript interfaces and types for the expression runtime.
|
|
5
|
+
*/
|
|
6
|
+
(function (factory) {
|
|
7
|
+
if (typeof module === "object" && typeof module.exports === "object") {
|
|
8
|
+
var v = factory(require, exports);
|
|
9
|
+
if (v !== undefined) module.exports = v;
|
|
10
|
+
}
|
|
11
|
+
else if (typeof define === "function" && define.amd) {
|
|
12
|
+
define(["require", "exports", "./bridge", "./runtime", "./evaluator"], factory);
|
|
13
|
+
}
|
|
14
|
+
})(function (require, exports) {
|
|
15
|
+
"use strict";
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.SyntaxError = exports.SecurityViolationError = exports.TimeoutError = exports.MemoryLimitError = exports.ExpressionError = exports.RuntimeError = exports.DEFAULT_BRIDGE_CONFIG = void 0;
|
|
18
|
+
var bridge_1 = require("./bridge");
|
|
19
|
+
Object.defineProperty(exports, "DEFAULT_BRIDGE_CONFIG", { enumerable: true, get: function () { return bridge_1.DEFAULT_BRIDGE_CONFIG; } });
|
|
20
|
+
// Runtime types
|
|
21
|
+
var runtime_1 = require("./runtime");
|
|
22
|
+
Object.defineProperty(exports, "RuntimeError", { enumerable: true, get: function () { return runtime_1.RuntimeError; } });
|
|
23
|
+
var evaluator_1 = require("./evaluator");
|
|
24
|
+
Object.defineProperty(exports, "ExpressionError", { enumerable: true, get: function () { return evaluator_1.ExpressionError; } });
|
|
25
|
+
Object.defineProperty(exports, "MemoryLimitError", { enumerable: true, get: function () { return evaluator_1.MemoryLimitError; } });
|
|
26
|
+
Object.defineProperty(exports, "TimeoutError", { enumerable: true, get: function () { return evaluator_1.TimeoutError; } });
|
|
27
|
+
Object.defineProperty(exports, "SecurityViolationError", { enumerable: true, get: function () { return evaluator_1.SecurityViolationError; } });
|
|
28
|
+
Object.defineProperty(exports, "SyntaxError", { enumerable: true, get: function () { return evaluator_1.SyntaxError; } });
|
|
29
|
+
});
|
|
30
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;;;;;;;;;;;;;IAIH,mCAAiD;IAAxC,+GAAA,qBAAqB,OAAA;IAE9B,gBAAgB;IAChB,qCAAyC;IAAhC,uGAAA,YAAY,OAAA;IAerB,yCAMqB;IALpB,4GAAA,eAAe,OAAA;IACf,6GAAA,gBAAgB,OAAA;IAChB,yGAAA,YAAY,OAAA;IACZ,mHAAA,sBAAsB,OAAA;IACtB,wGAAA,WAAW,OAAA"}
|
|
@@ -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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
(function (factory) {
|
|
2
|
+
if (typeof module === "object" && typeof module.exports === "object") {
|
|
3
|
+
var v = factory(require, exports);
|
|
4
|
+
if (v !== undefined) module.exports = v;
|
|
5
|
+
}
|
|
6
|
+
else if (typeof define === "function" && define.amd) {
|
|
7
|
+
define(["require", "exports"], factory);
|
|
8
|
+
}
|
|
9
|
+
})(function (require, exports) {
|
|
10
|
+
"use strict";
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.RuntimeError = void 0;
|
|
13
|
+
/**
|
|
14
|
+
* Runtime error thrown inside isolated context.
|
|
15
|
+
*
|
|
16
|
+
* These errors are thrown by the runtime code when something goes wrong during
|
|
17
|
+
* expression evaluation. The bridge must catch these and translate them to the
|
|
18
|
+
* appropriate ExpressionError subclass (see evaluator.ts).
|
|
19
|
+
*
|
|
20
|
+
* Translation mapping:
|
|
21
|
+
* - code: 'MEMORY_LIMIT' → MemoryLimitError
|
|
22
|
+
* - code: 'TIMEOUT' → TimeoutError
|
|
23
|
+
* - code: 'SECURITY_VIOLATION' → SecurityViolationError
|
|
24
|
+
* - code: 'SYNTAX_ERROR' → SyntaxError
|
|
25
|
+
* - other → ExpressionError
|
|
26
|
+
*/
|
|
27
|
+
class RuntimeError extends Error {
|
|
28
|
+
code;
|
|
29
|
+
details;
|
|
30
|
+
constructor(message, code, details) {
|
|
31
|
+
super(message);
|
|
32
|
+
this.code = code;
|
|
33
|
+
this.details = details;
|
|
34
|
+
this.name = 'RuntimeError';
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
exports.RuntimeError = RuntimeError;
|
|
38
|
+
});
|
|
39
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../src/types/runtime.ts"],"names":[],"mappings":";;;;;;;;;;;;IAAA;;;;;;;;;;;;;OAaG;IACH,MAAa,YAAa,SAAQ,KAAK;QAG9B;QACA;QAHR,YACC,OAAe,EACR,IAAY,EACZ,OAAiC;YAExC,KAAK,CAAC,OAAO,CAAC,CAAC;YAHR,SAAI,GAAJ,IAAI,CAAQ;YACZ,YAAO,GAAP,OAAO,CAA0B;YAGxC,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC5B,CAAC;KACD;IATD,oCASC"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import type { RuntimeBridge, BridgeConfig } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* IsolatedVmBridge - Runtime bridge using isolated-vm for secure expression evaluation.
|
|
4
|
+
*
|
|
5
|
+
* This bridge creates a V8 isolate with:
|
|
6
|
+
* - Hard memory limit (128MB default)
|
|
7
|
+
* - No access to Node.js APIs
|
|
8
|
+
* - Timeout enforcement
|
|
9
|
+
* - Complete isolation from host process
|
|
10
|
+
*
|
|
11
|
+
* Context reuse pattern: Create isolate/context once, reset state between evaluations.
|
|
12
|
+
*/
|
|
13
|
+
export declare class IsolatedVmBridge implements RuntimeBridge {
|
|
14
|
+
private isolate;
|
|
15
|
+
private context?;
|
|
16
|
+
private initialized;
|
|
17
|
+
private disposed;
|
|
18
|
+
private config;
|
|
19
|
+
private scriptCache;
|
|
20
|
+
private valueAtPathRef?;
|
|
21
|
+
private arrayElementRef?;
|
|
22
|
+
private callFunctionRef?;
|
|
23
|
+
constructor(config?: BridgeConfig);
|
|
24
|
+
/**
|
|
25
|
+
* Initialize the isolate and create execution context.
|
|
26
|
+
*
|
|
27
|
+
* Steps:
|
|
28
|
+
* 1. Create context
|
|
29
|
+
* 2. Set up basic globals (global reference)
|
|
30
|
+
* 3. Load runtime bundle (DateTime, extend, proxy system)
|
|
31
|
+
* 4. Verify proxy system
|
|
32
|
+
*
|
|
33
|
+
* Must be called before execute().
|
|
34
|
+
*/
|
|
35
|
+
initialize(): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Load runtime bundle into the isolate.
|
|
38
|
+
*
|
|
39
|
+
* The runtime bundle includes:
|
|
40
|
+
* - DateTime, extend, extendOptional (expression engine globals)
|
|
41
|
+
* - SafeObject and SafeError wrappers
|
|
42
|
+
* - createDeepLazyProxy function
|
|
43
|
+
* - __data object initialization
|
|
44
|
+
*
|
|
45
|
+
* @private
|
|
46
|
+
* @throws {Error} If context not initialized or bundle loading fails
|
|
47
|
+
*/
|
|
48
|
+
private loadVendorLibraries;
|
|
49
|
+
/**
|
|
50
|
+
* Verify the proxy system loaded correctly.
|
|
51
|
+
*
|
|
52
|
+
* The proxy system is loaded as part of the runtime bundle in loadVendorLibraries().
|
|
53
|
+
* This method verifies all required components are available.
|
|
54
|
+
*
|
|
55
|
+
* @private
|
|
56
|
+
* @throws {Error} If context not initialized or proxy system verification fails
|
|
57
|
+
*/
|
|
58
|
+
private verifyProxySystem;
|
|
59
|
+
/**
|
|
60
|
+
* Inject the E() error handler into the isolate context.
|
|
61
|
+
*
|
|
62
|
+
* Tournament wraps expressions with try-catch that calls E(error, this).
|
|
63
|
+
* This handler:
|
|
64
|
+
* - Re-throws security violations from __sanitize
|
|
65
|
+
* - Swallows TypeErrors (failed attack attempts return undefined)
|
|
66
|
+
* - Re-throws all other errors
|
|
67
|
+
*
|
|
68
|
+
* @private
|
|
69
|
+
* @throws {Error} If context not initialized
|
|
70
|
+
*/
|
|
71
|
+
private injectErrorHandler;
|
|
72
|
+
/**
|
|
73
|
+
* Reset data proxies in the isolate context.
|
|
74
|
+
*
|
|
75
|
+
* This method should be called before each execute() to:
|
|
76
|
+
* 1. Clear proxy caches from previous evaluations
|
|
77
|
+
* 2. Initialize fresh workflow data references
|
|
78
|
+
* 3. Expose workflow properties to globalThis
|
|
79
|
+
*
|
|
80
|
+
* The reset function runs in the isolate and calls back to the host
|
|
81
|
+
* via ivm.Reference callbacks to fetch workflow data.
|
|
82
|
+
*
|
|
83
|
+
* @private
|
|
84
|
+
* @throws {Error} If context not initialized or reset fails
|
|
85
|
+
*/
|
|
86
|
+
private resetDataProxies;
|
|
87
|
+
/**
|
|
88
|
+
* Register callback functions for cross-isolate communication.
|
|
89
|
+
*
|
|
90
|
+
* Creates three ivm.Reference callbacks that the runtime bundle uses
|
|
91
|
+
* to fetch data from the host process:
|
|
92
|
+
*
|
|
93
|
+
* - __getValueAtPath: Returns metadata or primitive for a property path
|
|
94
|
+
* - __getArrayElement: Returns individual array elements
|
|
95
|
+
* - __callFunctionAtPath: Executes functions in host context
|
|
96
|
+
*
|
|
97
|
+
* These callbacks are called synchronously from isolate proxy traps.
|
|
98
|
+
*
|
|
99
|
+
* @param data - Current workflow data to use for callback responses
|
|
100
|
+
* @private
|
|
101
|
+
*/
|
|
102
|
+
private registerCallbacks;
|
|
103
|
+
/**
|
|
104
|
+
* Execute JavaScript code in the isolated context.
|
|
105
|
+
*
|
|
106
|
+
* Flow:
|
|
107
|
+
* 1. Register callbacks as ivm.Reference for cross-isolate communication
|
|
108
|
+
* 2. Call resetDataProxies() to initialize workflow data proxies
|
|
109
|
+
* 3. Compile script (with caching for performance)
|
|
110
|
+
* 4. Execute with timeout enforcement
|
|
111
|
+
* 5. Return result (copied from isolate)
|
|
112
|
+
*
|
|
113
|
+
* @param code - JavaScript expression to evaluate
|
|
114
|
+
* @param data - Workflow data (e.g., { $json: {...}, $runIndex: 0 })
|
|
115
|
+
* @returns Result of the expression
|
|
116
|
+
* @throws {Error} If bridge not initialized or execution fails
|
|
117
|
+
*/
|
|
118
|
+
execute(code: string, data: Record<string, unknown>): unknown;
|
|
119
|
+
/**
|
|
120
|
+
* Dispose of the isolate and free resources.
|
|
121
|
+
*
|
|
122
|
+
* After disposal, the bridge cannot be used again.
|
|
123
|
+
*/
|
|
124
|
+
dispose(): Promise<void>;
|
|
125
|
+
/**
|
|
126
|
+
* Check if the bridge has been disposed.
|
|
127
|
+
*
|
|
128
|
+
* @returns true if disposed, false otherwise
|
|
129
|
+
*/
|
|
130
|
+
isDisposed(): boolean;
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=isolated-vm-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isolated-vm-bridge.d.ts","sourceRoot":"","sources":["../../../src/bridge/isolated-vm-bridge.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AA0B5D;;;;;;;;;;GAUG;AACH,qBAAa,gBAAiB,YAAW,aAAa;IACrD,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,OAAO,CAAC,CAAc;IAC9B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAyB;IAIvC,OAAO,CAAC,WAAW,CAAiC;IAIpD,OAAO,CAAC,cAAc,CAAC,CAAgB;IACvC,OAAO,CAAC,eAAe,CAAC,CAAgB;IACxC,OAAO,CAAC,eAAe,CAAC,CAAgB;gBAE5B,MAAM,GAAE,YAAiB;IAWrC;;;;;;;;;;OAUG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAgCjC;;;;;;;;;;;OAWG;YACW,mBAAmB;IAoCjC;;;;;;;;OAQG;YACW,iBAAiB;IA+B/B;;;;;;;;;;;OAWG;YACW,kBAAkB;IA0BhC;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,gBAAgB;IAmBxB;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,iBAAiB;IAiIzB;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO;IAsD7D;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB9B;;;;OAIG;IACH,UAAU,IAAI,OAAO;CAGrB"}
|
|
@@ -1,10 +1,27 @@
|
|
|
1
1
|
import ivm from 'isolated-vm';
|
|
2
2
|
import { readFile } from 'node:fs/promises';
|
|
3
3
|
import * as path from 'node:path';
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
import { DEFAULT_BRIDGE_CONFIG, TimeoutError, MemoryLimitError } from '../types';
|
|
5
|
+
const BUNDLE_RELATIVE_PATH = path.join('dist', 'bundle', 'runtime.iife.js');
|
|
6
|
+
/**
|
|
7
|
+
* Read the runtime IIFE bundle by walking up from `__dirname` until
|
|
8
|
+
* `dist/bundle/runtime.iife.js` is found.
|
|
9
|
+
*
|
|
10
|
+
* This works regardless of where the compiled output lives:
|
|
11
|
+
* - `src/bridge/` (vitest running against source)
|
|
12
|
+
* - `dist/cjs/bridge/` (CJS build)
|
|
13
|
+
*/
|
|
14
|
+
async function readRuntimeBundle() {
|
|
15
|
+
let dir = __dirname;
|
|
16
|
+
while (dir !== path.dirname(dir)) {
|
|
17
|
+
try {
|
|
18
|
+
return await readFile(path.join(dir, BUNDLE_RELATIVE_PATH), 'utf-8');
|
|
19
|
+
}
|
|
20
|
+
catch { }
|
|
21
|
+
dir = path.dirname(dir);
|
|
22
|
+
}
|
|
23
|
+
throw new Error(`Could not find runtime bundle (${BUNDLE_RELATIVE_PATH}) in any parent of ${__dirname}`);
|
|
24
|
+
}
|
|
8
25
|
/**
|
|
9
26
|
* IsolatedVmBridge - Runtime bridge using isolated-vm for secure expression evaluation.
|
|
10
27
|
*
|
|
@@ -32,9 +49,8 @@ export class IsolatedVmBridge {
|
|
|
32
49
|
callFunctionRef;
|
|
33
50
|
constructor(config = {}) {
|
|
34
51
|
this.config = {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
debug: config.debug ?? false,
|
|
52
|
+
...DEFAULT_BRIDGE_CONFIG,
|
|
53
|
+
...config,
|
|
38
54
|
};
|
|
39
55
|
// Create isolate with memory limit
|
|
40
56
|
// Note: memoryLimit is in MB
|
|
@@ -92,14 +108,12 @@ export class IsolatedVmBridge {
|
|
|
92
108
|
}
|
|
93
109
|
try {
|
|
94
110
|
// Load runtime bundle (includes vendor libraries + proxy system)
|
|
95
|
-
|
|
96
|
-
const runtimeBundlePath = path.join(__dirname, '../../dist/bundle/runtime.iife.js');
|
|
97
|
-
const runtimeBundle = await readFile(runtimeBundlePath, 'utf-8');
|
|
111
|
+
const runtimeBundle = await readRuntimeBundle();
|
|
98
112
|
// Evaluate bundle in isolate context
|
|
99
113
|
// This makes all exported globals available (DateTime, extend, extendOptional, SafeObject, SafeError, createDeepLazyProxy, resetDataProxies, __data)
|
|
100
114
|
await this.context.eval(runtimeBundle);
|
|
101
115
|
if (this.config.debug) {
|
|
102
|
-
console.log('[IsolatedVmBridge] Runtime bundle loaded
|
|
116
|
+
console.log('[IsolatedVmBridge] Runtime bundle loaded');
|
|
103
117
|
}
|
|
104
118
|
// Verify vendor libraries loaded correctly
|
|
105
119
|
const hasDateTime = await this.context.eval('typeof DateTime !== "undefined"');
|
|
@@ -281,6 +295,9 @@ export class IsolatedVmBridge {
|
|
|
281
295
|
let arr = data;
|
|
282
296
|
for (const key of path) {
|
|
283
297
|
arr = arr?.[key];
|
|
298
|
+
if (arr === undefined || arr === null) {
|
|
299
|
+
return undefined;
|
|
300
|
+
}
|
|
284
301
|
}
|
|
285
302
|
if (!Array.isArray(arr)) {
|
|
286
303
|
return undefined;
|
|
@@ -388,6 +405,12 @@ export class IsolatedVmBridge {
|
|
|
388
405
|
}
|
|
389
406
|
catch (error) {
|
|
390
407
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
408
|
+
if (errorMessage.includes('Script execution timed out')) {
|
|
409
|
+
throw new TimeoutError(`Expression timed out after ${this.config.timeout}ms`, {});
|
|
410
|
+
}
|
|
411
|
+
if (errorMessage.includes('memory limit')) {
|
|
412
|
+
throw new MemoryLimitError(`Expression exceeded memory limit of ${this.config.memoryLimit}MB`, {});
|
|
413
|
+
}
|
|
391
414
|
throw new Error(`Expression evaluation failed: ${errorMessage}`);
|
|
392
415
|
}
|
|
393
416
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isolated-vm-bridge.js","sourceRoot":"","sources":["../../../src/bridge/isolated-vm-bridge.ts"],"names":[],"mappings":"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"}
|