@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.
- package/dist/Blok.d.ts +19 -0
- package/dist/Blok.js +184 -0
- package/dist/Blok.js.map +1 -0
- package/dist/BlokResponse.d.ts +16 -0
- package/dist/BlokResponse.js +28 -0
- package/dist/BlokResponse.js.map +1 -0
- package/dist/Configuration.d.ts +37 -0
- package/dist/Configuration.js +248 -0
- package/dist/Configuration.js.map +1 -0
- package/dist/ConfigurationResolver.d.ts +7 -0
- package/dist/ConfigurationResolver.js +15 -0
- package/dist/ConfigurationResolver.js.map +1 -0
- package/dist/DefaultLogger.d.ts +65 -0
- package/dist/DefaultLogger.js +101 -0
- package/dist/DefaultLogger.js.map +1 -0
- package/dist/LocalStorage.d.ts +7 -0
- package/dist/LocalStorage.js +56 -0
- package/dist/LocalStorage.js.map +1 -0
- package/dist/MemoryUsage.d.ts +22 -0
- package/dist/MemoryUsage.js +83 -0
- package/dist/MemoryUsage.js.map +1 -0
- package/dist/NodeMap.d.ts +7 -0
- package/dist/NodeMap.js +13 -0
- package/dist/NodeMap.js.map +1 -0
- package/dist/ResolverBase.d.ts +8 -0
- package/dist/ResolverBase.js +18 -0
- package/dist/ResolverBase.js.map +1 -0
- package/dist/Runner.d.ts +25 -0
- package/dist/Runner.js +32 -0
- package/dist/Runner.js.map +1 -0
- package/dist/RunnerNode.d.ts +9 -0
- package/dist/RunnerNode.js +8 -0
- package/dist/RunnerNode.js.map +1 -0
- package/dist/RunnerNodeBase.d.ts +4 -0
- package/dist/RunnerNodeBase.js +3 -0
- package/dist/RunnerNodeBase.js.map +1 -0
- package/dist/RunnerSteps.d.ts +14 -0
- package/dist/RunnerSteps.js +110 -0
- package/dist/RunnerSteps.js.map +1 -0
- package/dist/RuntimeAdapterNode.d.ts +19 -0
- package/dist/RuntimeAdapterNode.js +87 -0
- package/dist/RuntimeAdapterNode.js.map +1 -0
- package/dist/RuntimeRegistry.d.ts +61 -0
- package/dist/RuntimeRegistry.js +87 -0
- package/dist/RuntimeRegistry.js.map +1 -0
- package/dist/TriggerBase.d.ts +119 -0
- package/dist/TriggerBase.js +413 -0
- package/dist/TriggerBase.js.map +1 -0
- package/dist/adapters/BunRuntimeAdapter.d.ts +38 -0
- package/dist/adapters/BunRuntimeAdapter.js +169 -0
- package/dist/adapters/BunRuntimeAdapter.js.map +1 -0
- package/dist/adapters/DockerRuntimeAdapter.d.ts +85 -0
- package/dist/adapters/DockerRuntimeAdapter.js +298 -0
- package/dist/adapters/DockerRuntimeAdapter.js.map +1 -0
- package/dist/adapters/HttpRuntimeAdapter.d.ts +58 -0
- package/dist/adapters/HttpRuntimeAdapter.js +152 -0
- package/dist/adapters/HttpRuntimeAdapter.js.map +1 -0
- package/dist/adapters/NodeJsRuntimeAdapter.d.ts +23 -0
- package/dist/adapters/NodeJsRuntimeAdapter.js +67 -0
- package/dist/adapters/NodeJsRuntimeAdapter.js.map +1 -0
- package/dist/adapters/RuntimeAdapter.d.ts +42 -0
- package/dist/adapters/RuntimeAdapter.js +2 -0
- package/dist/adapters/RuntimeAdapter.js.map +1 -0
- package/dist/adapters/WasmRuntimeAdapter.d.ts +69 -0
- package/dist/adapters/WasmRuntimeAdapter.js +279 -0
- package/dist/adapters/WasmRuntimeAdapter.js.map +1 -0
- package/dist/cache/NodeResultCache.d.ts +286 -0
- package/dist/cache/NodeResultCache.js +499 -0
- package/dist/cache/NodeResultCache.js.map +1 -0
- package/dist/cache/index.d.ts +1 -0
- package/dist/cache/index.js +2 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cost/CostEstimator.d.ts +57 -0
- package/dist/cost/CostEstimator.js +171 -0
- package/dist/cost/CostEstimator.js.map +1 -0
- package/dist/cost/index.d.ts +4 -0
- package/dist/cost/index.js +3 -0
- package/dist/cost/index.js.map +1 -0
- package/dist/cost/pricing.d.ts +24 -0
- package/dist/cost/pricing.js +169 -0
- package/dist/cost/pricing.js.map +1 -0
- package/dist/defineNode.d.ts +155 -0
- package/dist/defineNode.js +191 -0
- package/dist/defineNode.js.map +1 -0
- package/dist/graphql/GraphQLSchemaGenerator.d.ts +129 -0
- package/dist/graphql/GraphQLSchemaGenerator.js +425 -0
- package/dist/graphql/GraphQLSchemaGenerator.js.map +1 -0
- package/dist/hmr/FileWatcher.d.ts +62 -0
- package/dist/hmr/FileWatcher.js +185 -0
- package/dist/hmr/FileWatcher.js.map +1 -0
- package/dist/hmr/HmrDevConsole.d.ts +13 -0
- package/dist/hmr/HmrDevConsole.js +46 -0
- package/dist/hmr/HmrDevConsole.js.map +1 -0
- package/dist/hmr/HotReloadManager.d.ts +84 -0
- package/dist/hmr/HotReloadManager.js +195 -0
- package/dist/hmr/HotReloadManager.js.map +1 -0
- package/dist/hmr/index.d.ts +39 -0
- package/dist/hmr/index.js +38 -0
- package/dist/hmr/index.js.map +1 -0
- package/dist/index.d.ts +107 -0
- package/dist/index.js +107 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/APMIntegration.d.ts +141 -0
- package/dist/integrations/APMIntegration.js +212 -0
- package/dist/integrations/APMIntegration.js.map +1 -0
- package/dist/integrations/AzureMonitorIntegration.d.ts +118 -0
- package/dist/integrations/AzureMonitorIntegration.js +254 -0
- package/dist/integrations/AzureMonitorIntegration.js.map +1 -0
- package/dist/integrations/CloudWatchIntegration.d.ts +135 -0
- package/dist/integrations/CloudWatchIntegration.js +293 -0
- package/dist/integrations/CloudWatchIntegration.js.map +1 -0
- package/dist/integrations/SentryIntegration.d.ts +153 -0
- package/dist/integrations/SentryIntegration.js +200 -0
- package/dist/integrations/SentryIntegration.js.map +1 -0
- package/dist/integrations/index.d.ts +19 -0
- package/dist/integrations/index.js +16 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/marketplace/RuntimeAutoScaler.d.ts +148 -0
- package/dist/marketplace/RuntimeAutoScaler.js +366 -0
- package/dist/marketplace/RuntimeAutoScaler.js.map +1 -0
- package/dist/marketplace/RuntimeCatalog.d.ts +174 -0
- package/dist/marketplace/RuntimeCatalog.js +339 -0
- package/dist/marketplace/RuntimeCatalog.js.map +1 -0
- package/dist/marketplace/RuntimeDiscovery.d.ts +86 -0
- package/dist/marketplace/RuntimeDiscovery.js +219 -0
- package/dist/marketplace/RuntimeDiscovery.js.map +1 -0
- package/dist/marketplace/RuntimeHealthMonitor.d.ts +100 -0
- package/dist/marketplace/RuntimeHealthMonitor.js +241 -0
- package/dist/marketplace/RuntimeHealthMonitor.js.map +1 -0
- package/dist/marketplace/RuntimeMetricsDashboard.d.ts +113 -0
- package/dist/marketplace/RuntimeMetricsDashboard.js +293 -0
- package/dist/marketplace/RuntimeMetricsDashboard.js.map +1 -0
- package/dist/monitoring/CircuitBreaker.d.ts +107 -0
- package/dist/monitoring/CircuitBreaker.js +238 -0
- package/dist/monitoring/CircuitBreaker.js.map +1 -0
- package/dist/monitoring/DistributedTracer.d.ts +125 -0
- package/dist/monitoring/DistributedTracer.js +230 -0
- package/dist/monitoring/DistributedTracer.js.map +1 -0
- package/dist/monitoring/HealthCheck.d.ts +54 -0
- package/dist/monitoring/HealthCheck.js +102 -0
- package/dist/monitoring/HealthCheck.js.map +1 -0
- package/dist/monitoring/PerformanceProfiler.d.ts +63 -0
- package/dist/monitoring/PerformanceProfiler.js +229 -0
- package/dist/monitoring/PerformanceProfiler.js.map +1 -0
- package/dist/monitoring/PrometheusBootstrap.d.ts +30 -0
- package/dist/monitoring/PrometheusBootstrap.js +71 -0
- package/dist/monitoring/PrometheusBootstrap.js.map +1 -0
- package/dist/monitoring/PrometheusMetricsBridge.d.ts +60 -0
- package/dist/monitoring/PrometheusMetricsBridge.js +216 -0
- package/dist/monitoring/PrometheusMetricsBridge.js.map +1 -0
- package/dist/monitoring/RateLimiter.d.ts +58 -0
- package/dist/monitoring/RateLimiter.js +128 -0
- package/dist/monitoring/RateLimiter.js.map +1 -0
- package/dist/monitoring/StructuredLogger.d.ts +131 -0
- package/dist/monitoring/StructuredLogger.js +207 -0
- package/dist/monitoring/StructuredLogger.js.map +1 -0
- package/dist/monitoring/TracingBootstrap.d.ts +69 -0
- package/dist/monitoring/TracingBootstrap.js +129 -0
- package/dist/monitoring/TracingBootstrap.js.map +1 -0
- package/dist/monitoring/TriggerMetricsCollector.d.ts +94 -0
- package/dist/monitoring/TriggerMetricsCollector.js +174 -0
- package/dist/monitoring/TriggerMetricsCollector.js.map +1 -0
- package/dist/monitoring/index.d.ts +9 -0
- package/dist/monitoring/index.js +10 -0
- package/dist/monitoring/index.js.map +1 -0
- package/dist/openapi/OpenAPIGenerator.d.ts +192 -0
- package/dist/openapi/OpenAPIGenerator.js +373 -0
- package/dist/openapi/OpenAPIGenerator.js.map +1 -0
- package/dist/openapi/index.d.ts +20 -0
- package/dist/openapi/index.js +20 -0
- package/dist/openapi/index.js.map +1 -0
- package/dist/security/ABAC.d.ts +224 -0
- package/dist/security/ABAC.js +380 -0
- package/dist/security/ABAC.js.map +1 -0
- package/dist/security/AuditLogger.d.ts +242 -0
- package/dist/security/AuditLogger.js +317 -0
- package/dist/security/AuditLogger.js.map +1 -0
- package/dist/security/AuthMiddleware.d.ts +163 -0
- package/dist/security/AuthMiddleware.js +274 -0
- package/dist/security/AuthMiddleware.js.map +1 -0
- package/dist/security/EncryptionAtRest.d.ts +206 -0
- package/dist/security/EncryptionAtRest.js +236 -0
- package/dist/security/EncryptionAtRest.js.map +1 -0
- package/dist/security/OAuthProvider.d.ts +334 -0
- package/dist/security/OAuthProvider.js +719 -0
- package/dist/security/OAuthProvider.js.map +1 -0
- package/dist/security/PIIDetector.d.ts +233 -0
- package/dist/security/PIIDetector.js +354 -0
- package/dist/security/PIIDetector.js.map +1 -0
- package/dist/security/RBAC.d.ts +143 -0
- package/dist/security/RBAC.js +285 -0
- package/dist/security/RBAC.js.map +1 -0
- package/dist/security/SecretManager.d.ts +652 -0
- package/dist/security/SecretManager.js +1146 -0
- package/dist/security/SecretManager.js.map +1 -0
- package/dist/security/TLSConfig.d.ts +305 -0
- package/dist/security/TLSConfig.js +550 -0
- package/dist/security/TLSConfig.js.map +1 -0
- package/dist/security/index.d.ts +79 -0
- package/dist/security/index.js +80 -0
- package/dist/security/index.js.map +1 -0
- package/dist/testing/TestHarness.d.ts +189 -0
- package/dist/testing/TestHarness.js +272 -0
- package/dist/testing/TestHarness.js.map +1 -0
- package/dist/testing/TestLogger.d.ts +103 -0
- package/dist/testing/TestLogger.js +153 -0
- package/dist/testing/TestLogger.js.map +1 -0
- package/dist/testing/WorkflowTestRunner.d.ts +172 -0
- package/dist/testing/WorkflowTestRunner.js +355 -0
- package/dist/testing/WorkflowTestRunner.js.map +1 -0
- package/dist/testing/index.d.ts +21 -0
- package/dist/testing/index.js +22 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/tracing/InMemoryRunStore.d.ts +44 -0
- package/dist/tracing/InMemoryRunStore.js +341 -0
- package/dist/tracing/InMemoryRunStore.js.map +1 -0
- package/dist/tracing/PostgresRunStore.d.ts +82 -0
- package/dist/tracing/PostgresRunStore.js +640 -0
- package/dist/tracing/PostgresRunStore.js.map +1 -0
- package/dist/tracing/RunStore.d.ts +38 -0
- package/dist/tracing/RunStore.js +2 -0
- package/dist/tracing/RunStore.js.map +1 -0
- package/dist/tracing/RunTracker.d.ts +75 -0
- package/dist/tracing/RunTracker.js +374 -0
- package/dist/tracing/RunTracker.js.map +1 -0
- package/dist/tracing/SqliteRunStore.d.ts +53 -0
- package/dist/tracing/SqliteRunStore.js +703 -0
- package/dist/tracing/SqliteRunStore.js.map +1 -0
- package/dist/tracing/TraceRouter.d.ts +47 -0
- package/dist/tracing/TraceRouter.js +904 -0
- package/dist/tracing/TraceRouter.js.map +1 -0
- package/dist/tracing/TracingLogger.d.ts +21 -0
- package/dist/tracing/TracingLogger.js +62 -0
- package/dist/tracing/TracingLogger.js.map +1 -0
- package/dist/tracing/createStore.d.ts +30 -0
- package/dist/tracing/createStore.js +75 -0
- package/dist/tracing/createStore.js.map +1 -0
- package/dist/tracing/index.d.ts +13 -0
- package/dist/tracing/index.js +9 -0
- package/dist/tracing/index.js.map +1 -0
- package/dist/tracing/sanitize.d.ts +7 -0
- package/dist/tracing/sanitize.js +95 -0
- package/dist/tracing/sanitize.js.map +1 -0
- package/dist/tracing/types.d.ts +178 -0
- package/dist/tracing/types.js +3 -0
- package/dist/tracing/types.js.map +1 -0
- package/dist/types/Average.d.ts +11 -0
- package/dist/types/Average.js +2 -0
- package/dist/types/Average.js.map +1 -0
- package/dist/types/Condition.d.ts +8 -0
- package/dist/types/Condition.js +2 -0
- package/dist/types/Condition.js.map +1 -0
- package/dist/types/Conditions.d.ts +5 -0
- package/dist/types/Conditions.js +2 -0
- package/dist/types/Conditions.js.map +1 -0
- package/dist/types/Config.d.ts +12 -0
- package/dist/types/Config.js +2 -0
- package/dist/types/Config.js.map +1 -0
- package/dist/types/Flow.d.ts +5 -0
- package/dist/types/Flow.js +2 -0
- package/dist/types/Flow.js.map +1 -0
- package/dist/types/GlobalOptions.d.ts +11 -0
- package/dist/types/GlobalOptions.js +2 -0
- package/dist/types/GlobalOptions.js.map +1 -0
- package/dist/types/Inputs.d.ts +5 -0
- package/dist/types/Inputs.js +2 -0
- package/dist/types/Inputs.js.map +1 -0
- package/dist/types/JsonLikeObject.d.ts +3 -0
- package/dist/types/JsonLikeObject.js +2 -0
- package/dist/types/JsonLikeObject.js.map +1 -0
- package/dist/types/Mapper.d.ts +5 -0
- package/dist/types/Mapper.js +2 -0
- package/dist/types/Mapper.js.map +1 -0
- package/dist/types/Node.d.ts +10 -0
- package/dist/types/Node.js +2 -0
- package/dist/types/Node.js.map +1 -0
- package/dist/types/ParamsDictionary.d.ts +3 -0
- package/dist/types/ParamsDictionary.js +2 -0
- package/dist/types/ParamsDictionary.js.map +1 -0
- package/dist/types/Properties.d.ts +5 -0
- package/dist/types/Properties.js +2 -0
- package/dist/types/Properties.js.map +1 -0
- package/dist/types/Targets.d.ts +5 -0
- package/dist/types/Targets.js +2 -0
- package/dist/types/Targets.js.map +1 -0
- package/dist/types/Trigger.d.ts +5 -0
- package/dist/types/Trigger.js +2 -0
- package/dist/types/Trigger.js.map +1 -0
- package/dist/types/TriggerHttp.d.ts +7 -0
- package/dist/types/TriggerHttp.js +2 -0
- package/dist/types/TriggerHttp.js.map +1 -0
- package/dist/types/TriggerResponse.d.ts +6 -0
- package/dist/types/TriggerResponse.js +2 -0
- package/dist/types/TriggerResponse.js.map +1 -0
- package/dist/types/Triggers.d.ts +5 -0
- package/dist/types/Triggers.js +2 -0
- package/dist/types/Triggers.js.map +1 -0
- package/dist/types/TryCatch.d.ts +6 -0
- package/dist/types/TryCatch.js +2 -0
- package/dist/types/TryCatch.js.map +1 -0
- package/dist/visualization/NodeDependencyGraph.d.ts +76 -0
- package/dist/visualization/NodeDependencyGraph.js +418 -0
- package/dist/visualization/NodeDependencyGraph.js.map +1 -0
- package/dist/visualization/WorkflowVisualizer.d.ts +144 -0
- package/dist/visualization/WorkflowVisualizer.js +446 -0
- package/dist/visualization/WorkflowVisualizer.js.map +1 -0
- package/package.json +95 -0
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
import { Metrics, Trigger } from "@blokjs/shared";
|
|
2
|
+
import { metrics } from "@opentelemetry/api";
|
|
3
|
+
import { v4 as uuid } from "uuid";
|
|
4
|
+
import Configuration from "./Configuration";
|
|
5
|
+
import DefaultLogger from "./DefaultLogger";
|
|
6
|
+
import Runner from "./Runner";
|
|
7
|
+
import { HotReloadManager } from "./hmr/HotReloadManager";
|
|
8
|
+
import { CircuitBreaker } from "./monitoring/CircuitBreaker";
|
|
9
|
+
import { HealthCheck } from "./monitoring/HealthCheck";
|
|
10
|
+
import { PrometheusMetricsBridge } from "./monitoring/PrometheusMetricsBridge";
|
|
11
|
+
import { RateLimiter } from "./monitoring/RateLimiter";
|
|
12
|
+
import { TriggerMetricsCollector } from "./monitoring/TriggerMetricsCollector";
|
|
13
|
+
import { RunTracker } from "./tracing/RunTracker";
|
|
14
|
+
import { TracingLogger } from "./tracing/TracingLogger";
|
|
15
|
+
export default class TriggerBase extends Trigger {
|
|
16
|
+
configuration;
|
|
17
|
+
/** Health check instance for this trigger */
|
|
18
|
+
healthCheck;
|
|
19
|
+
/** Rate limiter instance - null if rate limiting is disabled */
|
|
20
|
+
rateLimiter = null;
|
|
21
|
+
/** Circuit breaker instance - null if circuit breaker is disabled */
|
|
22
|
+
circuitBreaker = null;
|
|
23
|
+
/** Enhanced metrics collector */
|
|
24
|
+
metricsCollector;
|
|
25
|
+
/** Prometheus metrics bridge for exporting to /metrics */
|
|
26
|
+
metricsBridge;
|
|
27
|
+
/** Hot reload manager - null if HMR is disabled */
|
|
28
|
+
hmr = null;
|
|
29
|
+
/** Number of currently in-flight requests (for zero-downtime reload) */
|
|
30
|
+
inFlightRequests = 0;
|
|
31
|
+
constructor() {
|
|
32
|
+
super();
|
|
33
|
+
this.configuration = new Configuration();
|
|
34
|
+
this.healthCheck = new HealthCheck();
|
|
35
|
+
this.metricsCollector = new TriggerMetricsCollector(this.constructor.name, this.configuration.name || "unknown");
|
|
36
|
+
this.metricsBridge = new PrometheusMetricsBridge({
|
|
37
|
+
triggerType: this.constructor.name,
|
|
38
|
+
triggerName: this.configuration.name || "unknown",
|
|
39
|
+
}, this.metricsCollector);
|
|
40
|
+
this.metricsBridge.initialize();
|
|
41
|
+
}
|
|
42
|
+
getConfiguration() {
|
|
43
|
+
return new Configuration();
|
|
44
|
+
}
|
|
45
|
+
getRunner() {
|
|
46
|
+
return new Runner(this.configuration.steps);
|
|
47
|
+
}
|
|
48
|
+
// --- Hot Module Replacement ---
|
|
49
|
+
/**
|
|
50
|
+
* Enable hot reload for this trigger. Only active in development
|
|
51
|
+
* (NODE_ENV !== 'production') unless BLOK_HMR=true is explicitly set.
|
|
52
|
+
*/
|
|
53
|
+
async enableHotReload(config) {
|
|
54
|
+
if (process.env.NODE_ENV === "production" && process.env.BLOK_HMR !== "true") {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const workflowPaths = (process.env.WORKFLOWS_PATH || process.env.VITE_WORKFLOWS_PATH || "")
|
|
58
|
+
.split(",")
|
|
59
|
+
.filter(Boolean);
|
|
60
|
+
const nodePaths = (process.env.NODES_PATH || "").split(",").filter(Boolean);
|
|
61
|
+
this.hmr = new HotReloadManager({
|
|
62
|
+
workflowPaths,
|
|
63
|
+
nodePaths,
|
|
64
|
+
verbose: process.env.BLOK_HMR_VERBOSE === "true",
|
|
65
|
+
...config,
|
|
66
|
+
});
|
|
67
|
+
this.hmr.onNodeChange(async (event) => {
|
|
68
|
+
try {
|
|
69
|
+
await this.onHmrNodeChange(event);
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
console.error(`[HMR] Error in node change handler: ${err.message}`);
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
this.hmr.onWorkflowChange(async (event) => {
|
|
76
|
+
try {
|
|
77
|
+
await this.onHmrWorkflowChange(event);
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
console.error(`[HMR] Error in workflow change handler: ${err.message}`);
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
this.hmr.onTriggerChange(async (event) => {
|
|
84
|
+
try {
|
|
85
|
+
await this.onHmrTriggerChange(event);
|
|
86
|
+
}
|
|
87
|
+
catch (err) {
|
|
88
|
+
console.error(`[HMR] Error in trigger change handler: ${err.message}`);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
this.hmr.on("log", (msg) => console.log(msg));
|
|
92
|
+
this.hmr.on("reload", (event) => {
|
|
93
|
+
const timestamp = new Date().toLocaleTimeString();
|
|
94
|
+
console.log(`[HMR] [${timestamp}] Reloaded: ${event.type} - ${event.relativePath}`);
|
|
95
|
+
});
|
|
96
|
+
this.hmr.on("reload-error", ({ event, error }) => {
|
|
97
|
+
console.error(`[HMR] Reload error for ${event.relativePath}: ${error.message}`);
|
|
98
|
+
});
|
|
99
|
+
await this.hmr.start();
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Called when a node file changes. Default: invalidates module cache.
|
|
103
|
+
* Override in subclasses for custom behavior (e.g., re-running loadNodes).
|
|
104
|
+
*/
|
|
105
|
+
async onHmrNodeChange(event) {
|
|
106
|
+
this.hmr?.invalidateModule(event.filePath);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Called when a workflow file changes. Default: no-op.
|
|
110
|
+
* HTTP trigger re-reads per request so needs no action.
|
|
111
|
+
* Non-HTTP triggers should override to reload workflow lists.
|
|
112
|
+
*/
|
|
113
|
+
async onHmrWorkflowChange(_event) {
|
|
114
|
+
// Default no-op - subclasses override as needed
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Called when a trigger config file changes. Default: no-op.
|
|
118
|
+
* Override for graceful stop + restart behavior.
|
|
119
|
+
*/
|
|
120
|
+
async onHmrTriggerChange(_event) {
|
|
121
|
+
// Default no-op - subclasses override as needed
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Wait for all in-flight requests to complete before proceeding.
|
|
125
|
+
* Used during graceful reload to avoid dropping connections.
|
|
126
|
+
*/
|
|
127
|
+
waitForInFlightRequests(timeoutMs = 5000) {
|
|
128
|
+
return new Promise((resolve) => {
|
|
129
|
+
const start = Date.now();
|
|
130
|
+
const check = () => {
|
|
131
|
+
if (this.inFlightRequests <= 0) {
|
|
132
|
+
resolve();
|
|
133
|
+
}
|
|
134
|
+
else if (Date.now() - start >= timeoutMs) {
|
|
135
|
+
console.warn(`[HMR] Timed out waiting for ${this.inFlightRequests} in-flight request(s)`);
|
|
136
|
+
resolve();
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
setTimeout(check, 50);
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
check();
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Get HMR statistics. Returns null if HMR is not enabled.
|
|
147
|
+
*/
|
|
148
|
+
getHmrStats() {
|
|
149
|
+
return this.hmr?.getStats() ?? null;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Stop the HMR system and clean up watchers.
|
|
153
|
+
*/
|
|
154
|
+
async destroyHmr() {
|
|
155
|
+
if (this.hmr) {
|
|
156
|
+
await this.hmr.stop();
|
|
157
|
+
this.hmr = null;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
async run(ctx) {
|
|
161
|
+
this.inFlightRequests++;
|
|
162
|
+
const runStart = performance.now();
|
|
163
|
+
let runSuccess = true;
|
|
164
|
+
// --- Trace: start run ---
|
|
165
|
+
const tracker = RunTracker.getInstance();
|
|
166
|
+
let traceRunId;
|
|
167
|
+
if (tracker.active) {
|
|
168
|
+
const runner = this.getRunner();
|
|
169
|
+
const stepCount = runner.getStepCount?.() ?? this.configuration.steps?.length ?? 0;
|
|
170
|
+
const run = tracker.startRun({
|
|
171
|
+
workflowName: this.configuration.name || ctx.workflow_name || "unknown",
|
|
172
|
+
workflowPath: ctx.workflow_path || "",
|
|
173
|
+
triggerType: this.constructor.name.replace("Trigger", "").toLowerCase() || "unknown",
|
|
174
|
+
triggerSummary: this.buildTraceTriggerSummary(ctx),
|
|
175
|
+
nodeCount: stepCount,
|
|
176
|
+
});
|
|
177
|
+
traceRunId = run.id;
|
|
178
|
+
ctx._traceRunId = run.id;
|
|
179
|
+
// Wrap logger to forward log entries to RunTracker
|
|
180
|
+
ctx.logger = new TracingLogger(ctx.logger, run.id, tracker);
|
|
181
|
+
}
|
|
182
|
+
try {
|
|
183
|
+
const start = performance.now();
|
|
184
|
+
const defaultMeter = metrics.getMeter("default");
|
|
185
|
+
const workflow_execution = defaultMeter.createCounter("workflow", {
|
|
186
|
+
description: "Workflow requests",
|
|
187
|
+
});
|
|
188
|
+
const workflow_runner_time = defaultMeter.createGauge("workflow_time", {
|
|
189
|
+
description: "Workflow elapsed time",
|
|
190
|
+
});
|
|
191
|
+
const workflow_memory = defaultMeter.createGauge("workflow_memory", {
|
|
192
|
+
description: "Workflow memory usage",
|
|
193
|
+
});
|
|
194
|
+
const workflow_memory_average = defaultMeter.createGauge("workflow_memory_average", {
|
|
195
|
+
description: "Workflow memory average",
|
|
196
|
+
});
|
|
197
|
+
const workflow_memory_usage_min = defaultMeter.createGauge("workflow_memory_usage_min", {
|
|
198
|
+
description: "Workflow memory usage min",
|
|
199
|
+
});
|
|
200
|
+
const workflow_memory_total = defaultMeter.createGauge("workflow_memory_total", {
|
|
201
|
+
description: "Workflow memory total",
|
|
202
|
+
});
|
|
203
|
+
const workflow_memory_free = defaultMeter.createGauge("workflow_memory_free", {
|
|
204
|
+
description: "Workflow memory free",
|
|
205
|
+
});
|
|
206
|
+
const workflow_cpu = defaultMeter.createGauge("workflow_cpu", {
|
|
207
|
+
description: "Workflow cpu usage",
|
|
208
|
+
});
|
|
209
|
+
const workflow_cpu_average = defaultMeter.createGauge("workflow_cpu_average", {
|
|
210
|
+
description: "Workflow cpu average",
|
|
211
|
+
});
|
|
212
|
+
const workflow_cpu_total = defaultMeter.createGauge("workflow_cpu_total", {
|
|
213
|
+
description: "Workflow cpu total",
|
|
214
|
+
});
|
|
215
|
+
const globalMetrics = new Metrics();
|
|
216
|
+
globalMetrics.start();
|
|
217
|
+
const runner = this.getRunner();
|
|
218
|
+
const context = await runner.run(ctx);
|
|
219
|
+
globalMetrics.retry();
|
|
220
|
+
globalMetrics.stop();
|
|
221
|
+
const average = await globalMetrics.getMetrics();
|
|
222
|
+
const end = performance.now();
|
|
223
|
+
ctx.logger.log(`Memory average: ${average.memory.total.toFixed(2)}MB, min: ${average.memory.min.toFixed(2)}MB, max: ${average.memory.max.toFixed(2)}MB`);
|
|
224
|
+
workflow_execution.add(1, {
|
|
225
|
+
env: process.env.NODE_ENV,
|
|
226
|
+
workflow_version: `${this.configuration.version}`,
|
|
227
|
+
workflow_name: `${this.configuration.name}`,
|
|
228
|
+
workflow_path: `${ctx.workflow_path}`,
|
|
229
|
+
});
|
|
230
|
+
workflow_runner_time.record(end - start, {
|
|
231
|
+
env: process.env.NODE_ENV,
|
|
232
|
+
workflow_version: `${this.configuration.version}`,
|
|
233
|
+
workflow_name: `${this.configuration.name}`,
|
|
234
|
+
workflow_path: `${ctx.workflow_path}`,
|
|
235
|
+
});
|
|
236
|
+
workflow_memory.record(average.memory.max, {
|
|
237
|
+
env: process.env.NODE_ENV,
|
|
238
|
+
workflow_version: `${this.configuration.version}`,
|
|
239
|
+
workflow_name: `${this.configuration.name}`,
|
|
240
|
+
workflow_path: `${ctx.workflow_path}`,
|
|
241
|
+
});
|
|
242
|
+
workflow_memory_average.record(average.memory.total, {
|
|
243
|
+
env: process.env.NODE_ENV,
|
|
244
|
+
workflow_version: `${this.configuration.version}`,
|
|
245
|
+
workflow_name: `${this.configuration.name}`,
|
|
246
|
+
workflow_path: `${ctx.workflow_path}`,
|
|
247
|
+
});
|
|
248
|
+
workflow_memory_usage_min.record(average.memory.min, {
|
|
249
|
+
env: process.env.NODE_ENV,
|
|
250
|
+
workflow_version: `${this.configuration.version}`,
|
|
251
|
+
workflow_name: `${this.configuration.name}`,
|
|
252
|
+
workflow_path: `${ctx.workflow_path}`,
|
|
253
|
+
});
|
|
254
|
+
workflow_memory_total.record(average.memory.global_memory, {
|
|
255
|
+
env: process.env.NODE_ENV,
|
|
256
|
+
workflow_version: `${this.configuration.version}`,
|
|
257
|
+
workflow_name: `${this.configuration.name}`,
|
|
258
|
+
workflow_path: `${ctx.workflow_path}`,
|
|
259
|
+
});
|
|
260
|
+
workflow_memory_free.record(average.memory.global_free_memory, {
|
|
261
|
+
env: process.env.NODE_ENV,
|
|
262
|
+
workflow_version: `${this.configuration.version}`,
|
|
263
|
+
workflow_name: `${this.configuration.name}`,
|
|
264
|
+
workflow_path: `${ctx.workflow_path}`,
|
|
265
|
+
});
|
|
266
|
+
workflow_cpu.record(average.cpu.usage, {
|
|
267
|
+
env: process.env.NODE_ENV,
|
|
268
|
+
workflow_version: `${this.configuration.version}`,
|
|
269
|
+
workflow_name: `${this.configuration.name}`,
|
|
270
|
+
workflow_path: `${ctx.workflow_path}`,
|
|
271
|
+
});
|
|
272
|
+
workflow_cpu_average.record(average.cpu.average, {
|
|
273
|
+
env: process.env.NODE_ENV,
|
|
274
|
+
workflow_version: `${this.configuration.version}`,
|
|
275
|
+
workflow_name: `${this.configuration.name}`,
|
|
276
|
+
workflow_path: `${ctx.workflow_path}`,
|
|
277
|
+
});
|
|
278
|
+
workflow_cpu_total.record(average.cpu.total, {
|
|
279
|
+
env: process.env.NODE_ENV,
|
|
280
|
+
workflow_version: `${this.configuration.version}`,
|
|
281
|
+
workflow_name: `${this.configuration.name}`,
|
|
282
|
+
workflow_path: `${ctx.workflow_path}`,
|
|
283
|
+
});
|
|
284
|
+
globalMetrics.clear();
|
|
285
|
+
// --- Trace: complete run ---
|
|
286
|
+
if (traceRunId) {
|
|
287
|
+
tracker.completeRun(traceRunId, context.response?.data);
|
|
288
|
+
}
|
|
289
|
+
return {
|
|
290
|
+
ctx: context,
|
|
291
|
+
metrics: average,
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
catch (err) {
|
|
295
|
+
runSuccess = false;
|
|
296
|
+
// --- Trace: fail run ---
|
|
297
|
+
if (traceRunId) {
|
|
298
|
+
tracker.failRun(traceRunId, err instanceof Error ? err : new Error(String(err)));
|
|
299
|
+
}
|
|
300
|
+
throw err;
|
|
301
|
+
}
|
|
302
|
+
finally {
|
|
303
|
+
const durationMs = performance.now() - runStart;
|
|
304
|
+
this.metricsBridge.recordExecution(durationMs, runSuccess, {
|
|
305
|
+
workflow_name: this.configuration.name || "",
|
|
306
|
+
workflow_version: `${this.configuration.version}`,
|
|
307
|
+
env: process.env.NODE_ENV || "development",
|
|
308
|
+
});
|
|
309
|
+
this.inFlightRequests--;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Build a human-readable trigger summary for trace display.
|
|
314
|
+
*/
|
|
315
|
+
buildTraceTriggerSummary(ctx) {
|
|
316
|
+
const req = ctx.request;
|
|
317
|
+
if (req?.method && req?.path) {
|
|
318
|
+
return `${req.method.toUpperCase()} ${req.path}`;
|
|
319
|
+
}
|
|
320
|
+
return this.constructor.name.replace("Trigger", "").toLowerCase();
|
|
321
|
+
}
|
|
322
|
+
createContext(logger, blueprintPath, id) {
|
|
323
|
+
const requestId = id || uuid();
|
|
324
|
+
const ctx = {
|
|
325
|
+
id: requestId,
|
|
326
|
+
workflow_name: this.configuration.name,
|
|
327
|
+
workflow_path: blueprintPath || "",
|
|
328
|
+
config: this.configuration.nodes,
|
|
329
|
+
request: { body: {} },
|
|
330
|
+
response: { data: "", contentType: "", success: true, error: null },
|
|
331
|
+
error: { message: [] },
|
|
332
|
+
logger: logger || new DefaultLogger(this.configuration.name, blueprintPath, requestId),
|
|
333
|
+
eventLogger: null,
|
|
334
|
+
_PRIVATE_: null,
|
|
335
|
+
};
|
|
336
|
+
Object.defineProperty(ctx, "id", {
|
|
337
|
+
value: requestId,
|
|
338
|
+
enumerable: true,
|
|
339
|
+
});
|
|
340
|
+
Object.defineProperty(ctx, "env", {
|
|
341
|
+
value: process.env,
|
|
342
|
+
enumerable: true,
|
|
343
|
+
});
|
|
344
|
+
return ctx;
|
|
345
|
+
}
|
|
346
|
+
startCounter() {
|
|
347
|
+
return performance.now();
|
|
348
|
+
}
|
|
349
|
+
endCounter(start) {
|
|
350
|
+
return performance.now() - start;
|
|
351
|
+
}
|
|
352
|
+
// --- Monitoring Infrastructure ---
|
|
353
|
+
/**
|
|
354
|
+
* Enable rate limiting for this trigger.
|
|
355
|
+
*/
|
|
356
|
+
enableRateLimiting(config) {
|
|
357
|
+
this.rateLimiter = new RateLimiter(config);
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Check rate limit for a given key. Returns the result without blocking.
|
|
361
|
+
*/
|
|
362
|
+
checkRateLimit(key) {
|
|
363
|
+
if (!this.rateLimiter) {
|
|
364
|
+
return { allowed: true, remaining: Number.MAX_SAFE_INTEGER, retryAfterMs: 0, limit: 0 };
|
|
365
|
+
}
|
|
366
|
+
return this.rateLimiter.consume(key);
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Enable circuit breaker for this trigger.
|
|
370
|
+
*/
|
|
371
|
+
enableCircuitBreaker(config) {
|
|
372
|
+
this.circuitBreaker = new CircuitBreaker(config);
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* Register a dependency health check (e.g., database, queue broker).
|
|
376
|
+
*/
|
|
377
|
+
registerHealthDependency(name, checkFn) {
|
|
378
|
+
this.healthCheck.registerDependency(name, checkFn);
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Get full health status including all dependencies.
|
|
382
|
+
*/
|
|
383
|
+
async getHealth() {
|
|
384
|
+
return this.healthCheck.check();
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Get liveness probe result.
|
|
388
|
+
*/
|
|
389
|
+
getLiveness() {
|
|
390
|
+
return this.healthCheck.liveness();
|
|
391
|
+
}
|
|
392
|
+
/**
|
|
393
|
+
* Get readiness probe result.
|
|
394
|
+
*/
|
|
395
|
+
async getReadiness() {
|
|
396
|
+
return this.healthCheck.readiness();
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* Get enhanced trigger metrics snapshot.
|
|
400
|
+
*/
|
|
401
|
+
getTriggerMetrics() {
|
|
402
|
+
return this.metricsCollector.getMetrics();
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* Clean up monitoring resources on shutdown.
|
|
406
|
+
*/
|
|
407
|
+
destroyMonitoring() {
|
|
408
|
+
this.rateLimiter?.destroy();
|
|
409
|
+
this.circuitBreaker?.destroy();
|
|
410
|
+
this.metricsBridge.destroy();
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
//# sourceMappingURL=TriggerBase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TriggerBase.js","sourceRoot":"","sources":["../src/TriggerBase.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { Context } from "@blokjs/shared";
|
|
2
|
+
import type RunnerNode from "../RunnerNode";
|
|
3
|
+
import type { ExecutionResult, RuntimeAdapter } from "./RuntimeAdapter";
|
|
4
|
+
/**
|
|
5
|
+
* BunRuntimeAdapter executes TypeScript/JavaScript nodes using Bun runtime
|
|
6
|
+
*
|
|
7
|
+
* This adapter provides:
|
|
8
|
+
* - In-process execution when running under Bun (fastest path)
|
|
9
|
+
* - Subprocess execution via `bun run` when running under Node.js
|
|
10
|
+
* - Compatible with both Node.js and Bun execution environments
|
|
11
|
+
*
|
|
12
|
+
* When the host process IS Bun, execution is identical to NodeJsRuntimeAdapter
|
|
13
|
+
* (in-process, zero overhead). When the host is Node.js, it spawns a Bun
|
|
14
|
+
* subprocess for execution.
|
|
15
|
+
*/
|
|
16
|
+
export declare class BunRuntimeAdapter implements RuntimeAdapter {
|
|
17
|
+
readonly kind: "bun";
|
|
18
|
+
private isBunRuntime;
|
|
19
|
+
constructor();
|
|
20
|
+
/**
|
|
21
|
+
* Execute a node using Bun runtime
|
|
22
|
+
*
|
|
23
|
+
* @param node - The node instance to execute
|
|
24
|
+
* @param ctx - The workflow execution context
|
|
25
|
+
* @returns Promise that resolves to ExecutionResult
|
|
26
|
+
*/
|
|
27
|
+
execute(node: RunnerNode, ctx: Context): Promise<ExecutionResult>;
|
|
28
|
+
/**
|
|
29
|
+
* Execute in-process when running under Bun (zero overhead)
|
|
30
|
+
* Same as NodeJsRuntimeAdapter since Bun is API-compatible with Node.js
|
|
31
|
+
*/
|
|
32
|
+
private executeInProcess;
|
|
33
|
+
/**
|
|
34
|
+
* Execute via Bun subprocess when host is Node.js
|
|
35
|
+
* Spawns `bun run` to execute the node in a Bun process
|
|
36
|
+
*/
|
|
37
|
+
private executeViaSubprocess;
|
|
38
|
+
}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BunRuntimeAdapter executes TypeScript/JavaScript nodes using Bun runtime
|
|
3
|
+
*
|
|
4
|
+
* This adapter provides:
|
|
5
|
+
* - In-process execution when running under Bun (fastest path)
|
|
6
|
+
* - Subprocess execution via `bun run` when running under Node.js
|
|
7
|
+
* - Compatible with both Node.js and Bun execution environments
|
|
8
|
+
*
|
|
9
|
+
* When the host process IS Bun, execution is identical to NodeJsRuntimeAdapter
|
|
10
|
+
* (in-process, zero overhead). When the host is Node.js, it spawns a Bun
|
|
11
|
+
* subprocess for execution.
|
|
12
|
+
*/
|
|
13
|
+
export class BunRuntimeAdapter {
|
|
14
|
+
kind = "bun";
|
|
15
|
+
isBunRuntime;
|
|
16
|
+
constructor() {
|
|
17
|
+
// Detect if we're running under Bun
|
|
18
|
+
this.isBunRuntime = typeof globalThis !== "undefined" && "Bun" in globalThis;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Execute a node using Bun runtime
|
|
22
|
+
*
|
|
23
|
+
* @param node - The node instance to execute
|
|
24
|
+
* @param ctx - The workflow execution context
|
|
25
|
+
* @returns Promise that resolves to ExecutionResult
|
|
26
|
+
*/
|
|
27
|
+
async execute(node, ctx) {
|
|
28
|
+
if (this.isBunRuntime) {
|
|
29
|
+
return this.executeInProcess(node, ctx);
|
|
30
|
+
}
|
|
31
|
+
return this.executeViaSubprocess(node, ctx);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Execute in-process when running under Bun (zero overhead)
|
|
35
|
+
* Same as NodeJsRuntimeAdapter since Bun is API-compatible with Node.js
|
|
36
|
+
*/
|
|
37
|
+
async executeInProcess(node, ctx) {
|
|
38
|
+
const startTime = performance.now();
|
|
39
|
+
try {
|
|
40
|
+
const response = await node.run(ctx);
|
|
41
|
+
const duration_ms = performance.now() - startTime;
|
|
42
|
+
const responseData = response.data;
|
|
43
|
+
const topLevelResponse = response;
|
|
44
|
+
const nestedError = responseData?.error !== null && responseData?.error !== undefined;
|
|
45
|
+
const topLevelError = topLevelResponse?.error !== null && topLevelResponse?.error !== undefined;
|
|
46
|
+
const hasError = nestedError || topLevelError;
|
|
47
|
+
const nestedSuccess = responseData?.success;
|
|
48
|
+
const topLevelSuccess = topLevelResponse?.success;
|
|
49
|
+
const success = hasError ? false : (nestedSuccess ?? topLevelSuccess ?? true);
|
|
50
|
+
const errorValue = responseData?.error || topLevelResponse?.error || null;
|
|
51
|
+
return {
|
|
52
|
+
success,
|
|
53
|
+
data: response.data,
|
|
54
|
+
errors: errorValue,
|
|
55
|
+
metrics: {
|
|
56
|
+
duration_ms,
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
const duration_ms = performance.now() - startTime;
|
|
62
|
+
return {
|
|
63
|
+
success: false,
|
|
64
|
+
data: null,
|
|
65
|
+
errors: {
|
|
66
|
+
message: error.message,
|
|
67
|
+
stack: error.stack,
|
|
68
|
+
name: error.name,
|
|
69
|
+
},
|
|
70
|
+
metrics: {
|
|
71
|
+
duration_ms,
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Execute via Bun subprocess when host is Node.js
|
|
78
|
+
* Spawns `bun run` to execute the node in a Bun process
|
|
79
|
+
*/
|
|
80
|
+
async executeViaSubprocess(node, ctx) {
|
|
81
|
+
const startTime = performance.now();
|
|
82
|
+
try {
|
|
83
|
+
const { execFile } = await import("node:child_process");
|
|
84
|
+
const { promisify } = await import("node:util");
|
|
85
|
+
const execFileAsync = promisify(execFile);
|
|
86
|
+
// Prepare the execution payload
|
|
87
|
+
const payload = JSON.stringify({
|
|
88
|
+
node: {
|
|
89
|
+
name: node.node || node.name,
|
|
90
|
+
type: node.type,
|
|
91
|
+
},
|
|
92
|
+
context: {
|
|
93
|
+
id: ctx.id,
|
|
94
|
+
workflow_name: ctx.workflow_name,
|
|
95
|
+
workflow_path: ctx.workflow_path,
|
|
96
|
+
request: {
|
|
97
|
+
body: ctx.request.body,
|
|
98
|
+
headers: ctx.request.headers,
|
|
99
|
+
params: ctx.request.params,
|
|
100
|
+
query: ctx.request.query,
|
|
101
|
+
},
|
|
102
|
+
response: ctx.response,
|
|
103
|
+
vars: ctx.vars,
|
|
104
|
+
},
|
|
105
|
+
});
|
|
106
|
+
// Execute via bun with inline script that loads and runs the node
|
|
107
|
+
const script = `
|
|
108
|
+
const payload = JSON.parse(process.argv[1]);
|
|
109
|
+
const mod = await import(payload.node.name);
|
|
110
|
+
const nodeInstance = mod.default || mod;
|
|
111
|
+
if (typeof nodeInstance.run === 'function') {
|
|
112
|
+
const result = await nodeInstance.run(payload.context);
|
|
113
|
+
console.log(JSON.stringify({ success: true, data: result.data, errors: result.error || null }));
|
|
114
|
+
} else if (typeof nodeInstance.execute === 'function') {
|
|
115
|
+
const result = await nodeInstance.execute(payload.context, payload.context.request.body);
|
|
116
|
+
console.log(JSON.stringify({ success: true, data: result, errors: null }));
|
|
117
|
+
} else {
|
|
118
|
+
console.log(JSON.stringify({ success: false, data: null, errors: { message: 'No run or execute method found' } }));
|
|
119
|
+
}
|
|
120
|
+
`;
|
|
121
|
+
const { stdout, stderr } = await execFileAsync("bun", ["eval", script, payload], {
|
|
122
|
+
timeout: 30000,
|
|
123
|
+
maxBuffer: 10 * 1024 * 1024,
|
|
124
|
+
});
|
|
125
|
+
const duration_ms = performance.now() - startTime;
|
|
126
|
+
let result;
|
|
127
|
+
try {
|
|
128
|
+
const parsed = JSON.parse(stdout.trim());
|
|
129
|
+
result = {
|
|
130
|
+
success: parsed.success ?? true,
|
|
131
|
+
data: parsed.data,
|
|
132
|
+
errors: parsed.errors || null,
|
|
133
|
+
logs: stderr ? [stderr] : undefined,
|
|
134
|
+
metrics: {
|
|
135
|
+
duration_ms,
|
|
136
|
+
},
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
result = {
|
|
141
|
+
success: true,
|
|
142
|
+
data: stdout.trim(),
|
|
143
|
+
errors: null,
|
|
144
|
+
logs: stderr ? [stderr] : undefined,
|
|
145
|
+
metrics: {
|
|
146
|
+
duration_ms,
|
|
147
|
+
},
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
return result;
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
const duration_ms = performance.now() - startTime;
|
|
154
|
+
return {
|
|
155
|
+
success: false,
|
|
156
|
+
data: null,
|
|
157
|
+
errors: {
|
|
158
|
+
message: error.message,
|
|
159
|
+
stack: error.stack,
|
|
160
|
+
name: error.name,
|
|
161
|
+
},
|
|
162
|
+
metrics: {
|
|
163
|
+
duration_ms,
|
|
164
|
+
},
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=BunRuntimeAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BunRuntimeAdapter.js","sourceRoot":"","sources":["../../src/adapters/BunRuntimeAdapter.ts"],"names":[],"mappings":"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"}
|