@sriinnu/kosha-discovery 1.2.0 → 1.5.1

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 (164) hide show
  1. package/README.md +125 -52
  2. package/dist/aliases.d.ts +6 -1
  3. package/dist/aliases.d.ts.map +1 -1
  4. package/dist/aliases.js +38 -12
  5. package/dist/aliases.js.map +1 -1
  6. package/dist/cache.d.ts.map +1 -1
  7. package/dist/cache.js +40 -3
  8. package/dist/cache.js.map +1 -1
  9. package/dist/claude-generation.d.ts +59 -0
  10. package/dist/claude-generation.d.ts.map +1 -0
  11. package/dist/claude-generation.js +117 -0
  12. package/dist/claude-generation.js.map +1 -0
  13. package/dist/cli-cmd-doctor.d.ts +17 -0
  14. package/dist/cli-cmd-doctor.d.ts.map +1 -0
  15. package/dist/cli-cmd-doctor.js +199 -0
  16. package/dist/cli-cmd-doctor.js.map +1 -0
  17. package/dist/cli-cmd-model.js +2 -2
  18. package/dist/cli-cmd-model.js.map +1 -1
  19. package/dist/cli-cmd-spend.d.ts +10 -0
  20. package/dist/cli-cmd-spend.d.ts.map +1 -0
  21. package/dist/cli-cmd-spend.js +130 -0
  22. package/dist/cli-cmd-spend.js.map +1 -0
  23. package/dist/cli-commands.d.ts +4 -1
  24. package/dist/cli-commands.d.ts.map +1 -1
  25. package/dist/cli-commands.js +10 -2
  26. package/dist/cli-commands.js.map +1 -1
  27. package/dist/cli-format.js.map +1 -1
  28. package/dist/cli-help.d.ts.map +1 -1
  29. package/dist/cli-help.js +13 -2
  30. package/dist/cli-help.js.map +1 -1
  31. package/dist/cli.js +10 -0
  32. package/dist/cli.js.map +1 -1
  33. package/dist/cost.d.ts +152 -0
  34. package/dist/cost.d.ts.map +1 -0
  35. package/dist/cost.js +377 -0
  36. package/dist/cost.js.map +1 -0
  37. package/dist/credentials/resolver.d.ts +10 -0
  38. package/dist/credentials/resolver.d.ts.map +1 -1
  39. package/dist/credentials/resolver.js +64 -31
  40. package/dist/credentials/resolver.js.map +1 -1
  41. package/dist/discovery/anthropic.d.ts +19 -1
  42. package/dist/discovery/anthropic.d.ts.map +1 -1
  43. package/dist/discovery/anthropic.js +112 -8
  44. package/dist/discovery/anthropic.js.map +1 -1
  45. package/dist/discovery/base.d.ts +7 -0
  46. package/dist/discovery/base.d.ts.map +1 -1
  47. package/dist/discovery/base.js +32 -4
  48. package/dist/discovery/base.js.map +1 -1
  49. package/dist/discovery/bedrock.d.ts.map +1 -1
  50. package/dist/discovery/cerebras.d.ts.map +1 -1
  51. package/dist/discovery/cohere.d.ts.map +1 -1
  52. package/dist/discovery/deepinfra.d.ts.map +1 -1
  53. package/dist/discovery/deepseek.d.ts.map +1 -1
  54. package/dist/discovery/fireworks.d.ts.map +1 -1
  55. package/dist/discovery/glm.d.ts.map +1 -1
  56. package/dist/discovery/google.d.ts +3 -1
  57. package/dist/discovery/google.d.ts.map +1 -1
  58. package/dist/discovery/google.js +13 -6
  59. package/dist/discovery/google.js.map +1 -1
  60. package/dist/discovery/groq.d.ts.map +1 -1
  61. package/dist/discovery/index.d.ts +2 -0
  62. package/dist/discovery/index.d.ts.map +1 -1
  63. package/dist/discovery/index.js +6 -0
  64. package/dist/discovery/index.js.map +1 -1
  65. package/dist/discovery/llama-cpp.d.ts.map +1 -1
  66. package/dist/discovery/lmstudio.d.ts +26 -0
  67. package/dist/discovery/lmstudio.d.ts.map +1 -0
  68. package/dist/discovery/lmstudio.js +93 -0
  69. package/dist/discovery/lmstudio.js.map +1 -0
  70. package/dist/discovery/minimax.d.ts.map +1 -1
  71. package/dist/discovery/mistral.d.ts.map +1 -1
  72. package/dist/discovery/moonshot.d.ts.map +1 -1
  73. package/dist/discovery/nvidia.d.ts.map +1 -1
  74. package/dist/discovery/ollama.d.ts.map +1 -1
  75. package/dist/discovery/openai-compatible.d.ts.map +1 -1
  76. package/dist/discovery/openai.d.ts.map +1 -1
  77. package/dist/discovery/openrouter.d.ts +29 -5
  78. package/dist/discovery/openrouter.d.ts.map +1 -1
  79. package/dist/discovery/openrouter.js +56 -18
  80. package/dist/discovery/openrouter.js.map +1 -1
  81. package/dist/discovery/perplexity.d.ts.map +1 -1
  82. package/dist/discovery/promo-overrides.js.map +1 -1
  83. package/dist/discovery/static-direct.d.ts +9 -1
  84. package/dist/discovery/static-direct.d.ts.map +1 -1
  85. package/dist/discovery/static-direct.js +68 -7
  86. package/dist/discovery/static-direct.js.map +1 -1
  87. package/dist/discovery/together.d.ts.map +1 -1
  88. package/dist/discovery/vercel.d.ts.map +1 -1
  89. package/dist/discovery/vertex.d.ts.map +1 -1
  90. package/dist/discovery/vllm.d.ts +26 -0
  91. package/dist/discovery/vllm.d.ts.map +1 -0
  92. package/dist/discovery/vllm.js +93 -0
  93. package/dist/discovery/vllm.js.map +1 -0
  94. package/dist/discovery/zai.d.ts.map +1 -1
  95. package/dist/discovery-contract.d.ts +7 -0
  96. package/dist/discovery-contract.d.ts.map +1 -1
  97. package/dist/discovery-contract.js.map +1 -1
  98. package/dist/discovery-routes.d.ts +9 -0
  99. package/dist/discovery-routes.d.ts.map +1 -1
  100. package/dist/discovery-routes.js +106 -18
  101. package/dist/discovery-routes.js.map +1 -1
  102. package/dist/enrichment/litellm.d.ts +1 -1
  103. package/dist/enrichment/litellm.d.ts.map +1 -1
  104. package/dist/enrichment/litellm.js +3 -3
  105. package/dist/entry.d.ts +14 -0
  106. package/dist/entry.d.ts.map +1 -0
  107. package/dist/entry.js +26 -0
  108. package/dist/entry.js.map +1 -0
  109. package/dist/index.d.ts +10 -0
  110. package/dist/index.d.ts.map +1 -1
  111. package/dist/index.js +5 -0
  112. package/dist/index.js.map +1 -1
  113. package/dist/mcp-server.d.ts +207 -2
  114. package/dist/mcp-server.d.ts.map +1 -1
  115. package/dist/mcp-server.js +203 -51
  116. package/dist/mcp-server.js.map +1 -1
  117. package/dist/model-features.d.ts.map +1 -1
  118. package/dist/model-features.js +11 -2
  119. package/dist/model-features.js.map +1 -1
  120. package/dist/normalize.d.ts +7 -7
  121. package/dist/normalize.js +8 -8
  122. package/dist/provider-catalog.d.ts.map +1 -1
  123. package/dist/provider-catalog.js +26 -0
  124. package/dist/provider-catalog.js.map +1 -1
  125. package/dist/proxy.d.ts +49 -7
  126. package/dist/proxy.d.ts.map +1 -1
  127. package/dist/proxy.js +754 -89
  128. package/dist/proxy.js.map +1 -1
  129. package/dist/registry-query.js +2 -2
  130. package/dist/registry-query.js.map +1 -1
  131. package/dist/registry-routing.d.ts +65 -0
  132. package/dist/registry-routing.d.ts.map +1 -0
  133. package/dist/registry-routing.js +165 -0
  134. package/dist/registry-routing.js.map +1 -0
  135. package/dist/registry-runtime.d.ts +2 -0
  136. package/dist/registry-runtime.d.ts.map +1 -1
  137. package/dist/registry-runtime.js +177 -23
  138. package/dist/registry-runtime.js.map +1 -1
  139. package/dist/registry-selection.js +6 -0
  140. package/dist/registry-selection.js.map +1 -1
  141. package/dist/registry.d.ts +69 -0
  142. package/dist/registry.d.ts.map +1 -1
  143. package/dist/registry.js +133 -1
  144. package/dist/registry.js.map +1 -1
  145. package/dist/resilience.d.ts +15 -0
  146. package/dist/resilience.d.ts.map +1 -1
  147. package/dist/resilience.js +23 -1
  148. package/dist/resilience.js.map +1 -1
  149. package/dist/server.d.ts +44 -2
  150. package/dist/server.d.ts.map +1 -1
  151. package/dist/server.js +328 -33
  152. package/dist/server.js.map +1 -1
  153. package/dist/tally.d.ts +80 -0
  154. package/dist/tally.d.ts.map +1 -0
  155. package/dist/tally.js +176 -0
  156. package/dist/tally.js.map +1 -0
  157. package/dist/types.d.ts +22 -1
  158. package/dist/types.d.ts.map +1 -1
  159. package/dist/wire-anthropic.d.ts +264 -0
  160. package/dist/wire-anthropic.d.ts.map +1 -0
  161. package/dist/wire-anthropic.js +960 -0
  162. package/dist/wire-anthropic.js.map +1 -0
  163. package/package.json +14 -10
  164. package/logo.png +0 -0
package/dist/registry.js CHANGED
@@ -13,6 +13,7 @@ import { normalizeModelId } from "./normalize.js";
13
13
  import { registryBuildSnapshot, registryClassifyError, registryDiscoveryDelta, registryDiscoverySnapshot, registryMakeCursor, registryRecordDiscoveryMutation, registryRecordObservation, registrySnapshotForDelta, registryWatchDiscovery, } from "./registry-discovery.js";
14
14
  import { modelRoles, modelSupportsRole, normalizeRoleToken, registryCapabilities, registryCheapestModels, registryMissingCredentialPrompts, registryModelRouteInfo, registryModelRoutes, registryModels, registryProviderRoles, } from "./registry-query.js";
15
15
  import { registryCheapestCandidates, registryExecutionBindingHints, } from "./registry-selection.js";
16
+ import { providerRouteHealth, rankCandidatesByStrategy, } from "./registry-routing.js";
16
17
  import { createRegistryState } from "./registry-state.js";
17
18
  import { enrichRegistryModels, registryEnrichOnly, fallbackRegistryCredential, getRegistryCredentialResolver, loadRegistryDiscoverers, loadRegistryFromCache, populateRegistryModelAliases, registryDiscover, registryRefresh, saveRegistryToCache, } from "./registry-runtime.js";
18
19
  /**
@@ -20,6 +21,22 @@ import { enrichRegistryModels, registryEnrichOnly, fallbackRegistryCredential, g
20
21
  */
21
22
  export class ModelRegistry {
22
23
  state;
24
+ /**
25
+ * FIFO tail used to serialize in-process discovery passes.
26
+ *
27
+ * `registryDiscover` mutates shared state (providerMap, deltaHistory,
28
+ * currentCursor, discoveryRevision, lastSnapshotCache) with no internal
29
+ * lock. Without serialization, two concurrent `discover()` calls — a
30
+ * POST /api/refresh racing boot, or two refreshes — both capture the same
31
+ * stale beforeSnapshot, both push a delta, and both rewrite the cursor,
32
+ * corrupting the v1 delta stream that daemon consumers sync on. Each
33
+ * `discover()` chains onto this tail so passes run strictly one after
34
+ * another; the stored tail always settles (it swallows rejection) so one
35
+ * failed pass can never dead-end the chain, while each caller still
36
+ * awaits its own promise and observes its own rejection. The cross-
37
+ * process manifest file lock is unchanged.
38
+ */
39
+ discoverChain = Promise.resolve();
23
40
  constructor(config) {
24
41
  this.state = createRegistryState(config);
25
42
  this.currentCursor = registryMakeCursor(this.state);
@@ -39,10 +56,23 @@ export class ModelRegistry {
39
56
  set lastSnapshotCache(value) { this.state.lastSnapshotCache = value; }
40
57
  /**
41
58
  * Run discovery across all or selected providers.
59
+ *
60
+ * Serialized per-instance: concurrent calls queue FIFO on
61
+ * {@link discoverChain} so the v1 delta stream stays consistent. Each
62
+ * caller awaits its own turn and observes its own result or rejection —
63
+ * a failed pass never blocks the next one.
42
64
  */
43
65
  async discover(options) {
44
66
  const credentialResolver = await getRegistryCredentialResolver();
45
- return registryDiscover(this.state, this.dependencies(credentialResolver), options);
67
+ const dependencies = this.dependencies(credentialResolver);
68
+ // Chain this pass onto the in-flight tail so it runs only after the
69
+ // previous pass settles, preserving FIFO ordering of state mutations.
70
+ const run = this.discoverChain.then(() => registryDiscover(this.state, dependencies, options));
71
+ // The stored tail swallows rejection: a rejected discover() must not
72
+ // permanently block subsequent callers. `run` (returned to this
73
+ // caller) still propagates the rejection so the caller sees the error.
74
+ this.discoverChain = run.then(() => undefined, () => undefined);
75
+ return run;
46
76
  }
47
77
  /**
48
78
  * Force a fresh discovery pass, bypassing cache for the targeted scope.
@@ -90,6 +120,24 @@ export class ModelRegistry {
90
120
  cheapestModels(options) {
91
121
  return registryCheapestModels(this.state, options);
92
122
  }
123
+ /**
124
+ * Rank candidate routes for a query by a selection {@link RouteStrategy}
125
+ * — `cheapest` (price), `fastest` (observed p95 latency), `reliable`
126
+ * (circuit-breaker + timeout health), or `balanced` (a weighted blend).
127
+ *
128
+ * The candidate set is the same price-filtered pool as
129
+ * {@link cheapestModels}; the strategy only changes the ordering and folds
130
+ * in the runtime health kosha already tracks. Open-breaker providers always
131
+ * sort last, which is what makes this usable as a failover order.
132
+ */
133
+ rankedRoutes(options, strategy = "cheapest") {
134
+ const result = registryCheapestModels(this.state, { includeUnpriced: true, ...options });
135
+ return rankCandidatesByStrategy(this.state, result.matches, strategy);
136
+ }
137
+ /** Read-only runtime health for one provider (breaker state, latency, reliability). */
138
+ providerRouteHealth(providerId) {
139
+ return providerRouteHealth(this.state, normalizeProviderId(providerId) ?? providerId);
140
+ }
93
141
  /** Return every provider route for a normalized model identifier. */
94
142
  modelRoutes(modelId) {
95
143
  return registryModelRoutes(this.state, modelId);
@@ -144,6 +192,30 @@ export class ModelRegistry {
144
192
  watchDiscovery(options) {
145
193
  return registryWatchDiscovery(this.state, options);
146
194
  }
195
+ /**
196
+ * Subscribe to discovery deltas with a callback API. Easier to wire up
197
+ * from a long-running daemon than the async-iterator form. Returns an
198
+ * unsubscribe function so the caller can tear down on shutdown.
199
+ *
200
+ * Errors thrown by the handler are caught and forwarded to an optional
201
+ * `onError` callback so one bad subscriber can't crash the emitter for
202
+ * everyone else.
203
+ */
204
+ onChange(handler, onError) {
205
+ const listener = (delta) => {
206
+ try {
207
+ const maybePromise = handler(delta);
208
+ if (maybePromise && typeof maybePromise.catch === "function") {
209
+ maybePromise.catch((err) => onError?.(err));
210
+ }
211
+ }
212
+ catch (err) {
213
+ onError?.(err);
214
+ }
215
+ };
216
+ this.state.discoveryEventBus.on("delta", listener);
217
+ return () => this.state.discoveryEventBus.off("delta", listener);
218
+ }
147
219
  /** Return cheapest candidates using the trusted v1 capability taxonomy. */
148
220
  cheapestCandidates(query = {}) {
149
221
  return registryCheapestCandidates(this.state, query);
@@ -160,6 +232,43 @@ export class ModelRegistry {
160
232
  }
161
233
  this.healthTracker.resetAll();
162
234
  }
235
+ /**
236
+ * Feed a proxy request outcome back into routing health.
237
+ *
238
+ * The proxy layer calls this after every forwarded request so that
239
+ * `kosha:reliable` / `fastest` / `balanced` ranking reflects real serving
240
+ * traffic, not just discovery-ping latency. On success the provider's
241
+ * circuit breaker is notified (closing a half-open probe); on failure the
242
+ * breaker failure counter advances (opening after the configured
243
+ * threshold) and the normalized error class is recorded. The latency
244
+ * sample is appended to the same rolling observation store that discovery
245
+ * writes into, so all strategies see one unified health signal.
246
+ *
247
+ * Additive only — discovery continues to record its own observations; this
248
+ * just lets proxy traffic contribute to the same store.
249
+ *
250
+ * @param providerId - Serving-layer provider the request was forwarded to.
251
+ * @param outcome - Result of the proxied request.
252
+ */
253
+ recordProxyOutcome(providerId, outcome) {
254
+ const normalizedProviderId = normalizeProviderId(providerId) ?? providerId;
255
+ const breaker = this.healthTracker.breaker(normalizedProviderId);
256
+ if (outcome.ok) {
257
+ breaker.onSuccess();
258
+ }
259
+ else {
260
+ // `onFailure` stores the message for diagnostics; pass the proxy's
261
+ // errorType through verbatim (undefined is fine — it only skips
262
+ // storing a diagnostic string).
263
+ breaker.onFailure(outcome.errorType);
264
+ }
265
+ // Record a latency + error observation in the same store discovery
266
+ // uses, so all four routing strategies fold in real proxy traffic.
267
+ registryRecordObservation(this.state, normalizedProviderId, {
268
+ latencyMs: outcome.latencyMs,
269
+ errorType: outcome.ok ? null : normalizeProxyErrorType(outcome.errorType),
270
+ });
271
+ }
163
272
  /** Aggregate capability statistics across the current model set. */
164
273
  capabilities(filter) {
165
274
  return registryCapabilities(this.state, filter);
@@ -271,4 +380,27 @@ export class ModelRegistry {
271
380
  function toLooseLookupKey(value) {
272
381
  return value.replace(/[._-]+/g, "");
273
382
  }
383
+ /** Valid provider-observation error classes (mirrors ProviderObservation). */
384
+ const PROXY_ERROR_TYPES = new Set([
385
+ "auth_error",
386
+ "throttled",
387
+ "timeout",
388
+ "transport",
389
+ "unknown",
390
+ ]);
391
+ /**
392
+ * Normalize a proxy-supplied `errorType` string into the observation enum.
393
+ *
394
+ * Proxy callers may pass either an already-normalized token (`"timeout"`,
395
+ * `"auth_error"`, …) or a free-form message. Known tokens pass through
396
+ * unchanged; anything else is classified by the same heuristic discovery
397
+ * uses so the rolling health summary stays consistent across both feeds.
398
+ */
399
+ function normalizeProxyErrorType(raw) {
400
+ if (raw && PROXY_ERROR_TYPES.has(raw))
401
+ return raw;
402
+ if (!raw)
403
+ return "unknown";
404
+ return registryClassifyError(raw);
405
+ }
274
406
  //# sourceMappingURL=registry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EACN,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,yBAAyB,EACzB,kBAAkB,EAClB,+BAA+B,EAC/B,yBAAyB,EACzB,wBAAwB,EACxB,sBAAsB,GACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACN,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,gCAAgC,EAChC,sBAAsB,EACtB,mBAAmB,EACnB,cAAc,EACd,qBAAqB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACN,0BAA0B,EAC1B,6BAA6B,GAC7B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,OAAO,EACN,oBAAoB,EACpB,kBAAkB,EAElB,0BAA0B,EAC1B,6BAA6B,EAC7B,uBAAuB,EACvB,qBAAqB,EACrB,4BAA4B,EAC5B,gBAAgB,EAChB,eAAe,EACf,mBAAmB,GACnB,MAAM,uBAAuB,CAAC;AA4B/B;;GAEG;AACH,MAAM,OAAO,aAAa;IACR,KAAK,CAAgB;IAEtC,YAAY,MAAoB;QAC/B,IAAI,CAAC,KAAK,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,aAAa,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrD,CAAC;IAED,0EAA0E;IAC1E,IAAY,WAAW,KAAgC,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;IACvF,0EAA0E;IAC1E,IAAY,aAAa,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;IAChE,0EAA0E;IAC1E,IAAY,YAAY,KAAa,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;IACtE,IAAY,YAAY,CAAC,KAAa,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC;IAC5E,0EAA0E;IAC1E,IAAY,aAAa,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;IAChE,IAAY,aAAa,KAAa,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;IACxE,IAAY,aAAa,CAAC,KAAa,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC;IAC9E,IAAY,iBAAiB,KAAiC,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACpG,IAAY,iBAAiB,CAAC,KAAiC,IAAI,IAAI,CAAC,KAAK,CAAC,iBAAiB,GAAG,KAAK,CAAC,CAAC,CAAC;IAE1G;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,OAA0B;QACxC,MAAM,kBAAkB,GAAG,MAAM,6BAA6B,EAAE,CAAC;QACjE,OAAO,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC,CAAC;IACrF,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,UAAmB;QAChC,MAAM,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC;IACpF,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,kBAAkB,CAAC,OAAgC;QACxD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACnE,OAAO;YACN,SAAS;YACT,UAAU,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YAChF,YAAY,EAAE,IAAI,CAAC,YAAY;SAC/B,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,UAAU;QACf,OAAO,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,0EAA0E;IAC1E,MAAM,CAAC,MAA8F;QACpG,OAAO,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IAED,4EAA4E;IAC5E,aAAa,CAAC,MAAyB;QACtC,OAAO,qBAAqB,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAClD,CAAC;IAED,4EAA4E;IAC5E,wBAAwB,CAAC,WAAsB;QAC9C,OAAO,gCAAgC,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAClE,CAAC;IAED,4EAA4E;IAC5E,cAAc,CAAC,OAA8B;QAC5C,OAAO,sBAAsB,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED,qEAAqE;IACrE,WAAW,CAAC,OAAe;QAC1B,OAAO,mBAAmB,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAED,wEAAwE;IACxE,cAAc,CAAC,OAAe;QAC7B,OAAO,sBAAsB,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,SAAiB;QACtB,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE1C,wCAAwC;QACxC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;QAC9D,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;QAExB,2DAA2D;QAC3D,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;QACpE,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,gBAAgB,CAAC,CAAC;QAC9G,IAAI,eAAe;YAAE,OAAO,eAAe,CAAC;QAE5C,sEAAsE;QACtE,MAAM,WAAW,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;QACvD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,WAAW,CAAC,CAAC;IAC3G,CAAC;IAED,kEAAkE;IAClE,QAAQ,CAAC,EAAU;QAClB,MAAM,oBAAoB,GAAG,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QAC3D,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IACnD,CAAC;IAED,4CAA4C;IAC5C,cAAc;QACb,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,oEAAoE;IACpE,eAAe;QACd,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAC5C,CAAC;IAED,0EAA0E;IAC1E,cAAc;QACb,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;IAC1C,CAAC;IAED,mEAAmE;IACnE,iBAAiB;QAChB,OAAO,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC;IAED,sDAAsD;IACtD,cAAc,CAAC,OAAyC;QACvD,OAAO,sBAAsB,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED,8DAA8D;IAC9D,cAAc,CAAC,OAAyC;QACvD,OAAO,sBAAsB,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED,2EAA2E;IAC3E,kBAAkB,CAAC,QAA+B,EAAE;QACnD,OAAO,0BAA0B,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACtD,CAAC;IAED,0EAA0E;IAC1E,qBAAqB,CAAC,QAA+B,EAAE;QACtD,OAAO,6BAA6B,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACzD,CAAC;IAED,6DAA6D;IAC7D,WAAW,CAAC,UAAmB;QAC9B,IAAI,UAAU,EAAE,CAAC;YAChB,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,mBAAmB,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC;YAClF,OAAO;QACR,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;IAC/B,CAAC;IAED,oEAAoE;IACpE,YAAY,CAAC,MAA8B;QAC1C,OAAO,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACjD,CAAC;IAED,mEAAmE;IACnE,kBAAkB,CAAC,KAAa;QAC/B,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,qDAAqD;IACrD,UAAU,CAAC,KAAgB;QAC1B,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED,kEAAkE;IAClE,iBAAiB,CAAC,KAAgB,EAAE,gBAAwB;QAC3D,OAAO,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IACnD,CAAC;IAED,4DAA4D;IAC5D,OAAO,CAAC,KAAa;QACpB,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED,kCAAkC;IAClC,KAAK,CAAC,KAAa,EAAE,OAAe;QACnC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,oEAAoE;IACpE,MAAM;QACL,OAAO;YACN,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE;YAChC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE;YACjC,YAAY,EAAE,IAAI,CAAC,YAAY;SAC/B,CAAC;IACH,CAAC;IAED,kEAAkE;IAClE,MAAM,CAAC,QAAQ,CAAC,IAA0F;QACzG,MAAM,QAAQ,GAAG,IAAI,aAAa,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9D,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACvC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QACjD,CAAC;QACD,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QAC1C,QAAQ,CAAC,aAAa,GAAG,kBAAkB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC5D,QAAQ,CAAC,iBAAiB,GAAG,qBAAqB,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC3F,OAAO,QAAQ,CAAC;IACjB,CAAC;IAED,+EAA+E;IAC/E,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,SAAuB;QAClD,MAAM,MAAM,GAAkB,EAAE,CAAC;QACjC,MAAM,YAAY,GAAG,MAAM,aAAa,CAAC,YAAY,CAAc,IAAI,CAAC,OAAO,EAAE,EAAE,eAAe,CAAC,CAAC,CAAC;QACrG,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC,YAAY,CAAc,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,mBAAmB,CAAC,CAAC,CAAC;QAE9G,IAAI,YAAY;YAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC5C,IAAI,aAAa;YAAE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC9C,IAAI,SAAS;YAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAEnC,yEAAyE;QACzE,OAAO,MAAM,CAAC,MAAM,CAAc,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YACrD,GAAG,MAAM;YACT,GAAG,KAAK;YACR,SAAS,EAAE,EAAE,GAAG,MAAM,CAAC,SAAS,EAAE,GAAG,KAAK,CAAC,SAAS,EAAE;YACtD,OAAO,EAAE,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE;SAChD,CAAC,EAAE,EAAE,CAAC,CAAC;IACT,CAAC;IAEO,YAAY,CACnB,kBAA+G;QAE/G,OAAO;YACN,wFAAwF;YACxF,iBAAiB,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,WAAW,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI;YAC/H,eAAe,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,YAAY,CAAC;YAC9G,YAAY,EAAE,GAAG,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC;YACpD,oBAAoB,EAAE,GAAG,EAAE,CAAC,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC;YACpE,aAAa,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC;YAC9E,WAAW,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC;YAClD,kBAAkB,EAAE,0BAA0B;YAC9C,gBAAgB,EAAE,GAAG,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC;YAC5D,uBAAuB,EAAE,CAAC,gBAAgB,EAAE,EAAE,CAAC,+BAA+B,CAAC,IAAI,CAAC,KAAK,EAAE,gBAAgB,CAAC;YAC5G,iBAAiB,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC;YAClG,aAAa,EAAE,CAAC,YAAY,EAAE,EAAE,CAAC,qBAAqB,CAAC,YAAY,CAAC;SACpE,CAAC;IACH,CAAC;IAED,kFAAkF;IAC1E,gBAAgB;QACvB,OAAO,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED,kFAAkF;IAC1E,uBAAuB,CAAC,gBAA4C;QAC3E,+BAA+B,CAAC,IAAI,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IAC/D,CAAC;IAED,kFAAkF;IAC1E,iBAAiB,CACxB,UAAkB,EAClB,KAA6E;QAE7E,yBAAyB,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;IAC1D,CAAC;IAED,8EAA8E;IACtE,aAAa,CAAC,YAAoB;QACzC,OAAO,qBAAqB,CAAC,YAAY,CAAC,CAAC;IAC5C,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,YAAY,CAAI,QAAgB;QACpD,IAAI,CAAC;YACJ,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAM,CAAC;QAC3D,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACzB,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;gBAClC,OAAO,CAAC,IAAI,CAAC,wCAAwC,QAAQ,EAAE,CAAC,CAAC;YAClE,CAAC;YACD,OAAO,IAAI,CAAC;QACb,CAAC;IACF,CAAC;CACD;AAED,SAAS,gBAAgB,CAAC,KAAa;IACtC,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;AACrC,CAAC"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EACN,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,yBAAyB,EACzB,kBAAkB,EAClB,+BAA+B,EAC/B,yBAAyB,EACzB,wBAAwB,EACxB,sBAAsB,GACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACN,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,gCAAgC,EAChC,sBAAsB,EACtB,mBAAmB,EACnB,cAAc,EACd,qBAAqB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACN,0BAA0B,EAC1B,6BAA6B,GAC7B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACN,mBAAmB,EACnB,wBAAwB,GAIxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,OAAO,EACN,oBAAoB,EACpB,kBAAkB,EAElB,0BAA0B,EAC1B,6BAA6B,EAC7B,uBAAuB,EACvB,qBAAqB,EACrB,4BAA4B,EAC5B,gBAAgB,EAChB,eAAe,EACf,mBAAmB,GACnB,MAAM,uBAAuB,CAAC;AA4B/B;;GAEG;AACH,MAAM,OAAO,aAAa;IACR,KAAK,CAAgB;IAEtC;;;;;;;;;;;;;;OAcG;IACK,aAAa,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAEzD,YAAY,MAAoB;QAC/B,IAAI,CAAC,KAAK,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,aAAa,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrD,CAAC;IAED,0EAA0E;IAC1E,IAAY,WAAW,KAAgC,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;IACvF,0EAA0E;IAC1E,IAAY,aAAa,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;IAChE,0EAA0E;IAC1E,IAAY,YAAY,KAAa,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;IACtE,IAAY,YAAY,CAAC,KAAa,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC;IAC5E,0EAA0E;IAC1E,IAAY,aAAa,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;IAChE,IAAY,aAAa,KAAa,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;IACxE,IAAY,aAAa,CAAC,KAAa,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC;IAC9E,IAAY,iBAAiB,KAAiC,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACpG,IAAY,iBAAiB,CAAC,KAAiC,IAAI,IAAI,CAAC,KAAK,CAAC,iBAAiB,GAAG,KAAK,CAAC,CAAC,CAAC;IAE1G;;;;;;;OAOG;IACH,KAAK,CAAC,QAAQ,CAAC,OAA0B;QACxC,MAAM,kBAAkB,GAAG,MAAM,6BAA6B,EAAE,CAAC;QACjE,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC;QAC3D,oEAAoE;QACpE,sEAAsE;QACtE,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;QAC/F,qEAAqE;QACrE,gEAAgE;QAChE,uEAAuE;QACvE,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,IAAI,CAC5B,GAAG,EAAE,CAAC,SAAS,EACf,GAAG,EAAE,CAAC,SAAS,CACf,CAAC;QACF,OAAO,GAAG,CAAC;IACZ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,UAAmB;QAChC,MAAM,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC;IACpF,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,kBAAkB,CAAC,OAAgC;QACxD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACnE,OAAO;YACN,SAAS;YACT,UAAU,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YAChF,YAAY,EAAE,IAAI,CAAC,YAAY;SAC/B,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,UAAU;QACf,OAAO,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,0EAA0E;IAC1E,MAAM,CAAC,MAA8F;QACpG,OAAO,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IAED,4EAA4E;IAC5E,aAAa,CAAC,MAAyB;QACtC,OAAO,qBAAqB,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAClD,CAAC;IAED,4EAA4E;IAC5E,wBAAwB,CAAC,WAAsB;QAC9C,OAAO,gCAAgC,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAClE,CAAC;IAED,4EAA4E;IAC5E,cAAc,CAAC,OAA8B;QAC5C,OAAO,sBAAsB,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED;;;;;;;;;OASG;IACH,YAAY,CAAC,OAA8B,EAAE,QAAQ,GAAkB,UAAU;QAChF,MAAM,MAAM,GAAG,sBAAsB,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;QACzF,OAAO,wBAAwB,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACvE,CAAC;IAED,uFAAuF;IACvF,mBAAmB,CAAC,UAAkB;QACrC,OAAO,mBAAmB,CAAC,IAAI,CAAC,KAAK,EAAE,mBAAmB,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,CAAC;IACvF,CAAC;IAED,qEAAqE;IACrE,WAAW,CAAC,OAAe;QAC1B,OAAO,mBAAmB,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAED,wEAAwE;IACxE,cAAc,CAAC,OAAe;QAC7B,OAAO,sBAAsB,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,SAAiB;QACtB,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE1C,wCAAwC;QACxC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;QAC9D,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;QAExB,2DAA2D;QAC3D,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;QACpE,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,gBAAgB,CAAC,CAAC;QAC9G,IAAI,eAAe;YAAE,OAAO,eAAe,CAAC;QAE5C,sEAAsE;QACtE,MAAM,WAAW,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;QACvD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,WAAW,CAAC,CAAC;IAC3G,CAAC;IAED,kEAAkE;IAClE,QAAQ,CAAC,EAAU;QAClB,MAAM,oBAAoB,GAAG,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QAC3D,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IACnD,CAAC;IAED,4CAA4C;IAC5C,cAAc;QACb,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,oEAAoE;IACpE,eAAe;QACd,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAC5C,CAAC;IAED,0EAA0E;IAC1E,cAAc;QACb,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;IAC1C,CAAC;IAED,mEAAmE;IACnE,iBAAiB;QAChB,OAAO,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC;IAED,sDAAsD;IACtD,cAAc,CAAC,OAAyC;QACvD,OAAO,sBAAsB,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED,8DAA8D;IAC9D,cAAc,CAAC,OAAyC;QACvD,OAAO,sBAAsB,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED;;;;;;;;OAQG;IACH,QAAQ,CACP,OAA0D,EAC1D,OAAgC;QAEhC,MAAM,QAAQ,GAAG,CAAC,KAAuB,EAAE,EAAE;YAC5C,IAAI,CAAC;gBACJ,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;gBACpC,IAAI,YAAY,IAAI,OAAQ,YAA8B,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;oBAChF,YAA8B,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;gBAChE,CAAC;YACF,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACd,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;YAChB,CAAC;QACF,CAAC,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACnD,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAClE,CAAC;IAED,2EAA2E;IAC3E,kBAAkB,CAAC,KAAK,GAA0B,EAAE;QACnD,OAAO,0BAA0B,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACtD,CAAC;IAED,0EAA0E;IAC1E,qBAAqB,CAAC,KAAK,GAA0B,EAAE;QACtD,OAAO,6BAA6B,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACzD,CAAC;IAED,6DAA6D;IAC7D,WAAW,CAAC,UAAmB;QAC9B,IAAI,UAAU,EAAE,CAAC;YAChB,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,mBAAmB,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC;YAClF,OAAO;QACR,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;IAC/B,CAAC;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,kBAAkB,CACjB,UAAkB,EAClB,OAAgF;QAEhF,MAAM,oBAAoB,GAAG,mBAAmB,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC;QAC3E,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QACjE,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;YAChB,OAAO,CAAC,SAAS,EAAE,CAAC;QACrB,CAAC;aAAM,CAAC;YACP,mEAAmE;YACnE,gEAAgE;YAChE,gCAAgC;YAChC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACtC,CAAC;QACD,mEAAmE;QACnE,mEAAmE;QACnE,yBAAyB,CAAC,IAAI,CAAC,KAAK,EAAE,oBAAoB,EAAE;YAC3D,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,uBAAuB,CAAC,OAAO,CAAC,SAAS,CAAC;SACzE,CAAC,CAAC;IACJ,CAAC;IAED,oEAAoE;IACpE,YAAY,CAAC,MAA8B;QAC1C,OAAO,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACjD,CAAC;IAED,mEAAmE;IACnE,kBAAkB,CAAC,KAAa;QAC/B,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,qDAAqD;IACrD,UAAU,CAAC,KAAgB;QAC1B,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED,kEAAkE;IAClE,iBAAiB,CAAC,KAAgB,EAAE,gBAAwB;QAC3D,OAAO,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IACnD,CAAC;IAED,4DAA4D;IAC5D,OAAO,CAAC,KAAa;QACpB,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED,kCAAkC;IAClC,KAAK,CAAC,KAAa,EAAE,OAAe;QACnC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,oEAAoE;IACpE,MAAM;QACL,OAAO;YACN,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE;YAChC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE;YACjC,YAAY,EAAE,IAAI,CAAC,YAAY;SAC/B,CAAC;IACH,CAAC;IAED,kEAAkE;IAClE,MAAM,CAAC,QAAQ,CAAC,IAA0F;QACzG,MAAM,QAAQ,GAAG,IAAI,aAAa,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9D,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACvC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QACjD,CAAC;QACD,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QAC1C,QAAQ,CAAC,aAAa,GAAG,kBAAkB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC5D,QAAQ,CAAC,iBAAiB,GAAG,qBAAqB,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC3F,OAAO,QAAQ,CAAC;IACjB,CAAC;IAED,+EAA+E;IAC/E,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,SAAuB;QAClD,MAAM,MAAM,GAAkB,EAAE,CAAC;QACjC,MAAM,YAAY,GAAG,MAAM,aAAa,CAAC,YAAY,CAAc,IAAI,CAAC,OAAO,EAAE,EAAE,eAAe,CAAC,CAAC,CAAC;QACrG,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC,YAAY,CAAc,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,mBAAmB,CAAC,CAAC,CAAC;QAE9G,IAAI,YAAY;YAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC5C,IAAI,aAAa;YAAE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC9C,IAAI,SAAS;YAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAEnC,yEAAyE;QACzE,OAAO,MAAM,CAAC,MAAM,CAAc,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YACrD,GAAG,MAAM;YACT,GAAG,KAAK;YACR,SAAS,EAAE,EAAE,GAAG,MAAM,CAAC,SAAS,EAAE,GAAG,KAAK,CAAC,SAAS,EAAE;YACtD,OAAO,EAAE,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE;SAChD,CAAC,EAAE,EAAE,CAAC,CAAC;IACT,CAAC;IAEO,YAAY,CACnB,kBAA+G;QAE/G,OAAO;YACN,wFAAwF;YACxF,iBAAiB,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,WAAW,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI;YAC/H,eAAe,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,YAAY,CAAC;YAC9G,YAAY,EAAE,GAAG,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC;YACpD,oBAAoB,EAAE,GAAG,EAAE,CAAC,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC;YACpE,aAAa,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC;YAC9E,WAAW,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC;YAClD,kBAAkB,EAAE,0BAA0B;YAC9C,gBAAgB,EAAE,GAAG,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC;YAC5D,uBAAuB,EAAE,CAAC,gBAAgB,EAAE,EAAE,CAAC,+BAA+B,CAAC,IAAI,CAAC,KAAK,EAAE,gBAAgB,CAAC;YAC5G,iBAAiB,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC;YAClG,aAAa,EAAE,CAAC,YAAY,EAAE,EAAE,CAAC,qBAAqB,CAAC,YAAY,CAAC;SACpE,CAAC;IACH,CAAC;IAED,kFAAkF;IAC1E,gBAAgB;QACvB,OAAO,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED,kFAAkF;IAC1E,uBAAuB,CAAC,gBAA4C;QAC3E,+BAA+B,CAAC,IAAI,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IAC/D,CAAC;IAED,kFAAkF;IAC1E,iBAAiB,CACxB,UAAkB,EAClB,KAA6E;QAE7E,yBAAyB,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;IAC1D,CAAC;IAED,8EAA8E;IACtE,aAAa,CAAC,YAAoB;QACzC,OAAO,qBAAqB,CAAC,YAAY,CAAC,CAAC;IAC5C,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,YAAY,CAAI,QAAgB;QACpD,IAAI,CAAC;YACJ,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAM,CAAC;QAC3D,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACzB,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;gBAClC,OAAO,CAAC,IAAI,CAAC,wCAAwC,QAAQ,EAAE,CAAC,CAAC;YAClE,CAAC;YACD,OAAO,IAAI,CAAC;QACb,CAAC;IACF,CAAC;CACD;AAED,SAAS,gBAAgB,CAAC,KAAa;IACtC,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;AACrC,CAAC;AAED,8EAA8E;AAC9E,MAAM,iBAAiB,GAAwB,IAAI,GAAG,CAAC;IACtD,YAAY;IACZ,WAAW;IACX,SAAS;IACT,WAAW;IACX,SAAS;CACT,CAAC,CAAC;AAEH;;;;;;;GAOG;AACH,SAAS,uBAAuB,CAAC,GAAuB;IACvD,IAAI,GAAG,IAAI,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,GAA2C,CAAC;IAC1F,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,OAAO,qBAAqB,CAAC,GAAG,CAAC,CAAC;AACnC,CAAC"}
@@ -31,6 +31,13 @@ export interface CircuitBreakerOptions {
31
31
  * @default 1
32
32
  */
33
33
  halfOpenSuccessThreshold?: number;
34
+ /**
35
+ * Upper bound on the adaptive `resetTimeoutMs`. Each time the circuit
36
+ * re-opens without successfully closing, the cooldown doubles up to this
37
+ * cap, so a chronically broken provider is probed less often.
38
+ * @default 3_600_000 (1 hour)
39
+ */
40
+ maxResetTimeoutMs?: number;
34
41
  }
35
42
  /**
36
43
  * A point-in-time health snapshot for a single provider circuit.
@@ -94,13 +101,21 @@ export declare class CircuitBreaker {
94
101
  private lastFailureTime;
95
102
  private lastSuccessTime;
96
103
  private lastError?;
104
+ /** Consecutive open cycles since the last successful close. Used to
105
+ * exponentially extend the open-state cooldown so a chronically broken
106
+ * provider gets probed less often. Resets to 0 on a closed transition. */
107
+ private openCycles;
97
108
  /** Resolved threshold: consecutive failures before opening. */
98
109
  private readonly failureThreshold;
99
110
  /** Resolved open-state duration before allowing a probe. */
100
111
  private readonly resetTimeoutMs;
101
112
  /** Resolved success count in half-open needed to close. */
102
113
  private readonly halfOpenSuccessThreshold;
114
+ /** Resolved upper bound on the adaptive open-state cooldown. */
115
+ private readonly maxResetTimeoutMs;
103
116
  constructor(providerId: string, options?: CircuitBreakerOptions);
117
+ /** Current adaptive open-state cooldown, in ms. Public for diagnostics. */
118
+ currentResetTimeoutMs(): number;
104
119
  /**
105
120
  * Check whether a request should be allowed through.
106
121
  *
@@ -1 +1 @@
1
- {"version":3,"file":"resilience.d.ts","sourceRoot":"","sources":["../src/resilience.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAM7C,mDAAmD;AACnD,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;AAE3D,mEAAmE;AACnE,MAAM,WAAW,qBAAqB;IACrC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,mDAAmD;IACnD,UAAU,EAAE,MAAM,CAAC;IACnB,6BAA6B;IAC7B,KAAK,EAAE,YAAY,CAAC;IACpB,gEAAgE;IAChE,YAAY,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,eAAe,EAAE,MAAM,CAAC;IACxB,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,eAAe,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC;IAC7B,0BAA0B;IAC1B,IAAI,EAAE,CAAC,CAAC;IACR,sDAAsD;IACtD,KAAK,EAAE,OAAO,CAAC;IACf,wDAAwD;IACxD,GAAG,EAAE,MAAM,CAAC;IACZ,gEAAgE;IAChE,QAAQ,EAAE,MAAM,CAAC;CACjB;AAMD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,cAAc;IAed,QAAQ,CAAC,UAAU,EAAE,MAAM;IAAE,OAAO,CAAC,OAAO;IAdxD,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,SAAS,CAAC,CAAS;IAE3B,+DAA+D;IAC/D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,4DAA4D;IAC5D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,2DAA2D;IAC3D,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAS;gBAE7B,UAAU,EAAE,MAAM,EAAU,OAAO,GAAE,qBAA0B;IAMpF;;;;;;;OAOG;IACH,UAAU,IAAI,OAAO;IAoBrB;;;;;;OAMG;IACH,SAAS,IAAI,IAAI;IAiBjB;;;;;;;;OAQG;IACH,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAkB/B;;OAEG;IACH,MAAM,IAAI,cAAc;IAWxB;;;OAGG;IACH,KAAK,IAAI,IAAI;IAWb,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,kBAAkB;CAK1B;AAMD;;;;;;;;;GASG;AACH,qBAAa,aAAa;IACzB,OAAO,CAAC,QAAQ,CAAqC;IAErD;;;;;;OAMG;IACH,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,cAAc;IAS5E;;OAEG;IACH,YAAY,IAAI,cAAc,EAAE;IAMhC;;;OAGG;IACH,kBAAkB,IAAI,MAAM,EAAE;IAO9B;;;OAGG;IACH,aAAa,IAAI,MAAM,EAAE;IAOzB;;OAEG;IACH,QAAQ,IAAI,IAAI;CAKhB;AAMD;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,gBAAgB;IAC5B;;;;;;;;OAQG;WACU,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;CA8B5F"}
1
+ {"version":3,"file":"resilience.d.ts","sourceRoot":"","sources":["../src/resilience.ts"],"names":[],"mappings":"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"}
@@ -44,18 +44,36 @@ export class CircuitBreaker {
44
44
  lastFailureTime = 0;
45
45
  lastSuccessTime = 0;
46
46
  lastError;
47
+ /** Consecutive open cycles since the last successful close. Used to
48
+ * exponentially extend the open-state cooldown so a chronically broken
49
+ * provider gets probed less often. Resets to 0 on a closed transition. */
50
+ openCycles = 0;
47
51
  /** Resolved threshold: consecutive failures before opening. */
48
52
  failureThreshold;
49
53
  /** Resolved open-state duration before allowing a probe. */
50
54
  resetTimeoutMs;
51
55
  /** Resolved success count in half-open needed to close. */
52
56
  halfOpenSuccessThreshold;
57
+ /** Resolved upper bound on the adaptive open-state cooldown. */
58
+ maxResetTimeoutMs;
53
59
  constructor(providerId, options = {}) {
54
60
  this.providerId = providerId;
55
61
  this.options = options;
56
62
  this.failureThreshold = options.failureThreshold ?? 3;
57
63
  this.resetTimeoutMs = options.resetTimeoutMs ?? 60_000;
58
64
  this.halfOpenSuccessThreshold = options.halfOpenSuccessThreshold ?? 1;
65
+ // One hour is the practical ceiling for a discovery-pass cooldown —
66
+ // past that, the provider catalog re-publishes and a fresh user run
67
+ // resets state anyway.
68
+ this.maxResetTimeoutMs = options.maxResetTimeoutMs ?? 3_600_000;
69
+ }
70
+ /** Current adaptive open-state cooldown, in ms. Public for diagnostics. */
71
+ currentResetTimeoutMs() {
72
+ if (this.openCycles <= 1)
73
+ return this.resetTimeoutMs;
74
+ // Exponential: 60s, 120s, 240s, 480s, … capped at maxResetTimeoutMs.
75
+ const escalated = this.resetTimeoutMs * 2 ** (this.openCycles - 1);
76
+ return Math.min(escalated, this.maxResetTimeoutMs);
59
77
  }
60
78
  /**
61
79
  * Check whether a request should be allowed through.
@@ -71,7 +89,7 @@ export class CircuitBreaker {
71
89
  }
72
90
  if (this.state === "open") {
73
91
  const elapsed = Date.now() - this.lastFailureTime;
74
- if (elapsed >= this.resetTimeoutMs) {
92
+ if (elapsed >= this.currentResetTimeoutMs()) {
75
93
  // Transition to half-open: allow a single probe
76
94
  this.state = "half-open";
77
95
  this.successCount = 0;
@@ -156,11 +174,15 @@ export class CircuitBreaker {
156
174
  transitionToOpen() {
157
175
  this.state = "open";
158
176
  this.successCount = 0;
177
+ this.openCycles += 1;
159
178
  }
160
179
  transitionToClosed() {
161
180
  this.state = "closed";
162
181
  this.failureCount = 0;
163
182
  this.successCount = 0;
183
+ // A successful close clears the adaptive backoff; next opening starts
184
+ // at the base resetTimeoutMs again.
185
+ this.openCycles = 0;
164
186
  }
165
187
  }
166
188
  // ---------------------------------------------------------------------------
@@ -1 +1 @@
1
- {"version":3,"file":"resilience.js","sourceRoot":"","sources":["../src/resilience.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resilience.js","sourceRoot":"","sources":["../src/resilience.ts"],"names":[],"mappings":"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"}
package/dist/server.d.ts CHANGED
@@ -7,6 +7,7 @@
7
7
  *
8
8
  * Routes:
9
9
  * GET /api/models — List models (query: ?provider, ?originProvider, ?mode, ?capability)
10
+ * GET /api/capabilities — Capability summary across the catalog (?provider)
10
11
  * GET /api/models/cheapest — Cheapest eligible models for a role/capability
11
12
  * GET /api/models/:idOrAlias/routes — All provider routes with preferred/direct metadata
12
13
  * GET /api/models/:idOrAlias — Get a single model by ID or alias (+ baseUrl/version)
@@ -16,13 +17,49 @@
16
17
  * POST /api/refresh — Trigger re-discovery (body: { provider?: string })
17
18
  * GET /api/resolve/:alias — Resolve an alias to its canonical model ID
18
19
  * GET /api/discovery-errors — Errors from last discovery pass
20
+ * GET /api/discovery — Stable v1 discovery snapshot (see discovery-routes.ts)
21
+ * GET /api/discovery/delta — Changes since a cursor
22
+ * GET /api/discovery/watch — SSE stream of discovery changes
23
+ * GET /api/discovery/cheapest — Cheapest candidates (v1 contract)
24
+ * GET /api/discovery/binding — Binding hints for a query (v1 contract)
19
25
  * GET /health — Health check
26
+ * GET /metrics — Prometheus exposition (optional KOSHA_METRICS_TOKEN gate)
20
27
  * GET /proxy/v1/models — OpenAI-compatible model list (forwardable models)
21
28
  * POST /proxy/v1/chat/completions — OpenAI-compatible proxy with model routing
29
+ *
30
+ * Security defaults:
31
+ * - The standalone server binds to 127.0.0.1 unless `--host` / `KOSHA_HOST`
32
+ * says otherwise. The proxy spends the operator's provider credentials, so
33
+ * it must never be reachable from the network by accident.
34
+ * - When `KOSHA_PROXY_TOKEN` is set, every `/proxy/*` route and
35
+ * `POST /api/refresh` require `Authorization: Bearer <token>` (or an
36
+ * `x-kosha-token` header). Unset → open, which is only safe on loopback.
22
37
  * @module
23
38
  */
24
39
  import { Hono } from "hono";
25
40
  import { ModelRegistry } from "./registry.js";
41
+ /**
42
+ * Resolve the interface the standalone server binds to.
43
+ *
44
+ * Precedence: explicit argument → `KOSHA_HOST` env → `127.0.0.1`. The default
45
+ * is loopback on purpose: `kosha serve` fronts an unauthenticated (unless
46
+ * `KOSHA_PROXY_TOKEN` is set) proxy that forwards requests using the
47
+ * operator's own provider API keys. Binding every interface by default would
48
+ * let anyone on the same network spend those keys.
49
+ */
50
+ export declare function resolveBindHost(explicit?: string): string;
51
+ /** True when `host` is a loopback-only bind. */
52
+ export declare function isLoopbackHost(host: string): boolean;
53
+ /**
54
+ * Check a request against the operator token in `KOSHA_PROXY_TOKEN`.
55
+ * Accepts the token either as `Authorization: Bearer <token>` or in an
56
+ * `x-kosha-token` header (the latter leaves `Authorization` free for the
57
+ * `kosha-tenant-<name>` bucketing tag). Returns true when no token is
58
+ * configured — the gate is opt-in.
59
+ */
60
+ export declare function proxyRequestAuthorized(headers: {
61
+ get(name: string): string | null | undefined;
62
+ }): boolean;
26
63
  /**
27
64
  * Create a Hono application wired to the given {@link ModelRegistry}.
28
65
  *
@@ -32,12 +69,17 @@ import { ModelRegistry } from "./registry.js";
32
69
  * @param registry - A pre-populated (or lazy) ModelRegistry instance.
33
70
  * @returns A configured Hono app with all kosha REST routes.
34
71
  */
35
- export declare function createServer(registry: ModelRegistry): Hono;
72
+ export declare function createServer(registry: ModelRegistry, shutdownSignal?: AbortSignal): Hono;
36
73
  /**
37
74
  * Boot a standalone kosha API server.
38
75
  *
39
76
  * Runs full discovery, then starts an HTTP listener on the given port.
40
77
  * @param port - TCP port to bind (default `3000`, overridable via `PORT` env var).
78
+ * @param host - Interface to bind (default `127.0.0.1`, overridable via
79
+ * `KOSHA_HOST` or `kosha serve --host`). Binding a non-loopback
80
+ * address without `KOSHA_PROXY_TOKEN` logs a loud warning: the
81
+ * proxy would be spending your provider keys for anyone who can
82
+ * reach the port.
41
83
  */
42
- export declare function startServer(port?: number): Promise<void>;
84
+ export declare function startServer(port?: number, host?: string): Promise<void>;
43
85
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAK5B,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAiC9C;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAyP1D;AAMD;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,IAAI,SAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA2B5D"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAGH,OAAO,EAAE,IAAI,EAA0B,MAAM,MAAM,CAAC;AAMpD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAkB9C;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAGzD;AAED,gDAAgD;AAChD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AA8BD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE;IAAE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;CAAE,GAAG,OAAO,CAMzG;AA6BD;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,aAAa,EAAE,cAAc,CAAC,EAAE,WAAW,GAAG,IAAI,CA2bxF;AAMD;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAAC,IAAI,SAAO,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoE3E"}