@nocobase/plugin-workflow-javascript 2.1.0-alpha.12 → 2.1.0-alpha.14

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 (145) hide show
  1. package/dist/client/index.js +1 -1
  2. package/dist/externalVersion.js +4 -4
  3. package/dist/node_modules/isolated-vm/.clang-tidy +13 -0
  4. package/dist/node_modules/isolated-vm/.dockerignore +9 -0
  5. package/dist/node_modules/isolated-vm/Dockerfile.alpine +9 -0
  6. package/dist/node_modules/isolated-vm/Dockerfile.debian +12 -0
  7. package/dist/node_modules/isolated-vm/LICENSE +13 -0
  8. package/dist/node_modules/isolated-vm/binding.gyp +120 -0
  9. package/dist/node_modules/isolated-vm/include.js +3 -0
  10. package/dist/node_modules/isolated-vm/inspector-example.js +59 -0
  11. package/dist/node_modules/isolated-vm/isolated-vm.d.ts +820 -0
  12. package/dist/node_modules/isolated-vm/isolated-vm.js +1 -0
  13. package/dist/node_modules/isolated-vm/native-example/binding.gyp +23 -0
  14. package/dist/node_modules/isolated-vm/native-example/example.cc +61 -0
  15. package/dist/node_modules/isolated-vm/native-example/package.json +13 -0
  16. package/dist/node_modules/isolated-vm/native-example/usage.js +35 -0
  17. package/dist/node_modules/isolated-vm/out/isolated_vm.node +0 -0
  18. package/dist/node_modules/isolated-vm/package.json +1 -0
  19. package/dist/node_modules/isolated-vm/src/external_copy/error.h +33 -0
  20. package/dist/node_modules/isolated-vm/src/external_copy/external_copy.cc +509 -0
  21. package/dist/node_modules/isolated-vm/src/external_copy/external_copy.h +117 -0
  22. package/dist/node_modules/isolated-vm/src/external_copy/serializer.cc +85 -0
  23. package/dist/node_modules/isolated-vm/src/external_copy/serializer.h +136 -0
  24. package/dist/node_modules/isolated-vm/src/external_copy/serializer_nortti.cc +73 -0
  25. package/dist/node_modules/isolated-vm/src/external_copy/string.cc +124 -0
  26. package/dist/node_modules/isolated-vm/src/external_copy/string.h +28 -0
  27. package/dist/node_modules/isolated-vm/src/isolate/allocator.h +32 -0
  28. package/dist/node_modules/isolated-vm/src/isolate/allocator_nortti.cc +142 -0
  29. package/dist/node_modules/isolated-vm/src/isolate/class_handle.h +334 -0
  30. package/dist/node_modules/isolated-vm/src/isolate/cpu_profile_manager.cc +220 -0
  31. package/dist/node_modules/isolated-vm/src/isolate/cpu_profile_manager.h +100 -0
  32. package/dist/node_modules/isolated-vm/src/isolate/environment.cc +626 -0
  33. package/dist/node_modules/isolated-vm/src/isolate/environment.h +381 -0
  34. package/dist/node_modules/isolated-vm/src/isolate/executor.cc +198 -0
  35. package/dist/node_modules/isolated-vm/src/isolate/executor.h +183 -0
  36. package/dist/node_modules/isolated-vm/src/isolate/external.h +64 -0
  37. package/dist/node_modules/isolated-vm/src/isolate/functor_runners.h +97 -0
  38. package/dist/node_modules/isolated-vm/src/isolate/generic/array.h +145 -0
  39. package/dist/node_modules/isolated-vm/src/isolate/generic/callbacks.h +272 -0
  40. package/dist/node_modules/isolated-vm/src/isolate/generic/error.h +140 -0
  41. package/dist/node_modules/isolated-vm/src/isolate/generic/extract_params.h +145 -0
  42. package/dist/node_modules/isolated-vm/src/isolate/generic/handle_cast.h +257 -0
  43. package/dist/node_modules/isolated-vm/src/isolate/generic/read_option.h +47 -0
  44. package/dist/node_modules/isolated-vm/src/isolate/holder.cc +88 -0
  45. package/dist/node_modules/isolated-vm/src/isolate/holder.h +63 -0
  46. package/dist/node_modules/isolated-vm/src/isolate/inspector.cc +200 -0
  47. package/dist/node_modules/isolated-vm/src/isolate/inspector.h +70 -0
  48. package/dist/node_modules/isolated-vm/src/isolate/node_wrapper.h +15 -0
  49. package/dist/node_modules/isolated-vm/src/isolate/platform_delegate.cc +22 -0
  50. package/dist/node_modules/isolated-vm/src/isolate/platform_delegate.h +46 -0
  51. package/dist/node_modules/isolated-vm/src/isolate/remote_handle.h +164 -0
  52. package/dist/node_modules/isolated-vm/src/isolate/run_with_timeout.h +171 -0
  53. package/dist/node_modules/isolated-vm/src/isolate/runnable.h +29 -0
  54. package/dist/node_modules/isolated-vm/src/isolate/scheduler.cc +191 -0
  55. package/dist/node_modules/isolated-vm/src/isolate/scheduler.h +165 -0
  56. package/dist/node_modules/isolated-vm/src/isolate/specific.h +35 -0
  57. package/dist/node_modules/isolated-vm/src/isolate/stack_trace.cc +219 -0
  58. package/dist/node_modules/isolated-vm/src/isolate/stack_trace.h +24 -0
  59. package/dist/node_modules/isolated-vm/src/isolate/strings.h +127 -0
  60. package/dist/node_modules/isolated-vm/src/isolate/three_phase_task.cc +385 -0
  61. package/dist/node_modules/isolated-vm/src/isolate/three_phase_task.h +136 -0
  62. package/dist/node_modules/isolated-vm/src/isolate/transferable.h +15 -0
  63. package/dist/node_modules/isolated-vm/src/isolate/util.h +45 -0
  64. package/dist/node_modules/isolated-vm/src/isolate/v8_inspector_wrapper.h +12 -0
  65. package/dist/node_modules/isolated-vm/src/isolate/v8_version.h +12 -0
  66. package/dist/node_modules/isolated-vm/src/isolated_vm.h +71 -0
  67. package/dist/node_modules/isolated-vm/src/lib/covariant.h +50 -0
  68. package/dist/node_modules/isolated-vm/src/lib/lockable.h +178 -0
  69. package/dist/node_modules/isolated-vm/src/lib/suspend.h +106 -0
  70. package/dist/node_modules/isolated-vm/src/lib/thread_pool.cc +98 -0
  71. package/dist/node_modules/isolated-vm/src/lib/thread_pool.h +45 -0
  72. package/dist/node_modules/isolated-vm/src/lib/timer.cc +233 -0
  73. package/dist/node_modules/isolated-vm/src/lib/timer.h +36 -0
  74. package/dist/node_modules/isolated-vm/src/module/callback.cc +151 -0
  75. package/dist/node_modules/isolated-vm/src/module/callback.h +64 -0
  76. package/dist/node_modules/isolated-vm/src/module/context_handle.cc +241 -0
  77. package/dist/node_modules/isolated-vm/src/module/context_handle.h +35 -0
  78. package/dist/node_modules/isolated-vm/src/module/evaluation.cc +109 -0
  79. package/dist/node_modules/isolated-vm/src/module/evaluation.h +99 -0
  80. package/dist/node_modules/isolated-vm/src/module/external_copy_handle.cc +119 -0
  81. package/dist/node_modules/isolated-vm/src/module/external_copy_handle.h +64 -0
  82. package/dist/node_modules/isolated-vm/src/module/isolate.cc +136 -0
  83. package/dist/node_modules/isolated-vm/src/module/isolate_handle.cc +611 -0
  84. package/dist/node_modules/isolated-vm/src/module/isolate_handle.h +47 -0
  85. package/dist/node_modules/isolated-vm/src/module/lib_handle.cc +77 -0
  86. package/dist/node_modules/isolated-vm/src/module/lib_handle.h +28 -0
  87. package/dist/node_modules/isolated-vm/src/module/module_handle.cc +475 -0
  88. package/dist/node_modules/isolated-vm/src/module/module_handle.h +68 -0
  89. package/dist/node_modules/isolated-vm/src/module/native_module_handle.cc +104 -0
  90. package/dist/node_modules/isolated-vm/src/module/native_module_handle.h +49 -0
  91. package/dist/node_modules/isolated-vm/src/module/reference_handle.cc +636 -0
  92. package/dist/node_modules/isolated-vm/src/module/reference_handle.h +106 -0
  93. package/dist/node_modules/isolated-vm/src/module/script_handle.cc +107 -0
  94. package/dist/node_modules/isolated-vm/src/module/script_handle.h +37 -0
  95. package/dist/node_modules/isolated-vm/src/module/session_handle.cc +173 -0
  96. package/dist/node_modules/isolated-vm/src/module/session_handle.h +31 -0
  97. package/dist/node_modules/isolated-vm/src/module/transferable.cc +268 -0
  98. package/dist/node_modules/isolated-vm/src/module/transferable.h +42 -0
  99. package/dist/node_modules/isolated-vm/vendor/v8_inspector/nodejs_v18.0.0.h +360 -0
  100. package/dist/node_modules/isolated-vm/vendor/v8_inspector/nodejs_v18.3.0.h +376 -0
  101. package/dist/node_modules/isolated-vm/vendor/v8_inspector/nodejs_v20.0.0.h +397 -0
  102. package/dist/node_modules/isolated-vm/vendor/v8_inspector/nodejs_v22.0.0.h +419 -0
  103. package/dist/node_modules/joi/dist/joi-browser.min.js +1 -0
  104. package/dist/node_modules/joi/lib/annotate.js +175 -0
  105. package/dist/node_modules/joi/lib/base.js +1069 -0
  106. package/dist/node_modules/joi/lib/cache.js +143 -0
  107. package/dist/node_modules/joi/lib/common.js +216 -0
  108. package/dist/node_modules/joi/lib/compile.js +283 -0
  109. package/dist/node_modules/joi/lib/errors.js +271 -0
  110. package/dist/node_modules/joi/lib/extend.js +312 -0
  111. package/dist/node_modules/joi/lib/index.d.ts +2365 -0
  112. package/dist/node_modules/joi/lib/index.js +1 -0
  113. package/dist/node_modules/joi/lib/manifest.js +476 -0
  114. package/dist/node_modules/joi/lib/messages.js +178 -0
  115. package/dist/node_modules/joi/lib/modify.js +267 -0
  116. package/dist/node_modules/joi/lib/ref.js +414 -0
  117. package/dist/node_modules/joi/lib/schemas.js +302 -0
  118. package/dist/node_modules/joi/lib/state.js +166 -0
  119. package/dist/node_modules/joi/lib/template.js +463 -0
  120. package/dist/node_modules/joi/lib/trace.js +346 -0
  121. package/dist/node_modules/joi/lib/types/alternatives.js +364 -0
  122. package/dist/node_modules/joi/lib/types/any.js +174 -0
  123. package/dist/node_modules/joi/lib/types/array.js +809 -0
  124. package/dist/node_modules/joi/lib/types/binary.js +100 -0
  125. package/dist/node_modules/joi/lib/types/boolean.js +150 -0
  126. package/dist/node_modules/joi/lib/types/date.js +233 -0
  127. package/dist/node_modules/joi/lib/types/function.js +93 -0
  128. package/dist/node_modules/joi/lib/types/keys.js +1067 -0
  129. package/dist/node_modules/joi/lib/types/link.js +168 -0
  130. package/dist/node_modules/joi/lib/types/number.js +363 -0
  131. package/dist/node_modules/joi/lib/types/object.js +22 -0
  132. package/dist/node_modules/joi/lib/types/string.js +850 -0
  133. package/dist/node_modules/joi/lib/types/symbol.js +102 -0
  134. package/dist/node_modules/joi/lib/validator.js +750 -0
  135. package/dist/node_modules/joi/lib/values.js +263 -0
  136. package/dist/node_modules/joi/node_modules/@hapi/topo/lib/index.d.ts +60 -0
  137. package/dist/node_modules/joi/node_modules/@hapi/topo/lib/index.js +225 -0
  138. package/dist/node_modules/joi/node_modules/@hapi/topo/package.json +30 -0
  139. package/dist/node_modules/joi/package.json +1 -0
  140. package/dist/node_modules/winston-transport/package.json +1 -1
  141. package/dist/server/IsolatedVm.js +75 -0
  142. package/dist/server/ScriptInstruction.d.ts +8 -0
  143. package/dist/server/ScriptInstruction.js +23 -1
  144. package/dist/server/Vm.js +42 -27
  145. package/package.json +4 -2
@@ -43,13 +43,24 @@ var import_node_events = require("node:events");
43
43
  var import_node_path = __toESM(require("node:path"));
44
44
  var import_node_worker_threads = require("node:worker_threads");
45
45
  var import_winston = __toESM(require("winston"));
46
+ var import_joi = __toESM(require("joi"));
46
47
  var import_plugin_workflow = require("@nocobase/plugin-workflow");
47
48
  var import_cache_logger = require("./cache-logger");
48
49
  class ScriptInstruction extends import_plugin_workflow.Instruction {
50
+ /**
51
+ * Returns the worker script path based on whether WORKFLOW_SCRIPT_MODULES is configured.
52
+ * - WORKFLOW_SCRIPT_MODULES set: uses Node.js vm with require support (module whitelist)
53
+ * - WORKFLOW_SCRIPT_MODULES unset: uses isolated-vm for maximum security (no require, no Node.js APIs)
54
+ */
55
+ static get workerScript() {
56
+ var _a;
57
+ const hasModules = ((_a = process.env.WORKFLOW_SCRIPT_MODULES) == null ? void 0 : _a.split(",").filter(Boolean).length) > 0;
58
+ return import_node_path.default.join(__dirname, hasModules ? "Vm.js" : "IsolatedVm.js");
59
+ }
49
60
  static async run(source, args, options) {
50
61
  const { logger, timeout } = options;
51
62
  let result;
52
- const worker = new import_node_worker_threads.Worker(import_node_path.default.join(__dirname, "Vm.js"), {
63
+ const worker = new import_node_worker_threads.Worker(this.workerScript, {
53
64
  workerData: { source, args, options: timeout ? { timeout } : {} }
54
65
  });
55
66
  worker.on("message", (message) => {
@@ -92,6 +103,17 @@ class ScriptInstruction extends import_plugin_workflow.Instruction {
92
103
  result
93
104
  };
94
105
  }
106
+ configSchema = import_joi.default.object({
107
+ content: import_joi.default.string(),
108
+ timeout: import_joi.default.number(),
109
+ continue: import_joi.default.boolean(),
110
+ arguments: import_joi.default.array().items(
111
+ import_joi.default.object({
112
+ name: import_joi.default.string().required(),
113
+ value: import_joi.default.any()
114
+ })
115
+ ).optional()
116
+ });
95
117
  async run(node, prevJob, processor) {
96
118
  const { content = "", continue: cont, timeout } = node.config;
97
119
  const args = processor.getParsedValue(node.config.arguments ?? [], node.id);
package/dist/server/Vm.js CHANGED
@@ -28,43 +28,58 @@ function customRequire(m) {
28
28
  }
29
29
  throw new Error(`module "${m}" not supported`);
30
30
  }
31
- customRequire.constructor = null;
32
- function createSafeConsole(originalConsole) {
33
- const safe = /* @__PURE__ */ Object.create(null);
34
- Object.defineProperty(safe, "constructor", {
31
+ function hardenFunction(fn) {
32
+ Object.setPrototypeOf(fn, null);
33
+ Object.defineProperty(fn, "constructor", {
35
34
  value: null,
36
35
  writable: false,
37
36
  enumerable: false,
38
37
  configurable: false
39
38
  });
40
- const allKeys = Reflect.ownKeys(originalConsole);
41
- for (const key of allKeys) {
42
- const descriptor = Object.getOwnPropertyDescriptor(originalConsole, key);
43
- if (!descriptor) {
44
- continue;
45
- }
46
- const wrap = (fn) => {
47
- const bound = fn.bind(originalConsole);
48
- Object.defineProperty(bound, "constructor", {
49
- value: null,
39
+ return fn;
40
+ }
41
+ hardenFunction(customRequire);
42
+ function createSafeConsole(originalConsole) {
43
+ const safe = /* @__PURE__ */ Object.create(null);
44
+ const allowedMethods = [
45
+ "log",
46
+ "info",
47
+ "warn",
48
+ "error",
49
+ "debug",
50
+ "trace",
51
+ "dir",
52
+ "dirxml",
53
+ "table",
54
+ "time",
55
+ "timeEnd",
56
+ "timeLog",
57
+ "count",
58
+ "countReset",
59
+ "group",
60
+ "groupCollapsed",
61
+ "groupEnd",
62
+ "clear",
63
+ "assert"
64
+ ];
65
+ for (const key of allowedMethods) {
66
+ if (typeof originalConsole[key] === "function") {
67
+ const bound = originalConsole[key].bind(originalConsole);
68
+ hardenFunction(bound);
69
+ Object.defineProperty(safe, key, {
70
+ value: bound,
50
71
  writable: false,
51
- enumerable: false,
72
+ enumerable: true,
52
73
  configurable: false
53
74
  });
54
- return bound;
55
- };
56
- if (typeof descriptor.value === "function") {
57
- descriptor.value = wrap(descriptor.value);
58
- }
59
- if (typeof descriptor.get === "function") {
60
- descriptor.get = wrap(descriptor.get);
61
75
  }
62
- if (typeof descriptor.set === "function") {
63
- descriptor.set = wrap(descriptor.set);
64
- }
65
- descriptor.configurable = false;
66
- Object.defineProperty(safe, key, descriptor);
67
76
  }
77
+ Object.defineProperty(safe, "constructor", {
78
+ value: null,
79
+ writable: false,
80
+ enumerable: false,
81
+ configurable: false
82
+ });
68
83
  return Object.freeze(safe);
69
84
  }
70
85
  async function main() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nocobase/plugin-workflow-javascript",
3
- "version": "2.1.0-alpha.12",
3
+ "version": "2.1.0-alpha.14",
4
4
  "displayName": "Workflow: JavaScript",
5
5
  "displayName.zh-CN": "工作流:JavaScript 节点",
6
6
  "description": "Execute a piece of JavaScript in an isolated Node.js environment.",
@@ -25,6 +25,8 @@
25
25
  "@codemirror/state": "^6.4.1",
26
26
  "@codemirror/view": "^6.37.2",
27
27
  "codemirror": "^6.0.2",
28
+ "isolated-vm": "^5.0.4",
29
+ "joi": "^17.13.3",
28
30
  "jshint": "^2.13.6",
29
31
  "node-gyp": "^10.2.0"
30
32
  },
@@ -36,5 +38,5 @@
36
38
  "Workflow"
37
39
  ],
38
40
  "license": "Apache-2.0",
39
- "gitHead": "f12c4a75470590b1670ce54510b96ef94c2cd7a2"
41
+ "gitHead": "d8735b541de0ff9557bba704de49c799b4962672"
40
42
  }