@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,216 @@
1
+ /**
2
+ * PrometheusMetricsBridge - Bridges internal metrics to OpenTelemetry/Prometheus
3
+ *
4
+ * Exposes TriggerMetricsCollector data as properly-named Prometheus metrics
5
+ * using the OpenTelemetry API. Works as no-op if no MeterProvider is configured.
6
+ */
7
+ import { metrics } from "@opentelemetry/api";
8
+ export class PrometheusMetricsBridge {
9
+ meter;
10
+ config;
11
+ collector;
12
+ circuitBreaker = null;
13
+ rateLimiter = null;
14
+ // Active instruments
15
+ executionsCounter;
16
+ durationHistogram;
17
+ errorsCounter;
18
+ // Observable instruments (registered once, polled at scrape time)
19
+ observableGauges = [];
20
+ initialized = false;
21
+ constructor(config, collector) {
22
+ this.config = config;
23
+ this.collector = collector;
24
+ this.meter = metrics.getMeter("blok");
25
+ // Create active instruments immediately
26
+ this.executionsCounter = this.meter.createCounter("blok_workflow_executions_total", {
27
+ description: "Total number of workflow executions",
28
+ unit: "1",
29
+ });
30
+ this.durationHistogram = this.meter.createHistogram("blok_workflow_duration_seconds", {
31
+ description: "Workflow execution duration in seconds",
32
+ unit: "s",
33
+ });
34
+ this.errorsCounter = this.meter.createCounter("blok_workflow_errors_total", {
35
+ description: "Total number of workflow execution errors",
36
+ unit: "1",
37
+ });
38
+ }
39
+ /**
40
+ * Register observable callbacks that pull from the TriggerMetricsCollector
41
+ * at scrape time. Call this once after construction.
42
+ */
43
+ initialize() {
44
+ if (this.initialized)
45
+ return;
46
+ this.initialized = true;
47
+ const baseAttrs = {
48
+ trigger_type: this.config.triggerType,
49
+ trigger_name: this.config.triggerName,
50
+ };
51
+ // Latency percentile gauges (pulled from collector at scrape time)
52
+ const p50 = this.meter.createObservableGauge("blok_trigger_latency_p50_seconds", {
53
+ description: "Trigger request latency 50th percentile in seconds",
54
+ unit: "s",
55
+ });
56
+ p50.addCallback((result) => {
57
+ const m = this.collector.getMetrics();
58
+ result.observe(m.latency.p50 / 1000, baseAttrs);
59
+ });
60
+ this.observableGauges.push(p50);
61
+ const p95 = this.meter.createObservableGauge("blok_trigger_latency_p95_seconds", {
62
+ description: "Trigger request latency 95th percentile in seconds",
63
+ unit: "s",
64
+ });
65
+ p95.addCallback((result) => {
66
+ const m = this.collector.getMetrics();
67
+ result.observe(m.latency.p95 / 1000, baseAttrs);
68
+ });
69
+ this.observableGauges.push(p95);
70
+ const p99 = this.meter.createObservableGauge("blok_trigger_latency_p99_seconds", {
71
+ description: "Trigger request latency 99th percentile in seconds",
72
+ unit: "s",
73
+ });
74
+ p99.addCallback((result) => {
75
+ const m = this.collector.getMetrics();
76
+ result.observe(m.latency.p99 / 1000, baseAttrs);
77
+ });
78
+ this.observableGauges.push(p99);
79
+ // Throughput
80
+ const rps = this.meter.createObservableGauge("blok_trigger_throughput_rps", {
81
+ description: "Trigger requests per second",
82
+ unit: "1/s",
83
+ });
84
+ rps.addCallback((result) => {
85
+ const m = this.collector.getMetrics();
86
+ result.observe(m.throughput.requestsPerSecond, baseAttrs);
87
+ });
88
+ this.observableGauges.push(rps);
89
+ const successRate = this.meter.createObservableGauge("blok_trigger_success_rate", {
90
+ description: "Trigger success rate (0-1)",
91
+ unit: "1",
92
+ });
93
+ successRate.addCallback((result) => {
94
+ const m = this.collector.getMetrics();
95
+ result.observe(m.throughput.successRate, baseAttrs);
96
+ });
97
+ this.observableGauges.push(successRate);
98
+ // Active connections (for WebSocket/SSE)
99
+ const connections = this.meter.createObservableGauge("blok_trigger_active_connections", {
100
+ description: "Number of active connections",
101
+ unit: "1",
102
+ });
103
+ connections.addCallback((result) => {
104
+ const m = this.collector.getMetrics();
105
+ result.observe(m.activeConnections, baseAttrs);
106
+ });
107
+ this.observableGauges.push(connections);
108
+ // Process metrics
109
+ const heapMemory = this.meter.createObservableGauge("blok_process_memory_heap_bytes", {
110
+ description: "Process heap memory usage in bytes",
111
+ unit: "By",
112
+ });
113
+ heapMemory.addCallback((result) => {
114
+ const memUsage = process.memoryUsage();
115
+ result.observe(memUsage.heapUsed, { trigger_type: this.config.triggerType });
116
+ });
117
+ this.observableGauges.push(heapMemory);
118
+ const rssMemory = this.meter.createObservableGauge("blok_process_memory_rss_bytes", {
119
+ description: "Process RSS memory in bytes",
120
+ unit: "By",
121
+ });
122
+ rssMemory.addCallback((result) => {
123
+ const memUsage = process.memoryUsage();
124
+ result.observe(memUsage.rss, { trigger_type: this.config.triggerType });
125
+ });
126
+ this.observableGauges.push(rssMemory);
127
+ // Circuit breaker state gauge
128
+ const cbState = this.meter.createObservableGauge("blok_circuit_breaker_state", {
129
+ description: "Circuit breaker state (0=closed, 1=open, 2=half_open)",
130
+ unit: "1",
131
+ });
132
+ cbState.addCallback((result) => {
133
+ if (!this.circuitBreaker)
134
+ return;
135
+ const stats = this.circuitBreaker.getStats();
136
+ const stateValue = stats.state === "CLOSED" ? 0 : stats.state === "OPEN" ? 1 : 2;
137
+ result.observe(stateValue, baseAttrs);
138
+ });
139
+ this.observableGauges.push(cbState);
140
+ // Rate limiter remaining tokens
141
+ const rlRemaining = this.meter.createObservableGauge("blok_rate_limiter_remaining", {
142
+ description: "Rate limiter remaining tokens (global bucket)",
143
+ unit: "1",
144
+ });
145
+ rlRemaining.addCallback((result) => {
146
+ if (!this.rateLimiter)
147
+ return;
148
+ const peek = this.rateLimiter.peek("global");
149
+ result.observe(peek.remaining, baseAttrs);
150
+ });
151
+ this.observableGauges.push(rlRemaining);
152
+ }
153
+ /**
154
+ * Record a workflow execution. Called from TriggerBase.run() after each request.
155
+ *
156
+ * @param durationMs - Execution duration in milliseconds
157
+ * @param success - Whether the execution succeeded
158
+ * @param labels - Workflow-specific labels
159
+ */
160
+ recordExecution(durationMs, success, labels) {
161
+ const attrs = {
162
+ trigger_type: this.config.triggerType,
163
+ trigger_name: this.config.triggerName,
164
+ workflow_name: labels.workflow_name,
165
+ status: success ? "success" : "error",
166
+ env: labels.env,
167
+ };
168
+ this.executionsCounter.add(1, attrs);
169
+ this.durationHistogram.record(durationMs / 1000, {
170
+ trigger_type: this.config.triggerType,
171
+ trigger_name: this.config.triggerName,
172
+ workflow_name: labels.workflow_name,
173
+ env: labels.env,
174
+ });
175
+ // Also record to the internal collector for percentile tracking
176
+ if (success) {
177
+ this.collector.recordSuccess(durationMs);
178
+ }
179
+ else {
180
+ this.collector.recordFailure(durationMs, "execution_error", "runtime");
181
+ }
182
+ }
183
+ /**
184
+ * Record an error with a specific category.
185
+ */
186
+ recordError(category, labels = {}) {
187
+ this.errorsCounter.add(1, {
188
+ trigger_type: this.config.triggerType,
189
+ trigger_name: this.config.triggerName,
190
+ error_category: category,
191
+ env: labels.env || process.env.NODE_ENV || "development",
192
+ });
193
+ }
194
+ /**
195
+ * Attach a CircuitBreaker for state monitoring.
196
+ */
197
+ attachCircuitBreaker(cb) {
198
+ this.circuitBreaker = cb;
199
+ }
200
+ /**
201
+ * Attach a RateLimiter for remaining token monitoring.
202
+ */
203
+ attachRateLimiter(rl) {
204
+ this.rateLimiter = rl;
205
+ }
206
+ /**
207
+ * Clean up resources.
208
+ */
209
+ destroy() {
210
+ this.circuitBreaker = null;
211
+ this.rateLimiter = null;
212
+ this.observableGauges = [];
213
+ this.initialized = false;
214
+ }
215
+ }
216
+ //# sourceMappingURL=PrometheusMetricsBridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrometheusMetricsBridge.js","sourceRoot":"","sources":["../../src/monitoring/PrometheusMetricsBridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Token Bucket Rate Limiter for Blok Triggers
3
+ *
4
+ * Implements the token bucket algorithm for rate limiting trigger events.
5
+ * Supports per-client, per-workflow, and per-topic rate limiting.
6
+ */
7
+ export interface RateLimitConfig {
8
+ /** Maximum number of tokens in the bucket */
9
+ maxTokens: number;
10
+ /** Tokens added per second */
11
+ refillRate: number;
12
+ /** Key strategy for identifying rate limit buckets */
13
+ keyStrategy?: "client" | "workflow" | "topic" | "global";
14
+ }
15
+ export interface RateLimitResult {
16
+ allowed: boolean;
17
+ remaining: number;
18
+ retryAfterMs: number;
19
+ limit: number;
20
+ }
21
+ export declare class RateLimiter {
22
+ private buckets;
23
+ private config;
24
+ private cleanupInterval;
25
+ private bucketMaxIdleMs;
26
+ constructor(config: RateLimitConfig, bucketMaxIdleMs?: number);
27
+ /**
28
+ * Check if a request is allowed under the rate limit.
29
+ * Consumes a token if allowed.
30
+ */
31
+ consume(key: string, tokens?: number): RateLimitResult;
32
+ /**
33
+ * Check rate limit without consuming a token.
34
+ */
35
+ peek(key: string): RateLimitResult;
36
+ /**
37
+ * Reset the rate limiter for a specific key.
38
+ */
39
+ reset(key: string): void;
40
+ /**
41
+ * Reset all rate limit buckets.
42
+ */
43
+ resetAll(): void;
44
+ /**
45
+ * Get current stats for monitoring.
46
+ */
47
+ getStats(): {
48
+ activeBuckets: number;
49
+ config: RateLimitConfig;
50
+ };
51
+ /**
52
+ * Stop the cleanup interval. Call when shutting down.
53
+ */
54
+ destroy(): void;
55
+ private getOrCreateBucket;
56
+ private refill;
57
+ private startCleanup;
58
+ }
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Token Bucket Rate Limiter for Blok Triggers
3
+ *
4
+ * Implements the token bucket algorithm for rate limiting trigger events.
5
+ * Supports per-client, per-workflow, and per-topic rate limiting.
6
+ */
7
+ export class RateLimiter {
8
+ buckets = new Map();
9
+ config;
10
+ cleanupInterval = null;
11
+ bucketMaxIdleMs;
12
+ constructor(config, bucketMaxIdleMs = 60_000) {
13
+ this.config = config;
14
+ this.bucketMaxIdleMs = bucketMaxIdleMs;
15
+ this.startCleanup();
16
+ }
17
+ /**
18
+ * Check if a request is allowed under the rate limit.
19
+ * Consumes a token if allowed.
20
+ */
21
+ consume(key, tokens = 1) {
22
+ const bucket = this.getOrCreateBucket(key);
23
+ this.refill(bucket);
24
+ if (bucket.tokens >= tokens) {
25
+ bucket.tokens -= tokens;
26
+ return {
27
+ allowed: true,
28
+ remaining: Math.floor(bucket.tokens),
29
+ retryAfterMs: 0,
30
+ limit: this.config.maxTokens,
31
+ };
32
+ }
33
+ const tokensNeeded = tokens - bucket.tokens;
34
+ const retryAfterMs = Math.ceil((tokensNeeded / this.config.refillRate) * 1000);
35
+ return {
36
+ allowed: false,
37
+ remaining: 0,
38
+ retryAfterMs,
39
+ limit: this.config.maxTokens,
40
+ };
41
+ }
42
+ /**
43
+ * Check rate limit without consuming a token.
44
+ */
45
+ peek(key) {
46
+ const bucket = this.buckets.get(key);
47
+ if (!bucket) {
48
+ return {
49
+ allowed: true,
50
+ remaining: this.config.maxTokens,
51
+ retryAfterMs: 0,
52
+ limit: this.config.maxTokens,
53
+ };
54
+ }
55
+ const cloned = { ...bucket };
56
+ this.refill(cloned);
57
+ return {
58
+ allowed: cloned.tokens >= 1,
59
+ remaining: Math.floor(cloned.tokens),
60
+ retryAfterMs: cloned.tokens >= 1 ? 0 : Math.ceil((1 / this.config.refillRate) * 1000),
61
+ limit: this.config.maxTokens,
62
+ };
63
+ }
64
+ /**
65
+ * Reset the rate limiter for a specific key.
66
+ */
67
+ reset(key) {
68
+ this.buckets.delete(key);
69
+ }
70
+ /**
71
+ * Reset all rate limit buckets.
72
+ */
73
+ resetAll() {
74
+ this.buckets.clear();
75
+ }
76
+ /**
77
+ * Get current stats for monitoring.
78
+ */
79
+ getStats() {
80
+ return {
81
+ activeBuckets: this.buckets.size,
82
+ config: { ...this.config },
83
+ };
84
+ }
85
+ /**
86
+ * Stop the cleanup interval. Call when shutting down.
87
+ */
88
+ destroy() {
89
+ if (this.cleanupInterval) {
90
+ clearInterval(this.cleanupInterval);
91
+ this.cleanupInterval = null;
92
+ }
93
+ this.buckets.clear();
94
+ }
95
+ getOrCreateBucket(key) {
96
+ let bucket = this.buckets.get(key);
97
+ if (!bucket) {
98
+ bucket = {
99
+ tokens: this.config.maxTokens,
100
+ lastRefill: Date.now(),
101
+ };
102
+ this.buckets.set(key, bucket);
103
+ }
104
+ return bucket;
105
+ }
106
+ refill(bucket) {
107
+ const now = Date.now();
108
+ const elapsed = (now - bucket.lastRefill) / 1000;
109
+ const tokensToAdd = elapsed * this.config.refillRate;
110
+ bucket.tokens = Math.min(this.config.maxTokens, bucket.tokens + tokensToAdd);
111
+ bucket.lastRefill = now;
112
+ }
113
+ startCleanup() {
114
+ this.cleanupInterval = setInterval(() => {
115
+ const now = Date.now();
116
+ for (const [key, bucket] of this.buckets.entries()) {
117
+ if (now - bucket.lastRefill > this.bucketMaxIdleMs) {
118
+ this.buckets.delete(key);
119
+ }
120
+ }
121
+ }, this.bucketMaxIdleMs);
122
+ // Don't prevent process exit
123
+ if (this.cleanupInterval.unref) {
124
+ this.cleanupInterval.unref();
125
+ }
126
+ }
127
+ }
128
+ //# sourceMappingURL=RateLimiter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RateLimiter.js","sourceRoot":"","sources":["../../src/monitoring/RateLimiter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,131 @@
1
+ /**
2
+ * StructuredLogger - Production-grade JSON structured logging with trace context
3
+ *
4
+ * Outputs machine-parseable JSON log lines with standardized fields compatible
5
+ * with Grafana Loki, ELK Stack, CloudWatch Logs, and DataDog Logs.
6
+ *
7
+ * Key features:
8
+ * - JSON-structured output with consistent field ordering
9
+ * - OpenTelemetry trace context correlation (trace_id, span_id)
10
+ * - Log levels: debug, info, warn, error, fatal
11
+ * - Child loggers with inherited context
12
+ * - Configurable transports (stdout, stderr, callback)
13
+ * - Respects BLOK_LOG_LEVEL and CONSOLE_LOG_ACTIVE env vars
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * import { StructuredLogger } from "@blokjs/runner";
18
+ *
19
+ * const logger = new StructuredLogger({
20
+ * service: "blok-http",
21
+ * environment: "production",
22
+ * });
23
+ *
24
+ * logger.info("Workflow started", { workflow: "user-api", requestId: "abc" });
25
+ * // Output: {"timestamp":"2026-01-29T...","level":"info","service":"blok-http",
26
+ * // "message":"Workflow started","workflow":"user-api","requestId":"abc"}
27
+ *
28
+ * // Child logger with persistent fields
29
+ * const reqLogger = logger.child({ requestId: "abc", workflow: "user-api" });
30
+ * reqLogger.info("Node executed", { node: "db-query", durationMs: 42 });
31
+ * ```
32
+ */
33
+ import { type Span } from "@opentelemetry/api";
34
+ export type LogLevel = "debug" | "info" | "warn" | "error" | "fatal";
35
+ export interface StructuredLoggerConfig {
36
+ /** Service name */
37
+ service: string;
38
+ /** Deployment environment (defaults to NODE_ENV) */
39
+ environment?: string;
40
+ /** Minimum log level (defaults to BLOK_LOG_LEVEL env or "info") */
41
+ level?: LogLevel;
42
+ /** Custom transport function (defaults to console.log/console.error) */
43
+ transport?: (entry: LogEntry) => void;
44
+ /** Additional fields added to every log entry */
45
+ defaultFields?: Record<string, unknown>;
46
+ }
47
+ export interface LogEntry {
48
+ /** ISO 8601 timestamp */
49
+ timestamp: string;
50
+ /** Log level */
51
+ level: LogLevel;
52
+ /** Service name */
53
+ service: string;
54
+ /** Environment */
55
+ env: string;
56
+ /** Log message */
57
+ message: string;
58
+ /** OpenTelemetry trace ID (if available) */
59
+ trace_id?: string;
60
+ /** OpenTelemetry span ID (if available) */
61
+ span_id?: string;
62
+ /** Additional structured fields */
63
+ [key: string]: unknown;
64
+ }
65
+ export declare class StructuredLogger {
66
+ private config;
67
+ private transport;
68
+ private defaultFields;
69
+ private minLevelPriority;
70
+ /** Collected log entries (kept for getLogs() compatibility) */
71
+ private logs;
72
+ private maxLogBuffer;
73
+ constructor(config: StructuredLoggerConfig);
74
+ /**
75
+ * Create a child logger with additional persistent context fields.
76
+ * Useful for request-scoped logging.
77
+ */
78
+ child(fields: Record<string, unknown>): StructuredLogger;
79
+ /**
80
+ * Log at debug level.
81
+ */
82
+ debug(message: string, fields?: Record<string, unknown>): void;
83
+ /**
84
+ * Log at info level.
85
+ */
86
+ info(message: string, fields?: Record<string, unknown>): void;
87
+ /**
88
+ * Log at warn level.
89
+ */
90
+ warn(message: string, fields?: Record<string, unknown>): void;
91
+ /**
92
+ * Log at error level, optionally with an Error object.
93
+ */
94
+ error(message: string, fields?: Record<string, unknown> & {
95
+ error?: Error;
96
+ }): void;
97
+ /**
98
+ * Log at fatal level.
99
+ */
100
+ fatal(message: string, fields?: Record<string, unknown>): void;
101
+ /**
102
+ * Log with an explicit span for trace correlation.
103
+ * Use when you have a reference to the active span.
104
+ */
105
+ withSpan(span: Span, level: LogLevel, message: string, fields?: Record<string, unknown>): void;
106
+ /**
107
+ * Get collected log entries.
108
+ */
109
+ getLogs(): LogEntry[];
110
+ /**
111
+ * Get collected logs as newline-delimited JSON (NDJSON).
112
+ */
113
+ getLogsAsNDJSON(): string;
114
+ /**
115
+ * Clear the log buffer.
116
+ */
117
+ clearLogs(): void;
118
+ /**
119
+ * Get current minimum log level.
120
+ */
121
+ getLevel(): LogLevel;
122
+ /**
123
+ * Set minimum log level at runtime.
124
+ */
125
+ setLevel(level: LogLevel): void;
126
+ /**
127
+ * Check if a given level is enabled (at or above current minimum).
128
+ */
129
+ isLevelEnabled(level: LogLevel): boolean;
130
+ private write;
131
+ }