@blokjs/runner 0.2.2 → 0.6.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 (213) hide show
  1. package/dist/Blok.js +32 -3
  2. package/dist/Blok.js.map +1 -1
  3. package/dist/Configuration.d.ts +59 -5
  4. package/dist/Configuration.js +366 -96
  5. package/dist/Configuration.js.map +1 -1
  6. package/dist/ForEachNode.d.ts +59 -0
  7. package/dist/ForEachNode.js +522 -0
  8. package/dist/ForEachNode.js.map +1 -0
  9. package/dist/LoopMaxIterationsError.d.ts +11 -0
  10. package/dist/LoopMaxIterationsError.js +18 -0
  11. package/dist/LoopMaxIterationsError.js.map +1 -0
  12. package/dist/LoopNode.d.ts +36 -0
  13. package/dist/LoopNode.js +182 -0
  14. package/dist/LoopNode.js.map +1 -0
  15. package/dist/PayloadTooLargeError.d.ts +19 -0
  16. package/dist/PayloadTooLargeError.js +29 -0
  17. package/dist/PayloadTooLargeError.js.map +1 -0
  18. package/dist/RunCancelledError.d.ts +17 -0
  19. package/dist/RunCancelledError.js +25 -0
  20. package/dist/RunCancelledError.js.map +1 -0
  21. package/dist/Runner.d.ts +11 -1
  22. package/dist/Runner.js +9 -2
  23. package/dist/Runner.js.map +1 -1
  24. package/dist/RunnerSteps.js +648 -44
  25. package/dist/RunnerSteps.js.map +1 -1
  26. package/dist/RuntimeAdapterNode.d.ts +2 -1
  27. package/dist/RuntimeAdapterNode.js +2 -2
  28. package/dist/RuntimeAdapterNode.js.map +1 -1
  29. package/dist/RuntimeRegistry.d.ts +23 -2
  30. package/dist/RuntimeRegistry.js +31 -2
  31. package/dist/RuntimeRegistry.js.map +1 -1
  32. package/dist/SubworkflowNode.d.ts +181 -0
  33. package/dist/SubworkflowNode.js +479 -0
  34. package/dist/SubworkflowNode.js.map +1 -0
  35. package/dist/SwitchNode.d.ts +37 -0
  36. package/dist/SwitchNode.js +153 -0
  37. package/dist/SwitchNode.js.map +1 -0
  38. package/dist/TriggerBase.d.ts +178 -0
  39. package/dist/TriggerBase.js +1032 -5
  40. package/dist/TriggerBase.js.map +1 -1
  41. package/dist/TryCatchNode.d.ts +32 -0
  42. package/dist/TryCatchNode.js +207 -0
  43. package/dist/TryCatchNode.js.map +1 -0
  44. package/dist/WaitDispatchRequest.d.ts +38 -0
  45. package/dist/WaitDispatchRequest.js +13 -0
  46. package/dist/WaitDispatchRequest.js.map +1 -0
  47. package/dist/WaitNode.d.ts +23 -0
  48. package/dist/WaitNode.js +26 -0
  49. package/dist/WaitNode.js.map +1 -0
  50. package/dist/adapters/grpc/GrpcCodec.js +2 -2
  51. package/dist/adapters/grpc/GrpcRuntimeAdapter.d.ts +6 -4
  52. package/dist/adapters/grpc/GrpcRuntimeAdapter.js +6 -4
  53. package/dist/adapters/grpc/GrpcRuntimeAdapter.js.map +1 -1
  54. package/dist/adapters/grpc/types.d.ts +7 -5
  55. package/dist/adapters/grpc/types.js.map +1 -1
  56. package/dist/adapters/transport.d.ts +12 -41
  57. package/dist/adapters/transport.js +21 -70
  58. package/dist/adapters/transport.js.map +1 -1
  59. package/dist/cache/NodeResultCache.js +7 -0
  60. package/dist/cache/NodeResultCache.js.map +1 -1
  61. package/dist/concurrency/ConcurrencyBackend.d.ts +61 -0
  62. package/dist/concurrency/ConcurrencyBackend.js +20 -0
  63. package/dist/concurrency/ConcurrencyBackend.js.map +1 -0
  64. package/dist/concurrency/ConcurrencyLimitError.d.ts +37 -0
  65. package/dist/concurrency/ConcurrencyLimitError.js +16 -0
  66. package/dist/concurrency/ConcurrencyLimitError.js.map +1 -0
  67. package/dist/concurrency/NatsKvConcurrencyBackend.d.ts +64 -0
  68. package/dist/concurrency/NatsKvConcurrencyBackend.js +310 -0
  69. package/dist/concurrency/NatsKvConcurrencyBackend.js.map +1 -0
  70. package/dist/concurrency/QueueExpiredError.d.ts +40 -0
  71. package/dist/concurrency/QueueExpiredError.js +15 -0
  72. package/dist/concurrency/QueueExpiredError.js.map +1 -0
  73. package/dist/concurrency/RedisConcurrencyBackend.d.ts +64 -0
  74. package/dist/concurrency/RedisConcurrencyBackend.js +374 -0
  75. package/dist/concurrency/RedisConcurrencyBackend.js.map +1 -0
  76. package/dist/concurrency/createConcurrencyBackend.d.ts +24 -0
  77. package/dist/concurrency/createConcurrencyBackend.js +38 -0
  78. package/dist/concurrency/createConcurrencyBackend.js.map +1 -0
  79. package/dist/concurrency/readConcurrencyConfig.d.ts +60 -0
  80. package/dist/concurrency/readConcurrencyConfig.js +60 -0
  81. package/dist/concurrency/readConcurrencyConfig.js.map +1 -0
  82. package/dist/defineNode.d.ts +8 -0
  83. package/dist/defineNode.js +25 -5
  84. package/dist/defineNode.js.map +1 -1
  85. package/dist/graphql/GraphQLSchemaGenerator.js +1 -1
  86. package/dist/graphql/GraphQLSchemaGenerator.js.map +1 -1
  87. package/dist/idempotency/resolveIdempotencyKey.d.ts +20 -0
  88. package/dist/idempotency/resolveIdempotencyKey.js +37 -0
  89. package/dist/idempotency/resolveIdempotencyKey.js.map +1 -0
  90. package/dist/index.d.ts +30 -6
  91. package/dist/index.js +55 -6
  92. package/dist/index.js.map +1 -1
  93. package/dist/marketplace/RuntimeCatalog.d.ts +6 -0
  94. package/dist/marketplace/RuntimeCatalog.js.map +1 -1
  95. package/dist/marketplace/RuntimeDiscovery.d.ts +2 -2
  96. package/dist/marketplace/RuntimeDiscovery.js +18 -6
  97. package/dist/marketplace/RuntimeDiscovery.js.map +1 -1
  98. package/dist/monitoring/ConcurrencyMetrics.d.ts +82 -0
  99. package/dist/monitoring/ConcurrencyMetrics.js +139 -0
  100. package/dist/monitoring/ConcurrencyMetrics.js.map +1 -0
  101. package/dist/monitoring/ForEachWaitMetrics.d.ts +22 -0
  102. package/dist/monitoring/ForEachWaitMetrics.js +36 -0
  103. package/dist/monitoring/ForEachWaitMetrics.js.map +1 -0
  104. package/dist/monitoring/JanitorMetrics.d.ts +27 -0
  105. package/dist/monitoring/JanitorMetrics.js +48 -0
  106. package/dist/monitoring/JanitorMetrics.js.map +1 -0
  107. package/dist/openapi/OpenAPIGenerator.js +7 -2
  108. package/dist/openapi/OpenAPIGenerator.js.map +1 -1
  109. package/dist/runtime/PrimitiveStack.d.ts +64 -0
  110. package/dist/runtime/PrimitiveStack.js +92 -0
  111. package/dist/runtime/PrimitiveStack.js.map +1 -0
  112. package/dist/scheduling/DebounceBackend.d.ts +108 -0
  113. package/dist/scheduling/DebounceBackend.js +23 -0
  114. package/dist/scheduling/DebounceBackend.js.map +1 -0
  115. package/dist/scheduling/DebounceCoordinator.d.ts +141 -0
  116. package/dist/scheduling/DebounceCoordinator.js +362 -0
  117. package/dist/scheduling/DebounceCoordinator.js.map +1 -0
  118. package/dist/scheduling/DeferredDispatchSignal.d.ts +50 -0
  119. package/dist/scheduling/DeferredDispatchSignal.js +14 -0
  120. package/dist/scheduling/DeferredDispatchSignal.js.map +1 -0
  121. package/dist/scheduling/DeferredRunScheduler.d.ts +96 -0
  122. package/dist/scheduling/DeferredRunScheduler.js +256 -0
  123. package/dist/scheduling/DeferredRunScheduler.js.map +1 -0
  124. package/dist/scheduling/NatsKvDebounceBackend.d.ts +53 -0
  125. package/dist/scheduling/NatsKvDebounceBackend.js +334 -0
  126. package/dist/scheduling/NatsKvDebounceBackend.js.map +1 -0
  127. package/dist/scheduling/RedisDebounceBackend.d.ts +49 -0
  128. package/dist/scheduling/RedisDebounceBackend.js +356 -0
  129. package/dist/scheduling/RedisDebounceBackend.js.map +1 -0
  130. package/dist/scheduling/createDebounceBackend.d.ts +25 -0
  131. package/dist/scheduling/createDebounceBackend.js +39 -0
  132. package/dist/scheduling/createDebounceBackend.js.map +1 -0
  133. package/dist/scheduling/readSchedulingConfig.d.ts +24 -0
  134. package/dist/scheduling/readSchedulingConfig.js +52 -0
  135. package/dist/scheduling/readSchedulingConfig.js.map +1 -0
  136. package/dist/security/AuditLogger.js +1 -1
  137. package/dist/security/AuditLogger.js.map +1 -1
  138. package/dist/security/AuthMiddleware.d.ts +19 -20
  139. package/dist/security/AuthMiddleware.js +35 -20
  140. package/dist/security/AuthMiddleware.js.map +1 -1
  141. package/dist/security/OAuthProvider.js +2 -2
  142. package/dist/security/OAuthProvider.js.map +1 -1
  143. package/dist/security/SecretManager.js +14 -13
  144. package/dist/security/SecretManager.js.map +1 -1
  145. package/dist/security/index.d.ts +3 -1
  146. package/dist/security/index.js +3 -1
  147. package/dist/security/index.js.map +1 -1
  148. package/dist/testing/TestHarness.d.ts +27 -12
  149. package/dist/testing/TestHarness.js +19 -3
  150. package/dist/testing/TestHarness.js.map +1 -1
  151. package/dist/testing/WorkflowTestRunner.js +0 -7
  152. package/dist/testing/WorkflowTestRunner.js.map +1 -1
  153. package/dist/timeouts/StepTimeoutError.d.ts +22 -0
  154. package/dist/timeouts/StepTimeoutError.js +31 -0
  155. package/dist/timeouts/StepTimeoutError.js.map +1 -0
  156. package/dist/tracing/InMemoryRunStore.d.ts +41 -1
  157. package/dist/tracing/InMemoryRunStore.js +239 -0
  158. package/dist/tracing/InMemoryRunStore.js.map +1 -1
  159. package/dist/tracing/Janitor.d.ts +70 -0
  160. package/dist/tracing/Janitor.js +150 -0
  161. package/dist/tracing/Janitor.js.map +1 -0
  162. package/dist/tracing/PostgresRunStore.d.ts +57 -1
  163. package/dist/tracing/PostgresRunStore.js +711 -6
  164. package/dist/tracing/PostgresRunStore.js.map +1 -1
  165. package/dist/tracing/RoutingDiagnostics.d.ts +55 -0
  166. package/dist/tracing/RoutingDiagnostics.js +50 -0
  167. package/dist/tracing/RoutingDiagnostics.js.map +1 -0
  168. package/dist/tracing/RunStore.d.ts +181 -1
  169. package/dist/tracing/RunTracker.d.ts +244 -9
  170. package/dist/tracing/RunTracker.js +594 -1
  171. package/dist/tracing/RunTracker.js.map +1 -1
  172. package/dist/tracing/SqliteRunStore.d.ts +79 -2
  173. package/dist/tracing/SqliteRunStore.js +775 -16
  174. package/dist/tracing/SqliteRunStore.js.map +1 -1
  175. package/dist/tracing/TraceRouter.d.ts +20 -2
  176. package/dist/tracing/TraceRouter.js +612 -6
  177. package/dist/tracing/TraceRouter.js.map +1 -1
  178. package/dist/tracing/createStore.js +14 -3
  179. package/dist/tracing/createStore.js.map +1 -1
  180. package/dist/tracing/metadataFilter.d.ts +63 -0
  181. package/dist/tracing/metadataFilter.js +224 -0
  182. package/dist/tracing/metadataFilter.js.map +1 -0
  183. package/dist/tracing/sanitize.d.ts +11 -0
  184. package/dist/tracing/sanitize.js +29 -0
  185. package/dist/tracing/sanitize.js.map +1 -1
  186. package/dist/tracing/types.d.ts +672 -2
  187. package/dist/utils/createChildContext.d.ts +32 -0
  188. package/dist/utils/createChildContext.js +113 -0
  189. package/dist/utils/createChildContext.js.map +1 -0
  190. package/dist/utils/envAllowlist.d.ts +35 -0
  191. package/dist/utils/envAllowlist.js +113 -0
  192. package/dist/utils/envAllowlist.js.map +1 -0
  193. package/dist/version/RuntimeVersionValidator.d.ts +38 -0
  194. package/dist/version/RuntimeVersionValidator.js +121 -0
  195. package/dist/version/RuntimeVersionValidator.js.map +1 -0
  196. package/dist/visualization/WorkflowVisualizer.js +4 -4
  197. package/dist/visualization/WorkflowVisualizer.js.map +1 -1
  198. package/dist/workflow/PersistenceHelper.d.ts +18 -10
  199. package/dist/workflow/PersistenceHelper.js +35 -9
  200. package/dist/workflow/PersistenceHelper.js.map +1 -1
  201. package/dist/workflow/WorkflowNormalizer.d.ts +48 -42
  202. package/dist/workflow/WorkflowNormalizer.js +650 -18
  203. package/dist/workflow/WorkflowNormalizer.js.map +1 -1
  204. package/dist/workflow/WorkflowRegistry.d.ts +186 -0
  205. package/dist/workflow/WorkflowRegistry.js +202 -0
  206. package/dist/workflow/WorkflowRegistry.js.map +1 -0
  207. package/dist/workflow/sampleBody.d.ts +54 -0
  208. package/dist/workflow/sampleBody.js +320 -0
  209. package/dist/workflow/sampleBody.js.map +1 -0
  210. package/package.json +3 -8
  211. package/dist/adapters/HttpRuntimeAdapter.d.ts +0 -79
  212. package/dist/adapters/HttpRuntimeAdapter.js +0 -233
  213. package/dist/adapters/HttpRuntimeAdapter.js.map +0 -1
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Tier 2 follow-up · OpenTelemetry counters for concurrency + scheduling
3
+ * resource lifecycle events.
4
+ *
5
+ * Wired into:
6
+ * - `TriggerBase.run`'s concurrency gate — `recordAcquired` /
7
+ * `recordDenied` / `recordReleased` per slot operation.
8
+ * - `HttpTrigger.recoverDispatches` — `recordDispatchRecovered` /
9
+ * `recordDispatchExpired` for boot-recovery observability.
10
+ * - The scheduler / debounce coordinator — `recordDispatchFired`
11
+ * when a deferred timer fires successfully.
12
+ *
13
+ * Singleton; lazy-instantiated. No-ops cleanly when OTel isn't
14
+ * configured (the meter API silently swallows recordings without
15
+ * an exporter).
16
+ */
17
+ interface ConcurrencyAttributes {
18
+ workflow_name: string;
19
+ concurrency_key?: string;
20
+ }
21
+ interface SchedulingAttributes {
22
+ workflow_name: string;
23
+ trigger_type: string;
24
+ dispatch_status?: string;
25
+ }
26
+ /**
27
+ * D6 (v0.6) — read the per-key opt-in env var. `concurrency_key` is
28
+ * potentially high-cardinality (per-user, per-tenant, …); emitting it as
29
+ * a metric label by default risks a cardinality explosion in any
30
+ * non-trivial deployment. Default OFF: strip the key before emission so
31
+ * counters stay bucketed by `workflow_name` alone. Opt in to per-key
32
+ * granularity with `BLOK_METRICS_PER_KEY=1` (or `=true`).
33
+ *
34
+ * Exported for test reuse (the strip helper below).
35
+ */
36
+ export declare function isPerKeyMetricsEnabled(): boolean;
37
+ /**
38
+ * Pure helper — strips `concurrency_key` from a copy of `attrs` when
39
+ * per-key emission is disabled. Returns the original reference when
40
+ * enabled (no allocation on the hot path).
41
+ */
42
+ export declare function filterPerKeyAttrs<T extends {
43
+ concurrency_key?: string;
44
+ }>(attrs: T, enabled: boolean): T;
45
+ export declare class ConcurrencyMetrics {
46
+ private static instance;
47
+ /**
48
+ * Captured at construction time — the constructor is private + the
49
+ * singleton is only reset in tests, so this stays stable for the
50
+ * lifetime of a process. Tests that toggle the env var call
51
+ * `resetInstance()` before re-`getInstance()` to pick up the flip.
52
+ */
53
+ private readonly perKeyEnabled;
54
+ private readonly acquiredCounter;
55
+ private readonly deniedCounter;
56
+ private readonly releasedCounter;
57
+ private readonly dispatchRecoveredCounter;
58
+ private readonly dispatchExpiredCounter;
59
+ private readonly dispatchFiredCounter;
60
+ private readonly backendInstallCounter;
61
+ private readonly occRetriesHistogram;
62
+ private constructor();
63
+ static getInstance(): ConcurrencyMetrics;
64
+ /** Test-only — drop the singleton so re-import gets fresh meters. */
65
+ static resetInstance(): void;
66
+ recordAcquired(attrs: ConcurrencyAttributes): void;
67
+ recordDenied(attrs: ConcurrencyAttributes & {
68
+ mode: "throw" | "queue";
69
+ }): void;
70
+ recordReleased(attrs: ConcurrencyAttributes): void;
71
+ recordDispatchRecovered(attrs: SchedulingAttributes): void;
72
+ recordDispatchExpired(attrs: SchedulingAttributes): void;
73
+ recordDispatchFired(attrs: SchedulingAttributes): void;
74
+ recordBackendInstall(attrs: {
75
+ backend: string;
76
+ status: "success" | "failure";
77
+ }): void;
78
+ recordOccRetries(attrs: ConcurrencyAttributes & {
79
+ outcome: "success" | "denied" | "fail-closed";
80
+ }, attempts: number): void;
81
+ }
82
+ export {};
@@ -0,0 +1,139 @@
1
+ /**
2
+ * Tier 2 follow-up · OpenTelemetry counters for concurrency + scheduling
3
+ * resource lifecycle events.
4
+ *
5
+ * Wired into:
6
+ * - `TriggerBase.run`'s concurrency gate — `recordAcquired` /
7
+ * `recordDenied` / `recordReleased` per slot operation.
8
+ * - `HttpTrigger.recoverDispatches` — `recordDispatchRecovered` /
9
+ * `recordDispatchExpired` for boot-recovery observability.
10
+ * - The scheduler / debounce coordinator — `recordDispatchFired`
11
+ * when a deferred timer fires successfully.
12
+ *
13
+ * Singleton; lazy-instantiated. No-ops cleanly when OTel isn't
14
+ * configured (the meter API silently swallows recordings without
15
+ * an exporter).
16
+ */
17
+ import { metrics } from "@opentelemetry/api";
18
+ /**
19
+ * D6 (v0.6) — read the per-key opt-in env var. `concurrency_key` is
20
+ * potentially high-cardinality (per-user, per-tenant, …); emitting it as
21
+ * a metric label by default risks a cardinality explosion in any
22
+ * non-trivial deployment. Default OFF: strip the key before emission so
23
+ * counters stay bucketed by `workflow_name` alone. Opt in to per-key
24
+ * granularity with `BLOK_METRICS_PER_KEY=1` (or `=true`).
25
+ *
26
+ * Exported for test reuse (the strip helper below).
27
+ */
28
+ export function isPerKeyMetricsEnabled() {
29
+ const raw = process.env.BLOK_METRICS_PER_KEY;
30
+ return raw === "1" || raw === "true";
31
+ }
32
+ /**
33
+ * Pure helper — strips `concurrency_key` from a copy of `attrs` when
34
+ * per-key emission is disabled. Returns the original reference when
35
+ * enabled (no allocation on the hot path).
36
+ */
37
+ export function filterPerKeyAttrs(attrs, enabled) {
38
+ if (enabled || attrs.concurrency_key === undefined)
39
+ return attrs;
40
+ const { concurrency_key: _omitted, ...rest } = attrs;
41
+ return rest;
42
+ }
43
+ export class ConcurrencyMetrics {
44
+ static instance = null;
45
+ /**
46
+ * Captured at construction time — the constructor is private + the
47
+ * singleton is only reset in tests, so this stays stable for the
48
+ * lifetime of a process. Tests that toggle the env var call
49
+ * `resetInstance()` before re-`getInstance()` to pick up the flip.
50
+ */
51
+ perKeyEnabled = isPerKeyMetricsEnabled();
52
+ acquiredCounter = metrics.getMeter("blok").createCounter("blok_concurrency_acquired_total", {
53
+ description: "Total concurrency slots acquired (per workflow + key).",
54
+ unit: "1",
55
+ });
56
+ deniedCounter = metrics.getMeter("blok").createCounter("blok_concurrency_denied_total", {
57
+ description: "Total concurrency slot denials (limit hit; throttled or queued).",
58
+ unit: "1",
59
+ });
60
+ releasedCounter = metrics.getMeter("blok").createCounter("blok_concurrency_released_total", {
61
+ description: "Total concurrency slots released (run reached terminal state).",
62
+ unit: "1",
63
+ });
64
+ dispatchRecoveredCounter = metrics
65
+ .getMeter("blok")
66
+ .createCounter("blok_scheduling_dispatch_recovered_total", {
67
+ description: "Scheduled dispatches re-registered on boot recovery (HttpTrigger).",
68
+ unit: "1",
69
+ });
70
+ dispatchExpiredCounter = metrics
71
+ .getMeter("blok")
72
+ .createCounter("blok_scheduling_dispatch_expired_total", {
73
+ description: "Scheduled dispatches marked expired on boot recovery (TTL elapsed).",
74
+ unit: "1",
75
+ });
76
+ dispatchFiredCounter = metrics
77
+ .getMeter("blok")
78
+ .createCounter("blok_scheduling_dispatch_fired_total", {
79
+ description: "Scheduled dispatches fired by the in-process scheduler.",
80
+ unit: "1",
81
+ });
82
+ // PR 3 D1 — backend install observability. Operators who misconfigure
83
+ // the cross-process backend (NATS KV unreachable / auth failure) get a
84
+ // silent fallback to the in-process backend. This counter surfaces
85
+ // install attempts so misconfiguration is visible in metrics.
86
+ backendInstallCounter = metrics
87
+ .getMeter("blok")
88
+ .createCounter("blok_concurrency_backend_install_total", {
89
+ description: "Concurrency backend install attempts (success / failure).",
90
+ unit: "1",
91
+ });
92
+ // PR 3 D2 — OCC retry depth histogram. The 95% fail-close rate at
93
+ // 200-way contention seen in LOAD-TESTS.md is invisible without a
94
+ // histogram. Recorded per acquireSlot exit point with bucket
95
+ // boundaries [0, 1, 2, 3, 5, 10] — OCC retry budget caps at 10.
96
+ occRetriesHistogram = metrics.getMeter("blok").createHistogram("blok_concurrency_occ_retries", {
97
+ description: "OCC retry attempts on cross-process concurrency backends.",
98
+ unit: "{retries}",
99
+ advice: { explicitBucketBoundaries: [0, 1, 2, 3, 5, 10] },
100
+ });
101
+ constructor() { }
102
+ static getInstance() {
103
+ if (!ConcurrencyMetrics.instance) {
104
+ ConcurrencyMetrics.instance = new ConcurrencyMetrics();
105
+ }
106
+ return ConcurrencyMetrics.instance;
107
+ }
108
+ /** Test-only — drop the singleton so re-import gets fresh meters. */
109
+ static resetInstance() {
110
+ ConcurrencyMetrics.instance = null;
111
+ }
112
+ recordAcquired(attrs) {
113
+ this.acquiredCounter.add(1, filterPerKeyAttrs(attrs, this.perKeyEnabled));
114
+ }
115
+ recordDenied(attrs) {
116
+ this.deniedCounter.add(1, filterPerKeyAttrs(attrs, this.perKeyEnabled));
117
+ }
118
+ recordReleased(attrs) {
119
+ this.releasedCounter.add(1, filterPerKeyAttrs(attrs, this.perKeyEnabled));
120
+ }
121
+ recordDispatchRecovered(attrs) {
122
+ this.dispatchRecoveredCounter.add(1, attrs);
123
+ }
124
+ recordDispatchExpired(attrs) {
125
+ this.dispatchExpiredCounter.add(1, attrs);
126
+ }
127
+ recordDispatchFired(attrs) {
128
+ this.dispatchFiredCounter.add(1, attrs);
129
+ }
130
+ // PR 3 D1 — backend install attempt outcome.
131
+ recordBackendInstall(attrs) {
132
+ this.backendInstallCounter.add(1, attrs);
133
+ }
134
+ // PR 3 D2 — OCC retry depth + outcome (success | denied | fail-closed).
135
+ recordOccRetries(attrs, attempts) {
136
+ this.occRetriesHistogram.record(attempts, filterPerKeyAttrs(attrs, this.perKeyEnabled));
137
+ }
138
+ }
139
+ //# sourceMappingURL=ConcurrencyMetrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConcurrencyMetrics.js","sourceRoot":"","sources":["../../src/monitoring/ConcurrencyMetrics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * v0.6 Phase 3 — OTel counter for parallel forEach + wait observability.
3
+ * Incremented at cursor-write time with the count of iterations
4
+ * cancelled because a peer fired a wait. Lets ops dashboards spot
5
+ * workflows that frequently waste work on cancel + re-launch — usually
6
+ * a signal that the author should switch to sequential forEach OR add
7
+ * `idempotencyKey` to inner steps so the re-launches are cache hits.
8
+ *
9
+ * Singleton, lazy-instantiated. No-ops cleanly when OTel isn't
10
+ * configured (the meter API silently swallows recordings without an
11
+ * exporter).
12
+ */
13
+ export declare class ForEachWaitMetrics {
14
+ private static instance;
15
+ private readonly cancelledCounter;
16
+ static getInstance(): ForEachWaitMetrics;
17
+ static resetInstance(): void;
18
+ recordCancellation(opts: {
19
+ workflowName: string;
20
+ cancelledCount: number;
21
+ }): void;
22
+ }
@@ -0,0 +1,36 @@
1
+ /**
2
+ * v0.6 Phase 3 — OTel counter for parallel forEach + wait observability.
3
+ * Incremented at cursor-write time with the count of iterations
4
+ * cancelled because a peer fired a wait. Lets ops dashboards spot
5
+ * workflows that frequently waste work on cancel + re-launch — usually
6
+ * a signal that the author should switch to sequential forEach OR add
7
+ * `idempotencyKey` to inner steps so the re-launches are cache hits.
8
+ *
9
+ * Singleton, lazy-instantiated. No-ops cleanly when OTel isn't
10
+ * configured (the meter API silently swallows recordings without an
11
+ * exporter).
12
+ */
13
+ import { metrics } from "@opentelemetry/api";
14
+ export class ForEachWaitMetrics {
15
+ static instance = null;
16
+ cancelledCounter = metrics.getMeter("blok").createCounter("blok_foreach_wait_cancelled_total", {
17
+ description: "Iterations cancelled because a peer fired a wait inside a parallel forEach. High values signal authors should add idempotencyKey to inner steps.",
18
+ unit: "1",
19
+ });
20
+ static getInstance() {
21
+ if (!ForEachWaitMetrics.instance) {
22
+ ForEachWaitMetrics.instance = new ForEachWaitMetrics();
23
+ }
24
+ return ForEachWaitMetrics.instance;
25
+ }
26
+ static resetInstance() {
27
+ ForEachWaitMetrics.instance = null;
28
+ }
29
+ recordCancellation(opts) {
30
+ if (opts.cancelledCount <= 0)
31
+ return;
32
+ const attrs = { workflow_name: opts.workflowName };
33
+ this.cancelledCounter.add(opts.cancelledCount, attrs);
34
+ }
35
+ }
36
+ //# sourceMappingURL=ForEachWaitMetrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ForEachWaitMetrics.js","sourceRoot":"","sources":["../../src/monitoring/ForEachWaitMetrics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAmB,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE9D,MAAM,OAAO,kBAAkB;IACtB,MAAM,CAAC,QAAQ,GAA8B,IAAI,CAAC;IAEzC,gBAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,mCAAmC,EAAE;QAC/G,WAAW,EACV,kJAAkJ;QACnJ,IAAI,EAAE,GAAG;KACT,CAAC,CAAC;IAEH,MAAM,CAAC,WAAW;QACjB,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CAAC;YAClC,kBAAkB,CAAC,QAAQ,GAAG,IAAI,kBAAkB,EAAE,CAAC;QACxD,CAAC;QACD,OAAO,kBAAkB,CAAC,QAAQ,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,aAAa;QACnB,kBAAkB,CAAC,QAAQ,GAAG,IAAI,CAAC;IACpC,CAAC;IAED,kBAAkB,CAAC,IAAsD;QACxE,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC;YAAE,OAAO;QACrC,MAAM,KAAK,GAAe,EAAE,aAAa,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;QAC/D,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * PR 3 D3 — OpenTelemetry metrics for the Janitor sweep.
3
+ *
4
+ * Operators tuning `BLOK_JANITOR_INTERVAL_MS` need real numbers per
5
+ * sweep: how long does each table's purge take, how many rows did it
6
+ * remove? This singleton exposes a histogram for sweep duration and a
7
+ * counter for purged rows, both labeled by the table being swept.
8
+ *
9
+ * Wired into `Janitor.runOnce` per-table after each purge call.
10
+ *
11
+ * No-op cleanly when OTel isn't configured (the meter API silently
12
+ * swallows recordings without an exporter).
13
+ */
14
+ interface JanitorAttributes {
15
+ table: "idempotency_cache" | "concurrency_locks" | "scheduled_dispatches";
16
+ }
17
+ export declare class JanitorMetrics {
18
+ private static instance;
19
+ private readonly sweepDurationHistogram;
20
+ private readonly purgedCounter;
21
+ private constructor();
22
+ static getInstance(): JanitorMetrics;
23
+ /** Test-only — drop the singleton so re-import gets fresh meters. */
24
+ static resetInstance(): void;
25
+ recordSweep(attrs: JanitorAttributes, durationMs: number, rowsPurged: number): void;
26
+ }
27
+ export {};
@@ -0,0 +1,48 @@
1
+ /**
2
+ * PR 3 D3 — OpenTelemetry metrics for the Janitor sweep.
3
+ *
4
+ * Operators tuning `BLOK_JANITOR_INTERVAL_MS` need real numbers per
5
+ * sweep: how long does each table's purge take, how many rows did it
6
+ * remove? This singleton exposes a histogram for sweep duration and a
7
+ * counter for purged rows, both labeled by the table being swept.
8
+ *
9
+ * Wired into `Janitor.runOnce` per-table after each purge call.
10
+ *
11
+ * No-op cleanly when OTel isn't configured (the meter API silently
12
+ * swallows recordings without an exporter).
13
+ */
14
+ import { metrics } from "@opentelemetry/api";
15
+ export class JanitorMetrics {
16
+ static instance = null;
17
+ sweepDurationHistogram = metrics.getMeter("blok").createHistogram("blok_janitor_sweep_duration_ms", {
18
+ description: "Janitor sweep duration per table.",
19
+ unit: "ms",
20
+ advice: { explicitBucketBoundaries: [1, 5, 10, 50, 100, 500, 1000, 5000, 30000] },
21
+ });
22
+ purgedCounter = metrics.getMeter("blok").createCounter("blok_janitor_purged_total", {
23
+ description: "Total rows purged by the Janitor per table.",
24
+ unit: "1",
25
+ });
26
+ constructor() { }
27
+ static getInstance() {
28
+ if (!JanitorMetrics.instance) {
29
+ JanitorMetrics.instance = new JanitorMetrics();
30
+ }
31
+ return JanitorMetrics.instance;
32
+ }
33
+ /** Test-only — drop the singleton so re-import gets fresh meters. */
34
+ static resetInstance() {
35
+ JanitorMetrics.instance = null;
36
+ }
37
+ recordSweep(attrs, durationMs, rowsPurged) {
38
+ this.sweepDurationHistogram.record(durationMs, attrs);
39
+ // Review fix-up · GAP-2. Always record the counter, even when zero.
40
+ // Without zero-row recordings, operators can't distinguish
41
+ // "Janitor running, table clean" from "Janitor not running" by
42
+ // looking at the counter alone. The duration histogram captures
43
+ // liveness too, but pairing them under the same emit cadence
44
+ // keeps dashboards consistent.
45
+ this.purgedCounter.add(rowsPurged, attrs);
46
+ }
47
+ }
48
+ //# sourceMappingURL=JanitorMetrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JanitorMetrics.js","sourceRoot":"","sources":["../../src/monitoring/JanitorMetrics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAM7C,MAAM,OAAO,cAAc;IAClB,MAAM,CAAC,QAAQ,GAA0B,IAAI,CAAC;IAErC,sBAAsB,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,gCAAgC,EAAE;QACpH,WAAW,EAAE,mCAAmC;QAChD,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,EAAE,wBAAwB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE;KACjF,CAAC,CAAC;IAEc,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,2BAA2B,EAAE;QACpG,WAAW,EAAE,6CAA6C;QAC1D,IAAI,EAAE,GAAG;KACT,CAAC,CAAC;IAEH,gBAAuB,CAAC;IAExB,MAAM,CAAC,WAAW;QACjB,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;YAC9B,cAAc,CAAC,QAAQ,GAAG,IAAI,cAAc,EAAE,CAAC;QAChD,CAAC;QACD,OAAO,cAAc,CAAC,QAAQ,CAAC;IAChC,CAAC;IAED,qEAAqE;IACrE,MAAM,CAAC,aAAa;QACnB,cAAc,CAAC,QAAQ,GAAG,IAAI,CAAC;IAChC,CAAC;IAED,WAAW,CAAC,KAAwB,EAAE,UAAkB,EAAE,UAAkB;QAC3E,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,UAAU,EAAE,KAA0C,CAAC,CAAC;QAC3F,oEAAoE;QACpE,2DAA2D;QAC3D,+DAA+D;QAC/D,gEAAgE;QAChE,6DAA6D;QAC7D,+BAA+B;QAC/B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,EAAE,KAA0C,CAAC,CAAC;IAChF,CAAC"}
@@ -180,7 +180,12 @@ export class OpenAPIGenerator {
180
180
  return this.jsonToYaml(spec);
181
181
  }
182
182
  buildOperation(workflow) {
183
+ // Caller (`generate()`) only invokes `buildOperation` for workflows
184
+ // that have an http trigger; defensive check keeps the type exact.
183
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
+ }
184
189
  const method = (httpTrigger.method || "GET").toUpperCase();
185
190
  const tag = this.inferTag(workflow);
186
191
  const operation = {
@@ -219,7 +224,7 @@ export class OpenAPIGenerator {
219
224
  // Extract path parameters
220
225
  const pathParams = this.extractPathParams(httpTrigger.path);
221
226
  for (const param of pathParams) {
222
- operation.parameters.push({
227
+ operation.parameters?.push({
223
228
  name: param,
224
229
  in: "path",
225
230
  required: true,
@@ -238,7 +243,7 @@ export class OpenAPIGenerator {
238
243
  };
239
244
  }
240
245
  // Add requestId query parameter
241
- operation.parameters.push({
246
+ operation.parameters?.push({
242
247
  name: "requestId",
243
248
  in: "query",
244
249
  required: false,
@@ -1 +1 @@
1
- {"version":3,"file":"OpenAPIGenerator.js","sourceRoot":"","sources":["../../src/openapi/OpenAPIGenerator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OpenAPIGenerator.js","sourceRoot":"","sources":["../../src/openapi/OpenAPIGenerator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * PrimitiveStack — v0.6 Phase 4 — runtime call stack of active
3
+ * primitives (forEach, loop, switch) currently executing a sub-
4
+ * pipeline.
5
+ *
6
+ * The Phase 1-3 single-slot machinery (`_blokActivePrimitiveNodeRunId`,
7
+ * `_blokForEachCurrentIteration`, `_blokForEachPartialResults`)
8
+ * could only track ONE primitive at a time. That's fine for
9
+ * `forEach > wait` and `loop > wait`, but the moment a wait fires
10
+ * inside `forEach > forEach > wait` (or `switch > forEach > wait`,
11
+ * etc.) the inner primitive overwrites the outer's sentinels —
12
+ * only the inner cursor lands in `node_runs.iteration_context`, and
13
+ * the outer primitive resumes from iteration 0 instead of iteration
14
+ * N. Phase 4 replaces the single-slot model with this stack so each
15
+ * primitive writes its own NodeRun's cursor frame on wait-throw.
16
+ *
17
+ * Mechanics:
18
+ *
19
+ * - **Each primitive pushes a frame on entry, pops in finally.**
20
+ * `cursor` is an `IterationContext` whose discriminator (`mode`)
21
+ * tells the persistence + resume code paths what shape to expect
22
+ * ("sequential" / "parallel" / "switch").
23
+ * - **The primitive owns the cursor's iteration/case state.** It
24
+ * updates `frame.cursor.iteration` (forEach/loop) or
25
+ * `frame.cursor.caseIndex` (switch) and
26
+ * `frame.cursor.completedResults` as the sub-pipeline progresses.
27
+ * - **RunnerSteps owns the inner-step cursor.** At each step
28
+ * boundary inside a deep runSteps, the runner sets the TOP
29
+ * frame's `cursor.innerStepIndex = i` so a wait fired at that step
30
+ * gets the right cursor written.
31
+ * - **The wait-throw site walks the whole stack** and persists each
32
+ * frame to its respective NodeRun. On resume, every primitive
33
+ * looks itself up by NodeRun id in the rehydrated cursor map
34
+ * (see `_blokIterationCursors` populated by `TriggerBase.run`).
35
+ *
36
+ * The stack lives on `ctx._blokPrimitiveStack` so the per-iteration
37
+ * child-ctx shallow spread inside ForEachNode / LoopNode / SwitchNode
38
+ * preserves the reference; pushes from a nested primitive are visible
39
+ * to the outer runSteps because they share the array.
40
+ */
41
+ import type { Context } from "@blokjs/shared";
42
+ import type { IterationContext } from "../tracing/types";
43
+ export interface PrimitiveStackFrame {
44
+ /** NodeRun id of the primitive that owns this frame. */
45
+ nodeRunId: string;
46
+ /** Iteration / case cursor — mutated in place as the sub-pipeline progresses. */
47
+ cursor: IterationContext;
48
+ }
49
+ export declare function getPrimitiveStack(ctx: Context): PrimitiveStackFrame[];
50
+ export declare function pushPrimitiveFrame(ctx: Context, frame: PrimitiveStackFrame): void;
51
+ export declare function popPrimitiveFrame(ctx: Context): PrimitiveStackFrame | undefined;
52
+ export declare function peekPrimitiveFrame(ctx: Context): PrimitiveStackFrame | undefined;
53
+ /**
54
+ * Read the cursor stamped onto `ctx._blokIterationCursors` for the
55
+ * given primitive step name. The map is keyed by step NAME (not
56
+ * NodeRun id) because NodeRun ids change on every dispatchDeferred
57
+ * re-entry while step names are stable. Returns `undefined` when no
58
+ * cursor was rehydrated (fresh run, no waits, sibling primitive).
59
+ * After successful resume, primitives should call
60
+ * {@link consumeRehydratedCursor} to clear the entry so sibling
61
+ * primitives later in the workflow don't accidentally re-resume.
62
+ */
63
+ export declare function readRehydratedCursor(ctx: Context, stepName: string): IterationContext | undefined;
64
+ export declare function consumeRehydratedCursor(ctx: Context, stepName: string): void;
@@ -0,0 +1,92 @@
1
+ /**
2
+ * PrimitiveStack — v0.6 Phase 4 — runtime call stack of active
3
+ * primitives (forEach, loop, switch) currently executing a sub-
4
+ * pipeline.
5
+ *
6
+ * The Phase 1-3 single-slot machinery (`_blokActivePrimitiveNodeRunId`,
7
+ * `_blokForEachCurrentIteration`, `_blokForEachPartialResults`)
8
+ * could only track ONE primitive at a time. That's fine for
9
+ * `forEach > wait` and `loop > wait`, but the moment a wait fires
10
+ * inside `forEach > forEach > wait` (or `switch > forEach > wait`,
11
+ * etc.) the inner primitive overwrites the outer's sentinels —
12
+ * only the inner cursor lands in `node_runs.iteration_context`, and
13
+ * the outer primitive resumes from iteration 0 instead of iteration
14
+ * N. Phase 4 replaces the single-slot model with this stack so each
15
+ * primitive writes its own NodeRun's cursor frame on wait-throw.
16
+ *
17
+ * Mechanics:
18
+ *
19
+ * - **Each primitive pushes a frame on entry, pops in finally.**
20
+ * `cursor` is an `IterationContext` whose discriminator (`mode`)
21
+ * tells the persistence + resume code paths what shape to expect
22
+ * ("sequential" / "parallel" / "switch").
23
+ * - **The primitive owns the cursor's iteration/case state.** It
24
+ * updates `frame.cursor.iteration` (forEach/loop) or
25
+ * `frame.cursor.caseIndex` (switch) and
26
+ * `frame.cursor.completedResults` as the sub-pipeline progresses.
27
+ * - **RunnerSteps owns the inner-step cursor.** At each step
28
+ * boundary inside a deep runSteps, the runner sets the TOP
29
+ * frame's `cursor.innerStepIndex = i` so a wait fired at that step
30
+ * gets the right cursor written.
31
+ * - **The wait-throw site walks the whole stack** and persists each
32
+ * frame to its respective NodeRun. On resume, every primitive
33
+ * looks itself up by NodeRun id in the rehydrated cursor map
34
+ * (see `_blokIterationCursors` populated by `TriggerBase.run`).
35
+ *
36
+ * The stack lives on `ctx._blokPrimitiveStack` so the per-iteration
37
+ * child-ctx shallow spread inside ForEachNode / LoopNode / SwitchNode
38
+ * preserves the reference; pushes from a nested primitive are visible
39
+ * to the outer runSteps because they share the array.
40
+ */
41
+ const STACK_KEY = "_blokPrimitiveStack";
42
+ export function getPrimitiveStack(ctx) {
43
+ const stack = ctx[STACK_KEY];
44
+ if (Array.isArray(stack))
45
+ return stack;
46
+ return [];
47
+ }
48
+ export function pushPrimitiveFrame(ctx, frame) {
49
+ const ctxAny = ctx;
50
+ let stack = ctxAny[STACK_KEY];
51
+ if (!Array.isArray(stack)) {
52
+ stack = [];
53
+ ctxAny[STACK_KEY] = stack;
54
+ }
55
+ stack.push(frame);
56
+ }
57
+ export function popPrimitiveFrame(ctx) {
58
+ const ctxAny = ctx;
59
+ const stack = ctxAny[STACK_KEY];
60
+ if (!Array.isArray(stack) || stack.length === 0)
61
+ return undefined;
62
+ return stack.pop();
63
+ }
64
+ export function peekPrimitiveFrame(ctx) {
65
+ const stack = getPrimitiveStack(ctx);
66
+ if (stack.length === 0)
67
+ return undefined;
68
+ return stack[stack.length - 1];
69
+ }
70
+ /**
71
+ * Read the cursor stamped onto `ctx._blokIterationCursors` for the
72
+ * given primitive step name. The map is keyed by step NAME (not
73
+ * NodeRun id) because NodeRun ids change on every dispatchDeferred
74
+ * re-entry while step names are stable. Returns `undefined` when no
75
+ * cursor was rehydrated (fresh run, no waits, sibling primitive).
76
+ * After successful resume, primitives should call
77
+ * {@link consumeRehydratedCursor} to clear the entry so sibling
78
+ * primitives later in the workflow don't accidentally re-resume.
79
+ */
80
+ export function readRehydratedCursor(ctx, stepName) {
81
+ const map = ctx._blokIterationCursors;
82
+ if (!(map instanceof Map))
83
+ return undefined;
84
+ return map.get(stepName);
85
+ }
86
+ export function consumeRehydratedCursor(ctx, stepName) {
87
+ const map = ctx._blokIterationCursors;
88
+ if (map instanceof Map) {
89
+ map.delete(stepName);
90
+ }
91
+ }
92
+ //# sourceMappingURL=PrimitiveStack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrimitiveStack.js","sourceRoot":"","sources":["../../src/runtime/PrimitiveStack.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAKH,MAAM,SAAS,GAAG,qBAAqB,CAAC;AASxC,MAAM,UAAU,iBAAiB,CAAC,GAAY;IAC7C,MAAM,KAAK,GAAI,GAA+B,CAAC,SAAS,CAAC,CAAC;IAC1D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAA8B,CAAC;IAChE,OAAO,EAAE,CAAC;AACX,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,GAAY,EAAE,KAA0B;IAC1E,MAAM,MAAM,GAAG,GAA8B,CAAC;IAC9C,IAAI,KAAK,GAAG,MAAM,CAAC,SAAS,CAAsC,CAAC;IACnE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,KAAK,GAAG,EAAE,CAAC;QACX,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;IAC3B,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAY;IAC7C,MAAM,MAAM,GAAG,GAA8B,CAAC;IAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAsC,CAAC;IACrE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAClE,OAAO,KAAK,CAAC,GAAG,EAAE,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,GAAY;IAC9C,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACzC,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAChC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAY,EAAE,QAAgB;IAClE,MAAM,GAAG,GAAI,GAA+B,CAAC,qBAAqB,CAAC;IACnE,IAAI,CAAC,CAAC,GAAG,YAAY,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5C,OAAQ,GAAqC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,GAAY,EAAE,QAAgB;IACrE,MAAM,GAAG,GAAI,GAA+B,CAAC,qBAAqB,CAAC;IACnE,IAAI,GAAG,YAAY,GAAG,EAAE,CAAC;QACvB,GAAqC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACzD,CAAC;AACF,CAAC"}