@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,640 @@
1
+ import { createRequire } from "node:module";
2
+ import { InMemoryRunStore } from "./InMemoryRunStore";
3
+ const esmRequire = createRequire(import.meta.url);
4
+ /**
5
+ * PostgreSQL-backed RunStore using the `pg` driver.
6
+ *
7
+ * Uses a hybrid approach for performance:
8
+ * - All reads and writes go through an in-memory store (sync, fast)
9
+ * - Writes are also queued for async persistence to PostgreSQL
10
+ * - On startup, recent data is loaded from PostgreSQL into memory
11
+ *
12
+ * This preserves the synchronous RunStore interface while providing
13
+ * durable storage that survives process restarts.
14
+ */
15
+ export class PostgresRunStore {
16
+ memory;
17
+ pool;
18
+ writeQueue = [];
19
+ flushing = false;
20
+ flushTimer = null;
21
+ initPromise;
22
+ closed = false;
23
+ constructor(config) {
24
+ this.memory = new InMemoryRunStore();
25
+ let Pool;
26
+ try {
27
+ const mod = "pg";
28
+ Pool = esmRequire(mod).Pool;
29
+ }
30
+ catch {
31
+ throw new Error("PostgresRunStore requires 'pg'. Install it:\n" + " npm install pg\n" + " # or\n" + " pnpm add pg");
32
+ }
33
+ this.pool = new Pool({
34
+ connectionString: config.connectionString,
35
+ max: config.max ?? 5,
36
+ ssl: config.ssl,
37
+ });
38
+ // Start async initialization in background
39
+ this.initPromise = this.initialize().catch((err) => {
40
+ console.error("[PostgresRunStore] Initialization failed:", err.message);
41
+ });
42
+ }
43
+ /**
44
+ * Returns a promise that resolves when the store is fully initialized
45
+ * (migrations run and data loaded from PostgreSQL).
46
+ * The store is usable before this resolves — it just won't have historical data.
47
+ */
48
+ ready() {
49
+ return this.initPromise;
50
+ }
51
+ // === Initialization ===
52
+ async initialize() {
53
+ await this.migrate();
54
+ await this.loadRecent();
55
+ this.startFlushLoop();
56
+ }
57
+ async migrate() {
58
+ const client = await this.pool.connect();
59
+ try {
60
+ await client.query(`
61
+ CREATE TABLE IF NOT EXISTS _trace_migrations (
62
+ version INTEGER PRIMARY KEY,
63
+ applied_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
64
+ )
65
+ `);
66
+ const { rows } = await client.query("SELECT version FROM _trace_migrations");
67
+ const applied = new Set(rows.map((r) => r.version));
68
+ const migrations = [
69
+ {
70
+ version: 1,
71
+ up: async () => {
72
+ await client.query(`
73
+ CREATE TABLE IF NOT EXISTS workflow_runs (
74
+ id TEXT PRIMARY KEY,
75
+ workflow_name TEXT NOT NULL,
76
+ workflow_path TEXT NOT NULL,
77
+ trigger_type TEXT NOT NULL,
78
+ trigger_summary TEXT NOT NULL,
79
+ status TEXT NOT NULL DEFAULT 'running',
80
+ started_at BIGINT NOT NULL,
81
+ finished_at BIGINT,
82
+ duration_ms BIGINT,
83
+ error_json JSONB,
84
+ tags_json JSONB DEFAULT '[]'::jsonb,
85
+ metadata_json JSONB,
86
+ node_count INTEGER NOT NULL DEFAULT 0,
87
+ completed_nodes INTEGER NOT NULL DEFAULT 0
88
+ )
89
+ `);
90
+ await client.query("CREATE INDEX IF NOT EXISTS idx_runs_workflow ON workflow_runs(workflow_name)");
91
+ await client.query("CREATE INDEX IF NOT EXISTS idx_runs_status ON workflow_runs(status)");
92
+ await client.query("CREATE INDEX IF NOT EXISTS idx_runs_started_at ON workflow_runs(started_at)");
93
+ await client.query(`
94
+ CREATE TABLE IF NOT EXISTS node_runs (
95
+ id TEXT PRIMARY KEY,
96
+ run_id TEXT NOT NULL REFERENCES workflow_runs(id) ON DELETE CASCADE,
97
+ node_name TEXT NOT NULL,
98
+ node_type TEXT NOT NULL,
99
+ runtime_kind TEXT,
100
+ status TEXT NOT NULL DEFAULT 'running',
101
+ started_at BIGINT NOT NULL,
102
+ finished_at BIGINT,
103
+ duration_ms BIGINT,
104
+ inputs_json JSONB,
105
+ outputs_json JSONB,
106
+ error_json JSONB,
107
+ parent_node_id TEXT,
108
+ depth INTEGER NOT NULL DEFAULT 0,
109
+ step_index INTEGER NOT NULL DEFAULT 0,
110
+ metrics_json JSONB
111
+ )
112
+ `);
113
+ await client.query("CREATE INDEX IF NOT EXISTS idx_nodes_run ON node_runs(run_id)");
114
+ await client.query(`
115
+ CREATE TABLE IF NOT EXISTS run_events (
116
+ id TEXT PRIMARY KEY,
117
+ type TEXT NOT NULL,
118
+ run_id TEXT NOT NULL REFERENCES workflow_runs(id) ON DELETE CASCADE,
119
+ workflow_name TEXT NOT NULL,
120
+ timestamp BIGINT NOT NULL,
121
+ node_name TEXT,
122
+ node_id TEXT,
123
+ payload_json JSONB
124
+ )
125
+ `);
126
+ await client.query("CREATE INDEX IF NOT EXISTS idx_events_run ON run_events(run_id)");
127
+ await client.query("CREATE INDEX IF NOT EXISTS idx_events_timestamp ON run_events(timestamp)");
128
+ await client.query(`
129
+ CREATE TABLE IF NOT EXISTS log_entries (
130
+ id TEXT PRIMARY KEY,
131
+ run_id TEXT NOT NULL REFERENCES workflow_runs(id) ON DELETE CASCADE,
132
+ node_id TEXT,
133
+ node_name TEXT,
134
+ level TEXT NOT NULL,
135
+ message TEXT NOT NULL,
136
+ timestamp BIGINT NOT NULL,
137
+ data_json JSONB
138
+ )
139
+ `);
140
+ await client.query("CREATE INDEX IF NOT EXISTS idx_logs_run ON log_entries(run_id)");
141
+ },
142
+ },
143
+ {
144
+ version: 2,
145
+ up: async () => {
146
+ await client.query(`
147
+ CREATE TABLE IF NOT EXISTS dashboards (
148
+ id TEXT PRIMARY KEY,
149
+ name TEXT NOT NULL,
150
+ description TEXT,
151
+ is_default BOOLEAN NOT NULL DEFAULT FALSE,
152
+ created_at BIGINT NOT NULL,
153
+ updated_at BIGINT NOT NULL,
154
+ widgets_json JSONB NOT NULL DEFAULT '[]'::jsonb
155
+ )
156
+ `);
157
+ },
158
+ },
159
+ ];
160
+ for (const m of migrations) {
161
+ if (!applied.has(m.version)) {
162
+ await client.query("BEGIN");
163
+ try {
164
+ await m.up();
165
+ await client.query("INSERT INTO _trace_migrations (version) VALUES ($1)", [m.version]);
166
+ await client.query("COMMIT");
167
+ }
168
+ catch (err) {
169
+ await client.query("ROLLBACK");
170
+ throw err;
171
+ }
172
+ }
173
+ }
174
+ }
175
+ finally {
176
+ client.release();
177
+ }
178
+ }
179
+ async loadRecent() {
180
+ const client = await this.pool.connect();
181
+ try {
182
+ // Load recent runs (last 1000)
183
+ const { rows: runRows } = await client.query("SELECT * FROM workflow_runs ORDER BY started_at DESC LIMIT 1000");
184
+ for (const row of runRows) {
185
+ this.memory.saveRun(this.rowToRun(row));
186
+ }
187
+ if (runRows.length > 0) {
188
+ const runIds = runRows.map((r) => r.id);
189
+ // Load node runs for loaded runs
190
+ const { rows: nodeRows } = await client.query("SELECT * FROM node_runs WHERE run_id = ANY($1) ORDER BY step_index", [runIds]);
191
+ for (const row of nodeRows) {
192
+ this.memory.saveNodeRun(this.rowToNodeRun(row));
193
+ }
194
+ // Load events
195
+ const { rows: eventRows } = await client.query("SELECT * FROM run_events WHERE run_id = ANY($1) ORDER BY timestamp", [runIds]);
196
+ for (const row of eventRows) {
197
+ this.memory.saveEvent(this.rowToEvent(row));
198
+ }
199
+ // Load logs
200
+ const { rows: logRows } = await client.query("SELECT * FROM log_entries WHERE run_id = ANY($1) ORDER BY timestamp", [runIds]);
201
+ for (const row of logRows) {
202
+ this.memory.saveLog(this.rowToLog(row));
203
+ }
204
+ }
205
+ // Load dashboards
206
+ const { rows: dashRows } = await client.query("SELECT * FROM dashboards ORDER BY updated_at DESC");
207
+ for (const row of dashRows) {
208
+ this.memory.saveDashboard(this.rowToDashboard(row));
209
+ }
210
+ }
211
+ finally {
212
+ client.release();
213
+ }
214
+ }
215
+ // === Writes (sync via memory + async queue to PG) ===
216
+ saveRun(run) {
217
+ this.memory.saveRun(run);
218
+ this.enqueueWrite(() => this.pool
219
+ .query(`INSERT INTO workflow_runs
220
+ (id, workflow_name, workflow_path, trigger_type, trigger_summary,
221
+ status, started_at, finished_at, duration_ms, error_json,
222
+ tags_json, metadata_json, node_count, completed_nodes)
223
+ VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14)
224
+ ON CONFLICT (id) DO UPDATE SET
225
+ status = EXCLUDED.status,
226
+ finished_at = EXCLUDED.finished_at,
227
+ duration_ms = EXCLUDED.duration_ms,
228
+ error_json = EXCLUDED.error_json,
229
+ tags_json = EXCLUDED.tags_json,
230
+ metadata_json = EXCLUDED.metadata_json,
231
+ completed_nodes = EXCLUDED.completed_nodes`, [
232
+ run.id,
233
+ run.workflowName,
234
+ run.workflowPath,
235
+ run.triggerType,
236
+ run.triggerSummary,
237
+ run.status,
238
+ run.startedAt,
239
+ run.finishedAt ?? null,
240
+ run.durationMs ?? null,
241
+ run.error ? JSON.stringify(run.error) : null,
242
+ JSON.stringify(run.tags || []),
243
+ run.metadata ? JSON.stringify(run.metadata) : null,
244
+ run.nodeCount,
245
+ run.completedNodes,
246
+ ])
247
+ .then(() => { }));
248
+ }
249
+ updateRun(runId, updates) {
250
+ this.memory.updateRun(runId, updates);
251
+ const setClauses = [];
252
+ const values = [];
253
+ let paramIdx = 1;
254
+ if (updates.status !== undefined) {
255
+ setClauses.push(`status = $${paramIdx++}`);
256
+ values.push(updates.status);
257
+ }
258
+ if (updates.finishedAt !== undefined) {
259
+ setClauses.push(`finished_at = $${paramIdx++}`);
260
+ values.push(updates.finishedAt);
261
+ }
262
+ if (updates.durationMs !== undefined) {
263
+ setClauses.push(`duration_ms = $${paramIdx++}`);
264
+ values.push(updates.durationMs);
265
+ }
266
+ if (updates.error !== undefined) {
267
+ setClauses.push(`error_json = $${paramIdx++}`);
268
+ values.push(JSON.stringify(updates.error));
269
+ }
270
+ if (updates.tags !== undefined) {
271
+ setClauses.push(`tags_json = $${paramIdx++}`);
272
+ values.push(JSON.stringify(updates.tags));
273
+ }
274
+ if (updates.completedNodes !== undefined) {
275
+ setClauses.push(`completed_nodes = $${paramIdx++}`);
276
+ values.push(updates.completedNodes);
277
+ }
278
+ if (updates.metadata !== undefined) {
279
+ setClauses.push(`metadata_json = $${paramIdx++}`);
280
+ values.push(JSON.stringify(updates.metadata));
281
+ }
282
+ if (setClauses.length === 0)
283
+ return;
284
+ values.push(runId);
285
+ this.enqueueWrite(() => this.pool
286
+ .query(`UPDATE workflow_runs SET ${setClauses.join(", ")} WHERE id = $${paramIdx}`, values)
287
+ .then(() => { }));
288
+ }
289
+ saveNodeRun(nodeRun) {
290
+ this.memory.saveNodeRun(nodeRun);
291
+ this.enqueueWrite(() => this.pool
292
+ .query(`INSERT INTO node_runs
293
+ (id, run_id, node_name, node_type, runtime_kind,
294
+ status, started_at, finished_at, duration_ms,
295
+ inputs_json, outputs_json, error_json,
296
+ parent_node_id, depth, step_index, metrics_json)
297
+ VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16)
298
+ ON CONFLICT (id) DO UPDATE SET
299
+ status = EXCLUDED.status,
300
+ finished_at = EXCLUDED.finished_at,
301
+ duration_ms = EXCLUDED.duration_ms,
302
+ outputs_json = EXCLUDED.outputs_json,
303
+ error_json = EXCLUDED.error_json,
304
+ metrics_json = EXCLUDED.metrics_json`, [
305
+ nodeRun.id,
306
+ nodeRun.runId,
307
+ nodeRun.nodeName,
308
+ nodeRun.nodeType,
309
+ nodeRun.runtimeKind ?? null,
310
+ nodeRun.status,
311
+ nodeRun.startedAt,
312
+ nodeRun.finishedAt ?? null,
313
+ nodeRun.durationMs ?? null,
314
+ nodeRun.inputs !== undefined ? JSON.stringify(nodeRun.inputs) : null,
315
+ nodeRun.outputs !== undefined ? JSON.stringify(nodeRun.outputs) : null,
316
+ nodeRun.error ? JSON.stringify(nodeRun.error) : null,
317
+ nodeRun.parentNodeId ?? null,
318
+ nodeRun.depth,
319
+ nodeRun.stepIndex,
320
+ nodeRun.metrics ? JSON.stringify(nodeRun.metrics) : null,
321
+ ])
322
+ .then(() => { }));
323
+ }
324
+ updateNodeRun(nodeRunId, updates) {
325
+ this.memory.updateNodeRun(nodeRunId, updates);
326
+ const setClauses = [];
327
+ const values = [];
328
+ let paramIdx = 1;
329
+ if (updates.status !== undefined) {
330
+ setClauses.push(`status = $${paramIdx++}`);
331
+ values.push(updates.status);
332
+ }
333
+ if (updates.finishedAt !== undefined) {
334
+ setClauses.push(`finished_at = $${paramIdx++}`);
335
+ values.push(updates.finishedAt);
336
+ }
337
+ if (updates.durationMs !== undefined) {
338
+ setClauses.push(`duration_ms = $${paramIdx++}`);
339
+ values.push(updates.durationMs);
340
+ }
341
+ if (updates.outputs !== undefined) {
342
+ setClauses.push(`outputs_json = $${paramIdx++}`);
343
+ values.push(JSON.stringify(updates.outputs));
344
+ }
345
+ if (updates.error !== undefined) {
346
+ setClauses.push(`error_json = $${paramIdx++}`);
347
+ values.push(JSON.stringify(updates.error));
348
+ }
349
+ if (updates.metrics !== undefined) {
350
+ setClauses.push(`metrics_json = $${paramIdx++}`);
351
+ values.push(JSON.stringify(updates.metrics));
352
+ }
353
+ if (setClauses.length === 0)
354
+ return;
355
+ values.push(nodeRunId);
356
+ this.enqueueWrite(() => this.pool.query(`UPDATE node_runs SET ${setClauses.join(", ")} WHERE id = $${paramIdx}`, values).then(() => { }));
357
+ }
358
+ saveEvent(event) {
359
+ this.memory.saveEvent(event);
360
+ this.enqueueWrite(() => this.pool
361
+ .query(`INSERT INTO run_events (id, type, run_id, workflow_name, timestamp, node_name, node_id, payload_json)
362
+ VALUES ($1, $2, $3, $4, $5, $6, $7, $8)
363
+ ON CONFLICT (id) DO NOTHING`, [
364
+ event.id,
365
+ event.type,
366
+ event.runId,
367
+ event.workflowName,
368
+ event.timestamp,
369
+ event.nodeName ?? null,
370
+ event.nodeId ?? null,
371
+ event.payload !== undefined ? JSON.stringify(event.payload) : null,
372
+ ])
373
+ .then(() => { }));
374
+ }
375
+ saveLog(entry) {
376
+ this.memory.saveLog(entry);
377
+ this.enqueueWrite(() => this.pool
378
+ .query(`INSERT INTO log_entries (id, run_id, node_id, node_name, level, message, timestamp, data_json)
379
+ VALUES ($1, $2, $3, $4, $5, $6, $7, $8)
380
+ ON CONFLICT (id) DO NOTHING`, [
381
+ entry.id,
382
+ entry.runId,
383
+ entry.nodeId ?? null,
384
+ entry.nodeName ?? null,
385
+ entry.level,
386
+ entry.message,
387
+ entry.timestamp,
388
+ entry.data ? JSON.stringify(entry.data) : null,
389
+ ])
390
+ .then(() => { }));
391
+ }
392
+ // === Reads (delegated to in-memory store) ===
393
+ getRun(runId) {
394
+ return this.memory.getRun(runId);
395
+ }
396
+ getRuns(opts) {
397
+ return this.memory.getRuns(opts);
398
+ }
399
+ getNodeRuns(runId) {
400
+ return this.memory.getNodeRuns(runId);
401
+ }
402
+ getNodeRun(nodeRunId) {
403
+ return this.memory.getNodeRun(nodeRunId);
404
+ }
405
+ getEvents(runId, since) {
406
+ return this.memory.getEvents(runId, since);
407
+ }
408
+ getLogs(runId, nodeId) {
409
+ return this.memory.getLogs(runId, nodeId);
410
+ }
411
+ // === Aggregations (delegated to in-memory store) ===
412
+ getWorkflowSummaries() {
413
+ return this.memory.getWorkflowSummaries();
414
+ }
415
+ getAllTags() {
416
+ return this.memory.getAllTags();
417
+ }
418
+ getActiveRunCount() {
419
+ return this.memory.getActiveRunCount();
420
+ }
421
+ getMetrics(workflow) {
422
+ return this.memory.getMetrics(workflow);
423
+ }
424
+ // === Dashboards (sync via memory + async queue to PG) ===
425
+ saveDashboard(dashboard) {
426
+ this.memory.saveDashboard(dashboard);
427
+ this.enqueueWrite(() => this.pool
428
+ .query(`INSERT INTO dashboards (id, name, description, is_default, created_at, updated_at, widgets_json)
429
+ VALUES ($1, $2, $3, $4, $5, $6, $7)
430
+ ON CONFLICT (id) DO UPDATE SET
431
+ name = EXCLUDED.name,
432
+ description = EXCLUDED.description,
433
+ is_default = EXCLUDED.is_default,
434
+ updated_at = EXCLUDED.updated_at,
435
+ widgets_json = EXCLUDED.widgets_json`, [
436
+ dashboard.id,
437
+ dashboard.name,
438
+ dashboard.description ?? null,
439
+ dashboard.isDefault,
440
+ dashboard.createdAt,
441
+ dashboard.updatedAt,
442
+ JSON.stringify(dashboard.widgets),
443
+ ])
444
+ .then(() => { }));
445
+ }
446
+ getDashboard(dashboardId) {
447
+ return this.memory.getDashboard(dashboardId);
448
+ }
449
+ listDashboards() {
450
+ return this.memory.listDashboards();
451
+ }
452
+ deleteDashboard(dashboardId) {
453
+ const result = this.memory.deleteDashboard(dashboardId);
454
+ if (result) {
455
+ this.enqueueWrite(() => this.pool.query("DELETE FROM dashboards WHERE id = $1", [dashboardId]).then(() => { }));
456
+ }
457
+ return result;
458
+ }
459
+ updateDashboard(dashboardId, updates) {
460
+ this.memory.updateDashboard(dashboardId, updates);
461
+ const setClauses = ["updated_at = $1"];
462
+ const values = [Date.now()];
463
+ let paramIdx = 2;
464
+ if (updates.name !== undefined) {
465
+ setClauses.push(`name = $${paramIdx++}`);
466
+ values.push(updates.name);
467
+ }
468
+ if (updates.description !== undefined) {
469
+ setClauses.push(`description = $${paramIdx++}`);
470
+ values.push(updates.description);
471
+ }
472
+ if (updates.isDefault !== undefined) {
473
+ setClauses.push(`is_default = $${paramIdx++}`);
474
+ values.push(updates.isDefault);
475
+ }
476
+ if (updates.widgets !== undefined) {
477
+ setClauses.push(`widgets_json = $${paramIdx++}`);
478
+ values.push(JSON.stringify(updates.widgets));
479
+ }
480
+ values.push(dashboardId);
481
+ this.enqueueWrite(() => this.pool.query(`UPDATE dashboards SET ${setClauses.join(", ")} WHERE id = $${paramIdx}`, values).then(() => { }));
482
+ }
483
+ // === Cleanup ===
484
+ clearAll() {
485
+ const count = this.memory.clearAll();
486
+ this.enqueueWrite(async () => {
487
+ await this.pool.query("DELETE FROM log_entries");
488
+ await this.pool.query("DELETE FROM run_events");
489
+ await this.pool.query("DELETE FROM node_runs");
490
+ await this.pool.query("DELETE FROM workflow_runs");
491
+ await this.pool.query("DELETE FROM dashboards");
492
+ });
493
+ return count;
494
+ }
495
+ deleteRunsBefore(timestamp) {
496
+ const deleted = this.memory.deleteRunsBefore(timestamp);
497
+ if (deleted > 0) {
498
+ this.enqueueWrite(() => this.pool
499
+ .query("DELETE FROM workflow_runs WHERE started_at < $1 AND status != 'running'", [timestamp])
500
+ .then(() => { }));
501
+ }
502
+ return deleted;
503
+ }
504
+ evictOldRuns(maxRuns) {
505
+ this.memory.evictOldRuns(maxRuns);
506
+ // PG eviction happens via deleteRunsBefore / retention policy
507
+ }
508
+ close() {
509
+ this.stopFlushLoop();
510
+ // Flush remaining writes synchronously-ish
511
+ this.flush().finally(() => {
512
+ this.pool.end().catch(() => { });
513
+ });
514
+ this.closed = true;
515
+ }
516
+ // === Write Queue ===
517
+ enqueueWrite(fn) {
518
+ if (this.closed)
519
+ return;
520
+ this.writeQueue.push(fn);
521
+ }
522
+ async flush() {
523
+ if (this.flushing || this.writeQueue.length === 0)
524
+ return;
525
+ this.flushing = true;
526
+ while (this.writeQueue.length > 0) {
527
+ const batch = this.writeQueue.splice(0, 50);
528
+ await Promise.allSettled(batch.map((fn) => fn().catch((err) => {
529
+ console.error("[PostgresRunStore] Write failed:", err.message);
530
+ })));
531
+ }
532
+ this.flushing = false;
533
+ }
534
+ startFlushLoop() {
535
+ if (this.flushTimer)
536
+ return;
537
+ this.flushTimer = setInterval(() => {
538
+ this.flush().catch(() => { });
539
+ }, 100);
540
+ // Ensure interval doesn't prevent process exit
541
+ if (this.flushTimer && typeof this.flushTimer === "object" && "unref" in this.flushTimer) {
542
+ this.flushTimer.unref();
543
+ }
544
+ }
545
+ stopFlushLoop() {
546
+ if (this.flushTimer) {
547
+ clearInterval(this.flushTimer);
548
+ this.flushTimer = null;
549
+ }
550
+ }
551
+ // === Row → Object Mappers ===
552
+ rowToRun(row) {
553
+ return {
554
+ id: row.id,
555
+ workflowName: row.workflow_name,
556
+ workflowPath: row.workflow_path,
557
+ triggerType: row.trigger_type,
558
+ triggerSummary: row.trigger_summary,
559
+ status: row.status,
560
+ startedAt: Number(row.started_at),
561
+ finishedAt: row.finished_at != null ? Number(row.finished_at) : undefined,
562
+ durationMs: row.duration_ms != null ? Number(row.duration_ms) : undefined,
563
+ error: row.error_json ? parseJson(row.error_json) : undefined,
564
+ tags: row.tags_json ? parseJson(row.tags_json) : undefined,
565
+ metadata: row.metadata_json ? parseJson(row.metadata_json) : undefined,
566
+ nodeCount: Number(row.node_count),
567
+ completedNodes: Number(row.completed_nodes),
568
+ };
569
+ }
570
+ rowToNodeRun(row) {
571
+ return {
572
+ id: row.id,
573
+ runId: row.run_id,
574
+ nodeName: row.node_name,
575
+ nodeType: row.node_type,
576
+ runtimeKind: row.runtime_kind ?? undefined,
577
+ status: row.status,
578
+ startedAt: Number(row.started_at),
579
+ finishedAt: row.finished_at != null ? Number(row.finished_at) : undefined,
580
+ durationMs: row.duration_ms != null ? Number(row.duration_ms) : undefined,
581
+ inputs: row.inputs_json ? parseJson(row.inputs_json) : undefined,
582
+ outputs: row.outputs_json ? parseJson(row.outputs_json) : undefined,
583
+ error: row.error_json ? parseJson(row.error_json) : undefined,
584
+ parentNodeId: row.parent_node_id ?? undefined,
585
+ depth: Number(row.depth),
586
+ stepIndex: Number(row.step_index),
587
+ metrics: row.metrics_json ? parseJson(row.metrics_json) : undefined,
588
+ };
589
+ }
590
+ rowToEvent(row) {
591
+ return {
592
+ id: row.id,
593
+ type: row.type,
594
+ runId: row.run_id,
595
+ workflowName: row.workflow_name,
596
+ timestamp: Number(row.timestamp),
597
+ nodeName: row.node_name ?? undefined,
598
+ nodeId: row.node_id ?? undefined,
599
+ payload: row.payload_json ? parseJson(row.payload_json) : undefined,
600
+ };
601
+ }
602
+ rowToLog(row) {
603
+ return {
604
+ id: row.id,
605
+ runId: row.run_id,
606
+ nodeId: row.node_id ?? undefined,
607
+ nodeName: row.node_name ?? undefined,
608
+ level: row.level,
609
+ message: row.message,
610
+ timestamp: Number(row.timestamp),
611
+ data: row.data_json ? parseJson(row.data_json) : undefined,
612
+ };
613
+ }
614
+ rowToDashboard(row) {
615
+ return {
616
+ id: row.id,
617
+ name: row.name,
618
+ description: row.description ?? undefined,
619
+ isDefault: row.is_default === true,
620
+ createdAt: Number(row.created_at),
621
+ updatedAt: Number(row.updated_at),
622
+ widgets: row.widgets_json ? parseJson(row.widgets_json) : [],
623
+ };
624
+ }
625
+ }
626
+ /**
627
+ * Parse JSON that may already be an object (pg driver auto-parses JSONB).
628
+ */
629
+ function parseJson(value) {
630
+ if (typeof value === "string") {
631
+ try {
632
+ return JSON.parse(value);
633
+ }
634
+ catch {
635
+ return value;
636
+ }
637
+ }
638
+ return value;
639
+ }
640
+ //# sourceMappingURL=PostgresRunStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PostgresRunStore.js","sourceRoot":"","sources":["../../src/tracing/PostgresRunStore.ts"],"names":[],"mappings":"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"}