@cleocode/lafs 2026.3.74 → 2026.4.3

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 (143) hide show
  1. package/LICENSE +0 -0
  2. package/README.md +97 -68
  3. package/dist/schemas/v1/agent-card.schema.json +230 -0
  4. package/dist/schemas/v1/conformance-profiles.json +0 -0
  5. package/dist/schemas/v1/context-ledger.schema.json +70 -0
  6. package/dist/schemas/v1/discovery.schema.json +132 -0
  7. package/dist/schemas/v1/envelope.schema.json +0 -0
  8. package/dist/schemas/v1/error-registry.json +0 -0
  9. package/dist/src/a2a/bindings/grpc.d.ts +118 -11
  10. package/dist/src/a2a/bindings/grpc.d.ts.map +1 -0
  11. package/dist/src/a2a/bindings/grpc.js +80 -8
  12. package/dist/src/a2a/bindings/grpc.js.map +1 -0
  13. package/dist/src/a2a/bindings/http.d.ts +131 -15
  14. package/dist/src/a2a/bindings/http.d.ts.map +1 -0
  15. package/dist/src/a2a/bindings/http.js +101 -14
  16. package/dist/src/a2a/bindings/http.js.map +1 -0
  17. package/dist/src/a2a/bindings/index.d.ts +83 -9
  18. package/dist/src/a2a/bindings/index.d.ts.map +1 -0
  19. package/dist/src/a2a/bindings/index.js +74 -6
  20. package/dist/src/a2a/bindings/index.js.map +1 -0
  21. package/dist/src/a2a/bindings/jsonrpc.d.ts +194 -9
  22. package/dist/src/a2a/bindings/jsonrpc.d.ts.map +1 -0
  23. package/dist/src/a2a/bindings/jsonrpc.js +155 -10
  24. package/dist/src/a2a/bindings/jsonrpc.js.map +1 -0
  25. package/dist/src/a2a/bridge.d.ts +237 -44
  26. package/dist/src/a2a/bridge.d.ts.map +1 -0
  27. package/dist/src/a2a/bridge.js +187 -48
  28. package/dist/src/a2a/bridge.js.map +1 -0
  29. package/dist/src/a2a/extensions.d.ts +222 -12
  30. package/dist/src/a2a/extensions.d.ts.map +1 -0
  31. package/dist/src/a2a/extensions.js +178 -13
  32. package/dist/src/a2a/extensions.js.map +1 -0
  33. package/dist/src/a2a/index.d.ts +10 -7
  34. package/dist/src/a2a/index.d.ts.map +1 -0
  35. package/dist/src/a2a/index.js +24 -27
  36. package/dist/src/a2a/index.js.map +1 -0
  37. package/dist/src/a2a/streaming.d.ts +276 -3
  38. package/dist/src/a2a/streaming.d.ts.map +1 -0
  39. package/dist/src/a2a/streaming.js +255 -11
  40. package/dist/src/a2a/streaming.js.map +1 -0
  41. package/dist/src/a2a/task-lifecycle.d.ts +341 -20
  42. package/dist/src/a2a/task-lifecycle.d.ts.map +1 -0
  43. package/dist/src/a2a/task-lifecycle.js +327 -26
  44. package/dist/src/a2a/task-lifecycle.js.map +1 -0
  45. package/dist/src/budgetEnforcement.d.ts +93 -20
  46. package/dist/src/budgetEnforcement.d.ts.map +1 -0
  47. package/dist/src/budgetEnforcement.js +146 -31
  48. package/dist/src/budgetEnforcement.js.map +1 -0
  49. package/dist/src/circuit-breaker/index.d.ts +260 -10
  50. package/dist/src/circuit-breaker/index.d.ts.map +1 -0
  51. package/dist/src/circuit-breaker/index.js +226 -14
  52. package/dist/src/circuit-breaker/index.js.map +1 -0
  53. package/dist/src/cli.d.ts +1 -0
  54. package/dist/src/cli.d.ts.map +1 -0
  55. package/dist/src/cli.js +12 -11
  56. package/dist/src/cli.js.map +1 -0
  57. package/dist/src/compliance.d.ts +180 -3
  58. package/dist/src/compliance.d.ts.map +1 -0
  59. package/dist/src/compliance.js +114 -13
  60. package/dist/src/compliance.js.map +1 -0
  61. package/dist/src/conformance.d.ts +55 -2
  62. package/dist/src/conformance.d.ts.map +1 -0
  63. package/dist/src/conformance.js +124 -76
  64. package/dist/src/conformance.js.map +1 -0
  65. package/dist/src/conformanceProfiles.d.ts +68 -1
  66. package/dist/src/conformanceProfiles.d.ts.map +1 -0
  67. package/dist/src/conformanceProfiles.js +53 -1
  68. package/dist/src/conformanceProfiles.js.map +1 -0
  69. package/dist/src/deprecationRegistry.d.ts +82 -1
  70. package/dist/src/deprecationRegistry.d.ts.map +1 -0
  71. package/dist/src/deprecationRegistry.js +58 -7
  72. package/dist/src/deprecationRegistry.js.map +1 -0
  73. package/dist/src/discovery.d.ts +347 -65
  74. package/dist/src/discovery.d.ts.map +1 -0
  75. package/dist/src/discovery.js +130 -72
  76. package/dist/src/discovery.js.map +1 -0
  77. package/dist/src/envelope.d.ts +262 -9
  78. package/dist/src/envelope.d.ts.map +1 -0
  79. package/dist/src/envelope.js +179 -15
  80. package/dist/src/envelope.js.map +1 -0
  81. package/dist/src/errorRegistry.d.ts +163 -3
  82. package/dist/src/errorRegistry.d.ts.map +1 -0
  83. package/dist/src/errorRegistry.js +119 -3
  84. package/dist/src/errorRegistry.js.map +1 -0
  85. package/dist/src/fieldExtraction.d.ts +128 -27
  86. package/dist/src/fieldExtraction.d.ts.map +1 -0
  87. package/dist/src/fieldExtraction.js +100 -27
  88. package/dist/src/fieldExtraction.js.map +1 -0
  89. package/dist/src/flagResolver.d.ts +77 -10
  90. package/dist/src/flagResolver.d.ts.map +1 -0
  91. package/dist/src/flagResolver.js +22 -5
  92. package/dist/src/flagResolver.js.map +1 -0
  93. package/dist/src/flagSemantics.d.ts +80 -4
  94. package/dist/src/flagSemantics.d.ts.map +1 -0
  95. package/dist/src/flagSemantics.js +78 -11
  96. package/dist/src/flagSemantics.js.map +1 -0
  97. package/dist/src/health/index.d.ts +103 -9
  98. package/dist/src/health/index.d.ts.map +1 -0
  99. package/dist/src/health/index.js +75 -26
  100. package/dist/src/health/index.js.map +1 -0
  101. package/dist/src/index.d.ts +34 -23
  102. package/dist/src/index.d.ts.map +1 -0
  103. package/dist/src/index.js +40 -28
  104. package/dist/src/index.js.map +1 -0
  105. package/dist/src/mviProjection.d.ts +43 -6
  106. package/dist/src/mviProjection.d.ts.map +1 -0
  107. package/dist/src/mviProjection.js +32 -5
  108. package/dist/src/mviProjection.js.map +1 -0
  109. package/dist/src/native-loader.d.ts +49 -0
  110. package/dist/src/native-loader.d.ts.map +1 -0
  111. package/dist/src/native-loader.js +56 -0
  112. package/dist/src/native-loader.js.map +1 -0
  113. package/dist/src/problemDetails.d.ts +71 -4
  114. package/dist/src/problemDetails.d.ts.map +1 -0
  115. package/dist/src/problemDetails.js +27 -3
  116. package/dist/src/problemDetails.js.map +1 -0
  117. package/dist/src/shutdown/index.d.ts +103 -9
  118. package/dist/src/shutdown/index.d.ts.map +1 -0
  119. package/dist/src/shutdown/index.js +78 -12
  120. package/dist/src/shutdown/index.js.map +1 -0
  121. package/dist/src/tokenEstimator.d.ts +98 -11
  122. package/dist/src/tokenEstimator.d.ts.map +1 -0
  123. package/dist/src/tokenEstimator.js +91 -13
  124. package/dist/src/tokenEstimator.js.map +1 -0
  125. package/dist/src/types.d.ts +477 -11
  126. package/dist/src/types.d.ts.map +1 -0
  127. package/dist/src/types.js +76 -2
  128. package/dist/src/types.js.map +1 -0
  129. package/dist/src/validateEnvelope.d.ts +61 -2
  130. package/dist/src/validateEnvelope.d.ts.map +1 -0
  131. package/dist/src/validateEnvelope.js +81 -14
  132. package/dist/src/validateEnvelope.js.map +1 -0
  133. package/dist/tsconfig.build.tsbuildinfo +1 -0
  134. package/lafs.md +3 -4
  135. package/package.json +14 -12
  136. package/schemas/v1/agent-card.schema.json +0 -0
  137. package/schemas/v1/conformance-profiles.json +0 -0
  138. package/schemas/v1/context-ledger.schema.json +0 -0
  139. package/schemas/v1/discovery.schema.json +0 -0
  140. package/schemas/v1/envelope.schema.json +0 -0
  141. package/schemas/v1/error-registry.json +0 -0
  142. package/dist/src/mcpAdapter.d.ts +0 -28
  143. package/dist/src/mcpAdapter.js +0 -281
@@ -1,16 +1,48 @@
1
1
  /**
2
2
  * LAFS Circuit Breaker Module
3
3
  *
4
- * Provides circuit breaker pattern for resilient service calls
4
+ * Provides circuit breaker pattern for resilient service calls.
5
+ *
6
+ * @packageDocumentation
7
+ */
8
+ /**
9
+ * Error thrown when a circuit breaker rejects a call.
10
+ *
11
+ * @remarks
12
+ * This error is raised when the circuit is in the OPEN state or when the
13
+ * HALF_OPEN call limit has been reached. Callers should catch this to
14
+ * implement fallback logic or return a 503 response.
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * try {
19
+ * await breaker.execute(() => fetch('/api'));
20
+ * } catch (err) {
21
+ * if (err instanceof CircuitBreakerError) {
22
+ * console.log('Circuit open, using fallback');
23
+ * }
24
+ * }
25
+ * ```
5
26
  */
6
27
  export class CircuitBreakerError extends Error {
28
+ /**
29
+ * Creates a new CircuitBreakerError.
30
+ *
31
+ * @param message - Descriptive error message indicating why the call was rejected
32
+ */
7
33
  constructor(message) {
8
34
  super(message);
9
35
  this.name = 'CircuitBreakerError';
10
36
  }
11
37
  }
12
38
  /**
13
- * Circuit breaker for protecting against cascading failures
39
+ * Circuit breaker for protecting against cascading failures.
40
+ *
41
+ * @remarks
42
+ * Implements the circuit breaker pattern with three states: CLOSED (normal),
43
+ * OPEN (rejecting calls), and HALF_OPEN (testing recovery). The breaker
44
+ * automatically transitions between states based on failure and success
45
+ * thresholds, and schedules reset timers when the circuit opens.
14
46
  *
15
47
  * @example
16
48
  * ```typescript
@@ -35,14 +67,27 @@ export class CircuitBreakerError extends Error {
35
67
  */
36
68
  export class CircuitBreaker {
37
69
  config;
70
+ /** Current circuit state. */
38
71
  state = 'CLOSED';
72
+ /** Total failure count since last reset. */
39
73
  failures = 0;
74
+ /** Total success count since last reset. */
40
75
  successes = 0;
76
+ /** Timestamp of the most recent failure. */
41
77
  lastFailureTime;
78
+ /** Consecutive successes since the last failure. */
42
79
  consecutiveSuccesses = 0;
80
+ /** Lifetime call count. */
43
81
  totalCalls = 0;
82
+ /** Number of calls made while in the HALF_OPEN state. */
44
83
  halfOpenCalls = 0;
84
+ /** Timer handle for the scheduled OPEN-to-HALF_OPEN transition. */
45
85
  resetTimer;
86
+ /**
87
+ * Creates a new CircuitBreaker with the given configuration.
88
+ *
89
+ * @param config - Circuit breaker configuration with name, thresholds, and timeouts
90
+ */
46
91
  constructor(config) {
47
92
  this.config = config;
48
93
  this.config = {
@@ -50,11 +95,28 @@ export class CircuitBreaker {
50
95
  resetTimeout: 30000,
51
96
  halfOpenMaxCalls: 3,
52
97
  successThreshold: 2,
53
- ...config
98
+ ...config,
54
99
  };
55
100
  }
56
101
  /**
57
- * Execute a function with circuit breaker protection
102
+ * Execute a function with circuit breaker protection.
103
+ *
104
+ * @remarks
105
+ * When the circuit is CLOSED, calls pass through normally. When OPEN, calls
106
+ * are rejected with a {@link CircuitBreakerError} unless the reset timeout has
107
+ * elapsed (triggering HALF_OPEN). In HALF_OPEN, a limited number of trial
108
+ * calls are permitted; successes may close the circuit while failures re-open it.
109
+ *
110
+ * @typeParam T - Return type of the wrapped function
111
+ * @param fn - Async function to execute under circuit breaker protection
112
+ * @returns The result of invoking `fn`
113
+ *
114
+ * @example
115
+ * ```typescript
116
+ * const result = await breaker.execute(async () => {
117
+ * return await fetch('https://api.example.com/data');
118
+ * });
119
+ * ```
58
120
  */
59
121
  async execute(fn) {
60
122
  this.totalCalls++;
@@ -83,13 +145,40 @@ export class CircuitBreaker {
83
145
  }
84
146
  }
85
147
  /**
86
- * Get current circuit breaker state
148
+ * Get the current circuit breaker state.
149
+ *
150
+ * @remarks
151
+ * Returns one of `'CLOSED'`, `'OPEN'`, or `'HALF_OPEN'`. Useful for
152
+ * dashboards or conditional logic that needs to know whether calls will
153
+ * be accepted.
154
+ *
155
+ * @returns The current {@link CircuitState}
156
+ *
157
+ * @example
158
+ * ```typescript
159
+ * if (breaker.getState() === 'OPEN') {
160
+ * console.log('Circuit is open, requests will be rejected');
161
+ * }
162
+ * ```
87
163
  */
88
164
  getState() {
89
165
  return this.state;
90
166
  }
91
167
  /**
92
- * Get circuit breaker metrics
168
+ * Get a snapshot of the circuit breaker's runtime metrics.
169
+ *
170
+ * @remarks
171
+ * Returns a copy of the internal counters including failure/success counts,
172
+ * the current state, and the timestamp of the last failure. Useful for
173
+ * monitoring and observability.
174
+ *
175
+ * @returns A {@link CircuitBreakerMetrics} snapshot
176
+ *
177
+ * @example
178
+ * ```typescript
179
+ * const metrics = breaker.getMetrics();
180
+ * console.log(`State: ${metrics.state}, Failures: ${metrics.failures}`);
181
+ * ```
93
182
  */
94
183
  getMetrics() {
95
184
  return {
@@ -98,22 +187,45 @@ export class CircuitBreaker {
98
187
  successes: this.successes,
99
188
  lastFailureTime: this.lastFailureTime,
100
189
  consecutiveSuccesses: this.consecutiveSuccesses,
101
- totalCalls: this.totalCalls
190
+ totalCalls: this.totalCalls,
102
191
  };
103
192
  }
104
193
  /**
105
- * Manually open the circuit breaker
194
+ * Manually open the circuit breaker, rejecting all subsequent calls.
195
+ *
196
+ * @remarks
197
+ * Forces the circuit into the OPEN state regardless of the current failure
198
+ * count. Useful for administrative controls or when an external signal
199
+ * indicates the downstream service is unavailable.
200
+ *
201
+ * @example
202
+ * ```typescript
203
+ * breaker.forceOpen();
204
+ * console.log(breaker.getState()); // 'OPEN'
205
+ * ```
106
206
  */
107
207
  forceOpen() {
108
208
  this.transitionTo('OPEN');
109
209
  }
110
210
  /**
111
- * Manually close the circuit breaker
211
+ * Manually close the circuit breaker and reset all counters.
212
+ *
213
+ * @remarks
214
+ * Forces the circuit into the CLOSED state and clears failure/success
215
+ * counters and any pending reset timer. Useful for administrative recovery
216
+ * after a known issue has been resolved.
217
+ *
218
+ * @example
219
+ * ```typescript
220
+ * breaker.forceClose();
221
+ * console.log(breaker.getState()); // 'CLOSED'
222
+ * ```
112
223
  */
113
224
  forceClose() {
114
225
  this.transitionTo('CLOSED');
115
226
  this.reset();
116
227
  }
228
+ /** Records a successful call and may transition from HALF_OPEN to CLOSED. */
117
229
  onSuccess() {
118
230
  this.successes++;
119
231
  this.consecutiveSuccesses++;
@@ -124,6 +236,7 @@ export class CircuitBreaker {
124
236
  }
125
237
  }
126
238
  }
239
+ /** Records a failed call and may trip the circuit to OPEN. */
127
240
  onFailure() {
128
241
  this.failures++;
129
242
  this.consecutiveSuccesses = 0;
@@ -139,6 +252,7 @@ export class CircuitBreaker {
139
252
  }
140
253
  }
141
254
  }
255
+ /** Transitions the circuit to the given state, resetting HALF_OPEN call count when entering HALF_OPEN. */
142
256
  transitionTo(newState) {
143
257
  console.log(`Circuit breaker '${this.config.name}': ${this.state} -> ${newState}`);
144
258
  this.state = newState;
@@ -146,12 +260,14 @@ export class CircuitBreaker {
146
260
  this.halfOpenCalls = 0;
147
261
  }
148
262
  }
263
+ /** Returns `true` if enough time has elapsed since the last failure to attempt a reset. */
149
264
  shouldAttemptReset() {
150
265
  if (!this.lastFailureTime)
151
266
  return true;
152
267
  const elapsed = Date.now() - this.lastFailureTime.getTime();
153
268
  return elapsed >= (this.config.resetTimeout || 30000);
154
269
  }
270
+ /** Schedules a timer to transition from OPEN to HALF_OPEN after the configured reset timeout. */
155
271
  scheduleReset() {
156
272
  if (this.resetTimer) {
157
273
  clearTimeout(this.resetTimer);
@@ -162,6 +278,7 @@ export class CircuitBreaker {
162
278
  }
163
279
  }, this.config.resetTimeout || 30000);
164
280
  }
281
+ /** Resets all failure/success counters and clears the pending reset timer. */
165
282
  reset() {
166
283
  this.failures = 0;
167
284
  this.consecutiveSuccesses = 0;
@@ -173,7 +290,12 @@ export class CircuitBreaker {
173
290
  }
174
291
  }
175
292
  /**
176
- * Circuit breaker registry for managing multiple breakers
293
+ * Registry for managing multiple named circuit breakers.
294
+ *
295
+ * @remarks
296
+ * Provides centralized creation, lookup, and metrics aggregation for
297
+ * circuit breakers. Each breaker is stored by name and can be retrieved
298
+ * or lazily created via {@link CircuitBreakerRegistry.getOrCreate}.
177
299
  *
178
300
  * @example
179
301
  * ```typescript
@@ -188,15 +310,65 @@ export class CircuitBreaker {
188
310
  * ```
189
311
  */
190
312
  export class CircuitBreakerRegistry {
313
+ /** Internal map of circuit breaker name to instance. */
191
314
  breakers = new Map();
315
+ /**
316
+ * Register a new circuit breaker with the given name and configuration.
317
+ *
318
+ * @remarks
319
+ * Creates a new {@link CircuitBreaker}, stores it in the registry, and
320
+ * returns it. If a breaker with the same name already exists, it is replaced.
321
+ *
322
+ * @param name - Unique name for the circuit breaker
323
+ * @param config - Configuration options (name is set automatically)
324
+ * @returns The newly created {@link CircuitBreaker}
325
+ *
326
+ * @example
327
+ * ```typescript
328
+ * const breaker = registry.add('user-service', { failureThreshold: 3 });
329
+ * ```
330
+ */
192
331
  add(name, config) {
193
332
  const breaker = new CircuitBreaker({ ...config, name });
194
333
  this.breakers.set(name, breaker);
195
334
  return breaker;
196
335
  }
336
+ /**
337
+ * Retrieve a circuit breaker by name.
338
+ *
339
+ * @remarks
340
+ * Returns `undefined` if no breaker with the given name has been registered.
341
+ *
342
+ * @param name - Name of the circuit breaker to look up
343
+ * @returns The matching {@link CircuitBreaker}, or `undefined` if not found
344
+ *
345
+ * @example
346
+ * ```typescript
347
+ * const breaker = registry.get('payment-api');
348
+ * if (breaker) {
349
+ * await breaker.execute(() => callPaymentApi());
350
+ * }
351
+ * ```
352
+ */
197
353
  get(name) {
198
354
  return this.breakers.get(name);
199
355
  }
356
+ /**
357
+ * Retrieve an existing circuit breaker or create one if it does not exist.
358
+ *
359
+ * @remarks
360
+ * This is useful when callers want a breaker but do not know whether it
361
+ * has already been registered, avoiding duplicate creation.
362
+ *
363
+ * @param name - Name of the circuit breaker
364
+ * @param config - Configuration to use if a new breaker must be created
365
+ * @returns The existing or newly created {@link CircuitBreaker}
366
+ *
367
+ * @example
368
+ * ```typescript
369
+ * const breaker = registry.getOrCreate('cache-api', { failureThreshold: 10 });
370
+ * ```
371
+ */
200
372
  getOrCreate(name, config) {
201
373
  let breaker = this.breakers.get(name);
202
374
  if (!breaker) {
@@ -204,6 +376,23 @@ export class CircuitBreakerRegistry {
204
376
  }
205
377
  return breaker;
206
378
  }
379
+ /**
380
+ * Collect metrics from all registered circuit breakers.
381
+ *
382
+ * @remarks
383
+ * Returns a record keyed by breaker name with each value being the
384
+ * corresponding {@link CircuitBreakerMetrics} snapshot.
385
+ *
386
+ * @returns A record mapping breaker names to their current metrics
387
+ *
388
+ * @example
389
+ * ```typescript
390
+ * const allMetrics = registry.getAllMetrics();
391
+ * for (const [name, metrics] of Object.entries(allMetrics)) {
392
+ * console.log(`${name}: ${metrics.state}`);
393
+ * }
394
+ * ```
395
+ */
207
396
  getAllMetrics() {
208
397
  const metrics = {};
209
398
  this.breakers.forEach((breaker, name) => {
@@ -211,12 +400,34 @@ export class CircuitBreakerRegistry {
211
400
  });
212
401
  return metrics;
213
402
  }
403
+ /**
404
+ * Force-close all registered circuit breakers, resetting their counters.
405
+ *
406
+ * @remarks
407
+ * Iterates over every registered breaker and calls {@link CircuitBreaker.forceClose}.
408
+ * Useful for administrative recovery or test teardown.
409
+ *
410
+ * @example
411
+ * ```typescript
412
+ * registry.resetAll();
413
+ * ```
414
+ */
214
415
  resetAll() {
215
- this.breakers.forEach(breaker => breaker.forceClose());
416
+ this.breakers.forEach((breaker) => {
417
+ breaker.forceClose();
418
+ });
216
419
  }
217
420
  }
218
421
  /**
219
- * Create a circuit breaker middleware for Express
422
+ * Create an Express middleware that wraps downstream handlers with a circuit breaker.
423
+ *
424
+ * @remarks
425
+ * Instantiates a {@link CircuitBreaker} from the provided config and wraps the
426
+ * `next()` call. When the circuit is open, the middleware responds with a 503
427
+ * status and a JSON error body instead of forwarding the request.
428
+ *
429
+ * @param config - Circuit breaker configuration for the middleware instance
430
+ * @returns An Express-compatible middleware function
220
431
  *
221
432
  * @example
222
433
  * ```typescript
@@ -228,7 +439,7 @@ export class CircuitBreakerRegistry {
228
439
  */
229
440
  export function circuitBreakerMiddleware(config) {
230
441
  const breaker = new CircuitBreaker(config);
231
- return async (req, res, next) => {
442
+ return async (_req, res, next) => {
232
443
  try {
233
444
  await breaker.execute(async () => {
234
445
  next();
@@ -238,7 +449,7 @@ export function circuitBreakerMiddleware(config) {
238
449
  if (error instanceof CircuitBreakerError) {
239
450
  res.status(503).json({
240
451
  error: 'Service temporarily unavailable',
241
- reason: 'Circuit breaker is open'
452
+ reason: 'Circuit breaker is open',
242
453
  });
243
454
  }
244
455
  else {
@@ -247,3 +458,4 @@ export function circuitBreakerMiddleware(config) {
247
458
  }
248
459
  };
249
460
  }
461
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/circuit-breaker/index.ts"],"names":[],"mappings":"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"}
package/dist/src/cli.d.ts CHANGED
@@ -14,3 +14,4 @@
14
14
  * @epic T034
15
15
  */
16
16
  export {};
17
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;GAaG"}
package/dist/src/cli.js CHANGED
@@ -13,18 +13,18 @@
13
13
  * @task T042
14
14
  * @epic T034
15
15
  */
16
- import { readFile } from "node:fs/promises";
17
- import { runEnvelopeConformance, runFlagConformance } from "./conformance.js";
16
+ import { readFile } from 'node:fs/promises';
17
+ import { runEnvelopeConformance, runFlagConformance } from './conformance.js';
18
18
  function parseArgs(argv) {
19
19
  const args = {};
20
20
  for (let i = 0; i < argv.length; i += 1) {
21
21
  const current = argv[i];
22
22
  const next = argv[i + 1];
23
- if (current === "--envelope" && next) {
23
+ if (current === '--envelope' && next) {
24
24
  args.envelopePath = next;
25
25
  i += 1;
26
26
  }
27
- else if (current === "--flags" && next) {
27
+ else if (current === '--flags' && next) {
28
28
  args.flagsPath = next;
29
29
  i += 1;
30
30
  }
@@ -32,7 +32,7 @@ function parseArgs(argv) {
32
32
  return args;
33
33
  }
34
34
  async function readJson(path) {
35
- const content = await readFile(path, "utf8");
35
+ const content = await readFile(path, 'utf8');
36
36
  return JSON.parse(content);
37
37
  }
38
38
  async function main() {
@@ -40,14 +40,14 @@ async function main() {
40
40
  const reports = [];
41
41
  if (args.envelopePath) {
42
42
  const envelope = await readJson(args.envelopePath);
43
- reports.push({ name: "envelope", report: runEnvelopeConformance(envelope) });
43
+ reports.push({ name: 'envelope', report: runEnvelopeConformance(envelope) });
44
44
  }
45
45
  if (args.flagsPath) {
46
46
  const flags = await readJson(args.flagsPath);
47
- reports.push({ name: "flags", report: runFlagConformance(flags) });
47
+ reports.push({ name: 'flags', report: runFlagConformance(flags) });
48
48
  }
49
49
  if (reports.length === 0) {
50
- throw new Error("Provide --envelope and/or --flags JSON files.");
50
+ throw new Error('Provide --envelope and/or --flags JSON files.');
51
51
  }
52
52
  console.log(JSON.stringify({ success: true, reports }, null, 2));
53
53
  }
@@ -55,9 +55,10 @@ main().catch((error) => {
55
55
  console.error(JSON.stringify({
56
56
  success: false,
57
57
  error: {
58
- code: "E_INTERNAL_UNEXPECTED",
59
- message: error instanceof Error ? error.message : String(error)
60
- }
58
+ code: 'E_INTERNAL_UNEXPECTED',
59
+ message: error instanceof Error ? error.message : String(error),
60
+ },
61
61
  }, null, 2));
62
62
  process.exit(1);
63
63
  });
64
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAO9E,SAAS,SAAS,CAAC,IAAc;IAC/B,MAAM,IAAI,GAAY,EAAE,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,IAAI,OAAO,KAAK,YAAY,IAAI,IAAI,EAAE,CAAC;YACrC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;aAAM,IAAI,OAAO,KAAK,SAAS,IAAI,IAAI,EAAE,CAAC;YACzC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,IAAY;IAClC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAY,CAAC;AACxC,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9C,MAAM,OAAO,GAAc,EAAE,CAAC;IAE9B,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,sBAAsB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,kBAAkB,CAAC,KAAc,CAAC,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CACX,IAAI,CAAC,SAAS,CACZ;QACE,OAAO,EAAE,KAAK;QACd,KAAK,EAAE;YACL,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAChE;KACF,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}