@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,378 +0,0 @@
1
- /**
2
- * OpenAPI Schema Generator for Blok Workflows
3
- *
4
- * Automatically generates OpenAPI 3.1 specifications from workflow definitions.
5
- * Introspects HTTP trigger configurations, node schemas, and context types
6
- * to produce a complete API specification.
7
- *
8
- * @example
9
- * ```typescript
10
- * const generator = new OpenAPIGenerator({
11
- * title: "My Blok API",
12
- * version: "1.0.0",
13
- * description: "Auto-generated from Blok workflows",
14
- * });
15
- *
16
- * // Add workflows
17
- * generator.addWorkflow({
18
- * name: "get-user",
19
- * version: "1.0.0",
20
- * trigger: { http: { method: "GET", path: "/users/:id" } },
21
- * steps: [...],
22
- * nodes: {...},
23
- * });
24
- *
25
- * // Generate OpenAPI spec
26
- * const spec = generator.generate();
27
- * console.log(JSON.stringify(spec, null, 2));
28
- * ```
29
- */
30
- export class OpenAPIGenerator {
31
- config;
32
- workflows = [];
33
- schemas = new Map();
34
- constructor(config) {
35
- this.config = {
36
- servers: [{ url: "http://localhost:4000", description: "Development server" }],
37
- ...config,
38
- };
39
- }
40
- /**
41
- * Add a workflow definition to the generator
42
- */
43
- addWorkflow(workflow) {
44
- this.workflows.push(workflow);
45
- }
46
- /**
47
- * Add multiple workflows
48
- */
49
- addWorkflows(workflows) {
50
- this.workflows.push(...workflows);
51
- }
52
- /**
53
- * Add a custom schema component
54
- */
55
- addSchema(name, schema) {
56
- this.schemas.set(name, schema);
57
- }
58
- /**
59
- * Generate OpenAPI 3.1 specification
60
- */
61
- generate() {
62
- const spec = {
63
- openapi: "3.1.0",
64
- info: {
65
- title: this.config.title,
66
- version: this.config.version,
67
- description: this.config.description,
68
- contact: this.config.contact,
69
- license: this.config.license,
70
- },
71
- servers: this.config.servers,
72
- paths: {},
73
- components: {
74
- schemas: {
75
- ErrorResponse: {
76
- type: "object",
77
- properties: {
78
- error: { type: "string", description: "Error message" },
79
- origin: { type: "string", description: "Node that caused the error" },
80
- validation_errors: {
81
- type: "array",
82
- items: {
83
- type: "object",
84
- properties: {
85
- path: { type: "array", items: { type: "string" } },
86
- message: { type: "string" },
87
- code: { type: "string" },
88
- },
89
- },
90
- description: "Validation error details (if applicable)",
91
- },
92
- },
93
- },
94
- WorkflowContext: {
95
- type: "object",
96
- properties: {
97
- id: { type: "string", format: "uuid", description: "Request ID" },
98
- workflow_name: { type: "string" },
99
- workflow_path: { type: "string" },
100
- },
101
- },
102
- ...Object.fromEntries(this.schemas),
103
- },
104
- },
105
- tags: this.config.tags || [],
106
- };
107
- // Add security schemes if configured
108
- if (this.config.securitySchemes) {
109
- spec.components.securitySchemes = this.config.securitySchemes;
110
- // Apply security globally
111
- spec.security = Object.keys(this.config.securitySchemes).map((name) => ({
112
- [name]: [],
113
- }));
114
- }
115
- // Generate paths from workflows
116
- for (const workflow of this.workflows) {
117
- if (!workflow.trigger.http)
118
- continue;
119
- const { method, path: routePath } = workflow.trigger.http;
120
- const openApiPath = this.convertPath(routePath);
121
- const httpMethod = (method || "get").toLowerCase();
122
- if (!spec.paths[openApiPath]) {
123
- spec.paths[openApiPath] = {};
124
- }
125
- spec.paths[openApiPath][httpMethod] = this.buildOperation(workflow);
126
- }
127
- // Add default health check and metrics paths
128
- spec.paths["/health-check"] = {
129
- get: {
130
- summary: "Health Check",
131
- operationId: "healthCheck",
132
- tags: ["System"],
133
- responses: {
134
- "200": {
135
- description: "Service is healthy",
136
- content: { "text/plain": { schema: { type: "string" } } },
137
- },
138
- },
139
- },
140
- };
141
- spec.paths["/metrics"] = {
142
- get: {
143
- summary: "Prometheus Metrics",
144
- operationId: "getMetrics",
145
- tags: ["System"],
146
- responses: {
147
- "200": {
148
- description: "Prometheus metrics in text format",
149
- content: { "text/plain": { schema: { type: "string" } } },
150
- },
151
- },
152
- },
153
- };
154
- // Auto-generate tags from workflows
155
- const workflowTags = new Set();
156
- for (const workflow of this.workflows) {
157
- const tag = this.inferTag(workflow);
158
- workflowTags.add(tag);
159
- }
160
- if (!spec.tags || spec.tags.length === 0) {
161
- spec.tags = [
162
- ...Array.from(workflowTags).map((t) => ({ name: t })),
163
- { name: "System", description: "System health and monitoring endpoints" },
164
- ];
165
- }
166
- return spec;
167
- }
168
- /**
169
- * Generate OpenAPI spec as JSON string
170
- */
171
- toJSON(pretty = true) {
172
- const spec = this.generate();
173
- return JSON.stringify(spec, null, pretty ? 2 : undefined);
174
- }
175
- /**
176
- * Generate OpenAPI spec as YAML string
177
- */
178
- toYAML() {
179
- const spec = this.generate();
180
- return this.jsonToYaml(spec);
181
- }
182
- buildOperation(workflow) {
183
- // Caller (`generate()`) only invokes `buildOperation` for workflows
184
- // that have an http trigger; defensive check keeps the type exact.
185
- const httpTrigger = workflow.trigger.http;
186
- if (!httpTrigger) {
187
- throw new Error(`[OpenAPIGenerator] workflow "${workflow.name}" has no http trigger — cannot build operation`);
188
- }
189
- const method = (httpTrigger.method || "GET").toUpperCase();
190
- const tag = this.inferTag(workflow);
191
- const operation = {
192
- summary: workflow.name.replace(/-/g, " ").replace(/\b\w/g, (c) => c.toUpperCase()),
193
- description: workflow.description || `Execute the ${workflow.name} workflow (v${workflow.version})`,
194
- operationId: this.toOperationId(workflow.name, method),
195
- tags: [tag],
196
- parameters: [],
197
- responses: {
198
- "200": {
199
- description: "Successful workflow execution",
200
- content: {
201
- [httpTrigger.accept || "application/json"]: {
202
- schema: this.buildResponseSchema(workflow),
203
- },
204
- },
205
- },
206
- "400": {
207
- description: "Validation error",
208
- content: {
209
- "application/json": {
210
- schema: { $ref: "#/components/schemas/ErrorResponse" },
211
- },
212
- },
213
- },
214
- "500": {
215
- description: "Internal server error",
216
- content: {
217
- "application/json": {
218
- schema: { $ref: "#/components/schemas/ErrorResponse" },
219
- },
220
- },
221
- },
222
- },
223
- };
224
- // Extract path parameters
225
- const pathParams = this.extractPathParams(httpTrigger.path);
226
- for (const param of pathParams) {
227
- operation.parameters?.push({
228
- name: param,
229
- in: "path",
230
- required: true,
231
- schema: { type: "string" },
232
- });
233
- }
234
- // Add request body for POST/PUT/PATCH
235
- if (["POST", "PUT", "PATCH"].includes(method)) {
236
- operation.requestBody = {
237
- required: true,
238
- content: {
239
- "application/json": {
240
- schema: this.buildRequestSchema(workflow),
241
- },
242
- },
243
- };
244
- }
245
- // Add requestId query parameter
246
- operation.parameters?.push({
247
- name: "requestId",
248
- in: "query",
249
- required: false,
250
- schema: { type: "string" },
251
- description: "Custom request ID for tracing",
252
- });
253
- return operation;
254
- }
255
- buildRequestSchema(workflow) {
256
- // Try to extract input schema from first step's node config
257
- const firstStepConfig = this.getFirstNodeInputs(workflow);
258
- if (firstStepConfig) {
259
- return firstStepConfig;
260
- }
261
- return {
262
- type: "object",
263
- description: `Input for ${workflow.name} workflow`,
264
- additionalProperties: true,
265
- };
266
- }
267
- buildResponseSchema(workflow) {
268
- return {
269
- type: "object",
270
- description: `Output from ${workflow.name} workflow`,
271
- additionalProperties: true,
272
- };
273
- }
274
- getFirstNodeInputs(workflow) {
275
- if (!workflow.steps || workflow.steps.length === 0)
276
- return null;
277
- const firstStep = workflow.steps[0];
278
- if (!firstStep?.name)
279
- return null;
280
- const nodeConfig = workflow.nodes[firstStep.name];
281
- if (!nodeConfig?.inputs)
282
- return null;
283
- // Convert inputs config to JSON schema
284
- const properties = {};
285
- for (const [_key, value] of Object.entries(nodeConfig.inputs)) {
286
- if (typeof value === "string" && value.startsWith("{{") && value.endsWith("}}")) {
287
- // Template reference - this is a dynamic input from request body
288
- const ref = value.slice(2, -2).trim();
289
- if (ref.startsWith("ctx.request.body.")) {
290
- const fieldName = ref.replace("ctx.request.body.", "");
291
- properties[fieldName] = { type: "string" };
292
- }
293
- }
294
- }
295
- if (Object.keys(properties).length > 0) {
296
- return { type: "object", properties };
297
- }
298
- return null;
299
- }
300
- convertPath(blokPath) {
301
- // Convert Express-style :param to OpenAPI {param}
302
- return blokPath.replace(/:(\w+)/g, "{$1}");
303
- }
304
- extractPathParams(path) {
305
- const matches = path.match(/:(\w+)/g);
306
- if (!matches)
307
- return [];
308
- return matches.map((m) => m.slice(1));
309
- }
310
- toOperationId(name, method) {
311
- const cleanName = name
312
- .replace(/[^a-zA-Z0-9]/g, " ")
313
- .trim()
314
- .split(/\s+/)
315
- .map((word, i) => (i === 0 ? word.toLowerCase() : word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()))
316
- .join("");
317
- return `${method.toLowerCase()}${cleanName.charAt(0).toUpperCase()}${cleanName.slice(1)}`;
318
- }
319
- inferTag(workflow) {
320
- const name = workflow.name;
321
- // Try to extract a category from workflow name (e.g., "user-create" → "User")
322
- const parts = name.split(/[-_]/);
323
- if (parts.length > 1) {
324
- return parts[0].charAt(0).toUpperCase() + parts[0].slice(1);
325
- }
326
- return "Default";
327
- }
328
- /**
329
- * Simple JSON to YAML converter (basic, no external deps)
330
- */
331
- jsonToYaml(obj, indent = 0) {
332
- const spaces = " ".repeat(indent);
333
- if (obj === null || obj === undefined)
334
- return "null";
335
- if (typeof obj === "boolean")
336
- return String(obj);
337
- if (typeof obj === "number")
338
- return String(obj);
339
- if (typeof obj === "string") {
340
- if (obj.includes("\n") || obj.includes(":") || obj.includes("#") || obj.includes("'")) {
341
- return `"${obj.replace(/"/g, '\\"')}"`;
342
- }
343
- return obj;
344
- }
345
- if (Array.isArray(obj)) {
346
- if (obj.length === 0)
347
- return "[]";
348
- return obj
349
- .map((item) => {
350
- const value = this.jsonToYaml(item, indent + 1);
351
- if (typeof item === "object" && item !== null) {
352
- return `${spaces}- ${value.trimStart()}`;
353
- }
354
- return `${spaces}- ${value}`;
355
- })
356
- .join("\n");
357
- }
358
- if (typeof obj === "object") {
359
- const entries = Object.entries(obj).filter(([, v]) => v !== undefined);
360
- if (entries.length === 0)
361
- return "{}";
362
- return entries
363
- .map(([key, value]) => {
364
- const yamlValue = this.jsonToYaml(value, indent + 1);
365
- if (typeof value === "object" && value !== null && !Array.isArray(value)) {
366
- return `${spaces}${key}:\n${yamlValue}`;
367
- }
368
- if (Array.isArray(value) && value.length > 0) {
369
- return `${spaces}${key}:\n${yamlValue}`;
370
- }
371
- return `${spaces}${key}: ${yamlValue}`;
372
- })
373
- .join("\n");
374
- }
375
- return String(obj);
376
- }
377
- }
378
- //# sourceMappingURL=OpenAPIGenerator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OpenAPIGenerator.js","sourceRoot":"","sources":["../../src/openapi/OpenAPIGenerator.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- /**
2
- * OpenAPI Schema Generation for Blok
3
- *
4
- * Auto-generates OpenAPI 3.1 specifications from workflow definitions.
5
- *
6
- * @example
7
- * ```typescript
8
- * import { OpenAPIGenerator } from "@blokjs/runner";
9
- *
10
- * const generator = new OpenAPIGenerator({
11
- * title: "My API",
12
- * version: "1.0.0",
13
- * });
14
- *
15
- * generator.addWorkflow(workflowDef);
16
- * const spec = generator.generate();
17
- * ```
18
- */
19
- export { OpenAPIGenerator } from "./OpenAPIGenerator";
20
- export type { OpenAPIGeneratorConfig, OpenAPISecurityScheme, WorkflowDefinition, OpenAPISpec, } from "./OpenAPIGenerator";
@@ -1,20 +0,0 @@
1
- /**
2
- * OpenAPI Schema Generation for Blok
3
- *
4
- * Auto-generates OpenAPI 3.1 specifications from workflow definitions.
5
- *
6
- * @example
7
- * ```typescript
8
- * import { OpenAPIGenerator } from "@blokjs/runner";
9
- *
10
- * const generator = new OpenAPIGenerator({
11
- * title: "My API",
12
- * version: "1.0.0",
13
- * });
14
- *
15
- * generator.addWorkflow(workflowDef);
16
- * const spec = generator.generate();
17
- * ```
18
- */
19
- export { OpenAPIGenerator } from "./OpenAPIGenerator";
20
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/openapi/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -1,108 +0,0 @@
1
- /**
2
- * Tier C #1 · Cross-process debounce backend interface.
3
- *
4
- * Mirrors the relationship between `ConcurrencyBackend` and the
5
- * `RunStore`-backed concurrency gate: an optional async capability that
6
- * lets `DebounceCoordinator` coordinate windows across processes
7
- * (NATS KV, Redis) instead of relying on the local in-memory Map.
8
- *
9
- * Default behavior is unchanged — when no backend is set, the
10
- * coordinator uses its existing in-memory state. The backend is opt-in
11
- * via `BLOK_DEBOUNCE_BACKEND={nats-kv|redis}` and installed by trigger
12
- * packages during `listen()`.
13
- *
14
- * **Semantic trade-off**: this v1 ships *owner-local payload*
15
- * semantics. The owning process's captured closure (`onFire`) fires
16
- * when its local timer elapses; payloads from coalesce pings on other
17
- * processes are dropped (the doc only records `pingCount`,
18
- * `lastPingAt`, and `scheduledAt`). Cross-process latest-payload-wins
19
- * is a deferred follow-up — would require persisting each ping's
20
- * payload to the shared doc.
21
- */
22
- export type DebounceBackendMode = "leading" | "trailing";
23
- export interface DebounceRegisterBackendOpts {
24
- workflowName: string;
25
- debounceKey: string;
26
- mode: DebounceBackendMode;
27
- delayMs: number;
28
- maxDelayMs?: number;
29
- /** Run id allocated by the caller for THIS ping. */
30
- runId: string;
31
- /** Process identity used for owner-lease attribution. */
32
- processId: string;
33
- /** Owner lease in ms — when expired, another process can take over. */
34
- ownerLeaseMs: number;
35
- /** Current wall-clock ms. */
36
- now: number;
37
- }
38
- /**
39
- * Result of a `registerPing`. Three outcomes, mirroring the
40
- * single-process `DebounceRegisterResult` shape:
41
- *
42
- * - `"owner-new"` — caller is the new owner of a fresh window.
43
- * For leading mode: fire synchronously. For trailing mode: start a
44
- * local timer to fire at `scheduledAt`.
45
- * - `"owner-extend"` — caller is the existing owner; window extended.
46
- * Cancel + restart local timer to fire at the new `scheduledAt`.
47
- * - `"coalesce"` — caller is NOT the owner. Mark the run `debounced`
48
- * with `intoRunId = activeRunId`.
49
- */
50
- export interface DebounceRegisterBackendResult {
51
- outcome: "owner-new" | "owner-extend" | "coalesce";
52
- activeRunId: string;
53
- /** The runId of the OWNING process. Equal to opts.runId when outcome ∈ {owner-new, owner-extend}; differs on coalesce. */
54
- scheduledAt: number;
55
- pingCount: number;
56
- }
57
- /**
58
- * Result of a `finalize` call from an owning process's local timer.
59
- *
60
- * - `"fire"` — caller still owns AND the silence period elapsed.
61
- * Bucket has been atomically DELETEd; caller dispatches.
62
- * - `"reschedule"` — caller still owns, but coalesce pings from other
63
- * processes pushed `scheduledAt` forward. Caller restarts local
64
- * timer for `scheduledAt - now`.
65
- * - `"abandoned"` — caller's lease expired and another process took
66
- * ownership. Caller silently drops the closure.
67
- */
68
- export type DebounceFinalizeResult = {
69
- finalize: "fire";
70
- } | {
71
- finalize: "reschedule";
72
- scheduledAt: number;
73
- } | {
74
- finalize: "abandoned";
75
- };
76
- export interface DebounceBackend {
77
- /** Identifying string for logs/metrics. e.g. `"nats-kv"`, `"redis"`. */
78
- readonly name: string;
79
- /** Lifecycle — open the underlying connection. Idempotent. */
80
- connect(): Promise<void>;
81
- /** Lifecycle — close the underlying connection. Idempotent. */
82
- disconnect(): Promise<void>;
83
- /**
84
- * Atomically record a ping against the `(workflow, debounceKey)`
85
- * bucket and decide ownership. Returns one of the three outcomes
86
- * documented on {@link DebounceRegisterBackendResult}.
87
- */
88
- registerPing(opts: DebounceRegisterBackendOpts): Promise<DebounceRegisterBackendResult>;
89
- /**
90
- * Owner calls this on local timer fire. Atomically:
91
- * - If `runId` still owns AND `now >= scheduledAt` → DELETE the
92
- * bucket and return `{finalize: "fire"}`.
93
- * - If `runId` still owns but `now < scheduledAt` → return
94
- * `{finalize: "reschedule", scheduledAt}`.
95
- * - If `runId` no longer owns (lease expired + handoff) → return
96
- * `{finalize: "abandoned"}`.
97
- */
98
- finalize(workflowName: string, debounceKey: string, runId: string, now: number): Promise<DebounceFinalizeResult>;
99
- /** Cancel an active window without firing. Returns true if cancelled. */
100
- cancel(workflowName: string, debounceKey: string): Promise<boolean>;
101
- /**
102
- * Janitor sweep — purge every bucket whose owner lease expired
103
- * AND whose `scheduledAt` is in the past. Returns the count of
104
- * purged buckets. Cheap per-bucket lazy-purge happens inside the
105
- * registerPing/finalize scripts.
106
- */
107
- purgeExpired(now: number): Promise<number>;
108
- }
@@ -1,23 +0,0 @@
1
- /**
2
- * Tier C #1 · Cross-process debounce backend interface.
3
- *
4
- * Mirrors the relationship between `ConcurrencyBackend` and the
5
- * `RunStore`-backed concurrency gate: an optional async capability that
6
- * lets `DebounceCoordinator` coordinate windows across processes
7
- * (NATS KV, Redis) instead of relying on the local in-memory Map.
8
- *
9
- * Default behavior is unchanged — when no backend is set, the
10
- * coordinator uses its existing in-memory state. The backend is opt-in
11
- * via `BLOK_DEBOUNCE_BACKEND={nats-kv|redis}` and installed by trigger
12
- * packages during `listen()`.
13
- *
14
- * **Semantic trade-off**: this v1 ships *owner-local payload*
15
- * semantics. The owning process's captured closure (`onFire`) fires
16
- * when its local timer elapses; payloads from coalesce pings on other
17
- * processes are dropped (the doc only records `pingCount`,
18
- * `lastPingAt`, and `scheduledAt`). Cross-process latest-payload-wins
19
- * is a deferred follow-up — would require persisting each ping's
20
- * payload to the shared doc.
21
- */
22
- export {};
23
- //# sourceMappingURL=DebounceBackend.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DebounceBackend.js","sourceRoot":"","sources":["../../src/scheduling/DebounceBackend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG"}
@@ -1,53 +0,0 @@
1
- /**
2
- * Tier C #1 · NATS KV-backed debounce backend.
3
- *
4
- * Coordinates per-(workflow, debounceKey) window state across processes
5
- * via a single NATS JetStream KV value per bucket with revision-based
6
- * compare-and-swap (OCC). Mirrors the storage model of
7
- * `NatsKvConcurrencyBackend` but with a different document shape (one
8
- * window per bucket, not a leases array).
9
- *
10
- * Acquire / extend / coalesce: a bounded CAS loop (10 retries) that
11
- * reads → decides ownership → atomically writes. On retry exhaustion,
12
- * fall back to admitting the ping as a `coalesce` against the current
13
- * owner — debounce is not a safety gate, so we'd rather over-coalesce
14
- * than drop pings on a contention spike.
15
- *
16
- * Finalize: same OCC pattern. The owning process atomically reads the
17
- * doc, confirms it still owns AND `now >= scheduledAt`, and atomically
18
- * deletes. On lease handoff, the owner discovers it no longer owns and
19
- * abandons silently.
20
- *
21
- * **Owner-local payload**: this backend tracks `pingCount`,
22
- * `lastPingAt`, and `scheduledAt` only — not the payload. Cross-process
23
- * latest-payload-wins is a deferred follow-up.
24
- */
25
- import type { DebounceBackend, DebounceFinalizeResult, DebounceRegisterBackendOpts, DebounceRegisterBackendResult } from "./DebounceBackend";
26
- export interface NatsKvDebounceConfig {
27
- servers: string[];
28
- token?: string;
29
- user?: string;
30
- pass?: string;
31
- bucketName: string;
32
- }
33
- export declare function readNatsKvDebounceConfigFromEnv(): NatsKvDebounceConfig;
34
- export declare class NatsKvDebounceBackend implements DebounceBackend {
35
- readonly name = "nats-kv";
36
- private nc;
37
- private kv;
38
- private readonly config;
39
- private connected;
40
- constructor(config?: Partial<NatsKvDebounceConfig>);
41
- connect(): Promise<void>;
42
- disconnect(): Promise<void>;
43
- private bucketKey;
44
- private encodeSegment;
45
- private requireKv;
46
- private computeScheduledAt;
47
- registerPing(opts: DebounceRegisterBackendOpts): Promise<DebounceRegisterBackendResult>;
48
- finalize(workflowName: string, debounceKey: string, runId: string, now: number): Promise<DebounceFinalizeResult>;
49
- cancel(workflowName: string, debounceKey: string): Promise<boolean>;
50
- purgeExpired(now: number): Promise<number>;
51
- private safeGet;
52
- private parseDoc;
53
- }