@n8n/expression-runtime 0.3.0 → 0.5.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 (236) hide show
  1. package/README.md +3 -3
  2. package/dist/bundle/runtime.esm.js +17 -17
  3. package/dist/bundle/runtime.esm.js.map +4 -4
  4. package/dist/bundle/runtime.iife.js +17 -17
  5. package/dist/bundle/runtime.iife.js.map +4 -4
  6. package/dist/{bridge → cjs/bridge}/isolated-vm-bridge.d.ts +3 -2
  7. package/dist/cjs/bridge/isolated-vm-bridge.d.ts.map +1 -0
  8. package/dist/cjs/bridge/isolated-vm-bridge.js +512 -0
  9. package/dist/cjs/bridge/isolated-vm-bridge.js.map +1 -0
  10. package/dist/cjs/build.tsbuildinfo +1 -0
  11. package/dist/cjs/evaluator/expression-evaluator.d.ts +23 -0
  12. package/dist/cjs/evaluator/expression-evaluator.d.ts.map +1 -0
  13. package/dist/cjs/evaluator/expression-evaluator.js +89 -0
  14. package/dist/cjs/evaluator/expression-evaluator.js.map +1 -0
  15. package/dist/cjs/extensions/array-extensions.d.ts.map +1 -0
  16. package/dist/cjs/extensions/array-extensions.js +637 -0
  17. package/dist/cjs/extensions/array-extensions.js.map +1 -0
  18. package/dist/cjs/extensions/boolean-extensions.d.ts.map +1 -0
  19. package/dist/cjs/extensions/boolean-extensions.js +49 -0
  20. package/dist/cjs/extensions/boolean-extensions.js.map +1 -0
  21. package/dist/cjs/extensions/date-extensions.d.ts.map +1 -0
  22. package/dist/cjs/extensions/date-extensions.js +528 -0
  23. package/dist/cjs/extensions/date-extensions.js.map +1 -0
  24. package/dist/cjs/extensions/expression-extension-error.d.ts.map +1 -0
  25. package/dist/cjs/extensions/expression-extension-error.js +25 -0
  26. package/dist/cjs/extensions/expression-extension-error.js.map +1 -0
  27. package/dist/cjs/extensions/extend.d.ts.map +1 -0
  28. package/dist/cjs/extensions/extend.js +149 -0
  29. package/dist/cjs/extensions/extend.js.map +1 -0
  30. package/dist/cjs/extensions/extensions.d.ts.map +1 -0
  31. package/dist/cjs/extensions/extensions.js +13 -0
  32. package/dist/cjs/extensions/extensions.js.map +1 -0
  33. package/dist/cjs/extensions/function-extensions.d.ts +28 -0
  34. package/dist/cjs/extensions/function-extensions.d.ts.map +1 -0
  35. package/dist/cjs/extensions/function-extensions.js +92 -0
  36. package/dist/cjs/extensions/function-extensions.js.map +1 -0
  37. package/dist/cjs/extensions/number-extensions.d.ts.map +1 -0
  38. package/dist/cjs/extensions/number-extensions.js +244 -0
  39. package/dist/cjs/extensions/number-extensions.js.map +1 -0
  40. package/dist/cjs/extensions/object-extensions.d.ts.map +1 -0
  41. package/dist/cjs/extensions/object-extensions.js +305 -0
  42. package/dist/cjs/extensions/object-extensions.js.map +1 -0
  43. package/dist/cjs/extensions/string-extensions.d.ts.map +1 -0
  44. package/dist/cjs/extensions/string-extensions.js +790 -0
  45. package/dist/cjs/extensions/string-extensions.js.map +1 -0
  46. package/dist/cjs/extensions/utils.d.ts.map +1 -0
  47. package/dist/cjs/extensions/utils.js +42 -0
  48. package/dist/cjs/extensions/utils.js.map +1 -0
  49. package/dist/cjs/index.d.ts +7 -0
  50. package/dist/cjs/index.d.ts.map +1 -0
  51. package/dist/cjs/index.js +35 -0
  52. package/dist/cjs/index.js.map +1 -0
  53. package/dist/cjs/runtime/index.d.ts +34 -0
  54. package/dist/cjs/runtime/index.d.ts.map +1 -0
  55. package/dist/cjs/runtime/index.js +39 -0
  56. package/dist/cjs/runtime/index.js.map +1 -0
  57. package/dist/{runtime → cjs/runtime}/lazy-proxy.d.ts +4 -0
  58. package/dist/cjs/runtime/lazy-proxy.d.ts.map +1 -0
  59. package/dist/cjs/runtime/lazy-proxy.js +179 -0
  60. package/dist/cjs/runtime/lazy-proxy.js.map +1 -0
  61. package/dist/{runtime → cjs/runtime}/reset.d.ts +1 -1
  62. package/dist/cjs/runtime/reset.d.ts.map +1 -0
  63. package/dist/cjs/runtime/reset.js +157 -0
  64. package/dist/cjs/runtime/reset.js.map +1 -0
  65. package/dist/cjs/runtime/safe-globals.d.ts.map +1 -0
  66. package/dist/cjs/runtime/safe-globals.js +125 -0
  67. package/dist/cjs/runtime/safe-globals.js.map +1 -0
  68. package/dist/cjs/runtime/serialize.d.ts +19 -0
  69. package/dist/cjs/runtime/serialize.d.ts.map +1 -0
  70. package/dist/cjs/runtime/serialize.js +67 -0
  71. package/dist/cjs/runtime/serialize.js.map +1 -0
  72. package/dist/{types → cjs/types}/bridge.d.ts +11 -1
  73. package/dist/cjs/types/bridge.d.ts.map +1 -0
  74. package/dist/cjs/types/bridge.js +26 -0
  75. package/dist/cjs/types/bridge.js.map +1 -0
  76. package/dist/{types → cjs/types}/evaluator.d.ts +6 -7
  77. package/dist/cjs/types/evaluator.d.ts.map +1 -0
  78. package/dist/cjs/types/evaluator.js +47 -0
  79. package/dist/cjs/types/evaluator.js.map +1 -0
  80. package/dist/{types → cjs/types}/index.d.ts +3 -2
  81. package/dist/cjs/types/index.d.ts.map +1 -0
  82. package/dist/cjs/types/index.js +30 -0
  83. package/dist/cjs/types/index.js.map +1 -0
  84. package/dist/cjs/types/runtime.d.ts.map +1 -0
  85. package/dist/cjs/types/runtime.js +39 -0
  86. package/dist/cjs/types/runtime.js.map +1 -0
  87. package/dist/esm/bridge/isolated-vm-bridge.d.ts +133 -0
  88. package/dist/esm/bridge/isolated-vm-bridge.d.ts.map +1 -0
  89. package/dist/{bridge → esm/bridge}/isolated-vm-bridge.js +62 -24
  90. package/dist/esm/bridge/isolated-vm-bridge.js.map +1 -0
  91. package/dist/esm/build.tsbuildinfo +1 -0
  92. package/dist/esm/evaluator/expression-evaluator.d.ts +23 -0
  93. package/dist/esm/evaluator/expression-evaluator.d.ts.map +1 -0
  94. package/dist/esm/evaluator/expression-evaluator.js +75 -0
  95. package/dist/esm/evaluator/expression-evaluator.js.map +1 -0
  96. package/dist/esm/extensions/array-extensions.d.ts +34 -0
  97. package/dist/esm/extensions/array-extensions.d.ts.map +1 -0
  98. package/dist/{extensions → esm/extensions}/array-extensions.js +6 -1
  99. package/dist/esm/extensions/array-extensions.js.map +1 -0
  100. package/dist/esm/extensions/boolean-extensions.d.ts +6 -0
  101. package/dist/esm/extensions/boolean-extensions.d.ts.map +1 -0
  102. package/dist/esm/extensions/boolean-extensions.js.map +1 -0
  103. package/dist/esm/extensions/date-extensions.d.ts +3 -0
  104. package/dist/esm/extensions/date-extensions.d.ts.map +1 -0
  105. package/dist/esm/extensions/date-extensions.js.map +1 -0
  106. package/dist/esm/extensions/expression-extension-error.d.ts +7 -0
  107. package/dist/esm/extensions/expression-extension-error.d.ts.map +1 -0
  108. package/dist/esm/extensions/expression-extension-error.js.map +1 -0
  109. package/dist/esm/extensions/extend.d.ts +12 -0
  110. package/dist/esm/extensions/extend.d.ts.map +1 -0
  111. package/dist/esm/extensions/extend.js.map +1 -0
  112. package/dist/esm/extensions/extensions.d.ts +43 -0
  113. package/dist/esm/extensions/extensions.d.ts.map +1 -0
  114. package/dist/esm/extensions/extensions.js.map +1 -0
  115. package/dist/esm/extensions/function-extensions.d.ts +28 -0
  116. package/dist/esm/extensions/function-extensions.d.ts.map +1 -0
  117. package/dist/esm/extensions/function-extensions.js +79 -0
  118. package/dist/esm/extensions/function-extensions.js.map +1 -0
  119. package/dist/esm/extensions/number-extensions.d.ts +27 -0
  120. package/dist/esm/extensions/number-extensions.d.ts.map +1 -0
  121. package/dist/{extensions → esm/extensions}/number-extensions.js +10 -1
  122. package/dist/esm/extensions/number-extensions.js.map +1 -0
  123. package/dist/esm/extensions/object-extensions.d.ts +46 -0
  124. package/dist/esm/extensions/object-extensions.d.ts.map +1 -0
  125. package/dist/{extensions → esm/extensions}/object-extensions.js +9 -1
  126. package/dist/esm/extensions/object-extensions.js.map +1 -0
  127. package/dist/esm/extensions/string-extensions.d.ts +38 -0
  128. package/dist/esm/extensions/string-extensions.d.ts.map +1 -0
  129. package/dist/{extensions → esm/extensions}/string-extensions.js +41 -4
  130. package/dist/esm/extensions/string-extensions.js.map +1 -0
  131. package/dist/esm/extensions/utils.d.ts +4 -0
  132. package/dist/esm/extensions/utils.d.ts.map +1 -0
  133. package/dist/esm/extensions/utils.js.map +1 -0
  134. package/dist/esm/index.d.ts +7 -0
  135. package/dist/esm/index.d.ts.map +1 -0
  136. package/dist/esm/index.js +11 -0
  137. package/dist/esm/index.js.map +1 -0
  138. package/dist/esm/runtime/index.d.ts +34 -0
  139. package/dist/esm/runtime/index.d.ts.map +1 -0
  140. package/dist/{runtime → esm/runtime}/index.js +5 -1
  141. package/dist/esm/runtime/index.js.map +1 -0
  142. package/dist/esm/runtime/lazy-proxy.d.ts +22 -0
  143. package/dist/esm/runtime/lazy-proxy.d.ts.map +1 -0
  144. package/dist/{runtime → esm/runtime}/lazy-proxy.js +20 -6
  145. package/dist/esm/runtime/lazy-proxy.js.map +1 -0
  146. package/dist/esm/runtime/reset.d.ts +16 -0
  147. package/dist/esm/runtime/reset.d.ts.map +1 -0
  148. package/dist/{runtime → esm/runtime}/reset.js +21 -1
  149. package/dist/esm/runtime/reset.js.map +1 -0
  150. package/dist/esm/runtime/safe-globals.d.ts +21 -0
  151. package/dist/esm/runtime/safe-globals.d.ts.map +1 -0
  152. package/dist/esm/runtime/safe-globals.js.map +1 -0
  153. package/dist/esm/runtime/serialize.d.ts +19 -0
  154. package/dist/esm/runtime/serialize.d.ts.map +1 -0
  155. package/dist/esm/runtime/serialize.js +54 -0
  156. package/dist/esm/runtime/serialize.js.map +1 -0
  157. package/dist/esm/types/bridge.d.ts +71 -0
  158. package/dist/esm/types/bridge.d.ts.map +1 -0
  159. package/dist/{types → esm/types}/bridge.js +6 -1
  160. package/dist/esm/types/bridge.js.map +1 -0
  161. package/dist/esm/types/evaluator.d.ts +196 -0
  162. package/dist/esm/types/evaluator.d.ts.map +1 -0
  163. package/dist/esm/types/evaluator.js.map +1 -0
  164. package/dist/esm/types/index.d.ts +11 -0
  165. package/dist/esm/types/index.d.ts.map +1 -0
  166. package/dist/{types → esm/types}/index.js +1 -0
  167. package/dist/esm/types/index.js.map +1 -0
  168. package/dist/esm/types/runtime.d.ts +20 -0
  169. package/dist/esm/types/runtime.d.ts.map +1 -0
  170. package/dist/esm/types/runtime.js.map +1 -0
  171. package/package.json +16 -5
  172. package/dist/bridge/isolated-vm-bridge.d.ts.map +0 -1
  173. package/dist/bridge/isolated-vm-bridge.js.map +0 -1
  174. package/dist/build.tsbuildinfo +0 -1
  175. package/dist/extensions/array-extensions.d.ts.map +0 -1
  176. package/dist/extensions/array-extensions.js.map +0 -1
  177. package/dist/extensions/boolean-extensions.d.ts.map +0 -1
  178. package/dist/extensions/boolean-extensions.js.map +0 -1
  179. package/dist/extensions/date-extensions.d.ts.map +0 -1
  180. package/dist/extensions/date-extensions.js.map +0 -1
  181. package/dist/extensions/expression-extension-error.d.ts.map +0 -1
  182. package/dist/extensions/expression-extension-error.js.map +0 -1
  183. package/dist/extensions/extend.d.ts.map +0 -1
  184. package/dist/extensions/extend.js.map +0 -1
  185. package/dist/extensions/extensions.d.ts.map +0 -1
  186. package/dist/extensions/extensions.js.map +0 -1
  187. package/dist/extensions/number-extensions.d.ts.map +0 -1
  188. package/dist/extensions/number-extensions.js.map +0 -1
  189. package/dist/extensions/object-extensions.d.ts.map +0 -1
  190. package/dist/extensions/object-extensions.js.map +0 -1
  191. package/dist/extensions/string-extensions.d.ts.map +0 -1
  192. package/dist/extensions/string-extensions.js.map +0 -1
  193. package/dist/extensions/utils.d.ts.map +0 -1
  194. package/dist/extensions/utils.js.map +0 -1
  195. package/dist/index.d.ts +0 -3
  196. package/dist/index.d.ts.map +0 -1
  197. package/dist/index.js +0 -2
  198. package/dist/index.js.map +0 -1
  199. package/dist/runtime/index.d.ts +0 -17
  200. package/dist/runtime/index.d.ts.map +0 -1
  201. package/dist/runtime/index.js.map +0 -1
  202. package/dist/runtime/lazy-proxy.d.ts.map +0 -1
  203. package/dist/runtime/lazy-proxy.js.map +0 -1
  204. package/dist/runtime/reset.d.ts.map +0 -1
  205. package/dist/runtime/reset.js.map +0 -1
  206. package/dist/runtime/safe-globals.d.ts.map +0 -1
  207. package/dist/runtime/safe-globals.js.map +0 -1
  208. package/dist/types/bridge.d.ts.map +0 -1
  209. package/dist/types/bridge.js.map +0 -1
  210. package/dist/types/evaluator.d.ts.map +0 -1
  211. package/dist/types/evaluator.js.map +0 -1
  212. package/dist/types/index.d.ts.map +0 -1
  213. package/dist/types/index.js.map +0 -1
  214. package/dist/types/runtime.d.ts.map +0 -1
  215. package/dist/types/runtime.js.map +0 -1
  216. /package/dist/{extensions → cjs/extensions}/array-extensions.d.ts +0 -0
  217. /package/dist/{extensions → cjs/extensions}/boolean-extensions.d.ts +0 -0
  218. /package/dist/{extensions → cjs/extensions}/date-extensions.d.ts +0 -0
  219. /package/dist/{extensions → cjs/extensions}/expression-extension-error.d.ts +0 -0
  220. /package/dist/{extensions → cjs/extensions}/extend.d.ts +0 -0
  221. /package/dist/{extensions → cjs/extensions}/extensions.d.ts +0 -0
  222. /package/dist/{extensions → cjs/extensions}/number-extensions.d.ts +0 -0
  223. /package/dist/{extensions → cjs/extensions}/object-extensions.d.ts +0 -0
  224. /package/dist/{extensions → cjs/extensions}/string-extensions.d.ts +0 -0
  225. /package/dist/{extensions → cjs/extensions}/utils.d.ts +0 -0
  226. /package/dist/{runtime → cjs/runtime}/safe-globals.d.ts +0 -0
  227. /package/dist/{types → cjs/types}/runtime.d.ts +0 -0
  228. /package/dist/{extensions → esm/extensions}/boolean-extensions.js +0 -0
  229. /package/dist/{extensions → esm/extensions}/date-extensions.js +0 -0
  230. /package/dist/{extensions → esm/extensions}/expression-extension-error.js +0 -0
  231. /package/dist/{extensions → esm/extensions}/extend.js +0 -0
  232. /package/dist/{extensions → esm/extensions}/extensions.js +0 -0
  233. /package/dist/{extensions → esm/extensions}/utils.js +0 -0
  234. /package/dist/{runtime → esm/runtime}/safe-globals.js +0 -0
  235. /package/dist/{types → esm/types}/evaluator.js +0 -0
  236. /package/dist/{types → esm/types}/runtime.js +0 -0
@@ -1,4 +1,4 @@
1
- import type { RuntimeBridge, BridgeConfig } from '../types';
1
+ import type { RuntimeBridge, BridgeConfig, ExecuteOptions } from '../types';
2
2
  /**
3
3
  * IsolatedVmBridge - Runtime bridge using isolated-vm for secure expression evaluation.
4
4
  *
@@ -20,6 +20,7 @@ export declare class IsolatedVmBridge implements RuntimeBridge {
20
20
  private valueAtPathRef?;
21
21
  private arrayElementRef?;
22
22
  private callFunctionRef?;
23
+ private resetDataProxiesRef?;
23
24
  constructor(config?: BridgeConfig);
24
25
  /**
25
26
  * Initialize the isolate and create execution context.
@@ -115,7 +116,7 @@ export declare class IsolatedVmBridge implements RuntimeBridge {
115
116
  * @returns Result of the expression
116
117
  * @throws {Error} If bridge not initialized or execution fails
117
118
  */
118
- execute(code: string, data: Record<string, unknown>): unknown;
119
+ execute(code: string, data: Record<string, unknown>, options?: ExecuteOptions): unknown;
119
120
  /**
120
121
  * Dispose of the isolate and free resources.
121
122
  *
@@ -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,cAAc,EAAE,MAAM,UAAU,CAAC;AAwC5E;;;;;;;;;;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;IAKxC,OAAO,CAAC,mBAAmB,CAAC,CAAgB;gBAEhC,MAAM,GAAE,YAAiB;IAWrC;;;;;;;;;;OAUG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAqCjC;;;;;;;;;;;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,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO;IAsDvF;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB9B;;;;OAIG;IACH,UAAU,IAAI,OAAO;CAGrB"}
@@ -0,0 +1,512 @@
1
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
2
+ if (k2 === undefined) k2 = k;
3
+ var desc = Object.getOwnPropertyDescriptor(m, k);
4
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
5
+ desc = { enumerable: true, get: function() { return m[k]; } };
6
+ }
7
+ Object.defineProperty(o, k2, desc);
8
+ }) : (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ o[k2] = m[k];
11
+ }));
12
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
13
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
14
+ }) : function(o, v) {
15
+ o["default"] = v;
16
+ });
17
+ var __importStar = (this && this.__importStar) || (function () {
18
+ var ownKeys = function(o) {
19
+ ownKeys = Object.getOwnPropertyNames || function (o) {
20
+ var ar = [];
21
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
22
+ return ar;
23
+ };
24
+ return ownKeys(o);
25
+ };
26
+ return function (mod) {
27
+ if (mod && mod.__esModule) return mod;
28
+ var result = {};
29
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
30
+ __setModuleDefault(result, mod);
31
+ return result;
32
+ };
33
+ })();
34
+ (function (factory) {
35
+ if (typeof module === "object" && typeof module.exports === "object") {
36
+ var v = factory(require, exports);
37
+ if (v !== undefined) module.exports = v;
38
+ }
39
+ else if (typeof define === "function" && define.amd) {
40
+ define(["require", "exports", "node:fs/promises", "node:path", "../types"], factory);
41
+ }
42
+ })(function (require, exports) {
43
+ "use strict";
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.IsolatedVmBridge = void 0;
46
+ const promises_1 = require("node:fs/promises");
47
+ const path = __importStar(require("node:path"));
48
+ const types_1 = require("../types");
49
+ let _ivm = null;
50
+ function getIvm() {
51
+ if (!_ivm) {
52
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
53
+ _ivm = require('isolated-vm');
54
+ }
55
+ return _ivm;
56
+ }
57
+ const BUNDLE_RELATIVE_PATH = path.join('dist', 'bundle', 'runtime.iife.js');
58
+ /**
59
+ * Read the runtime IIFE bundle by walking up from `__dirname` until
60
+ * `dist/bundle/runtime.iife.js` is found.
61
+ *
62
+ * This works regardless of where the compiled output lives:
63
+ * - `src/bridge/` (vitest running against source)
64
+ * - `dist/cjs/bridge/` (CJS build)
65
+ */
66
+ async function readRuntimeBundle() {
67
+ let dir = __dirname;
68
+ while (dir !== path.dirname(dir)) {
69
+ try {
70
+ return await (0, promises_1.readFile)(path.join(dir, BUNDLE_RELATIVE_PATH), 'utf-8');
71
+ }
72
+ catch { }
73
+ dir = path.dirname(dir);
74
+ }
75
+ throw new Error(`Could not find runtime bundle (${BUNDLE_RELATIVE_PATH}) in any parent of ${__dirname}`);
76
+ }
77
+ /**
78
+ * IsolatedVmBridge - Runtime bridge using isolated-vm for secure expression evaluation.
79
+ *
80
+ * This bridge creates a V8 isolate with:
81
+ * - Hard memory limit (128MB default)
82
+ * - No access to Node.js APIs
83
+ * - Timeout enforcement
84
+ * - Complete isolation from host process
85
+ *
86
+ * Context reuse pattern: Create isolate/context once, reset state between evaluations.
87
+ */
88
+ class IsolatedVmBridge {
89
+ isolate;
90
+ context;
91
+ initialized = false;
92
+ disposed = false;
93
+ config;
94
+ // Script compilation cache for performance
95
+ // Maps expression code -> compiled ivm.Script
96
+ scriptCache = new Map();
97
+ // Active ivm.Reference callbacks — released before each re-registration
98
+ // to prevent reference accumulation across execute() calls
99
+ valueAtPathRef;
100
+ arrayElementRef;
101
+ callFunctionRef;
102
+ // Pre-resolved reference to resetDataProxies() inside the isolate.
103
+ // Using applySync on a stored reference avoids the per-call
104
+ // ScriptCompiler::Compile() cost that evalSync incurs.
105
+ resetDataProxiesRef;
106
+ constructor(config = {}) {
107
+ this.config = {
108
+ ...types_1.DEFAULT_BRIDGE_CONFIG,
109
+ ...config,
110
+ };
111
+ // Create isolate with memory limit
112
+ // Note: memoryLimit is in MB
113
+ this.isolate = new (getIvm().Isolate)({ memoryLimit: this.config.memoryLimit });
114
+ }
115
+ /**
116
+ * Initialize the isolate and create execution context.
117
+ *
118
+ * Steps:
119
+ * 1. Create context
120
+ * 2. Set up basic globals (global reference)
121
+ * 3. Load runtime bundle (DateTime, extend, proxy system)
122
+ * 4. Verify proxy system
123
+ *
124
+ * Must be called before execute().
125
+ */
126
+ async initialize() {
127
+ if (this.initialized) {
128
+ return;
129
+ }
130
+ // Create context in the isolate
131
+ this.context = await this.isolate.createContext();
132
+ // Set up basic globals
133
+ // jail is a reference to the context's global object
134
+ const jail = this.context.global;
135
+ // Set 'global' to reference itself (pattern from POC)
136
+ // This allows code in isolate to access 'global.something'
137
+ await jail.set('global', jail.derefInto());
138
+ // Load runtime bundle (DateTime, extend, SafeObject, proxy system)
139
+ await this.loadVendorLibraries();
140
+ // Verify proxy system loaded correctly
141
+ await this.verifyProxySystem();
142
+ // Inject E() error handler needed by tournament-generated try-catch code
143
+ await this.injectErrorHandler();
144
+ // Store a reference to resetDataProxies for efficient per-call invocation
145
+ this.resetDataProxiesRef = await this.context.global.get('resetDataProxies', {
146
+ reference: true,
147
+ });
148
+ this.initialized = true;
149
+ if (this.config.debug) {
150
+ console.log('[IsolatedVmBridge] Initialized successfully');
151
+ }
152
+ }
153
+ /**
154
+ * Load runtime bundle into the isolate.
155
+ *
156
+ * The runtime bundle includes:
157
+ * - DateTime, extend, extendOptional (expression engine globals)
158
+ * - SafeObject and SafeError wrappers
159
+ * - createDeepLazyProxy function
160
+ * - __data object initialization
161
+ *
162
+ * @private
163
+ * @throws {Error} If context not initialized or bundle loading fails
164
+ */
165
+ async loadVendorLibraries() {
166
+ if (!this.context) {
167
+ throw new Error('Context not initialized');
168
+ }
169
+ try {
170
+ // Load runtime bundle (includes vendor libraries + proxy system)
171
+ const runtimeBundle = await readRuntimeBundle();
172
+ // Evaluate bundle in isolate context
173
+ // This makes all exported globals available (DateTime, extend, extendOptional, SafeObject, SafeError, createDeepLazyProxy, resetDataProxies, __data)
174
+ await this.context.eval(runtimeBundle);
175
+ if (this.config.debug) {
176
+ console.log('[IsolatedVmBridge] Runtime bundle loaded');
177
+ }
178
+ // Verify vendor libraries loaded correctly
179
+ const hasDateTime = await this.context.eval('typeof DateTime !== "undefined"');
180
+ const hasExtend = await this.context.eval('typeof extend !== "undefined"');
181
+ if (!hasDateTime || !hasExtend) {
182
+ throw new Error(`Library verification failed: DateTime=${hasDateTime}, extend=${hasExtend}`);
183
+ }
184
+ if (this.config.debug) {
185
+ console.log('[IsolatedVmBridge] Vendor libraries verified successfully');
186
+ }
187
+ }
188
+ catch (error) {
189
+ const errorMessage = error instanceof Error ? error.message : String(error);
190
+ throw new Error(`Failed to load runtime bundle: ${errorMessage}`);
191
+ }
192
+ }
193
+ /**
194
+ * Verify the proxy system loaded correctly.
195
+ *
196
+ * The proxy system is loaded as part of the runtime bundle in loadVendorLibraries().
197
+ * This method verifies all required components are available.
198
+ *
199
+ * @private
200
+ * @throws {Error} If context not initialized or proxy system verification fails
201
+ */
202
+ async verifyProxySystem() {
203
+ if (!this.context) {
204
+ throw new Error('Context not initialized');
205
+ }
206
+ try {
207
+ // Verify proxy system components loaded correctly
208
+ const hasProxyCreator = await this.context.eval('typeof createDeepLazyProxy !== "undefined"');
209
+ const hasData = await this.context.eval('typeof __data !== "undefined"');
210
+ const hasSafeObject = await this.context.eval('typeof SafeObject !== "undefined"');
211
+ const hasSafeError = await this.context.eval('typeof SafeError !== "undefined"');
212
+ const hasResetFunction = await this.context.eval('typeof resetDataProxies !== "undefined"');
213
+ if (!hasProxyCreator || !hasData || !hasSafeObject || !hasSafeError || !hasResetFunction) {
214
+ throw new Error(`Proxy system verification failed: ` +
215
+ `createDeepLazyProxy=${hasProxyCreator}, __data=${hasData}, ` +
216
+ `SafeObject=${hasSafeObject}, SafeError=${hasSafeError}, ` +
217
+ `resetDataProxies=${hasResetFunction}`);
218
+ }
219
+ if (this.config.debug) {
220
+ console.log('[IsolatedVmBridge] Proxy system verified successfully');
221
+ }
222
+ }
223
+ catch (error) {
224
+ const errorMessage = error instanceof Error ? error.message : String(error);
225
+ throw new Error(`Failed to verify proxy system: ${errorMessage}`);
226
+ }
227
+ }
228
+ /**
229
+ * Inject the E() error handler into the isolate context.
230
+ *
231
+ * Tournament wraps expressions with try-catch that calls E(error, this).
232
+ * This handler:
233
+ * - Re-throws security violations from __sanitize
234
+ * - Swallows TypeErrors (failed attack attempts return undefined)
235
+ * - Re-throws all other errors
236
+ *
237
+ * @private
238
+ * @throws {Error} If context not initialized
239
+ */
240
+ async injectErrorHandler() {
241
+ if (!this.context) {
242
+ throw new Error('Context not initialized');
243
+ }
244
+ await this.context.eval(`
245
+ if (typeof E === 'undefined') {
246
+ globalThis.E = function(error, _context) {
247
+ // Re-throw security violations from __sanitize
248
+ if (error && error.message && error.message.includes('due to security concerns')) {
249
+ throw error;
250
+ }
251
+ // Swallow TypeErrors (failed attack attempts return undefined)
252
+ if (error instanceof TypeError) {
253
+ return undefined;
254
+ }
255
+ throw error;
256
+ };
257
+ }
258
+ `);
259
+ if (this.config.debug) {
260
+ console.log('[IsolatedVmBridge] Error handler injected successfully');
261
+ }
262
+ }
263
+ /**
264
+ * Reset data proxies in the isolate context.
265
+ *
266
+ * This method should be called before each execute() to:
267
+ * 1. Clear proxy caches from previous evaluations
268
+ * 2. Initialize fresh workflow data references
269
+ * 3. Expose workflow properties to globalThis
270
+ *
271
+ * The reset function runs in the isolate and calls back to the host
272
+ * via ivm.Reference callbacks to fetch workflow data.
273
+ *
274
+ * @private
275
+ * @throws {Error} If context not initialized or reset fails
276
+ */
277
+ resetDataProxies(timezone) {
278
+ if (!this.resetDataProxiesRef) {
279
+ throw new Error('Context not initialized');
280
+ }
281
+ try {
282
+ this.resetDataProxiesRef.applySync(null, [timezone ?? null], {
283
+ arguments: { copy: true },
284
+ });
285
+ if (this.config.debug) {
286
+ console.log('[IsolatedVmBridge] Data proxies reset successfully');
287
+ }
288
+ }
289
+ catch (error) {
290
+ const errorMessage = error instanceof Error ? error.message : String(error);
291
+ throw new Error(`Failed to reset data proxies: ${errorMessage}`);
292
+ }
293
+ }
294
+ /**
295
+ * Register callback functions for cross-isolate communication.
296
+ *
297
+ * Creates three ivm.Reference callbacks that the runtime bundle uses
298
+ * to fetch data from the host process:
299
+ *
300
+ * - __getValueAtPath: Returns metadata or primitive for a property path
301
+ * - __getArrayElement: Returns individual array elements
302
+ * - __callFunctionAtPath: Executes functions in host context
303
+ *
304
+ * These callbacks are called synchronously from isolate proxy traps.
305
+ *
306
+ * @param data - Current workflow data to use for callback responses
307
+ * @private
308
+ */
309
+ registerCallbacks(data) {
310
+ if (!this.context) {
311
+ throw new Error('Context not initialized');
312
+ }
313
+ // Callback 1: Get value/metadata at path
314
+ // Used by createDeepLazyProxy when accessing properties
315
+ const getValueAtPath = new (getIvm().Reference)((path) => {
316
+ // Navigate to value
317
+ let value = data;
318
+ for (const key of path) {
319
+ value = value?.[key];
320
+ if (value === undefined || value === null) {
321
+ return value;
322
+ }
323
+ }
324
+ // Handle functions - return metadata marker
325
+ if (typeof value === 'function') {
326
+ const fnString = value.toString();
327
+ // Block native functions for security
328
+ if (fnString.includes('[native code]')) {
329
+ return undefined;
330
+ }
331
+ return { __isFunction: true, __name: path[path.length - 1] };
332
+ }
333
+ // Handle arrays - always lazy, only transfer length
334
+ if (Array.isArray(value)) {
335
+ return {
336
+ __isArray: true,
337
+ __length: value.length,
338
+ __data: null,
339
+ };
340
+ }
341
+ // Handle objects - return metadata with keys
342
+ if (value !== null && typeof value === 'object') {
343
+ return {
344
+ __isObject: true,
345
+ __keys: Object.keys(value),
346
+ };
347
+ }
348
+ // Primitive value
349
+ return value;
350
+ });
351
+ // Callback 2: Get array element at index
352
+ // Used by array proxy when accessing numeric indices
353
+ const getArrayElement = new (getIvm().Reference)((path, index) => {
354
+ // Navigate to array
355
+ let arr = data;
356
+ for (const key of path) {
357
+ arr = arr?.[key];
358
+ if (arr === undefined || arr === null) {
359
+ return undefined;
360
+ }
361
+ }
362
+ if (!Array.isArray(arr)) {
363
+ return undefined;
364
+ }
365
+ const element = arr[index];
366
+ // If element is object/array, return metadata
367
+ if (element !== null && typeof element === 'object') {
368
+ if (Array.isArray(element)) {
369
+ return {
370
+ __isArray: true,
371
+ __length: element.length,
372
+ __data: null,
373
+ };
374
+ }
375
+ return {
376
+ __isObject: true,
377
+ __keys: Object.keys(element),
378
+ };
379
+ }
380
+ // Primitive element
381
+ return element;
382
+ });
383
+ // Callback 3: Call function at path with arguments
384
+ // Used when expressions invoke functions from workflow data
385
+ const callFunctionAtPath = new (getIvm().Reference)((path, ...args) => {
386
+ // Navigate to function, tracking parent to preserve `this` context
387
+ let fn = data;
388
+ let parent = undefined;
389
+ for (const key of path) {
390
+ parent = fn;
391
+ fn = fn?.[key];
392
+ }
393
+ if (typeof fn !== 'function') {
394
+ throw new Error(`${path.join('.')} is not a function`);
395
+ }
396
+ // Block native functions for security (same check as getValueAtPath)
397
+ if (fn.toString().includes('[native code]')) {
398
+ throw new Error(`${path.join('.')} is a native function and cannot be called`);
399
+ }
400
+ // Execute function with parent as `this` to preserve method context
401
+ return fn.call(parent, ...args);
402
+ });
403
+ // Release previous references before replacing to avoid accumulation
404
+ this.valueAtPathRef?.release();
405
+ this.arrayElementRef?.release();
406
+ this.callFunctionRef?.release();
407
+ // Store references so they can be released on the next call or on dispose()
408
+ this.valueAtPathRef = getValueAtPath;
409
+ this.arrayElementRef = getArrayElement;
410
+ this.callFunctionRef = callFunctionAtPath;
411
+ // Register all callbacks in isolate global context
412
+ this.context.global.setSync('__getValueAtPath', getValueAtPath);
413
+ this.context.global.setSync('__getArrayElement', getArrayElement);
414
+ this.context.global.setSync('__callFunctionAtPath', callFunctionAtPath);
415
+ if (this.config.debug) {
416
+ console.log('[IsolatedVmBridge] Callbacks registered successfully');
417
+ }
418
+ }
419
+ /**
420
+ * Execute JavaScript code in the isolated context.
421
+ *
422
+ * Flow:
423
+ * 1. Register callbacks as ivm.Reference for cross-isolate communication
424
+ * 2. Call resetDataProxies() to initialize workflow data proxies
425
+ * 3. Compile script (with caching for performance)
426
+ * 4. Execute with timeout enforcement
427
+ * 5. Return result (copied from isolate)
428
+ *
429
+ * @param code - JavaScript expression to evaluate
430
+ * @param data - Workflow data (e.g., { $json: {...}, $runIndex: 0 })
431
+ * @returns Result of the expression
432
+ * @throws {Error} If bridge not initialized or execution fails
433
+ */
434
+ execute(code, data, options) {
435
+ if (!this.initialized || !this.context) {
436
+ throw new Error('Bridge not initialized. Call initialize() first.');
437
+ }
438
+ try {
439
+ // Step 1: Register callbacks with current data context
440
+ this.registerCallbacks(data);
441
+ // Step 2: Reset proxies for this evaluation
442
+ // This initializes $json, $binary, etc. as lazy proxies
443
+ this.resetDataProxies(options?.timezone);
444
+ // Step 3: Wrap transformed code so 'this' === __data in the isolate.
445
+ // Tournament generates: this.$json.email, this.$items(), etc.
446
+ // __data has $json, $items, etc. as lazy proxies (set in resetDataProxies).
447
+ const wrappedCode = `(function() { var __result = (function() {\n${code}\n}).call(__data); return __prepareForTransfer(__result); })()`;
448
+ let script = this.scriptCache.get(code);
449
+ if (!script) {
450
+ script = this.isolate.compileScriptSync(wrappedCode);
451
+ this.scriptCache.set(code, script);
452
+ if (this.config.debug) {
453
+ console.log('[IsolatedVmBridge] Script compiled and cached');
454
+ }
455
+ }
456
+ // Step 4: Execute with timeout and copy result back
457
+ const result = script.runSync(this.context, {
458
+ timeout: this.config.timeout,
459
+ copy: true,
460
+ });
461
+ if (this.config.debug) {
462
+ console.log('[IsolatedVmBridge] Expression executed successfully');
463
+ }
464
+ return result;
465
+ }
466
+ catch (error) {
467
+ const errorMessage = error instanceof Error ? error.message : String(error);
468
+ if (errorMessage.includes('Script execution timed out')) {
469
+ throw new types_1.TimeoutError(`Expression timed out after ${this.config.timeout}ms`, {});
470
+ }
471
+ if (errorMessage.includes('memory limit')) {
472
+ throw new types_1.MemoryLimitError(`Expression exceeded memory limit of ${this.config.memoryLimit}MB`, {});
473
+ }
474
+ throw new Error(`Expression evaluation failed: ${errorMessage}`);
475
+ }
476
+ }
477
+ /**
478
+ * Dispose of the isolate and free resources.
479
+ *
480
+ * After disposal, the bridge cannot be used again.
481
+ */
482
+ async dispose() {
483
+ if (this.disposed) {
484
+ return;
485
+ }
486
+ // Dispose isolate (this also disposes all contexts, references, etc.)
487
+ if (!this.isolate.isDisposed) {
488
+ this.isolate.dispose();
489
+ }
490
+ // Release callback references
491
+ this.valueAtPathRef?.release();
492
+ this.arrayElementRef?.release();
493
+ this.callFunctionRef?.release();
494
+ this.disposed = true;
495
+ this.initialized = false;
496
+ this.scriptCache.clear();
497
+ if (this.config.debug) {
498
+ console.log('[IsolatedVmBridge] Disposed');
499
+ }
500
+ }
501
+ /**
502
+ * Check if the bridge has been disposed.
503
+ *
504
+ * @returns true if disposed, false otherwise
505
+ */
506
+ isDisposed() {
507
+ return this.disposed;
508
+ }
509
+ }
510
+ exports.IsolatedVmBridge = IsolatedVmBridge;
511
+ });
512
+ //# sourceMappingURL=isolated-vm-bridge.js.map
@@ -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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"}