@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.
Files changed (192) hide show
  1. package/ARCHITECTURE.md +5 -6
  2. package/LICENSE_EE.md +27 -0
  3. package/README.md +11 -11
  4. package/dist/bundle/runtime.esm.js +45 -0
  5. package/dist/bundle/runtime.esm.js.map +7 -0
  6. package/dist/bundle/runtime.iife.js +45 -0
  7. package/dist/bundle/runtime.iife.js.map +7 -0
  8. package/dist/cjs/bridge/isolated-vm-bridge.d.ts +132 -0
  9. package/dist/cjs/bridge/isolated-vm-bridge.d.ts.map +1 -0
  10. package/dist/cjs/bridge/isolated-vm-bridge.js +500 -0
  11. package/dist/cjs/bridge/isolated-vm-bridge.js.map +1 -0
  12. package/dist/cjs/build.tsbuildinfo +1 -0
  13. package/dist/cjs/evaluator/expression-evaluator.d.ts +23 -0
  14. package/dist/cjs/evaluator/expression-evaluator.d.ts.map +1 -0
  15. package/dist/cjs/evaluator/expression-evaluator.js +87 -0
  16. package/dist/cjs/evaluator/expression-evaluator.js.map +1 -0
  17. package/dist/cjs/extensions/array-extensions.d.ts +34 -0
  18. package/dist/cjs/extensions/array-extensions.d.ts.map +1 -0
  19. package/dist/cjs/extensions/array-extensions.js +632 -0
  20. package/dist/cjs/extensions/array-extensions.js.map +1 -0
  21. package/dist/cjs/extensions/boolean-extensions.d.ts +6 -0
  22. package/dist/cjs/extensions/boolean-extensions.d.ts.map +1 -0
  23. package/dist/cjs/extensions/boolean-extensions.js +49 -0
  24. package/dist/cjs/extensions/boolean-extensions.js.map +1 -0
  25. package/dist/cjs/extensions/date-extensions.d.ts +3 -0
  26. package/dist/cjs/extensions/date-extensions.d.ts.map +1 -0
  27. package/dist/cjs/extensions/date-extensions.js +528 -0
  28. package/dist/cjs/extensions/date-extensions.js.map +1 -0
  29. package/dist/cjs/extensions/expression-extension-error.d.ts +7 -0
  30. package/dist/cjs/extensions/expression-extension-error.d.ts.map +1 -0
  31. package/dist/cjs/extensions/expression-extension-error.js +25 -0
  32. package/dist/cjs/extensions/expression-extension-error.js.map +1 -0
  33. package/dist/cjs/extensions/extend.d.ts +12 -0
  34. package/dist/cjs/extensions/extend.d.ts.map +1 -0
  35. package/dist/cjs/extensions/extend.js +149 -0
  36. package/dist/cjs/extensions/extend.js.map +1 -0
  37. package/dist/cjs/extensions/extensions.d.ts +43 -0
  38. package/dist/cjs/extensions/extensions.d.ts.map +1 -0
  39. package/dist/cjs/extensions/extensions.js +13 -0
  40. package/dist/cjs/extensions/extensions.js.map +1 -0
  41. package/dist/cjs/extensions/number-extensions.d.ts +27 -0
  42. package/dist/cjs/extensions/number-extensions.d.ts.map +1 -0
  43. package/dist/cjs/extensions/number-extensions.js +235 -0
  44. package/dist/cjs/extensions/number-extensions.js.map +1 -0
  45. package/dist/cjs/extensions/object-extensions.d.ts +46 -0
  46. package/dist/cjs/extensions/object-extensions.d.ts.map +1 -0
  47. package/dist/cjs/extensions/object-extensions.js +297 -0
  48. package/dist/cjs/extensions/object-extensions.js.map +1 -0
  49. package/dist/cjs/extensions/string-extensions.d.ts +38 -0
  50. package/dist/cjs/extensions/string-extensions.d.ts.map +1 -0
  51. package/dist/cjs/extensions/string-extensions.js +753 -0
  52. package/dist/cjs/extensions/string-extensions.js.map +1 -0
  53. package/dist/cjs/extensions/utils.d.ts +4 -0
  54. package/dist/cjs/extensions/utils.d.ts.map +1 -0
  55. package/dist/cjs/extensions/utils.js +42 -0
  56. package/dist/cjs/extensions/utils.js.map +1 -0
  57. package/dist/cjs/index.d.ts +7 -0
  58. package/dist/cjs/index.d.ts.map +1 -0
  59. package/dist/cjs/index.js +34 -0
  60. package/dist/cjs/index.js.map +1 -0
  61. package/dist/cjs/runtime/index.d.ts +17 -0
  62. package/dist/cjs/runtime/index.d.ts.map +1 -0
  63. package/dist/cjs/runtime/index.js +35 -0
  64. package/dist/cjs/runtime/index.js.map +1 -0
  65. package/dist/cjs/runtime/lazy-proxy.d.ts +22 -0
  66. package/dist/cjs/runtime/lazy-proxy.d.ts.map +1 -0
  67. package/dist/cjs/runtime/lazy-proxy.js +179 -0
  68. package/dist/cjs/runtime/lazy-proxy.js.map +1 -0
  69. package/dist/cjs/runtime/reset.d.ts +16 -0
  70. package/dist/cjs/runtime/reset.d.ts.map +1 -0
  71. package/dist/cjs/runtime/reset.js +137 -0
  72. package/dist/cjs/runtime/reset.js.map +1 -0
  73. package/dist/cjs/runtime/safe-globals.d.ts +21 -0
  74. package/dist/cjs/runtime/safe-globals.d.ts.map +1 -0
  75. package/dist/cjs/runtime/safe-globals.js +125 -0
  76. package/dist/cjs/runtime/safe-globals.js.map +1 -0
  77. package/dist/{types → cjs/types}/bridge.d.ts +2 -0
  78. package/dist/cjs/types/bridge.d.ts.map +1 -0
  79. package/dist/cjs/types/bridge.js +26 -0
  80. package/dist/cjs/types/bridge.js.map +1 -0
  81. package/dist/{types → cjs/types}/evaluator.d.ts +1 -4
  82. package/dist/cjs/types/evaluator.d.ts.map +1 -0
  83. package/dist/cjs/types/evaluator.js +47 -0
  84. package/dist/cjs/types/evaluator.js.map +1 -0
  85. package/dist/{types → cjs/types}/index.d.ts +2 -2
  86. package/dist/cjs/types/index.d.ts.map +1 -0
  87. package/dist/cjs/types/index.js +30 -0
  88. package/dist/cjs/types/index.js.map +1 -0
  89. package/dist/cjs/types/runtime.d.ts +20 -0
  90. package/dist/cjs/types/runtime.d.ts.map +1 -0
  91. package/dist/cjs/types/runtime.js +39 -0
  92. package/dist/cjs/types/runtime.js.map +1 -0
  93. package/dist/esm/bridge/isolated-vm-bridge.d.ts +132 -0
  94. package/dist/esm/bridge/isolated-vm-bridge.d.ts.map +1 -0
  95. package/dist/esm/bridge/isolated-vm-bridge.js +450 -0
  96. package/dist/esm/bridge/isolated-vm-bridge.js.map +1 -0
  97. package/dist/esm/build.tsbuildinfo +1 -0
  98. package/dist/esm/evaluator/expression-evaluator.d.ts +23 -0
  99. package/dist/esm/evaluator/expression-evaluator.d.ts.map +1 -0
  100. package/dist/esm/evaluator/expression-evaluator.js +73 -0
  101. package/dist/esm/evaluator/expression-evaluator.js.map +1 -0
  102. package/dist/esm/extensions/array-extensions.d.ts +34 -0
  103. package/dist/esm/extensions/array-extensions.d.ts.map +1 -0
  104. package/dist/esm/extensions/array-extensions.js +610 -0
  105. package/dist/esm/extensions/array-extensions.js.map +1 -0
  106. package/dist/esm/extensions/boolean-extensions.d.ts +6 -0
  107. package/dist/esm/extensions/boolean-extensions.d.ts.map +1 -0
  108. package/dist/esm/extensions/boolean-extensions.js +33 -0
  109. package/dist/esm/extensions/boolean-extensions.js.map +1 -0
  110. package/dist/esm/extensions/date-extensions.d.ts +3 -0
  111. package/dist/esm/extensions/date-extensions.d.ts.map +1 -0
  112. package/dist/esm/extensions/date-extensions.js +515 -0
  113. package/dist/esm/extensions/date-extensions.js.map +1 -0
  114. package/dist/esm/extensions/expression-extension-error.d.ts +7 -0
  115. package/dist/esm/extensions/expression-extension-error.d.ts.map +1 -0
  116. package/dist/esm/extensions/expression-extension-error.js +11 -0
  117. package/dist/esm/extensions/expression-extension-error.js.map +1 -0
  118. package/dist/esm/extensions/extend.d.ts +12 -0
  119. package/dist/esm/extensions/extend.d.ts.map +1 -0
  120. package/dist/esm/extensions/extend.js +134 -0
  121. package/dist/esm/extensions/extend.js.map +1 -0
  122. package/dist/esm/extensions/extensions.d.ts +43 -0
  123. package/dist/esm/extensions/extensions.d.ts.map +1 -0
  124. package/dist/esm/extensions/extensions.js +2 -0
  125. package/dist/esm/extensions/extensions.js.map +1 -0
  126. package/dist/esm/extensions/number-extensions.d.ts +27 -0
  127. package/dist/esm/extensions/number-extensions.d.ts.map +1 -0
  128. package/dist/esm/extensions/number-extensions.js +221 -0
  129. package/dist/esm/extensions/number-extensions.js.map +1 -0
  130. package/dist/esm/extensions/object-extensions.d.ts +46 -0
  131. package/dist/esm/extensions/object-extensions.d.ts.map +1 -0
  132. package/dist/esm/extensions/object-extensions.js +277 -0
  133. package/dist/esm/extensions/object-extensions.js.map +1 -0
  134. package/dist/esm/extensions/string-extensions.d.ts +38 -0
  135. package/dist/esm/extensions/string-extensions.d.ts.map +1 -0
  136. package/dist/esm/extensions/string-extensions.js +735 -0
  137. package/dist/esm/extensions/string-extensions.js.map +1 -0
  138. package/dist/esm/extensions/utils.d.ts +4 -0
  139. package/dist/esm/extensions/utils.d.ts.map +1 -0
  140. package/dist/esm/extensions/utils.js +27 -0
  141. package/dist/esm/extensions/utils.js.map +1 -0
  142. package/dist/esm/index.d.ts +7 -0
  143. package/dist/esm/index.d.ts.map +1 -0
  144. package/dist/esm/index.js +10 -0
  145. package/dist/esm/index.js.map +1 -0
  146. package/dist/esm/runtime/index.d.ts +17 -0
  147. package/dist/esm/runtime/index.d.ts.map +1 -0
  148. package/dist/esm/runtime/index.js +23 -0
  149. package/dist/esm/runtime/index.js.map +1 -0
  150. package/dist/esm/runtime/lazy-proxy.d.ts +22 -0
  151. package/dist/esm/runtime/lazy-proxy.d.ts.map +1 -0
  152. package/dist/esm/runtime/lazy-proxy.js +164 -0
  153. package/dist/esm/runtime/lazy-proxy.js.map +1 -0
  154. package/dist/esm/runtime/reset.d.ts +16 -0
  155. package/dist/esm/runtime/reset.d.ts.map +1 -0
  156. package/dist/esm/runtime/reset.js +124 -0
  157. package/dist/esm/runtime/reset.js.map +1 -0
  158. package/dist/esm/runtime/safe-globals.d.ts +21 -0
  159. package/dist/esm/runtime/safe-globals.d.ts.map +1 -0
  160. package/dist/esm/runtime/safe-globals.js +110 -0
  161. package/dist/esm/runtime/safe-globals.js.map +1 -0
  162. package/dist/esm/types/bridge.d.ts +63 -0
  163. package/dist/esm/types/bridge.d.ts.map +1 -0
  164. package/dist/{types → esm/types}/bridge.js +6 -1
  165. package/dist/esm/types/bridge.js.map +1 -0
  166. package/dist/esm/types/evaluator.d.ts +194 -0
  167. package/dist/esm/types/evaluator.d.ts.map +1 -0
  168. package/dist/esm/types/evaluator.js.map +1 -0
  169. package/dist/esm/types/index.d.ts +11 -0
  170. package/dist/esm/types/index.d.ts.map +1 -0
  171. package/dist/{types → esm/types}/index.js +2 -0
  172. package/dist/esm/types/index.js.map +1 -0
  173. package/dist/esm/types/runtime.d.ts +20 -0
  174. package/dist/esm/types/runtime.d.ts.map +1 -0
  175. package/dist/{types → esm/types}/runtime.js +0 -6
  176. package/dist/esm/types/runtime.js.map +1 -0
  177. package/package.json +29 -6
  178. package/dist/build.tsbuildinfo +0 -1
  179. package/dist/index.d.ts +0 -3
  180. package/dist/index.d.ts.map +0 -1
  181. package/dist/index.js +0 -2
  182. package/dist/index.js.map +0 -1
  183. package/dist/types/bridge.d.ts.map +0 -1
  184. package/dist/types/bridge.js.map +0 -1
  185. package/dist/types/evaluator.d.ts.map +0 -1
  186. package/dist/types/evaluator.js.map +0 -1
  187. package/dist/types/index.d.ts.map +0 -1
  188. package/dist/types/index.js.map +0 -1
  189. package/dist/types/runtime.d.ts +0 -122
  190. package/dist/types/runtime.d.ts.map +0 -1
  191. package/dist/types/runtime.js.map +0 -1
  192. /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
- export {};
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":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAO9C;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC/B;;OAEG;IACH,MAAM,EAAE,aAAa,CAAC;IAEtB;;OAEG;IACH,aAAa,CAAC,EAAE,qBAAqB,CAAC;IAEtC;;;;OAIG;IACH,KAAK,CAAC,EAAE,eAAe,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACpC;;;OAGG;IACH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC;IAErF;;OAEG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzB;;OAEG;IACH,UAAU,IAAI,OAAO,CAAC;CACtB;AAED;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEnD;;GAEG;AACH;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC/B;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAYD;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACrC;;OAEG;IACH,OAAO,EAAE,UAAU,CAAC;IAEpB;;OAEG;IACH,MAAM,EAAE,SAAS,CAAC;IAElB;;OAEG;IACH,IAAI,EAAE,OAAO,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IAC1B;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IAE1E;;OAEG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IAExE;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;CAC5E;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACzB;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CACpE;AAED;;GAEG;AACH,MAAM,WAAW,IAAI;IACpB;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,GAAG,IAAI,CAAC;IAExC;;OAEG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IAEhD;;OAEG;IACH,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAEpC;;OAEG;IACH,GAAG,IAAI,IAAI,CAAC;CACZ;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACvB;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAE/E;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAE/D;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAE/D;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAChE;AASD;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IAGjC,OAAO,EAAE;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACvB;gBAND,OAAO,EAAE,MAAM,EACR,OAAO,EAAE;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACvB;CAKF;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,eAAe;CAAG;AACxD,qBAAa,YAAa,SAAQ,eAAe;CAAG;AACpD,qBAAa,sBAAuB,SAAQ,eAAe;CAAG;AAC9D,qBAAa,WAAY,SAAQ,eAAe;CAAG"}
@@ -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.2.0",
3
+ "version": "0.4.0",
4
4
  "description": "Secure, isolated expression evaluation runtime for n8n",
5
- "main": "dist/index.js",
6
- "types": "dist/index.d.ts",
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 -p tsconfig.build.json",
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"