@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,191 @@
1
+ import { GlobalError, NodeBase } from "@blokjs/shared";
2
+ import BlokService from "./Blok";
3
+ import BlokResponse from "./BlokResponse";
4
+ /**
5
+ * FunctionNode wrapper that bridges function-first nodes to existing BlokService infrastructure
6
+ *
7
+ * This class wraps a function-first node definition and makes it compatible with the
8
+ * existing BlokService.run() execution model. It handles:
9
+ * - Zod input validation
10
+ * - Zod output validation
11
+ * - Error mapping (ZodError → GlobalError)
12
+ * - Response wrapping (BlokResponse)
13
+ */
14
+ export class FunctionNode extends BlokService {
15
+ definition;
16
+ constructor(definition) {
17
+ super();
18
+ this.definition = definition;
19
+ this.name = definition.name;
20
+ // Set content type if specified (e.g. "text/html", "application/pdf")
21
+ if (definition.contentType) {
22
+ this.contentType = definition.contentType;
23
+ }
24
+ // Set flow flag for control flow nodes (e.g. if-else) that return sub-steps
25
+ if (definition.flow) {
26
+ this.flow = true;
27
+ }
28
+ // Convert Zod schemas to JSON Schema for backward compatibility
29
+ // This allows existing tools that expect JSON Schema to continue working
30
+ this.inputSchema = this.zodToJsonSchema(definition.input);
31
+ this.outputSchema = this.zodToJsonSchema(definition.output);
32
+ }
33
+ /**
34
+ * Implementation of the abstract handle() method required by BlokService
35
+ *
36
+ * This method:
37
+ * 1. Validates input with Zod
38
+ * 2. Executes the user's execute() function
39
+ * 3. Validates output with Zod
40
+ * 4. Wraps result in BlokResponse
41
+ * 5. Maps any errors to GlobalError
42
+ */
43
+ async handle(ctx, inputs) {
44
+ const response = new BlokResponse();
45
+ try {
46
+ // Step 1: Validate input with Zod
47
+ const validatedInput = this.definition.input.parse(inputs);
48
+ // Step 2: Execute user's function
49
+ const result = await this.definition.execute(ctx, validatedInput);
50
+ // Step 3: If execute() returns an array of NodeBase instances (flow nodes
51
+ // like if-else), return them directly. The runner's processFlow() expects
52
+ // handle() to return BlokService[] for flow nodes, not a wrapped response.
53
+ if (Array.isArray(result) && result.length > 0 && result[0] instanceof NodeBase) {
54
+ return result;
55
+ }
56
+ // Step 4: Validate output with Zod
57
+ const validatedOutput = this.definition.output.parse(result);
58
+ // Step 5: Success!
59
+ response.setSuccess(validatedOutput);
60
+ }
61
+ catch (error) {
62
+ // Step 6: Map errors to GlobalError
63
+ const globalError = this.mapErrorToGlobalError(error);
64
+ response.setError(globalError);
65
+ }
66
+ return response;
67
+ }
68
+ /**
69
+ * Maps any error to GlobalError, with special handling for ZodError
70
+ *
71
+ * ZodError produces detailed validation errors that are transformed into
72
+ * a user-friendly error message with all validation issues listed.
73
+ *
74
+ * @param error - Any error thrown during execution
75
+ * @returns GlobalError instance
76
+ */
77
+ mapErrorToGlobalError(error) {
78
+ // Duck typing check for ZodError - more reliable than instanceof across module boundaries
79
+ // ZodError has: { name: "ZodError", issues: [...] }
80
+ if (error &&
81
+ typeof error === "object" &&
82
+ "issues" in error &&
83
+ Array.isArray(error.issues) &&
84
+ "name" in error &&
85
+ error.name === "ZodError") {
86
+ return this.zodErrorToGlobalError(error);
87
+ }
88
+ if (error instanceof Error) {
89
+ const globalError = new GlobalError(error.message);
90
+ globalError.setStack(error.stack);
91
+ globalError.setName(this.name);
92
+ globalError.setCode(500);
93
+ return globalError;
94
+ }
95
+ // Unknown error type
96
+ const globalError = new GlobalError(String(error));
97
+ globalError.setName(this.name);
98
+ globalError.setCode(500);
99
+ return globalError;
100
+ }
101
+ /**
102
+ * Converts ZodError to GlobalError with detailed validation messages
103
+ *
104
+ * Example output:
105
+ * "Validation failed: userId (expected string, received undefined),
106
+ * email (invalid email format)"
107
+ *
108
+ * @param zodError - Zod validation error
109
+ * @returns GlobalError with formatted validation messages
110
+ */
111
+ zodErrorToGlobalError(zodError) {
112
+ const errorMessages = zodError.errors.map((err) => {
113
+ const path = err.path.join(".");
114
+ return `${path} (${err.message})`;
115
+ });
116
+ const message = `Validation failed: ${errorMessages.join(", ")}`;
117
+ const globalError = new GlobalError(message);
118
+ globalError.setCode(400); // Bad Request
119
+ globalError.setName(this.name);
120
+ globalError.setJson({
121
+ validation_errors: zodError.errors.map((err) => ({
122
+ path: err.path,
123
+ message: err.message,
124
+ code: err.code,
125
+ })),
126
+ });
127
+ return globalError;
128
+ }
129
+ /**
130
+ * Converts Zod schema to JSON Schema for backward compatibility
131
+ *
132
+ * This is a simplified conversion that covers basic types.
133
+ * For production use, consider using zod-to-json-schema library.
134
+ *
135
+ * @param zodSchema - Zod schema to convert
136
+ * @returns JSON Schema representation
137
+ */
138
+ zodToJsonSchema(_zodSchema) {
139
+ // Return a permissive schema — the actual validation happens via Zod in handle().
140
+ // Using {} (no type constraint) instead of { type: "object" } so that nodes
141
+ // accepting arrays (e.g. if-else conditions) also pass the JSON Schema pre-check.
142
+ return {};
143
+ }
144
+ }
145
+ /**
146
+ * Define a function-first node with Zod schema validation
147
+ *
148
+ * This is the main API for creating modern, type-safe nodes in Blok.
149
+ *
150
+ * Benefits over class-based nodes:
151
+ * - 60%+ less boilerplate code
152
+ * - Type-safe inputs and outputs via Zod
153
+ * - Automatic validation
154
+ * - Better AI generation success rates
155
+ * - Easier to test and maintain
156
+ *
157
+ * @example
158
+ * ```typescript
159
+ * import { defineNode } from "@blokjs/runner";
160
+ * import { z } from "zod";
161
+ *
162
+ * export default defineNode({
163
+ * name: "fetch-user",
164
+ * description: "Fetches user by ID from database",
165
+ *
166
+ * input: z.object({
167
+ * userId: z.string().uuid(),
168
+ * }),
169
+ *
170
+ * output: z.object({
171
+ * user: z.object({
172
+ * id: z.string(),
173
+ * name: z.string(),
174
+ * email: z.string().email(),
175
+ * }),
176
+ * }),
177
+ *
178
+ * async execute(ctx, input) {
179
+ * const user = await db.users.findById(input.userId);
180
+ * return { user };
181
+ * },
182
+ * });
183
+ * ```
184
+ *
185
+ * @param definition - Node definition with Zod schemas
186
+ * @returns FunctionNode instance compatible with existing runner
187
+ */
188
+ export function defineNode(definition) {
189
+ return new FunctionNode(definition);
190
+ }
191
+ //# sourceMappingURL=defineNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defineNode.js","sourceRoot":"","sources":["../src/defineNode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,129 @@
1
+ /**
2
+ * GraphQL Schema Generator for Blok Workflows
3
+ *
4
+ * Automatically generates GraphQL schema definitions (SDL) from workflow definitions.
5
+ * Introspects HTTP trigger configurations and node structures to produce
6
+ * Query/Mutation types with appropriate input/output types.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * const generator = new GraphQLSchemaGenerator({
11
+ * schemaName: "BlokAPI",
12
+ * includeSubscriptions: true,
13
+ * });
14
+ *
15
+ * generator.addWorkflow({
16
+ * name: "get-user",
17
+ * version: "1.0.0",
18
+ * trigger: { http: { method: "GET", path: "/users/:id" } },
19
+ * steps: [{ name: "fetch", node: "db-query", type: "local" }],
20
+ * nodes: { "db-query": {} },
21
+ * });
22
+ *
23
+ * console.log(generator.generate());
24
+ * ```
25
+ */
26
+ export interface GraphQLGeneratorConfig {
27
+ /** Schema name used in documentation */
28
+ schemaName?: string;
29
+ /** Description for the schema */
30
+ description?: string;
31
+ /** Include subscription types for WebSocket/SSE workflows */
32
+ includeSubscriptions?: boolean;
33
+ /** Include workflow metadata in type descriptions */
34
+ includeMetadata?: boolean;
35
+ /** Custom scalar definitions */
36
+ customScalars?: Array<{
37
+ name: string;
38
+ description: string;
39
+ }>;
40
+ }
41
+ export interface GqlWorkflowDefinition {
42
+ name: string;
43
+ version: string;
44
+ description?: string;
45
+ trigger: {
46
+ http?: {
47
+ method: string;
48
+ path: string;
49
+ };
50
+ grpc?: {
51
+ service: string;
52
+ method: string;
53
+ };
54
+ websocket?: {
55
+ path?: string;
56
+ };
57
+ sse?: {
58
+ path?: string;
59
+ };
60
+ [key: string]: unknown;
61
+ };
62
+ steps: Array<{
63
+ name: string;
64
+ node: string;
65
+ type?: string;
66
+ runtime?: string;
67
+ }>;
68
+ nodes: Record<string, unknown>;
69
+ inputs?: Record<string, GqlFieldDef>;
70
+ outputs?: Record<string, GqlFieldDef>;
71
+ }
72
+ export interface GqlFieldDef {
73
+ type: string;
74
+ required?: boolean;
75
+ description?: string;
76
+ items?: GqlFieldDef;
77
+ fields?: Record<string, GqlFieldDef>;
78
+ }
79
+ export declare class GraphQLSchemaGenerator {
80
+ private config;
81
+ private workflows;
82
+ private customTypes;
83
+ constructor(config?: GraphQLGeneratorConfig);
84
+ addWorkflow(workflow: GqlWorkflowDefinition): void;
85
+ addWorkflows(workflows: GqlWorkflowDefinition[]): void;
86
+ addCustomType(name: string, definition: string): void;
87
+ /**
88
+ * Generate GraphQL Schema Definition Language (SDL)
89
+ */
90
+ generate(): string;
91
+ /**
92
+ * Generate an introspection-friendly JSON representation
93
+ */
94
+ toJSON(): GraphQLSchemaJSON;
95
+ private resolveWorkflow;
96
+ private generateInputType;
97
+ private generateOutputType;
98
+ private generateFieldDefinition;
99
+ private generateSubscriptionField;
100
+ private inferOutputFields;
101
+ private inferInputFields;
102
+ private fieldDefToGraphQLType;
103
+ private getTriggerType;
104
+ private extractPathParams;
105
+ private toPascalCase;
106
+ private toFieldName;
107
+ private emptySchema;
108
+ }
109
+ export interface GraphQLSchemaJSON {
110
+ schemaName: string;
111
+ types: GraphQLTypeInfo[];
112
+ queries: GraphQLFieldInfo[];
113
+ mutations: GraphQLFieldInfo[];
114
+ subscriptions: GraphQLFieldInfo[];
115
+ }
116
+ export interface GraphQLTypeInfo {
117
+ name: string;
118
+ kind: "OBJECT" | "INPUT_OBJECT" | "ENUM" | "SCALAR";
119
+ fields: GraphQLFieldInfo[];
120
+ }
121
+ export interface GraphQLFieldInfo {
122
+ name: string;
123
+ type: string;
124
+ description?: string;
125
+ args?: Array<{
126
+ name: string;
127
+ type: string;
128
+ }>;
129
+ }