@blokjs/runner 0.2.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 (307) hide show
  1. package/dist/Blok.d.ts +19 -0
  2. package/dist/Blok.js +184 -0
  3. package/dist/Blok.js.map +1 -0
  4. package/dist/BlokResponse.d.ts +16 -0
  5. package/dist/BlokResponse.js +28 -0
  6. package/dist/BlokResponse.js.map +1 -0
  7. package/dist/Configuration.d.ts +37 -0
  8. package/dist/Configuration.js +248 -0
  9. package/dist/Configuration.js.map +1 -0
  10. package/dist/ConfigurationResolver.d.ts +7 -0
  11. package/dist/ConfigurationResolver.js +15 -0
  12. package/dist/ConfigurationResolver.js.map +1 -0
  13. package/dist/DefaultLogger.d.ts +65 -0
  14. package/dist/DefaultLogger.js +101 -0
  15. package/dist/DefaultLogger.js.map +1 -0
  16. package/dist/LocalStorage.d.ts +7 -0
  17. package/dist/LocalStorage.js +56 -0
  18. package/dist/LocalStorage.js.map +1 -0
  19. package/dist/MemoryUsage.d.ts +22 -0
  20. package/dist/MemoryUsage.js +83 -0
  21. package/dist/MemoryUsage.js.map +1 -0
  22. package/dist/NodeMap.d.ts +7 -0
  23. package/dist/NodeMap.js +13 -0
  24. package/dist/NodeMap.js.map +1 -0
  25. package/dist/ResolverBase.d.ts +8 -0
  26. package/dist/ResolverBase.js +18 -0
  27. package/dist/ResolverBase.js.map +1 -0
  28. package/dist/Runner.d.ts +25 -0
  29. package/dist/Runner.js +32 -0
  30. package/dist/Runner.js.map +1 -0
  31. package/dist/RunnerNode.d.ts +9 -0
  32. package/dist/RunnerNode.js +8 -0
  33. package/dist/RunnerNode.js.map +1 -0
  34. package/dist/RunnerNodeBase.d.ts +4 -0
  35. package/dist/RunnerNodeBase.js +3 -0
  36. package/dist/RunnerNodeBase.js.map +1 -0
  37. package/dist/RunnerSteps.d.ts +14 -0
  38. package/dist/RunnerSteps.js +110 -0
  39. package/dist/RunnerSteps.js.map +1 -0
  40. package/dist/RuntimeAdapterNode.d.ts +19 -0
  41. package/dist/RuntimeAdapterNode.js +87 -0
  42. package/dist/RuntimeAdapterNode.js.map +1 -0
  43. package/dist/RuntimeRegistry.d.ts +61 -0
  44. package/dist/RuntimeRegistry.js +87 -0
  45. package/dist/RuntimeRegistry.js.map +1 -0
  46. package/dist/TriggerBase.d.ts +119 -0
  47. package/dist/TriggerBase.js +413 -0
  48. package/dist/TriggerBase.js.map +1 -0
  49. package/dist/adapters/BunRuntimeAdapter.d.ts +38 -0
  50. package/dist/adapters/BunRuntimeAdapter.js +169 -0
  51. package/dist/adapters/BunRuntimeAdapter.js.map +1 -0
  52. package/dist/adapters/DockerRuntimeAdapter.d.ts +85 -0
  53. package/dist/adapters/DockerRuntimeAdapter.js +298 -0
  54. package/dist/adapters/DockerRuntimeAdapter.js.map +1 -0
  55. package/dist/adapters/HttpRuntimeAdapter.d.ts +58 -0
  56. package/dist/adapters/HttpRuntimeAdapter.js +152 -0
  57. package/dist/adapters/HttpRuntimeAdapter.js.map +1 -0
  58. package/dist/adapters/NodeJsRuntimeAdapter.d.ts +23 -0
  59. package/dist/adapters/NodeJsRuntimeAdapter.js +67 -0
  60. package/dist/adapters/NodeJsRuntimeAdapter.js.map +1 -0
  61. package/dist/adapters/RuntimeAdapter.d.ts +42 -0
  62. package/dist/adapters/RuntimeAdapter.js +2 -0
  63. package/dist/adapters/RuntimeAdapter.js.map +1 -0
  64. package/dist/adapters/WasmRuntimeAdapter.d.ts +69 -0
  65. package/dist/adapters/WasmRuntimeAdapter.js +279 -0
  66. package/dist/adapters/WasmRuntimeAdapter.js.map +1 -0
  67. package/dist/cache/NodeResultCache.d.ts +286 -0
  68. package/dist/cache/NodeResultCache.js +499 -0
  69. package/dist/cache/NodeResultCache.js.map +1 -0
  70. package/dist/cache/index.d.ts +1 -0
  71. package/dist/cache/index.js +2 -0
  72. package/dist/cache/index.js.map +1 -0
  73. package/dist/cost/CostEstimator.d.ts +57 -0
  74. package/dist/cost/CostEstimator.js +171 -0
  75. package/dist/cost/CostEstimator.js.map +1 -0
  76. package/dist/cost/index.d.ts +4 -0
  77. package/dist/cost/index.js +3 -0
  78. package/dist/cost/index.js.map +1 -0
  79. package/dist/cost/pricing.d.ts +24 -0
  80. package/dist/cost/pricing.js +169 -0
  81. package/dist/cost/pricing.js.map +1 -0
  82. package/dist/defineNode.d.ts +155 -0
  83. package/dist/defineNode.js +191 -0
  84. package/dist/defineNode.js.map +1 -0
  85. package/dist/graphql/GraphQLSchemaGenerator.d.ts +129 -0
  86. package/dist/graphql/GraphQLSchemaGenerator.js +425 -0
  87. package/dist/graphql/GraphQLSchemaGenerator.js.map +1 -0
  88. package/dist/hmr/FileWatcher.d.ts +62 -0
  89. package/dist/hmr/FileWatcher.js +185 -0
  90. package/dist/hmr/FileWatcher.js.map +1 -0
  91. package/dist/hmr/HmrDevConsole.d.ts +13 -0
  92. package/dist/hmr/HmrDevConsole.js +46 -0
  93. package/dist/hmr/HmrDevConsole.js.map +1 -0
  94. package/dist/hmr/HotReloadManager.d.ts +84 -0
  95. package/dist/hmr/HotReloadManager.js +195 -0
  96. package/dist/hmr/HotReloadManager.js.map +1 -0
  97. package/dist/hmr/index.d.ts +39 -0
  98. package/dist/hmr/index.js +38 -0
  99. package/dist/hmr/index.js.map +1 -0
  100. package/dist/index.d.ts +107 -0
  101. package/dist/index.js +107 -0
  102. package/dist/index.js.map +1 -0
  103. package/dist/integrations/APMIntegration.d.ts +141 -0
  104. package/dist/integrations/APMIntegration.js +212 -0
  105. package/dist/integrations/APMIntegration.js.map +1 -0
  106. package/dist/integrations/AzureMonitorIntegration.d.ts +118 -0
  107. package/dist/integrations/AzureMonitorIntegration.js +254 -0
  108. package/dist/integrations/AzureMonitorIntegration.js.map +1 -0
  109. package/dist/integrations/CloudWatchIntegration.d.ts +135 -0
  110. package/dist/integrations/CloudWatchIntegration.js +293 -0
  111. package/dist/integrations/CloudWatchIntegration.js.map +1 -0
  112. package/dist/integrations/SentryIntegration.d.ts +153 -0
  113. package/dist/integrations/SentryIntegration.js +200 -0
  114. package/dist/integrations/SentryIntegration.js.map +1 -0
  115. package/dist/integrations/index.d.ts +19 -0
  116. package/dist/integrations/index.js +16 -0
  117. package/dist/integrations/index.js.map +1 -0
  118. package/dist/marketplace/RuntimeAutoScaler.d.ts +148 -0
  119. package/dist/marketplace/RuntimeAutoScaler.js +366 -0
  120. package/dist/marketplace/RuntimeAutoScaler.js.map +1 -0
  121. package/dist/marketplace/RuntimeCatalog.d.ts +174 -0
  122. package/dist/marketplace/RuntimeCatalog.js +339 -0
  123. package/dist/marketplace/RuntimeCatalog.js.map +1 -0
  124. package/dist/marketplace/RuntimeDiscovery.d.ts +86 -0
  125. package/dist/marketplace/RuntimeDiscovery.js +219 -0
  126. package/dist/marketplace/RuntimeDiscovery.js.map +1 -0
  127. package/dist/marketplace/RuntimeHealthMonitor.d.ts +100 -0
  128. package/dist/marketplace/RuntimeHealthMonitor.js +241 -0
  129. package/dist/marketplace/RuntimeHealthMonitor.js.map +1 -0
  130. package/dist/marketplace/RuntimeMetricsDashboard.d.ts +113 -0
  131. package/dist/marketplace/RuntimeMetricsDashboard.js +293 -0
  132. package/dist/marketplace/RuntimeMetricsDashboard.js.map +1 -0
  133. package/dist/monitoring/CircuitBreaker.d.ts +107 -0
  134. package/dist/monitoring/CircuitBreaker.js +238 -0
  135. package/dist/monitoring/CircuitBreaker.js.map +1 -0
  136. package/dist/monitoring/DistributedTracer.d.ts +125 -0
  137. package/dist/monitoring/DistributedTracer.js +230 -0
  138. package/dist/monitoring/DistributedTracer.js.map +1 -0
  139. package/dist/monitoring/HealthCheck.d.ts +54 -0
  140. package/dist/monitoring/HealthCheck.js +102 -0
  141. package/dist/monitoring/HealthCheck.js.map +1 -0
  142. package/dist/monitoring/PerformanceProfiler.d.ts +63 -0
  143. package/dist/monitoring/PerformanceProfiler.js +229 -0
  144. package/dist/monitoring/PerformanceProfiler.js.map +1 -0
  145. package/dist/monitoring/PrometheusBootstrap.d.ts +30 -0
  146. package/dist/monitoring/PrometheusBootstrap.js +71 -0
  147. package/dist/monitoring/PrometheusBootstrap.js.map +1 -0
  148. package/dist/monitoring/PrometheusMetricsBridge.d.ts +60 -0
  149. package/dist/monitoring/PrometheusMetricsBridge.js +216 -0
  150. package/dist/monitoring/PrometheusMetricsBridge.js.map +1 -0
  151. package/dist/monitoring/RateLimiter.d.ts +58 -0
  152. package/dist/monitoring/RateLimiter.js +128 -0
  153. package/dist/monitoring/RateLimiter.js.map +1 -0
  154. package/dist/monitoring/StructuredLogger.d.ts +131 -0
  155. package/dist/monitoring/StructuredLogger.js +207 -0
  156. package/dist/monitoring/StructuredLogger.js.map +1 -0
  157. package/dist/monitoring/TracingBootstrap.d.ts +69 -0
  158. package/dist/monitoring/TracingBootstrap.js +129 -0
  159. package/dist/monitoring/TracingBootstrap.js.map +1 -0
  160. package/dist/monitoring/TriggerMetricsCollector.d.ts +94 -0
  161. package/dist/monitoring/TriggerMetricsCollector.js +174 -0
  162. package/dist/monitoring/TriggerMetricsCollector.js.map +1 -0
  163. package/dist/monitoring/index.d.ts +9 -0
  164. package/dist/monitoring/index.js +10 -0
  165. package/dist/monitoring/index.js.map +1 -0
  166. package/dist/openapi/OpenAPIGenerator.d.ts +192 -0
  167. package/dist/openapi/OpenAPIGenerator.js +373 -0
  168. package/dist/openapi/OpenAPIGenerator.js.map +1 -0
  169. package/dist/openapi/index.d.ts +20 -0
  170. package/dist/openapi/index.js +20 -0
  171. package/dist/openapi/index.js.map +1 -0
  172. package/dist/security/ABAC.d.ts +224 -0
  173. package/dist/security/ABAC.js +380 -0
  174. package/dist/security/ABAC.js.map +1 -0
  175. package/dist/security/AuditLogger.d.ts +242 -0
  176. package/dist/security/AuditLogger.js +317 -0
  177. package/dist/security/AuditLogger.js.map +1 -0
  178. package/dist/security/AuthMiddleware.d.ts +163 -0
  179. package/dist/security/AuthMiddleware.js +274 -0
  180. package/dist/security/AuthMiddleware.js.map +1 -0
  181. package/dist/security/EncryptionAtRest.d.ts +206 -0
  182. package/dist/security/EncryptionAtRest.js +236 -0
  183. package/dist/security/EncryptionAtRest.js.map +1 -0
  184. package/dist/security/OAuthProvider.d.ts +334 -0
  185. package/dist/security/OAuthProvider.js +719 -0
  186. package/dist/security/OAuthProvider.js.map +1 -0
  187. package/dist/security/PIIDetector.d.ts +233 -0
  188. package/dist/security/PIIDetector.js +354 -0
  189. package/dist/security/PIIDetector.js.map +1 -0
  190. package/dist/security/RBAC.d.ts +143 -0
  191. package/dist/security/RBAC.js +285 -0
  192. package/dist/security/RBAC.js.map +1 -0
  193. package/dist/security/SecretManager.d.ts +652 -0
  194. package/dist/security/SecretManager.js +1146 -0
  195. package/dist/security/SecretManager.js.map +1 -0
  196. package/dist/security/TLSConfig.d.ts +305 -0
  197. package/dist/security/TLSConfig.js +550 -0
  198. package/dist/security/TLSConfig.js.map +1 -0
  199. package/dist/security/index.d.ts +79 -0
  200. package/dist/security/index.js +80 -0
  201. package/dist/security/index.js.map +1 -0
  202. package/dist/testing/TestHarness.d.ts +189 -0
  203. package/dist/testing/TestHarness.js +272 -0
  204. package/dist/testing/TestHarness.js.map +1 -0
  205. package/dist/testing/TestLogger.d.ts +103 -0
  206. package/dist/testing/TestLogger.js +153 -0
  207. package/dist/testing/TestLogger.js.map +1 -0
  208. package/dist/testing/WorkflowTestRunner.d.ts +172 -0
  209. package/dist/testing/WorkflowTestRunner.js +355 -0
  210. package/dist/testing/WorkflowTestRunner.js.map +1 -0
  211. package/dist/testing/index.d.ts +21 -0
  212. package/dist/testing/index.js +22 -0
  213. package/dist/testing/index.js.map +1 -0
  214. package/dist/tracing/InMemoryRunStore.d.ts +44 -0
  215. package/dist/tracing/InMemoryRunStore.js +341 -0
  216. package/dist/tracing/InMemoryRunStore.js.map +1 -0
  217. package/dist/tracing/PostgresRunStore.d.ts +82 -0
  218. package/dist/tracing/PostgresRunStore.js +640 -0
  219. package/dist/tracing/PostgresRunStore.js.map +1 -0
  220. package/dist/tracing/RunStore.d.ts +38 -0
  221. package/dist/tracing/RunStore.js +2 -0
  222. package/dist/tracing/RunStore.js.map +1 -0
  223. package/dist/tracing/RunTracker.d.ts +75 -0
  224. package/dist/tracing/RunTracker.js +374 -0
  225. package/dist/tracing/RunTracker.js.map +1 -0
  226. package/dist/tracing/SqliteRunStore.d.ts +53 -0
  227. package/dist/tracing/SqliteRunStore.js +703 -0
  228. package/dist/tracing/SqliteRunStore.js.map +1 -0
  229. package/dist/tracing/TraceRouter.d.ts +47 -0
  230. package/dist/tracing/TraceRouter.js +904 -0
  231. package/dist/tracing/TraceRouter.js.map +1 -0
  232. package/dist/tracing/TracingLogger.d.ts +21 -0
  233. package/dist/tracing/TracingLogger.js +62 -0
  234. package/dist/tracing/TracingLogger.js.map +1 -0
  235. package/dist/tracing/createStore.d.ts +30 -0
  236. package/dist/tracing/createStore.js +75 -0
  237. package/dist/tracing/createStore.js.map +1 -0
  238. package/dist/tracing/index.d.ts +13 -0
  239. package/dist/tracing/index.js +9 -0
  240. package/dist/tracing/index.js.map +1 -0
  241. package/dist/tracing/sanitize.d.ts +7 -0
  242. package/dist/tracing/sanitize.js +95 -0
  243. package/dist/tracing/sanitize.js.map +1 -0
  244. package/dist/tracing/types.d.ts +178 -0
  245. package/dist/tracing/types.js +3 -0
  246. package/dist/tracing/types.js.map +1 -0
  247. package/dist/types/Average.d.ts +11 -0
  248. package/dist/types/Average.js +2 -0
  249. package/dist/types/Average.js.map +1 -0
  250. package/dist/types/Condition.d.ts +8 -0
  251. package/dist/types/Condition.js +2 -0
  252. package/dist/types/Condition.js.map +1 -0
  253. package/dist/types/Conditions.d.ts +5 -0
  254. package/dist/types/Conditions.js +2 -0
  255. package/dist/types/Conditions.js.map +1 -0
  256. package/dist/types/Config.d.ts +12 -0
  257. package/dist/types/Config.js +2 -0
  258. package/dist/types/Config.js.map +1 -0
  259. package/dist/types/Flow.d.ts +5 -0
  260. package/dist/types/Flow.js +2 -0
  261. package/dist/types/Flow.js.map +1 -0
  262. package/dist/types/GlobalOptions.d.ts +11 -0
  263. package/dist/types/GlobalOptions.js +2 -0
  264. package/dist/types/GlobalOptions.js.map +1 -0
  265. package/dist/types/Inputs.d.ts +5 -0
  266. package/dist/types/Inputs.js +2 -0
  267. package/dist/types/Inputs.js.map +1 -0
  268. package/dist/types/JsonLikeObject.d.ts +3 -0
  269. package/dist/types/JsonLikeObject.js +2 -0
  270. package/dist/types/JsonLikeObject.js.map +1 -0
  271. package/dist/types/Mapper.d.ts +5 -0
  272. package/dist/types/Mapper.js +2 -0
  273. package/dist/types/Mapper.js.map +1 -0
  274. package/dist/types/Node.d.ts +10 -0
  275. package/dist/types/Node.js +2 -0
  276. package/dist/types/Node.js.map +1 -0
  277. package/dist/types/ParamsDictionary.d.ts +3 -0
  278. package/dist/types/ParamsDictionary.js +2 -0
  279. package/dist/types/ParamsDictionary.js.map +1 -0
  280. package/dist/types/Properties.d.ts +5 -0
  281. package/dist/types/Properties.js +2 -0
  282. package/dist/types/Properties.js.map +1 -0
  283. package/dist/types/Targets.d.ts +5 -0
  284. package/dist/types/Targets.js +2 -0
  285. package/dist/types/Targets.js.map +1 -0
  286. package/dist/types/Trigger.d.ts +5 -0
  287. package/dist/types/Trigger.js +2 -0
  288. package/dist/types/Trigger.js.map +1 -0
  289. package/dist/types/TriggerHttp.d.ts +7 -0
  290. package/dist/types/TriggerHttp.js +2 -0
  291. package/dist/types/TriggerHttp.js.map +1 -0
  292. package/dist/types/TriggerResponse.d.ts +6 -0
  293. package/dist/types/TriggerResponse.js +2 -0
  294. package/dist/types/TriggerResponse.js.map +1 -0
  295. package/dist/types/Triggers.d.ts +5 -0
  296. package/dist/types/Triggers.js +2 -0
  297. package/dist/types/Triggers.js.map +1 -0
  298. package/dist/types/TryCatch.d.ts +6 -0
  299. package/dist/types/TryCatch.js +2 -0
  300. package/dist/types/TryCatch.js.map +1 -0
  301. package/dist/visualization/NodeDependencyGraph.d.ts +76 -0
  302. package/dist/visualization/NodeDependencyGraph.js +418 -0
  303. package/dist/visualization/NodeDependencyGraph.js.map +1 -0
  304. package/dist/visualization/WorkflowVisualizer.d.ts +144 -0
  305. package/dist/visualization/WorkflowVisualizer.js +446 -0
  306. package/dist/visualization/WorkflowVisualizer.js.map +1 -0
  307. package/package.json +95 -0
@@ -0,0 +1,67 @@
1
+ /**
2
+ * NodeJsRuntimeAdapter executes TypeScript/JavaScript nodes in-process
3
+ *
4
+ * This adapter handles both:
5
+ * - Module nodes: Nodes loaded from the NodeMap (registered npm packages)
6
+ * - Local nodes: Nodes loaded from the local filesystem
7
+ *
8
+ * Execution happens in the same Node.js process with zero gRPC/HTTP overhead.
9
+ */
10
+ export class NodeJsRuntimeAdapter {
11
+ kind = "nodejs";
12
+ /**
13
+ * Execute a Node.js node in-process
14
+ *
15
+ * @param node - The node instance to execute (already resolved/instantiated)
16
+ * @param ctx - The workflow execution context
17
+ * @returns Promise that resolves to ExecutionResult
18
+ */
19
+ async execute(node, ctx) {
20
+ const startTime = performance.now();
21
+ try {
22
+ // Execute the node's run method
23
+ const response = await node.run(ctx);
24
+ const duration_ms = performance.now() - startTime;
25
+ // Convert ResponseContext to ExecutionResult
26
+ // Response can be either:
27
+ // 1. ResponseContext with nested data: { data: { success, data, error } }
28
+ // 2. Direct response: { success, data, error }
29
+ const responseData = response.data;
30
+ const topLevelResponse = response;
31
+ // Check for errors at both nested level (response.data.error) and top level (response.error)
32
+ const nestedError = responseData?.error !== null && responseData?.error !== undefined;
33
+ const topLevelError = topLevelResponse?.error !== null && topLevelResponse?.error !== undefined;
34
+ const hasError = nestedError || topLevelError;
35
+ // Determine success: check both levels, default to true if not specified
36
+ const nestedSuccess = responseData?.success;
37
+ const topLevelSuccess = topLevelResponse?.success;
38
+ const success = hasError ? false : (nestedSuccess ?? topLevelSuccess ?? true);
39
+ // Get error from whichever level has it
40
+ const errorValue = responseData?.error || topLevelResponse?.error || null;
41
+ return {
42
+ success,
43
+ data: response.data,
44
+ errors: errorValue,
45
+ metrics: {
46
+ duration_ms,
47
+ },
48
+ };
49
+ }
50
+ catch (error) {
51
+ const duration_ms = performance.now() - startTime;
52
+ return {
53
+ success: false,
54
+ data: null,
55
+ errors: {
56
+ message: error.message,
57
+ stack: error.stack,
58
+ name: error.name,
59
+ },
60
+ metrics: {
61
+ duration_ms,
62
+ },
63
+ };
64
+ }
65
+ }
66
+ }
67
+ //# sourceMappingURL=NodeJsRuntimeAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NodeJsRuntimeAdapter.js","sourceRoot":"","sources":["../../src/adapters/NodeJsRuntimeAdapter.ts"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AACH,MAAM,OAAO,oBAAoB;IAChB,IAAI,GAAG,QAAQ,CAAC;IAEhC;;;;;;OAMG;IACH,KAAK,CAAC,OAAO,CAAC,IAAgB,EAAE,GAAY;QAC3C,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAEpC,IAAI,CAAC;YACJ,gCAAgC;YAChC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAErC,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAElD,6CAA6C;YAC7C,0BAA0B;YAC1B,0EAA0E;YAC1E,+CAA+C;YAC/C,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAiF,CAAC;YAChH,MAAM,gBAAgB,GAAG,QAAkE,CAAC;YAE5F,6FAA6F;YAC7F,MAAM,WAAW,GAAG,YAAY,EAAE,KAAK,KAAK,IAAI,IAAI,YAAY,EAAE,KAAK,KAAK,SAAS,CAAC;YACtF,MAAM,aAAa,GAAG,gBAAgB,EAAE,KAAK,KAAK,IAAI,IAAI,gBAAgB,EAAE,KAAK,KAAK,SAAS,CAAC;YAChG,MAAM,QAAQ,GAAG,WAAW,IAAI,aAAa,CAAC;YAE9C,yEAAyE;YACzE,MAAM,aAAa,GAAG,YAAY,EAAE,OAAO,CAAC;YAC5C,MAAM,eAAe,GAAG,gBAAgB,EAAE,OAAO,CAAC;YAClD,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,IAAI,eAAe,IAAI,IAAI,CAAC,CAAC;YAE9E,wCAAwC;YACxC,MAAM,UAAU,GAAG,YAAY,EAAE,KAAK,IAAI,gBAAgB,EAAE,KAAK,IAAI,IAAI,CAAC;YAE1E,OAAO;gBACN,OAAO;gBACP,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,MAAM,EAAE,UAAU;gBAClB,OAAO,EAAE;oBACR,WAAW;iBACX;aACD,CAAC;QACH,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACzB,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAElD,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE;oBACP,OAAO,EAAG,KAAe,CAAC,OAAO;oBACjC,KAAK,EAAG,KAAe,CAAC,KAAK;oBAC7B,IAAI,EAAG,KAAe,CAAC,IAAI;iBAC3B;gBACD,OAAO,EAAE;oBACR,WAAW;iBACX;aACD,CAAC;QACH,CAAC;IACF,CAAC;CACD"}
@@ -0,0 +1,42 @@
1
+ import type { Context } from "@blokjs/shared";
2
+ import type RunnerNode from "../RunnerNode";
3
+ /**
4
+ * RuntimeKind represents all supported runtime environments
5
+ */
6
+ export type RuntimeKind = "nodejs" | "bun" | "python3" | "go" | "java" | "rust" | "php" | "csharp" | "ruby" | "docker" | "wasm";
7
+ /**
8
+ * ExecutionResult is the canonical response structure from any runtime adapter
9
+ */
10
+ export type ExecutionResult = {
11
+ success: boolean;
12
+ data: unknown;
13
+ errors: unknown | null;
14
+ logs?: string[];
15
+ metrics?: {
16
+ duration_ms?: number;
17
+ cpu_ms?: number;
18
+ memory_bytes?: number;
19
+ };
20
+ /** Variables set by the SDK node during execution, to be merged into ctx.vars */
21
+ vars?: Record<string, unknown>;
22
+ };
23
+ /**
24
+ * RuntimeAdapter is the core abstraction for executing nodes in different language runtimes
25
+ *
26
+ * All runtime adapters (NodeJS, Python, Go, Java, etc.) implement this interface
27
+ * to provide a uniform execution contract for the workflow orchestrator.
28
+ */
29
+ export interface RuntimeAdapter {
30
+ /**
31
+ * The kind of runtime this adapter handles
32
+ */
33
+ readonly kind: RuntimeKind;
34
+ /**
35
+ * Execute a node in this runtime
36
+ *
37
+ * @param node - The node to execute (includes node path, name, config)
38
+ * @param ctx - The workflow execution context
39
+ * @returns Promise that resolves to ExecutionResult
40
+ */
41
+ execute(node: RunnerNode, ctx: Context): Promise<ExecutionResult>;
42
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=RuntimeAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuntimeAdapter.js","sourceRoot":"","sources":["../../src/adapters/RuntimeAdapter.ts"],"names":[],"mappings":""}
@@ -0,0 +1,69 @@
1
+ import type { Context } from "@blokjs/shared";
2
+ import type RunnerNode from "../RunnerNode";
3
+ import type { ExecutionResult, RuntimeAdapter } from "./RuntimeAdapter";
4
+ /**
5
+ * WasmRuntimeAdapter executes WebAssembly modules as Blok nodes
6
+ *
7
+ * This adapter provides:
8
+ * - Direct WASM execution via WebAssembly API (built-in to Node.js/Bun)
9
+ * - Module caching for fast subsequent executions
10
+ * - Serialized context passing via WASM memory
11
+ * - Support for WASI-compatible modules
12
+ * - Support for both file-based (.wasm) and pre-compiled modules
13
+ *
14
+ * WASM modules must export an `execute` function that:
15
+ * - Takes a pointer to a JSON string input
16
+ * - Returns a pointer to a JSON string output
17
+ *
18
+ * Or export `__blok_execute` which receives/returns via host functions:
19
+ * - `__blok_get_input()` → returns JSON input pointer
20
+ * - `__blok_set_output(ptr, len)` → sets JSON output
21
+ */
22
+ export declare class WasmRuntimeAdapter implements RuntimeAdapter {
23
+ readonly kind: "wasm";
24
+ private moduleCache;
25
+ private maxCacheSize;
26
+ constructor(options?: {
27
+ maxCacheSize?: number;
28
+ maxCacheAge?: number;
29
+ });
30
+ /**
31
+ * Execute a WASM module as a Blok node
32
+ *
33
+ * @param node - The node to execute (node.node should be path to .wasm file or module name)
34
+ * @param ctx - The workflow execution context
35
+ * @returns Promise that resolves to ExecutionResult
36
+ */
37
+ execute(node: RunnerNode, ctx: Context): Promise<ExecutionResult>;
38
+ /**
39
+ * Load a WASM module (from cache or file)
40
+ */
41
+ private loadModule;
42
+ /**
43
+ * Execute a compiled WASM module with input
44
+ */
45
+ private executeModule;
46
+ /**
47
+ * Get approximate memory usage of a WASM module instance
48
+ */
49
+ private getModuleMemoryUsage;
50
+ /**
51
+ * Cache a compiled WASM module
52
+ */
53
+ private cacheModule;
54
+ /**
55
+ * Evict the oldest cached module
56
+ */
57
+ private evictOldest;
58
+ /**
59
+ * Clear the module cache
60
+ */
61
+ clearCache(): void;
62
+ /**
63
+ * Get cache statistics
64
+ */
65
+ getCacheStats(): {
66
+ size: number;
67
+ maxSize: number;
68
+ };
69
+ }
@@ -0,0 +1,279 @@
1
+ /**
2
+ * WasmRuntimeAdapter executes WebAssembly modules as Blok nodes
3
+ *
4
+ * This adapter provides:
5
+ * - Direct WASM execution via WebAssembly API (built-in to Node.js/Bun)
6
+ * - Module caching for fast subsequent executions
7
+ * - Serialized context passing via WASM memory
8
+ * - Support for WASI-compatible modules
9
+ * - Support for both file-based (.wasm) and pre-compiled modules
10
+ *
11
+ * WASM modules must export an `execute` function that:
12
+ * - Takes a pointer to a JSON string input
13
+ * - Returns a pointer to a JSON string output
14
+ *
15
+ * Or export `__blok_execute` which receives/returns via host functions:
16
+ * - `__blok_get_input()` → returns JSON input pointer
17
+ * - `__blok_set_output(ptr, len)` → sets JSON output
18
+ */
19
+ export class WasmRuntimeAdapter {
20
+ kind = "wasm";
21
+ moduleCache = new Map();
22
+ maxCacheSize;
23
+ constructor(options) {
24
+ this.maxCacheSize = options?.maxCacheSize ?? 50;
25
+ }
26
+ /**
27
+ * Execute a WASM module as a Blok node
28
+ *
29
+ * @param node - The node to execute (node.node should be path to .wasm file or module name)
30
+ * @param ctx - The workflow execution context
31
+ * @returns Promise that resolves to ExecutionResult
32
+ */
33
+ async execute(node, ctx) {
34
+ const startTime = performance.now();
35
+ try {
36
+ const modulePath = node.node || node.name;
37
+ const wasmModule = await this.loadModule(modulePath);
38
+ // Prepare input as JSON string
39
+ const nodeConfig = ctx.config ? ctx.config[node.name] : {};
40
+ const input = JSON.stringify({
41
+ node: {
42
+ name: node.node || node.name,
43
+ type: node.type,
44
+ config: nodeConfig || {},
45
+ },
46
+ context: {
47
+ id: ctx.id,
48
+ workflow_name: ctx.workflow_name,
49
+ request: {
50
+ body: ctx.request.body,
51
+ headers: ctx.request.headers,
52
+ params: ctx.request.params,
53
+ query: ctx.request.query,
54
+ },
55
+ response: ctx.response,
56
+ vars: ctx.vars,
57
+ },
58
+ });
59
+ // Execute WASM module
60
+ const output = await this.executeModule(wasmModule, input);
61
+ const duration_ms = performance.now() - startTime;
62
+ // Parse output
63
+ let result;
64
+ try {
65
+ const parsed = JSON.parse(output);
66
+ result = {
67
+ success: parsed.success ?? true,
68
+ data: parsed.data ?? parsed,
69
+ errors: parsed.errors || parsed.error || null,
70
+ metrics: {
71
+ duration_ms,
72
+ memory_bytes: this.getModuleMemoryUsage(wasmModule),
73
+ },
74
+ };
75
+ }
76
+ catch {
77
+ // Raw output (non-JSON)
78
+ result = {
79
+ success: true,
80
+ data: output,
81
+ errors: null,
82
+ metrics: {
83
+ duration_ms,
84
+ },
85
+ };
86
+ }
87
+ return result;
88
+ }
89
+ catch (error) {
90
+ const duration_ms = performance.now() - startTime;
91
+ return {
92
+ success: false,
93
+ data: null,
94
+ errors: {
95
+ message: error.message,
96
+ stack: error.stack,
97
+ name: error.name,
98
+ },
99
+ metrics: {
100
+ duration_ms,
101
+ },
102
+ };
103
+ }
104
+ }
105
+ /**
106
+ * Load a WASM module (from cache or file)
107
+ */
108
+ async loadModule(modulePath) {
109
+ // Check cache
110
+ const cached = this.moduleCache.get(modulePath);
111
+ if (cached) {
112
+ cached.lastUsed = Date.now();
113
+ return cached.module;
114
+ }
115
+ // Load from file
116
+ const fs = await import("node:fs/promises");
117
+ const wasmBytes = await fs.readFile(modulePath);
118
+ const module = await WebAssembly.compile(wasmBytes);
119
+ // Cache the compiled module
120
+ this.cacheModule(modulePath, module);
121
+ return module;
122
+ }
123
+ /**
124
+ * Execute a compiled WASM module with input
125
+ */
126
+ async executeModule(module, input) {
127
+ // Create memory for the module
128
+ const memory = new WebAssembly.Memory({ initial: 10, maximum: 100 }); // 640KB - 6.4MB
129
+ // Host functions for the WASM module to call
130
+ let outputBuffer = "";
131
+ const importObject = {
132
+ env: {
133
+ memory,
134
+ // Allow WASM to log to console
135
+ console_log: (ptr, len) => {
136
+ const bytes = new Uint8Array(memory.buffer, ptr, len);
137
+ const text = new TextDecoder().decode(bytes);
138
+ console.log("[WASM]", text);
139
+ },
140
+ // Allow WASM to set output
141
+ __blok_set_output: (ptr, len) => {
142
+ const bytes = new Uint8Array(memory.buffer, ptr, len);
143
+ outputBuffer = new TextDecoder().decode(bytes);
144
+ },
145
+ // Allow WASM to get the input length
146
+ __blok_input_len: () => {
147
+ return new TextEncoder().encode(input).length;
148
+ },
149
+ // Allow WASM to read input into a buffer
150
+ __blok_read_input: (ptr) => {
151
+ const encoded = new TextEncoder().encode(input);
152
+ const view = new Uint8Array(memory.buffer, ptr, encoded.length);
153
+ view.set(encoded);
154
+ },
155
+ },
156
+ wasi_snapshot_preview1: {
157
+ // Minimal WASI stubs for compatibility
158
+ fd_write: () => 0,
159
+ fd_read: () => 0,
160
+ fd_close: () => 0,
161
+ fd_seek: () => 0,
162
+ proc_exit: () => {
163
+ /* no-op */
164
+ },
165
+ environ_get: () => 0,
166
+ environ_sizes_get: () => 0,
167
+ clock_time_get: () => 0,
168
+ args_get: () => 0,
169
+ args_sizes_get: () => 0,
170
+ },
171
+ };
172
+ // Instantiate module
173
+ const instance = await WebAssembly.instantiate(module, importObject);
174
+ const exports = instance.exports;
175
+ // Try different execution strategies
176
+ // Strategy 1: __blok_execute (Blok-native WASM interface)
177
+ if (typeof exports.__blok_execute === "function") {
178
+ exports.__blok_execute();
179
+ return outputBuffer || '{"success": true, "data": null}';
180
+ }
181
+ // Strategy 2: execute(ptr, len) → ptr
182
+ if (typeof exports.execute === "function") {
183
+ const alloc = exports.alloc;
184
+ const dealloc = exports.dealloc;
185
+ if (alloc) {
186
+ // Module provides its own allocator
187
+ const encoded = new TextEncoder().encode(input);
188
+ const inputPtr = alloc(encoded.length);
189
+ const inputView = new Uint8Array(memory.buffer, inputPtr, encoded.length);
190
+ inputView.set(encoded);
191
+ const resultPtr = exports.execute(inputPtr, encoded.length);
192
+ if (dealloc) {
193
+ dealloc(inputPtr, encoded.length);
194
+ }
195
+ // Read result from memory (null-terminated string)
196
+ const resultView = new Uint8Array(memory.buffer, resultPtr);
197
+ let end = 0;
198
+ while (end < resultView.length && resultView[end] !== 0)
199
+ end++;
200
+ return new TextDecoder().decode(resultView.slice(0, end));
201
+ }
202
+ // No allocator - just call execute
203
+ const result = exports.execute();
204
+ if (typeof result === "number") {
205
+ // Result is a pointer to a string
206
+ const resultView = new Uint8Array(memory.buffer, result);
207
+ let end = 0;
208
+ while (end < resultView.length && resultView[end] !== 0)
209
+ end++;
210
+ return new TextDecoder().decode(resultView.slice(0, end));
211
+ }
212
+ return outputBuffer || String(result);
213
+ }
214
+ // Strategy 3: _start (WASI module)
215
+ if (typeof exports._start === "function") {
216
+ exports._start();
217
+ return outputBuffer || '{"success": true, "data": null}';
218
+ }
219
+ throw new Error("WASM module does not export execute, __blok_execute, or _start");
220
+ }
221
+ /**
222
+ * Get approximate memory usage of a WASM module instance
223
+ */
224
+ getModuleMemoryUsage(module) {
225
+ // Estimate based on module sections
226
+ try {
227
+ const customSections = WebAssembly.Module.customSections(module, "name");
228
+ return customSections.reduce((sum, section) => sum + section.byteLength, 0);
229
+ }
230
+ catch {
231
+ return 0;
232
+ }
233
+ }
234
+ /**
235
+ * Cache a compiled WASM module
236
+ */
237
+ cacheModule(path, module) {
238
+ // Evict old entries if cache is full
239
+ if (this.moduleCache.size >= this.maxCacheSize) {
240
+ this.evictOldest();
241
+ }
242
+ this.moduleCache.set(path, {
243
+ module,
244
+ lastUsed: Date.now(),
245
+ });
246
+ }
247
+ /**
248
+ * Evict the oldest cached module
249
+ */
250
+ evictOldest() {
251
+ let oldestKey = null;
252
+ let oldestTime = Number.POSITIVE_INFINITY;
253
+ for (const [key, value] of this.moduleCache) {
254
+ if (value.lastUsed < oldestTime) {
255
+ oldestTime = value.lastUsed;
256
+ oldestKey = key;
257
+ }
258
+ }
259
+ if (oldestKey) {
260
+ this.moduleCache.delete(oldestKey);
261
+ }
262
+ }
263
+ /**
264
+ * Clear the module cache
265
+ */
266
+ clearCache() {
267
+ this.moduleCache.clear();
268
+ }
269
+ /**
270
+ * Get cache statistics
271
+ */
272
+ getCacheStats() {
273
+ return {
274
+ size: this.moduleCache.size,
275
+ maxSize: this.maxCacheSize,
276
+ };
277
+ }
278
+ }
279
+ //# sourceMappingURL=WasmRuntimeAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WasmRuntimeAdapter.js","sourceRoot":"","sources":["../../src/adapters/WasmRuntimeAdapter.ts"],"names":[],"mappings":"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"}