@blokjs/runner 0.6.21 → 0.7.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 (167) hide show
  1. package/dist/Blok.d.ts +2 -0
  2. package/dist/Blok.js +42 -110
  3. package/dist/Blok.js.map +1 -1
  4. package/dist/DefaultLogger.d.ts +13 -0
  5. package/dist/DefaultLogger.js +25 -0
  6. package/dist/DefaultLogger.js.map +1 -1
  7. package/dist/RunnerSteps.d.ts +23 -0
  8. package/dist/RunnerSteps.js +128 -87
  9. package/dist/RunnerSteps.js.map +1 -1
  10. package/dist/SubworkflowNode.js +19 -0
  11. package/dist/SubworkflowNode.js.map +1 -1
  12. package/dist/TriggerBase.d.ts +12 -0
  13. package/dist/TriggerBase.js +216 -181
  14. package/dist/TriggerBase.js.map +1 -1
  15. package/dist/adapters/grpc/GrpcRuntimeAdapter.d.ts +9 -0
  16. package/dist/adapters/grpc/GrpcRuntimeAdapter.js +76 -6
  17. package/dist/adapters/grpc/GrpcRuntimeAdapter.js.map +1 -1
  18. package/dist/index.d.ts +4 -39
  19. package/dist/index.js +7 -32
  20. package/dist/index.js.map +1 -1
  21. package/dist/monitoring/JanitorMetrics.d.ts +3 -0
  22. package/dist/monitoring/JanitorMetrics.js +11 -0
  23. package/dist/monitoring/JanitorMetrics.js.map +1 -1
  24. package/dist/monitoring/ProcessErrorMetrics.d.ts +32 -0
  25. package/dist/monitoring/ProcessErrorMetrics.js +43 -0
  26. package/dist/monitoring/ProcessErrorMetrics.js.map +1 -0
  27. package/dist/monitoring/PrometheusMetricsBridge.d.ts +7 -0
  28. package/dist/monitoring/PrometheusMetricsBridge.js +8 -2
  29. package/dist/monitoring/PrometheusMetricsBridge.js.map +1 -1
  30. package/dist/monitoring/SubworkflowMetrics.d.ts +25 -0
  31. package/dist/monitoring/SubworkflowMetrics.js +38 -0
  32. package/dist/monitoring/SubworkflowMetrics.js.map +1 -0
  33. package/dist/observability/ErrorSink.d.ts +23 -0
  34. package/dist/observability/ErrorSink.js +32 -0
  35. package/dist/observability/ErrorSink.js.map +1 -0
  36. package/dist/observability/SentryIntegration.d.ts +9 -0
  37. package/dist/observability/SentryIntegration.js +31 -0
  38. package/dist/observability/SentryIntegration.js.map +1 -0
  39. package/dist/scheduling/DebounceCoordinator.d.ts +7 -53
  40. package/dist/scheduling/DebounceCoordinator.js +8 -207
  41. package/dist/scheduling/DebounceCoordinator.js.map +1 -1
  42. package/dist/tracing/InMemoryRunStore.d.ts +5 -1
  43. package/dist/tracing/InMemoryRunStore.js +14 -0
  44. package/dist/tracing/InMemoryRunStore.js.map +1 -1
  45. package/dist/tracing/Janitor.js +3 -0
  46. package/dist/tracing/Janitor.js.map +1 -1
  47. package/dist/tracing/PostgresRunStore.d.ts +4 -1
  48. package/dist/tracing/PostgresRunStore.js +73 -3
  49. package/dist/tracing/PostgresRunStore.js.map +1 -1
  50. package/dist/tracing/RunStore.d.ts +17 -1
  51. package/dist/tracing/RunTracker.d.ts +13 -34
  52. package/dist/tracing/RunTracker.js +62 -32
  53. package/dist/tracing/RunTracker.js.map +1 -1
  54. package/dist/tracing/SqliteRunStore.d.ts +4 -1
  55. package/dist/tracing/SqliteRunStore.js +60 -0
  56. package/dist/tracing/SqliteRunStore.js.map +1 -1
  57. package/dist/tracing/TraceRouter.d.ts +13 -0
  58. package/dist/tracing/TraceRouter.js +43 -11
  59. package/dist/tracing/TraceRouter.js.map +1 -1
  60. package/dist/tracing/TracingLogger.js +22 -0
  61. package/dist/tracing/TracingLogger.js.map +1 -1
  62. package/dist/tracing/createStore.js +51 -22
  63. package/dist/tracing/createStore.js.map +1 -1
  64. package/dist/tracing/types.d.ts +22 -0
  65. package/dist/types/GlobalOptions.d.ts +5 -7
  66. package/dist/workflow/WorkflowNormalizer.js +63 -0
  67. package/dist/workflow/WorkflowNormalizer.js.map +1 -1
  68. package/package.json +7 -4
  69. package/dist/cache/NodeResultCache.d.ts +0 -286
  70. package/dist/cache/NodeResultCache.js +0 -506
  71. package/dist/cache/NodeResultCache.js.map +0 -1
  72. package/dist/cache/index.d.ts +0 -1
  73. package/dist/cache/index.js +0 -2
  74. package/dist/cache/index.js.map +0 -1
  75. package/dist/concurrency/ConcurrencyBackend.d.ts +0 -61
  76. package/dist/concurrency/ConcurrencyBackend.js +0 -20
  77. package/dist/concurrency/ConcurrencyBackend.js.map +0 -1
  78. package/dist/concurrency/NatsKvConcurrencyBackend.d.ts +0 -64
  79. package/dist/concurrency/NatsKvConcurrencyBackend.js +0 -310
  80. package/dist/concurrency/NatsKvConcurrencyBackend.js.map +0 -1
  81. package/dist/concurrency/RedisConcurrencyBackend.d.ts +0 -64
  82. package/dist/concurrency/RedisConcurrencyBackend.js +0 -374
  83. package/dist/concurrency/RedisConcurrencyBackend.js.map +0 -1
  84. package/dist/concurrency/createConcurrencyBackend.d.ts +0 -24
  85. package/dist/concurrency/createConcurrencyBackend.js +0 -38
  86. package/dist/concurrency/createConcurrencyBackend.js.map +0 -1
  87. package/dist/graphql/GraphQLSchemaGenerator.d.ts +0 -129
  88. package/dist/graphql/GraphQLSchemaGenerator.js +0 -425
  89. package/dist/graphql/GraphQLSchemaGenerator.js.map +0 -1
  90. package/dist/integrations/APMIntegration.d.ts +0 -141
  91. package/dist/integrations/APMIntegration.js +0 -212
  92. package/dist/integrations/APMIntegration.js.map +0 -1
  93. package/dist/integrations/AzureMonitorIntegration.d.ts +0 -118
  94. package/dist/integrations/AzureMonitorIntegration.js +0 -254
  95. package/dist/integrations/AzureMonitorIntegration.js.map +0 -1
  96. package/dist/integrations/CloudWatchIntegration.d.ts +0 -135
  97. package/dist/integrations/CloudWatchIntegration.js +0 -293
  98. package/dist/integrations/CloudWatchIntegration.js.map +0 -1
  99. package/dist/integrations/SentryIntegration.d.ts +0 -153
  100. package/dist/integrations/SentryIntegration.js +0 -200
  101. package/dist/integrations/SentryIntegration.js.map +0 -1
  102. package/dist/integrations/index.d.ts +0 -19
  103. package/dist/integrations/index.js +0 -16
  104. package/dist/integrations/index.js.map +0 -1
  105. package/dist/marketplace/RuntimeAutoScaler.d.ts +0 -148
  106. package/dist/marketplace/RuntimeAutoScaler.js +0 -366
  107. package/dist/marketplace/RuntimeAutoScaler.js.map +0 -1
  108. package/dist/marketplace/RuntimeCatalog.d.ts +0 -180
  109. package/dist/marketplace/RuntimeCatalog.js +0 -339
  110. package/dist/marketplace/RuntimeCatalog.js.map +0 -1
  111. package/dist/marketplace/RuntimeDiscovery.d.ts +0 -86
  112. package/dist/marketplace/RuntimeDiscovery.js +0 -231
  113. package/dist/marketplace/RuntimeDiscovery.js.map +0 -1
  114. package/dist/marketplace/RuntimeHealthMonitor.d.ts +0 -100
  115. package/dist/marketplace/RuntimeHealthMonitor.js +0 -241
  116. package/dist/marketplace/RuntimeHealthMonitor.js.map +0 -1
  117. package/dist/marketplace/RuntimeMetricsDashboard.d.ts +0 -113
  118. package/dist/marketplace/RuntimeMetricsDashboard.js +0 -293
  119. package/dist/marketplace/RuntimeMetricsDashboard.js.map +0 -1
  120. package/dist/openapi/OpenAPIGenerator.d.ts +0 -192
  121. package/dist/openapi/OpenAPIGenerator.js +0 -378
  122. package/dist/openapi/OpenAPIGenerator.js.map +0 -1
  123. package/dist/openapi/index.d.ts +0 -20
  124. package/dist/openapi/index.js +0 -20
  125. package/dist/openapi/index.js.map +0 -1
  126. package/dist/scheduling/DebounceBackend.d.ts +0 -108
  127. package/dist/scheduling/DebounceBackend.js +0 -23
  128. package/dist/scheduling/DebounceBackend.js.map +0 -1
  129. package/dist/scheduling/NatsKvDebounceBackend.d.ts +0 -53
  130. package/dist/scheduling/NatsKvDebounceBackend.js +0 -334
  131. package/dist/scheduling/NatsKvDebounceBackend.js.map +0 -1
  132. package/dist/scheduling/RedisDebounceBackend.d.ts +0 -49
  133. package/dist/scheduling/RedisDebounceBackend.js +0 -356
  134. package/dist/scheduling/RedisDebounceBackend.js.map +0 -1
  135. package/dist/scheduling/createDebounceBackend.d.ts +0 -25
  136. package/dist/scheduling/createDebounceBackend.js +0 -39
  137. package/dist/scheduling/createDebounceBackend.js.map +0 -1
  138. package/dist/security/ABAC.d.ts +0 -224
  139. package/dist/security/ABAC.js +0 -380
  140. package/dist/security/ABAC.js.map +0 -1
  141. package/dist/security/AuditLogger.d.ts +0 -242
  142. package/dist/security/AuditLogger.js +0 -317
  143. package/dist/security/AuditLogger.js.map +0 -1
  144. package/dist/security/AuthMiddleware.d.ts +0 -162
  145. package/dist/security/AuthMiddleware.js +0 -289
  146. package/dist/security/AuthMiddleware.js.map +0 -1
  147. package/dist/security/EncryptionAtRest.d.ts +0 -206
  148. package/dist/security/EncryptionAtRest.js +0 -236
  149. package/dist/security/EncryptionAtRest.js.map +0 -1
  150. package/dist/security/OAuthProvider.d.ts +0 -334
  151. package/dist/security/OAuthProvider.js +0 -719
  152. package/dist/security/OAuthProvider.js.map +0 -1
  153. package/dist/security/PIIDetector.d.ts +0 -233
  154. package/dist/security/PIIDetector.js +0 -354
  155. package/dist/security/PIIDetector.js.map +0 -1
  156. package/dist/security/RBAC.d.ts +0 -143
  157. package/dist/security/RBAC.js +0 -285
  158. package/dist/security/RBAC.js.map +0 -1
  159. package/dist/security/SecretManager.d.ts +0 -652
  160. package/dist/security/SecretManager.js +0 -1147
  161. package/dist/security/SecretManager.js.map +0 -1
  162. package/dist/security/TLSConfig.d.ts +0 -305
  163. package/dist/security/TLSConfig.js +0 -550
  164. package/dist/security/TLSConfig.js.map +0 -1
  165. package/dist/security/index.d.ts +0 -81
  166. package/dist/security/index.js +0 -82
  167. package/dist/security/index.js.map +0 -1
@@ -1,366 +0,0 @@
1
- /**
2
- * RuntimeAutoScaler - Automatic Container Pool Scaling for Blok Runtimes
3
- *
4
- * Monitors runtime execution load and automatically adjusts Docker container
5
- * pool sizes based on configurable scaling policies. Tracks metrics like RPS,
6
- * p95 latency, and CPU utilization to make informed scaling decisions.
7
- *
8
- * Follows patterns from DockerRuntimeAdapter (pool management, health checks)
9
- * and TriggerMetricsCollector (metrics tracking, percentile calculations).
10
- */
11
- const DEFAULT_POLICY = {
12
- minInstances: 1,
13
- maxInstances: 10,
14
- targetCpuUtilization: 70,
15
- targetLatencyMs: 200,
16
- targetRps: 100,
17
- scaleUpCooldownMs: 60_000,
18
- scaleDownCooldownMs: 300_000,
19
- scaleUpStep: 1,
20
- scaleDownStep: 1,
21
- };
22
- const DEFAULT_CONFIG = {
23
- evaluationIntervalMs: 30_000,
24
- enabled: true,
25
- dryRun: false,
26
- };
27
- const MAX_HISTORY_DECISIONS = 500;
28
- /**
29
- * RuntimeAutoScaler monitors runtime execution load and automatically
30
- * adjusts Docker container pool sizes based on scaling policies.
31
- *
32
- * It periodically evaluates metrics from the RuntimeMetricsDashboard and
33
- * produces ScalingDecisions that indicate whether to scale up, scale down,
34
- * or maintain the current number of instances.
35
- */
36
- export class RuntimeAutoScaler {
37
- policies = new Map();
38
- history = new Map();
39
- listeners = [];
40
- interval;
41
- dashboard;
42
- config;
43
- constructor(dashboard, config) {
44
- this.dashboard = dashboard;
45
- this.config = {
46
- evaluationIntervalMs: config?.evaluationIntervalMs ?? DEFAULT_CONFIG.evaluationIntervalMs,
47
- enabled: config?.enabled ?? DEFAULT_CONFIG.enabled,
48
- dryRun: config?.dryRun ?? DEFAULT_CONFIG.dryRun,
49
- };
50
- }
51
- /**
52
- * Set a scaling policy for a runtime.
53
- * Merges provided values with defaults.
54
- */
55
- setPolicy(policy) {
56
- this.policies.set(policy.runtime, {
57
- ...DEFAULT_POLICY,
58
- ...policy,
59
- });
60
- // Initialize history for this runtime if not present
61
- if (!this.history.has(policy.runtime)) {
62
- this.history.set(policy.runtime, {
63
- decisions: [],
64
- scaleUpCount: 0,
65
- scaleDownCount: 0,
66
- lastScaleUp: 0,
67
- lastScaleDown: 0,
68
- });
69
- }
70
- }
71
- /**
72
- * Get the scaling policy for a runtime.
73
- */
74
- getPolicy(runtime) {
75
- return this.policies.get(runtime);
76
- }
77
- /**
78
- * Remove the scaling policy for a runtime.
79
- */
80
- removePolicy(runtime) {
81
- this.policies.delete(runtime);
82
- }
83
- /**
84
- * Begin periodic evaluation of all runtime scaling policies.
85
- */
86
- start() {
87
- if (!this.config.enabled) {
88
- return;
89
- }
90
- if (this.interval) {
91
- clearInterval(this.interval);
92
- }
93
- this.interval = setInterval(() => {
94
- this.evaluateAll();
95
- }, this.config.evaluationIntervalMs);
96
- }
97
- /**
98
- * Stop periodic evaluation.
99
- */
100
- stop() {
101
- if (this.interval) {
102
- clearInterval(this.interval);
103
- this.interval = undefined;
104
- }
105
- }
106
- /**
107
- * Evaluate a single runtime against its scaling policy.
108
- *
109
- * The evaluation logic:
110
- * 1. Get current metrics from RuntimeMetricsDashboard
111
- * 2. Get the scaling policy for this runtime
112
- * 3. Check cooldown periods (don't scale too frequently)
113
- * 4. Determine desired instances based on RPS, latency, and CPU thresholds
114
- * 5. Clamp desired between minInstances and maxInstances
115
- * 6. Create ScalingDecision with descriptive reason
116
- * 7. Record in history and notify listeners
117
- */
118
- evaluate(runtime) {
119
- const policy = this.policies.get(runtime);
120
- if (!policy) {
121
- return this.createNoChangeDecision(runtime, 0, "No scaling policy configured for this runtime");
122
- }
123
- const metrics = this.collectMetrics(runtime);
124
- const history = this.getOrCreateHistory(runtime);
125
- const now = Date.now();
126
- // Determine current instance count from instance utilization and max
127
- const currentInstances = Math.max(policy.minInstances, Math.round((metrics.instanceUtilization / 100) * policy.maxInstances) || policy.minInstances);
128
- let desiredInstances = currentInstances;
129
- let action = "no_change";
130
- let reason = "All metrics within acceptable thresholds";
131
- // Check if scale up is needed
132
- const rpsExceeded = metrics.currentRps > policy.targetRps * currentInstances;
133
- const latencyExceeded = metrics.currentLatencyP95 > policy.targetLatencyMs;
134
- const cpuExceeded = metrics.currentCpuUtilization > policy.targetCpuUtilization;
135
- if (rpsExceeded || latencyExceeded) {
136
- // Check scale-up cooldown
137
- const timeSinceLastScaleUp = now - history.lastScaleUp;
138
- if (timeSinceLastScaleUp < policy.scaleUpCooldownMs && history.lastScaleUp > 0) {
139
- reason = `Scale up needed but in cooldown (${Math.round((policy.scaleUpCooldownMs - timeSinceLastScaleUp) / 1000)}s remaining)`;
140
- }
141
- else {
142
- desiredInstances = currentInstances + policy.scaleUpStep;
143
- action = "scale_up";
144
- const reasons = [];
145
- if (rpsExceeded) {
146
- reasons.push(`RPS ${metrics.currentRps.toFixed(1)} exceeds target ${policy.targetRps * currentInstances} (${policy.targetRps}/instance * ${currentInstances})`);
147
- }
148
- if (latencyExceeded) {
149
- reasons.push(`p95 latency ${metrics.currentLatencyP95.toFixed(1)}ms exceeds target ${policy.targetLatencyMs}ms`);
150
- }
151
- if (cpuExceeded) {
152
- reasons.push(`CPU utilization ${metrics.currentCpuUtilization.toFixed(1)}% exceeds target ${policy.targetCpuUtilization}%`);
153
- }
154
- reason = `Scaling up: ${reasons.join("; ")}`;
155
- }
156
- }
157
- else {
158
- // Check if scale down is possible
159
- const canScaleDown = currentInstances > policy.minInstances;
160
- const rpsAllowsScaleDown = metrics.currentRps < policy.targetRps * (currentInstances - 1);
161
- const latencyIsGood = metrics.currentLatencyP95 <= policy.targetLatencyMs;
162
- if (canScaleDown && rpsAllowsScaleDown && latencyIsGood) {
163
- // Check scale-down cooldown
164
- const timeSinceLastScaleDown = now - history.lastScaleDown;
165
- if (timeSinceLastScaleDown < policy.scaleDownCooldownMs && history.lastScaleDown > 0) {
166
- reason = `Scale down possible but in cooldown (${Math.round((policy.scaleDownCooldownMs - timeSinceLastScaleDown) / 1000)}s remaining)`;
167
- }
168
- else {
169
- desiredInstances = currentInstances - policy.scaleDownStep;
170
- action = "scale_down";
171
- reason = `Scaling down: RPS ${metrics.currentRps.toFixed(1)} is below threshold ${policy.targetRps * (currentInstances - 1)} for ${currentInstances - 1} instances, latency ${metrics.currentLatencyP95.toFixed(1)}ms is within target ${policy.targetLatencyMs}ms`;
172
- }
173
- }
174
- }
175
- // Clamp desired instances between min and max
176
- desiredInstances = Math.max(policy.minInstances, Math.min(policy.maxInstances, desiredInstances));
177
- // If clamping changed the desired count back to current, it's a no_change
178
- if (desiredInstances === currentInstances) {
179
- action = "no_change";
180
- if (desiredInstances >= policy.maxInstances && (rpsExceeded || latencyExceeded)) {
181
- reason = `At maximum capacity (${policy.maxInstances} instances), cannot scale further`;
182
- }
183
- }
184
- const decision = {
185
- runtime,
186
- action,
187
- currentInstances,
188
- desiredInstances,
189
- reason,
190
- timestamp: now,
191
- metrics,
192
- };
193
- // Record in history
194
- this.recordDecision(runtime, decision);
195
- // Notify listeners
196
- this.notifyListeners(decision);
197
- return decision;
198
- }
199
- /**
200
- * Evaluate all runtimes that have scaling policies.
201
- */
202
- evaluateAll() {
203
- const decisions = [];
204
- for (const runtime of this.policies.keys()) {
205
- const decision = this.evaluate(runtime);
206
- decisions.push(decision);
207
- }
208
- return decisions;
209
- }
210
- /**
211
- * Get the scaling history for a runtime.
212
- */
213
- getHistory(runtime) {
214
- return this.history.get(runtime);
215
- }
216
- /**
217
- * Get scaling history for all runtimes.
218
- */
219
- getAllHistory() {
220
- return new Map(this.history);
221
- }
222
- /**
223
- * Subscribe to scaling decisions. Returns an unsubscribe function.
224
- */
225
- onScalingDecision(listener) {
226
- this.listeners.push(listener);
227
- return () => {
228
- const index = this.listeners.indexOf(listener);
229
- if (index !== -1) {
230
- this.listeners.splice(index, 1);
231
- }
232
- };
233
- }
234
- /**
235
- * Suggest a scaling policy based on current runtime metrics.
236
- * Uses observed metrics to derive sensible defaults.
237
- */
238
- getRecommendedPolicy(runtime) {
239
- const metrics = this.collectMetrics(runtime);
240
- // Base recommendations on current observed load
241
- const recommendedTargetRps = metrics.currentRps > 0 ? Math.ceil(metrics.currentRps * 1.5) : DEFAULT_POLICY.targetRps;
242
- const recommendedTargetLatency = metrics.currentLatencyP95 > 0 ? Math.ceil(metrics.currentLatencyP95 * 1.25) : DEFAULT_POLICY.targetLatencyMs;
243
- const recommendedMinInstances = metrics.currentRps > 0
244
- ? Math.max(1, Math.ceil(metrics.currentRps / recommendedTargetRps))
245
- : DEFAULT_POLICY.minInstances;
246
- const recommendedMaxInstances = Math.max(recommendedMinInstances * 3, DEFAULT_POLICY.maxInstances);
247
- return {
248
- runtime,
249
- minInstances: recommendedMinInstances,
250
- maxInstances: recommendedMaxInstances,
251
- targetCpuUtilization: DEFAULT_POLICY.targetCpuUtilization,
252
- targetLatencyMs: recommendedTargetLatency,
253
- targetRps: recommendedTargetRps,
254
- scaleUpCooldownMs: DEFAULT_POLICY.scaleUpCooldownMs,
255
- scaleDownCooldownMs: DEFAULT_POLICY.scaleDownCooldownMs,
256
- scaleUpStep: DEFAULT_POLICY.scaleUpStep,
257
- scaleDownStep: DEFAULT_POLICY.scaleDownStep,
258
- };
259
- }
260
- /**
261
- * Clear all history, policies, and state.
262
- */
263
- reset() {
264
- this.stop();
265
- this.policies.clear();
266
- this.history.clear();
267
- this.listeners = [];
268
- }
269
- /**
270
- * Collect current scaling metrics from the RuntimeMetricsDashboard.
271
- */
272
- collectMetrics(runtime) {
273
- const executionMetrics = this.dashboard.getMetrics(runtime);
274
- if (!executionMetrics) {
275
- return {
276
- currentRps: 0,
277
- currentLatencyP95: 0,
278
- currentCpuUtilization: 0,
279
- instanceUtilization: 0,
280
- };
281
- }
282
- const policy = this.policies.get(runtime);
283
- const maxInstances = policy?.maxInstances ?? DEFAULT_POLICY.maxInstances;
284
- const minInstances = policy?.minInstances ?? DEFAULT_POLICY.minInstances;
285
- // Estimate current instance count from total executions and RPS
286
- // In the absence of a direct instance count, use minInstances as the baseline
287
- const currentInstances = Math.max(minInstances, 1);
288
- return {
289
- currentRps: executionMetrics.throughput.requestsPerSecond,
290
- currentLatencyP95: executionMetrics.latency.p95,
291
- currentCpuUtilization: executionMetrics.resourceUsage.avgCpuMs > 0
292
- ? Math.min(100, (executionMetrics.resourceUsage.avgCpuMs / 1000) * 100)
293
- : 0,
294
- instanceUtilization: maxInstances > 0 ? (currentInstances / maxInstances) * 100 : 0,
295
- };
296
- }
297
- /**
298
- * Create a no-change decision with the given reason.
299
- */
300
- createNoChangeDecision(runtime, currentInstances, reason) {
301
- return {
302
- runtime,
303
- action: "no_change",
304
- currentInstances,
305
- desiredInstances: currentInstances,
306
- reason,
307
- timestamp: Date.now(),
308
- metrics: {
309
- currentRps: 0,
310
- currentLatencyP95: 0,
311
- currentCpuUtilization: 0,
312
- instanceUtilization: 0,
313
- },
314
- };
315
- }
316
- /**
317
- * Get or create history entry for a runtime.
318
- */
319
- getOrCreateHistory(runtime) {
320
- let history = this.history.get(runtime);
321
- if (!history) {
322
- history = {
323
- decisions: [],
324
- scaleUpCount: 0,
325
- scaleDownCount: 0,
326
- lastScaleUp: 0,
327
- lastScaleDown: 0,
328
- };
329
- this.history.set(runtime, history);
330
- }
331
- return history;
332
- }
333
- /**
334
- * Record a scaling decision in the history.
335
- */
336
- recordDecision(runtime, decision) {
337
- const history = this.getOrCreateHistory(runtime);
338
- history.decisions.push(decision);
339
- // Prune old decisions to avoid unbounded growth
340
- if (history.decisions.length > MAX_HISTORY_DECISIONS) {
341
- history.decisions = history.decisions.slice(-MAX_HISTORY_DECISIONS / 2);
342
- }
343
- if (decision.action === "scale_up") {
344
- history.scaleUpCount++;
345
- history.lastScaleUp = decision.timestamp;
346
- }
347
- else if (decision.action === "scale_down") {
348
- history.scaleDownCount++;
349
- history.lastScaleDown = decision.timestamp;
350
- }
351
- }
352
- /**
353
- * Notify all registered listeners of a scaling decision.
354
- */
355
- notifyListeners(decision) {
356
- for (const listener of this.listeners) {
357
- try {
358
- listener(decision);
359
- }
360
- catch {
361
- // Listener errors should not break the evaluation loop
362
- }
363
- }
364
- }
365
- }
366
- //# sourceMappingURL=RuntimeAutoScaler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RuntimeAutoScaler.js","sourceRoot":"","sources":["../../src/marketplace/RuntimeAutoScaler.ts"],"names":[],"mappings":"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"}
@@ -1,180 +0,0 @@
1
- /**
2
- * RuntimeCatalog - Central Registry for Runtime Packages
3
- *
4
- * Manages runtime package metadata, search, versioning, and statistics
5
- * for the Blok marketplace. Supports publishing, discovery, and filtering
6
- * of runtime packages across all supported language runtimes.
7
- */
8
- import type { RuntimeKind } from "../adapters/RuntimeAdapter";
9
- export interface RuntimeNodeInfo {
10
- name: string;
11
- description: string;
12
- inputs: Record<string, string>;
13
- outputs: Record<string, string>;
14
- }
15
- export interface RuntimePackageManifest {
16
- name: string;
17
- version: string;
18
- runtime: RuntimeKind;
19
- description: string;
20
- author: string;
21
- license: string;
22
- repository?: string;
23
- tags: string[];
24
- protocols: ("http" | "grpc" | "both")[];
25
- dockerImage?: string;
26
- minBlokVersion?: string;
27
- /**
28
- * Minimum runtime versions required by this package.
29
- * Keys are runtime kind identifiers, values are semver constraints.
30
- * @example { python3: ">=3.11.0", go: ">=1.21.0" }
31
- */
32
- runtimeVersions?: Partial<Record<string, string>>;
33
- nodeCount: number;
34
- nodes: RuntimeNodeInfo[];
35
- createdAt: number;
36
- updatedAt: number;
37
- downloads: number;
38
- rating: number;
39
- verified: boolean;
40
- }
41
- export interface CatalogSearchOptions {
42
- query?: string;
43
- runtime?: RuntimeKind;
44
- tags?: string[];
45
- verified?: boolean;
46
- sortBy?: "name" | "downloads" | "rating" | "updated";
47
- sortOrder?: "asc" | "desc";
48
- limit?: number;
49
- offset?: number;
50
- }
51
- export interface CatalogSearchResult {
52
- packages: RuntimePackageManifest[];
53
- total: number;
54
- page: number;
55
- pageSize: number;
56
- }
57
- export interface CatalogStats {
58
- totalPackages: number;
59
- totalVersions: number;
60
- packagesByRuntime: Record<string, number>;
61
- totalDownloads: number;
62
- verifiedCount: number;
63
- averageRating: number;
64
- }
65
- export declare class RuntimeCatalog {
66
- private packages;
67
- constructor();
68
- /**
69
- * Publish a runtime package to the catalog.
70
- *
71
- * @param manifest - The package manifest to publish
72
- * @throws Error if required fields are missing or invalid
73
- */
74
- publish(manifest: RuntimePackageManifest): void;
75
- /**
76
- * Remove a specific version of a package from the catalog.
77
- *
78
- * @param name - The package name
79
- * @param version - The version to remove
80
- * @returns true if the version was removed, false if not found
81
- */
82
- unpublish(name: string, version: string): boolean;
83
- /**
84
- * Get a package manifest by name and optional version.
85
- * Returns the latest version if no version is specified.
86
- *
87
- * @param name - The package name
88
- * @param version - Optional specific version
89
- * @returns The manifest if found, undefined otherwise
90
- */
91
- get(name: string, version?: string): RuntimePackageManifest | undefined;
92
- /**
93
- * Get all available versions of a package, sorted by semver descending.
94
- *
95
- * @param name - The package name
96
- * @returns Array of version strings sorted by semver (newest first)
97
- */
98
- getVersions(name: string): string[];
99
- /**
100
- * Get the latest version of a package by semver ordering.
101
- *
102
- * @param name - The package name
103
- * @returns The latest version string, or undefined if package not found
104
- */
105
- getLatestVersion(name: string): string | undefined;
106
- /**
107
- * Search the catalog with filtering, sorting, and pagination.
108
- *
109
- * @param options - Search and filter options
110
- * @returns Paginated search results
111
- */
112
- search(options: CatalogSearchOptions): CatalogSearchResult;
113
- /**
114
- * List all latest-version packages for a specific runtime.
115
- *
116
- * @param runtime - The runtime kind to filter by
117
- * @returns Array of matching package manifests
118
- */
119
- listByRuntime(runtime: RuntimeKind): RuntimePackageManifest[];
120
- /**
121
- * Get the most popular packages sorted by download count.
122
- *
123
- * @param limit - Maximum number of results (default 10)
124
- * @returns Array of package manifests sorted by downloads descending
125
- */
126
- getPopular(limit?: number): RuntimePackageManifest[];
127
- /**
128
- * Get all verified packages.
129
- *
130
- * @returns Array of verified package manifests
131
- */
132
- getVerified(): RuntimePackageManifest[];
133
- /**
134
- * Increment the download counter for a specific package version.
135
- *
136
- * @param name - The package name
137
- * @param version - The package version
138
- */
139
- incrementDownloads(name: string, version: string): void;
140
- /**
141
- * Set the rating for a specific package version.
142
- *
143
- * @param name - The package name
144
- * @param version - The package version
145
- * @param rating - The rating value (0-5)
146
- * @throws Error if rating is out of range
147
- */
148
- setRating(name: string, version: string, rating: number): void;
149
- /**
150
- * Get overall catalog statistics.
151
- *
152
- * @returns Aggregated catalog statistics
153
- */
154
- getStats(): CatalogStats;
155
- /**
156
- * Serialize the catalog to a JSON string for persistence.
157
- *
158
- * @returns JSON string representation of the catalog
159
- */
160
- toJSON(): string;
161
- /**
162
- * Deserialize a catalog from a JSON string.
163
- *
164
- * @param json - The JSON string to parse
165
- * @returns A new RuntimeCatalog instance populated with the data
166
- */
167
- static fromJSON(json: string): RuntimeCatalog;
168
- /**
169
- * Get the latest version manifest for every package in the catalog.
170
- */
171
- private getAllLatestPackages;
172
- /**
173
- * Validate that a manifest has all required fields.
174
- */
175
- private validateManifest;
176
- /**
177
- * Compare two semver strings. Returns negative if a < b, 0 if equal, positive if a > b.
178
- */
179
- private compareSemver;
180
- }