@cyanheads/federal-regulations-mcp-server 0.2.2 → 0.2.4
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.
- package/AGENTS.md +9 -9
- package/CLAUDE.md +9 -9
- package/Dockerfile +12 -5
- package/README.md +2 -1
- package/changelog/0.2.x/0.2.3.md +24 -0
- package/changelog/0.2.x/0.2.4.md +11 -0
- package/changelog/template.md +55 -16
- package/dist/mcp-server/tools/definitions/browse-cfr.tool.d.ts +3 -3
- package/dist/mcp-server/tools/definitions/browse-cfr.tool.js +3 -3
- package/dist/mcp-server/tools/definitions/browse-cfr.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/find-comments.tool.d.ts +2 -2
- package/dist/mcp-server/tools/definitions/find-comments.tool.js +2 -2
- package/dist/mcp-server/tools/definitions/find-comments.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/get-cfr-section.tool.d.ts +3 -3
- package/dist/mcp-server/tools/definitions/get-cfr-section.tool.js +3 -3
- package/dist/mcp-server/tools/definitions/get-cfr-section.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/index.d.ts +8 -8
- package/dist/mcp-server/tools/definitions/list-open-comments.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/list-open-comments.tool.js +2 -2
- package/dist/mcp-server/tools/definitions/list-open-comments.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/search-rules.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/search-rules.tool.js +2 -2
- package/dist/mcp-server/tools/definitions/search-rules.tool.js.map +1 -1
- package/dist/services/ecfr/ecfr-service.d.ts +26 -7
- package/dist/services/ecfr/ecfr-service.d.ts.map +1 -1
- package/dist/services/ecfr/ecfr-service.js +53 -27
- package/dist/services/ecfr/ecfr-service.js.map +1 -1
- package/dist/services/ecfr-mirror/ecfr-mirror.d.ts.map +1 -1
- package/dist/services/ecfr-mirror/ecfr-mirror.js +27 -2
- package/dist/services/ecfr-mirror/ecfr-mirror.js.map +1 -1
- package/dist/services/federal-register/federal-register-service.d.ts +3 -2
- package/dist/services/federal-register/federal-register-service.d.ts.map +1 -1
- package/dist/services/federal-register/federal-register-service.js +19 -16
- package/dist/services/federal-register/federal-register-service.js.map +1 -1
- package/dist/services/regulations-gov/regulations-gov-service.d.ts +10 -0
- package/dist/services/regulations-gov/regulations-gov-service.d.ts.map +1 -1
- package/dist/services/regulations-gov/regulations-gov-service.js +39 -17
- package/dist/services/regulations-gov/regulations-gov-service.js.map +1 -1
- package/dist/services/request-budget.d.ts +63 -0
- package/dist/services/request-budget.d.ts.map +1 -0
- package/dist/services/request-budget.js +95 -0
- package/dist/services/request-budget.js.map +1 -0
- package/dist/services/upstream-failure.d.ts +48 -19
- package/dist/services/upstream-failure.d.ts.map +1 -1
- package/dist/services/upstream-failure.js +86 -11
- package/dist/services/upstream-failure.js.map +1 -1
- package/package.json +8 -8
- package/scripts/_mirror-context.ts +1 -1
- package/server.json +3 -3
- package/dist/services/request-context.d.ts +0 -13
- package/dist/services/request-context.d.ts.map +0 -1
- package/dist/services/request-context.js +0 -23
- package/dist/services/request-context.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"federal-register-service.d.ts","sourceRoot":"","sources":["../../../src/services/federal-register/federal-register-service.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"federal-register-service.d.ts","sourceRoot":"","sources":["../../../src/services/federal-register/federal-register-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAO/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAKrE,OAAO,KAAK,EAEV,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAGhB,kBAAkB,EAClB,oBAAoB,EAGrB,MAAM,YAAY,CAAC;AA+CpB,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAEjC,YAAY,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAEvD;IAED,iFAAiF;IAC3E,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA6B5E;IAED,gFAAgF;IAC1E,WAAW,CACf,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,OAAO,EACxB,GAAG,EAAE,OAAO,GACX,OAAO,CAAC,gBAAgB,CAAC,CA6C3B;IAED,kFAAkF;IAC5E,gBAAgB,CACpB,MAAM,EAAE,kBAAkB,EAC1B,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,OAAO,GACX,OAAO,CAAC,oBAAoB,CAAC,CA4B/B;IAED,+EAA+E;IAC/E,OAAO,CAAC,SAAS;IA+BjB;;;;;;;;;OASG;IACH,OAAO,CAAC,SAAS;CAclB;AAiGD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAE3F;AAED,wBAAgB,yBAAyB,IAAI,sBAAsB,CAOlE"}
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
* @fileoverview FederalRegisterService — keyless client for the Federal Register
|
|
3
3
|
* API v1 (federalregister.gov/api/v1). Backs the document search, single-document
|
|
4
4
|
* fetch (with the cross-source docket/CFR handles), and the open-comment-window
|
|
5
|
-
* tools. Each method
|
|
6
|
-
*
|
|
5
|
+
* tools. Each method runs the full fetch + parse pipeline through `runUpstream`,
|
|
6
|
+
* which bounds every attempt by the request's shared budget and retries inside
|
|
7
|
+
* it; `fetchWithTimeout` throws a classified `McpError` on a non-OK response, the
|
|
7
8
|
* response parser detects HTML error pages and re-throws them as transient, and
|
|
8
9
|
* `rethrowTransportFailure` re-codes the 5xx statuses the status→code map calls
|
|
9
10
|
* `InternalError`. A transport failure that survives retry leaves as
|
|
@@ -11,10 +12,10 @@
|
|
|
11
12
|
* @module services/federal-register/federal-register-service
|
|
12
13
|
*/
|
|
13
14
|
import { JsonRpcErrorCode, McpError, notFound, serviceUnavailable, } from '@cyanheads/mcp-ts-core/errors';
|
|
14
|
-
import { fetchWithTimeout,
|
|
15
|
+
import { fetchWithTimeout, withExtra } from '@cyanheads/mcp-ts-core/utils';
|
|
15
16
|
import { getServerConfig } from '../../config/server-config.js';
|
|
16
|
-
import {
|
|
17
|
-
import { rethrowTransportFailure,
|
|
17
|
+
import { requestBudget } from '../../services/request-budget.js';
|
|
18
|
+
import { rethrowTransportFailure, runUpstream } from '../../services/upstream-failure.js';
|
|
18
19
|
const TIMEOUT_MS = 15_000;
|
|
19
20
|
const BASE_DELAY_MS = 300;
|
|
20
21
|
/** Fields requested from the list/search endpoint. */
|
|
@@ -150,18 +151,22 @@ export class FederalRegisterService {
|
|
|
150
151
|
}
|
|
151
152
|
/** Fetch + parse JSON with retry; HTML error pages become transient errors. */
|
|
152
153
|
fetchJson(url, ctx, operation, expectedStatuses) {
|
|
153
|
-
const reqCtx =
|
|
154
|
-
return
|
|
155
|
-
const response = await fetchWithTimeout(url,
|
|
156
|
-
signal
|
|
154
|
+
const reqCtx = withExtra(ctx, { operation });
|
|
155
|
+
return runUpstream(ctx, requestBudget(ctx), { operation, context: reqCtx, attemptMs: TIMEOUT_MS, baseDelayMs: BASE_DELAY_MS }, async (deadlineMs, signal) => {
|
|
156
|
+
const response = await fetchWithTimeout(url, deadlineMs, reqCtx, {
|
|
157
|
+
signal,
|
|
157
158
|
...(expectedStatuses && { expectedStatuses }),
|
|
158
159
|
}).catch(rethrowTransportFailure);
|
|
160
|
+
// Reading the body is part of the attempt, so it runs under the same
|
|
161
|
+
// signal: a peer that sends headers and then stalls the stream is the
|
|
162
|
+
// same failure as one that never answers, and the deadline has to reach
|
|
163
|
+
// both.
|
|
159
164
|
const text = await response.text();
|
|
160
165
|
if (looksLikeHtml(text)) {
|
|
161
166
|
throw serviceUnavailable('Federal Register returned an HTML error page instead of JSON — likely momentarily unavailable.');
|
|
162
167
|
}
|
|
163
168
|
return JSON.parse(text);
|
|
164
|
-
}
|
|
169
|
+
});
|
|
165
170
|
}
|
|
166
171
|
/**
|
|
167
172
|
* Fetch plain text (the document body) with retry.
|
|
@@ -174,13 +179,11 @@ export class FederalRegisterService {
|
|
|
174
179
|
* declared `not_found` means exactly that.
|
|
175
180
|
*/
|
|
176
181
|
fetchText(url, ctx, operation) {
|
|
177
|
-
const reqCtx =
|
|
178
|
-
return
|
|
179
|
-
const response = await fetchWithTimeout(url,
|
|
180
|
-
signal: ctx.signal,
|
|
181
|
-
}).catch(rethrowBodyFailure);
|
|
182
|
+
const reqCtx = withExtra(ctx, { operation });
|
|
183
|
+
return runUpstream(ctx, requestBudget(ctx), { operation, context: reqCtx, attemptMs: TIMEOUT_MS, baseDelayMs: BASE_DELAY_MS }, async (deadlineMs, signal) => {
|
|
184
|
+
const response = await fetchWithTimeout(url, deadlineMs, reqCtx, { signal }).catch(rethrowBodyFailure);
|
|
182
185
|
return response.text();
|
|
183
|
-
}
|
|
186
|
+
});
|
|
184
187
|
}
|
|
185
188
|
}
|
|
186
189
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"federal-register-service.js","sourceRoot":"","sources":["../../../src/services/federal-register/federal-register-service.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"federal-register-service.js","sourceRoot":"","sources":["../../../src/services/federal-register/federal-register-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
* through `fetchUpstream` rather than the framework's `fetchWithTimeout`, which
|
|
11
11
|
* throws every non-2xx before a caller can inspect it; the wrapper keeps the
|
|
12
12
|
* branching and still classifies a connect-level failure as a transport failure.
|
|
13
|
+
* The deadline the wrapper does not impose comes from `runUpstream`, which bounds
|
|
14
|
+
* each attempt and draws every one of them down the request's shared budget.
|
|
13
15
|
* Comment bodies are HTML-stripped and attachment-primary submissions flagged.
|
|
14
16
|
* @module services/regulations-gov/regulations-gov-service
|
|
15
17
|
*/
|
|
@@ -68,6 +70,14 @@ export declare class RegulationsGovService {
|
|
|
68
70
|
* before the caller sees it, and its `expectedStatuses` option only lowers the
|
|
69
71
|
* log severity of that throw.
|
|
70
72
|
*
|
|
73
|
+
* Keeping the raw `Response` used to mean keeping no deadline either — this
|
|
74
|
+
* leg was bounded by `ctx.signal` alone, so an upstream that accepted the
|
|
75
|
+
* connection and then said nothing held the request open for as long as it
|
|
76
|
+
* pleased, once per retry. `runUpstream` supplies the deadline the branching
|
|
77
|
+
* ruled out, as a signal composed into the request rather than a helper that
|
|
78
|
+
* consumes the response: every branch below still reads a live `Response`, and
|
|
79
|
+
* both the fetch and the `.json()` that follows it are inside the deadline.
|
|
80
|
+
*
|
|
71
81
|
* Retry is scoped to `retryTransportOnly`: a 429 on the shared hourly key is
|
|
72
82
|
* deterministic for the rest of the window, and expressing that here rather
|
|
73
83
|
* than through `data.retryable` keeps the flag — which is also the caller's own
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"regulations-gov-service.d.ts","sourceRoot":"","sources":["../../../src/services/regulations-gov/regulations-gov-service.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"regulations-gov-service.d.ts","sourceRoot":"","sources":["../../../src/services/regulations-gov/regulations-gov-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAU/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAUrE,OAAO,KAAK,EAEV,mBAAmB,EACnB,iBAAiB,EAEjB,YAAY,EASb,MAAM,YAAY,CAAC;AAWpB,qCAAqC;AACrC,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,+EAA+E;AAC/E,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAE5C,YAAY,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAIvD;IAED,uDAAuD;IACvD,MAAM,IAAI,OAAO,CAEhB;IAED,gEAAgE;IAC1D,SAAS,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAyCzE;IAED,6EAA6E;IACvE,YAAY,CAAC,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAuBtF;IAED,qEAAqE;IAC/D,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAQ9E;IAED;;;;OAIG;IACG,yBAAyB,CAAC,gBAAgB,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAoB9F;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,OAAO,CAAC,SAAS;CA6FlB;AAwLD,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAE1F;AAED,wBAAgB,wBAAwB,IAAI,qBAAqB,CAOhE"}
|
|
@@ -10,15 +10,24 @@
|
|
|
10
10
|
* through `fetchUpstream` rather than the framework's `fetchWithTimeout`, which
|
|
11
11
|
* throws every non-2xx before a caller can inspect it; the wrapper keeps the
|
|
12
12
|
* branching and still classifies a connect-level failure as a transport failure.
|
|
13
|
+
* The deadline the wrapper does not impose comes from `runUpstream`, which bounds
|
|
14
|
+
* each attempt and draws every one of them down the request's shared budget.
|
|
13
15
|
* Comment bodies are HTML-stripped and attachment-primary submissions flagged.
|
|
14
16
|
* @module services/regulations-gov/regulations-gov-service
|
|
15
17
|
*/
|
|
16
|
-
import { internalError, notFound, rateLimited, unauthorized } from '@cyanheads/mcp-ts-core/errors';
|
|
17
|
-
import { httpErrorFromResponse,
|
|
18
|
+
import { internalError, JsonRpcErrorCode, McpError, notFound, rateLimited, unauthorized, validationError, } from '@cyanheads/mcp-ts-core/errors';
|
|
19
|
+
import { httpErrorFromResponse, withExtra } from '@cyanheads/mcp-ts-core/utils';
|
|
18
20
|
import { getServerConfig } from '../../config/server-config.js';
|
|
19
|
-
import {
|
|
20
|
-
import { fetchUpstream, rethrowTransportFailure, retryTransportOnly,
|
|
21
|
+
import { requestBudget } from '../../services/request-budget.js';
|
|
22
|
+
import { fetchUpstream, rethrowTransportFailure, retryTransportOnly, runUpstream, } from '../../services/upstream-failure.js';
|
|
21
23
|
const BASE_DELAY_MS = 1500;
|
|
24
|
+
/**
|
|
25
|
+
* Per-attempt deadline. Matches the Federal Register leg rather than eCFR's
|
|
26
|
+
* looser one: every Regulations.gov response here is a page of JSON:API metadata
|
|
27
|
+
* capped at 250 records, not a bulk document, so an attempt still running at 15s
|
|
28
|
+
* is a peer that is not going to answer.
|
|
29
|
+
*/
|
|
30
|
+
const TIMEOUT_MS = 15_000;
|
|
22
31
|
export class RegulationsGovService {
|
|
23
32
|
baseUrl;
|
|
24
33
|
apiKey;
|
|
@@ -127,6 +136,14 @@ export class RegulationsGovService {
|
|
|
127
136
|
* before the caller sees it, and its `expectedStatuses` option only lowers the
|
|
128
137
|
* log severity of that throw.
|
|
129
138
|
*
|
|
139
|
+
* Keeping the raw `Response` used to mean keeping no deadline either — this
|
|
140
|
+
* leg was bounded by `ctx.signal` alone, so an upstream that accepted the
|
|
141
|
+
* connection and then said nothing held the request open for as long as it
|
|
142
|
+
* pleased, once per retry. `runUpstream` supplies the deadline the branching
|
|
143
|
+
* ruled out, as a signal composed into the request rather than a helper that
|
|
144
|
+
* consumes the response: every branch below still reads a live `Response`, and
|
|
145
|
+
* both the fetch and the `.json()` that follows it are inside the deadline.
|
|
146
|
+
*
|
|
130
147
|
* Retry is scoped to `retryTransportOnly`: a 429 on the shared hourly key is
|
|
131
148
|
* deterministic for the rest of the window, and expressing that here rather
|
|
132
149
|
* than through `data.retryable` keeps the flag — which is also the caller's own
|
|
@@ -140,11 +157,17 @@ export class RegulationsGovService {
|
|
|
140
157
|
// is a programmer error (a caller bypassed the gate), not an operational one.
|
|
141
158
|
throw internalError('RegulationsGovService called without an API key.', { operation });
|
|
142
159
|
}
|
|
143
|
-
const reqCtx =
|
|
144
|
-
return
|
|
160
|
+
const reqCtx = withExtra(ctx, { operation });
|
|
161
|
+
return runUpstream(ctx, requestBudget(ctx), {
|
|
162
|
+
operation,
|
|
163
|
+
context: reqCtx,
|
|
164
|
+
attemptMs: TIMEOUT_MS,
|
|
165
|
+
baseDelayMs: BASE_DELAY_MS,
|
|
166
|
+
isTransient: retryTransportOnly,
|
|
167
|
+
}, async (_deadlineMs, signal) => {
|
|
145
168
|
const response = await fetchUpstream(url, {
|
|
146
169
|
headers: { 'X-Api-Key': key, Accept: 'application/vnd.api+json' },
|
|
147
|
-
signal
|
|
170
|
+
signal,
|
|
148
171
|
}, { service: 'Regulations.gov', operation });
|
|
149
172
|
if (!response.ok) {
|
|
150
173
|
if (response.status === 429) {
|
|
@@ -189,19 +212,17 @@ export class RegulationsGovService {
|
|
|
189
212
|
throw notFound(`No matching docket, document, or comment found on Regulations.gov for "${invalidId}". Verify the ID (e.g. "EPA-HQ-OAR-2025-0194" for a docket, "EPA-HQ-OAR-2025-0194-0001" for a document, "EPA-HQ-OAR-2025-0194-31102" for a comment).`, { operation, reason: 'not_found', ...ctx.recoveryFor('not_found') });
|
|
190
213
|
}
|
|
191
214
|
}
|
|
192
|
-
|
|
215
|
+
const failure = await httpErrorFromResponse(response, {
|
|
193
216
|
service: 'Regulations.gov',
|
|
194
217
|
data: { operation },
|
|
195
|
-
})
|
|
218
|
+
});
|
|
219
|
+
if (failure instanceof McpError && failure.code === JsonRpcErrorCode.InvalidParams) {
|
|
220
|
+
throw validationError(failure.message, { ...failure.data }, { cause: failure });
|
|
221
|
+
}
|
|
222
|
+
rethrowTransportFailure(failure);
|
|
196
223
|
}
|
|
197
224
|
return (await response.json());
|
|
198
|
-
}
|
|
199
|
-
operation,
|
|
200
|
-
context: reqCtx,
|
|
201
|
-
baseDelayMs: BASE_DELAY_MS,
|
|
202
|
-
signal: ctx.signal,
|
|
203
|
-
isTransient: retryTransportOnly,
|
|
204
|
-
}), ctx);
|
|
225
|
+
});
|
|
205
226
|
}
|
|
206
227
|
}
|
|
207
228
|
/**
|
|
@@ -227,7 +248,8 @@ function rateLimitRecovery(ctx, retryAfter) {
|
|
|
227
248
|
* resource ID, or null for every other 400. The API answers a single-resource
|
|
228
249
|
* lookup it cannot parse with `{"errors":[{"status":"400","title":"Invalid ID:
|
|
229
250
|
* <id>"}]}`; a malformed request (bad filter name, out-of-range page size)
|
|
230
|
-
* carries a different title and
|
|
251
|
+
* carries a different title and is domain validation rather than malformed
|
|
252
|
+
* JSON-RPC parameters.
|
|
231
253
|
*/
|
|
232
254
|
async function readInvalidIdTitle(response) {
|
|
233
255
|
let parsed;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"regulations-gov-service.js","sourceRoot":"","sources":["../../../src/services/regulations-gov/regulations-gov-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAEnG,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EACL,aAAa,EACb,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,gCAAgC,CAAC;AAiBxC,MAAM,aAAa,GAAG,IAAI,CAAC;AAiB3B,MAAM,OAAO,qBAAqB;IACf,OAAO,CAAS;IAChB,MAAM,CAAqB;IAE5C,YAAY,OAAkB,EAAE,QAAwB;QACtD,MAAM,GAAG,GAAG,eAAe,EAAE,CAAC;QAC9B,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,qBAAqB,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,oBAAoB,CAAC;IACzC,CAAC;IAED,uDAAuD;IACvD,MAAM;QACJ,OAAO,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IACnE,CAAC;IAED,gEAAgE;IAChE,KAAK,CAAC,SAAS,CAAC,MAAoB,EAAE,GAAY;QAChD,MAAM,SAAS,GAAG,GAAG,IAAI,CAAC,OAAO,YAAY,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CACpC,SAAS,EACT,GAAG,EACH,iCAAiC,CAClC,CAAC;QACF,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE,UAAU,IAAI,EAAE,CAAC;QAE/C,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC;YACpC,kBAAkB,EAAE,MAAM,CAAC,QAAQ;YACnC,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;YACpC,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;YACnC,IAAI,EAAE,aAAa;SACpB,CAAC,CAAC;QACH,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,aAAa,IAAI,EAAE,EAAE,CAAC;YAC9C,SAAS,CAAC,MAAM,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC;QACjD,CAAC;QACD,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,OAAO,cAAc,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC;QACpE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAClC,OAAO,EACP,GAAG,EACH,0CAA0C,CAC3C,CAAC;QAEF,MAAM,SAAS,GAAkB,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;aAClD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;aAChC,MAAM,CAAC,CAAC,CAAC,EAAoB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;QAE/C,OAAO;YACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,mBAAmB;YACzC,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,IAAI;YACpC,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,IAAI;YAChC,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,IAAI;YACtB,QAAQ,EAAE,KAAK,CAAC,UAAU,IAAI,IAAI;YAClC,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,IAAI;YACpC,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,IAAI;YAChC,aAAa,EAAE,OAAO,CAAC,IAAI,EAAE,aAAa,IAAI,SAAS,CAAC,MAAM;YAC9D,SAAS;SACV,CAAC;IACJ,CAAC;IAED,6EAA6E;IAC7E,KAAK,CAAC,YAAY,CAAC,MAAyB,EAAE,GAAY;QACxD,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;YACjC,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;YACpC,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;YACnC,IAAI,EAAE,aAAa;SACpB,CAAC,CAAC;QACH,IAAI,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YACnC,MAAM,CAAC,GAAG,CAAC,qBAAqB,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC/D,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACzD,CAAC;QACD,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,aAAa,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;QAC5D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAC9B,GAAG,EACH,GAAG,EACH,oCAAoC,CACrC,CAAC;QAEF,MAAM,QAAQ,GAAqB,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;aAChD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;aACtC,MAAM,CAAC,CAAC,CAAC,EAAuB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;QAElD,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,IAAI,EAAE,aAAa,IAAI,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC9E,CAAC;IAED,qEAAqE;IACrE,KAAK,CAAC,UAAU,CAAC,SAAiB,EAAE,GAAY;QAC9C,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,aAAa,kBAAkB,CAAC,SAAS,CAAC,sBAAsB,CAAC;QAC5F,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAC9B,GAAG,EACH,GAAG,EACH,kCAAkC,CACnC,CAAC;QACF,OAAO,sBAAsB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAChD,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,yBAAyB,CAAC,gBAAwB,EAAE,GAAY;QACpE,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;YACjC,oBAAoB,EAAE,gBAAgB;YACtC,YAAY,EAAE,GAAG;YACjB,cAAc,EAAE,GAAG;SACpB,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,cAAc,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;QAC7D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAC9B,GAAG,EACH,GAAG,EACH,yCAAyC,CAC1C,CAAC;QACF,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;YAC/B,IAAI,CAAC,CAAC,UAAU,EAAE,QAAQ,KAAK,gBAAgB,IAAI,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAC;gBAC1E,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC;YAC/B,CAAC;QACH,CAAC;QACD,uDAAuD;QACvD,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,IAAI,IAAI,CAAC;IAC7C,CAAC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACK,SAAS,CAAI,GAAW,EAAE,GAAY,EAAE,SAAiB;QAC/D,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QACxB,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,yEAAyE;YACzE,2EAA2E;YAC3E,8EAA8E;YAC9E,MAAM,aAAa,CAAC,kDAAkD,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QACzF,CAAC;QACD,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAChD,OAAO,kBAAkB,CACvB,SAAS,CACP,KAAK,IAAI,EAAE;YACT,MAAM,QAAQ,GAAG,MAAM,aAAa,CAClC,GAAG,EACH;gBACE,OAAO,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,0BAA0B,EAAE;gBACjE,MAAM,EAAE,GAAG,CAAC,MAAM;aACnB,EACD,EAAE,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,CAC1C,CAAC;YACF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;oBAC5B,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;oBACvD,2DAA2D;oBAC3D,oEAAoE;oBACpE,mEAAmE;oBACnE,qEAAqE;oBACrE,qBAAqB;oBACrB,MAAM,WAAW,CAAC,+DAA+D,EAAE;wBACjF,MAAM,EAAE,cAAc;wBACtB,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBACrC,GAAG,iBAAiB,CAAC,GAAG,EAAE,UAAU,CAAC;qBACtC,CAAC,CAAC;gBACL,CAAC;gBACD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;oBACvD,mEAAmE;oBACnE,iEAAiE;oBACjE,oEAAoE;oBACpE,kEAAkE;oBAClE,mEAAmE;oBACnE,kEAAkE;oBAClE,6DAA6D;oBAC7D,oEAAoE;oBACpE,iEAAiE;oBACjE,MAAM,YAAY,CAChB,yDAAyD,QAAQ,CAAC,MAAM,IAAI,EAC5E,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,GAAG,CAAC,WAAW,CAAC,eAAe,CAAC,EAAE,CAC5E,CAAC;gBACJ,CAAC;gBACD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;oBAC5B,oEAAoE;oBACpE,+DAA+D;oBAC/D,MAAM,QAAQ,CACZ,8HAA8H,EAC9H,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CACpE,CAAC;gBACJ,CAAC;gBACD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;oBAC5B,iEAAiE;oBACjE,qEAAqE;oBACrE,oEAAoE;oBACpE,oEAAoE;oBACpE,iEAAiE;oBACjE,+CAA+C;oBAC/C,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;oBAC7D,IAAI,SAAS,EAAE,CAAC;wBACd,MAAM,QAAQ,CACZ,0EAA0E,SAAS,sJAAsJ,EACzO,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CACpE,CAAC;oBACJ,CAAC;gBACH,CAAC;gBACD,uBAAuB,CACrB,MAAM,qBAAqB,CAAC,QAAQ,EAAE;oBACpC,OAAO,EAAE,iBAAiB;oBAC1B,IAAI,EAAE,EAAE,SAAS,EAAE;iBACpB,CAAC,CACH,CAAC;YACJ,CAAC;YACD,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAM,CAAC;QACtC,CAAC,EACD;YACE,SAAS;YACT,OAAO,EAAE,MAAM;YACf,WAAW,EAAE,aAAa;YAC1B,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,WAAW,EAAE,kBAAkB;SAChC,CACF,EACD,GAAG,CACJ,CAAC;IACJ,CAAC;CACF;AAED;;;;;;;;;GASG;AACH,SAAS,iBAAiB,CAAC,GAAY,EAAE,UAAyB;IAChE,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IACjD,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,UAAU,IAAI,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC9D,OAAO;QACL,QAAQ,EAAE,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,8BAA8B,UAAU,IAAI,EAAE;KAC1F,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,kBAAkB,CAAC,QAAkB;IAClD,IAAI,MAA8C,CAAC;IACnD,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAkB,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QAC7D,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;IAC7C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,iBAAiB,CAAC,CAAyC;IAClE,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC;IACvB,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,QAAQ;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO;QACL,UAAU,EAAE,CAAC,CAAC,EAAE;QAChB,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,YAAY;QAC9B,YAAY,EAAE,CAAC,CAAC,YAAY,IAAI,SAAS;QACzC,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,EAAE;QAC9B,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,IAAI;QAC5B,cAAc,EAAE,CAAC,CAAC,cAAc,IAAI,IAAI;QACxC,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,KAAK;KAChC,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAAC,CAAwC;IACvE,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC;IACvB,IAAI,CAAC,CAAC,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IACvB,OAAO;QACL,SAAS,EAAE,CAAC,CAAC,EAAE;QACf,KAAK,EAAE,CAAC,EAAE,KAAK,IAAI,oBAAoB;QACvC,YAAY,EAAE,CAAC,EAAE,YAAY,IAAI,mBAAmB;QACpD,UAAU,EAAE,CAAC,EAAE,UAAU,IAAI,EAAE;QAC/B,QAAQ,EAAE,CAAC,EAAE,QAAQ,IAAI,IAAI;QAC7B,QAAQ,EAAE,CAAC,EAAE,QAAQ,IAAI,EAAE;QAC3B,SAAS,EAAE,CAAC,EAAE,SAAS,IAAI,KAAK;KACjC,CAAC;AACJ,CAAC;AAED,8DAA8D;AAC9D,SAAS,kBAAkB,CACzB,QAAqE;IAErE,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC;SACvC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,WAAW,IAAI,EAAE,CAAC;aAC9C,MAAM,CACL,CAAC,CAAC,EAAiE,EAAE,CACnE,OAAO,CAAC,EAAE,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CACzD;aACA,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACX,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,SAAS;YAC7B,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;SACjD,CAAC,CAAC,CAAC;QACN,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,UAAU,EAAE,KAAK,IAAI,uBAAuB,EAAE,OAAO,EAAE,CAAC;IAC5E,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,mBAAmB,GAA2B;IAClD,GAAG,EAAE,GAAG;IACR,EAAE,EAAE,GAAG;IACP,EAAE,EAAE,GAAG;IACP,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,KAAK,EAAE,GAAG;IACV,KAAK,EAAE,GAAG;IACV,KAAK,EAAE,GAAG;IACV,KAAK,EAAE,GAAG;IACV,KAAK,EAAE,GAAG;IACV,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,GAAG;CACZ,CAAC;AAEF,6DAA6D;AAC7D,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,IAAI,GAAG,IAAI;SACd,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC;SAChC,OAAO,CAAC,qBAAqB,EAAE,IAAI,CAAC;SACpC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC3B,OAAO,IAAI;SACR,OAAO,CAAC,gCAAgC,EAAE,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QACjE,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAChD,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAChD,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,mBAAmB,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;IAC5C,CAAC,CAAC;SACD,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;SAC1B,IAAI,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,UAAU,CAAC,IAAmB;IACrC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,gFAAgF;IAChF,OAAO,qGAAqG,CAAC,IAAI,CAC/G,OAAO,CACR,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAC7B,SAAiB,EACjB,GAAwC;IAExC,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,UAAU,IAAI,EAAE,CAAC;IACrC,MAAM,WAAW,GAAG,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACrD,MAAM,QAAQ,GACZ,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACtF,MAAM,aAAa,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC;SAC5C,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;SACjE,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,OAAO;QACL,SAAS;QACT,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,oBAAoB;QACtC,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,IAAI;QAC5B,mBAAmB,EAAE,CAAC,CAAC,mBAAmB,IAAI,IAAI;QAClD,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,EAAE;QAC9B,YAAY,EAAE,CAAC,CAAC,YAAY,IAAI,IAAI;QACpC,aAAa,EAAE,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI;QAC9D,YAAY,EAAE,CAAC,CAAC,YAAY,IAAI,IAAI;QACpC,QAAQ;QACR,cAAc,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC;QAC9D,WAAW;QACX,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,KAAK;QAC/B,cAAc,EAAE,CAAC,CAAC,cAAc,IAAI,IAAI;KACzC,CAAC;AACJ,CAAC;AAED,gCAAgC;AAEhC,IAAI,QAA2C,CAAC;AAEhD,MAAM,UAAU,yBAAyB,CAAC,MAAiB,EAAE,OAAuB;IAClF,QAAQ,GAAG,IAAI,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CACb,qFAAqF,CACtF,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
1
|
+
{"version":3,"file":"regulations-gov-service.js","sourceRoot":"","sources":["../../../src/services/regulations-gov/regulations-gov-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview The wall clock one MCP request may spend upstream, and the only
|
|
3
|
+
* thing that makes a tool's answer arrive inside a client's request timeout.
|
|
4
|
+
*
|
|
5
|
+
* A per-attempt deadline does not bound a tool call. Attempts multiply — four of
|
|
6
|
+
* them at 15s each, plus backoff, is already past a client's timeout — and so do
|
|
7
|
+
* the calls a tool makes: `regulations_get_cfr_section` reads a date, then the
|
|
8
|
+
* text, then the hierarchy, each with a retry loop of its own. Bounding those
|
|
9
|
+
* separately bounds nothing a caller can act on, so all of them draw down one
|
|
10
|
+
* clock, started at the first upstream call of a request and shared by every
|
|
11
|
+
* attempt, backoff, and service that request touches afterwards.
|
|
12
|
+
*
|
|
13
|
+
* {@link REQUEST_BUDGET_MS} sits well under the MCP TypeScript SDK's 60s default
|
|
14
|
+
* client request timeout (`DEFAULT_REQUEST_TIMEOUT_MSEC`), which neither this
|
|
15
|
+
* server nor the framework overrides — a server that reliably answers
|
|
16
|
+
* `upstream_unavailable` with the budget spent is worth more than one still
|
|
17
|
+
* retrying when the client has already given up and left the caller nothing to
|
|
18
|
+
* read.
|
|
19
|
+
*
|
|
20
|
+
* The budget belongs to a *request*. Out-of-band work — the eCFR mirror ingest,
|
|
21
|
+
* which is a background CLI/cron job pulling ~150 MB of XML per title — has no
|
|
22
|
+
* client waiting on it, so it takes {@link ingestBudget} and keeps its own long
|
|
23
|
+
* deadlines.
|
|
24
|
+
* @module services/request-budget
|
|
25
|
+
*/
|
|
26
|
+
import type { Context } from '@cyanheads/mcp-ts-core';
|
|
27
|
+
/**
|
|
28
|
+
* Total wall clock a single MCP request may spend on upstream work.
|
|
29
|
+
*
|
|
30
|
+
* Deliberately a constant rather than an env var: the number that matters is the
|
|
31
|
+
* client's request timeout, which the server cannot see, and 45s leaves room
|
|
32
|
+
* under the only value that is actually specified anywhere (the SDK's 60s
|
|
33
|
+
* default) for the transport and the client's own overhead.
|
|
34
|
+
*/
|
|
35
|
+
export declare const REQUEST_BUDGET_MS = 45000;
|
|
36
|
+
/** One request's share of wall clock, drawn down by every attempt it makes. */
|
|
37
|
+
export interface RequestBudget {
|
|
38
|
+
/** A single attempt's deadline: the shorter of the leg's own and what is left. */
|
|
39
|
+
attemptMs(preferredMs: number): number;
|
|
40
|
+
/** Whether the budget is spent. */
|
|
41
|
+
expired(): boolean;
|
|
42
|
+
/** Fires when the budget runs out, or when the caller aborts — whichever first. */
|
|
43
|
+
readonly signal: AbortSignal;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* The budget for `ctx`, started on first use and shared by every later call in
|
|
47
|
+
* the same request.
|
|
48
|
+
*/
|
|
49
|
+
export declare function requestBudget(ctx: Context): RequestBudget;
|
|
50
|
+
/**
|
|
51
|
+
* Claim `ctx` for work no client is waiting on, and hand back the unbounded
|
|
52
|
+
* budget every later lookup on it will find.
|
|
53
|
+
*
|
|
54
|
+
* Registering rather than returning a loose object is what makes the split hold.
|
|
55
|
+
* An ingest run is one context shared across many calls, and only the bulk read
|
|
56
|
+
* asks for a long deadline outright — the titles list its title loop is built
|
|
57
|
+
* from goes through the ordinary JSON helper, which would start a 45-second
|
|
58
|
+
* clock over a job with hours of work ahead of it. Call this once where the
|
|
59
|
+
* out-of-band context is built, and every later lookup finds it. Still
|
|
60
|
+
* cancellable: the ingest's own signal (SIGINT/SIGTERM) is what stops it.
|
|
61
|
+
*/
|
|
62
|
+
export declare function ingestBudget(ctx: Context): RequestBudget;
|
|
63
|
+
//# sourceMappingURL=request-budget.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-budget.d.ts","sourceRoot":"","sources":["../../src/services/request-budget.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEtD;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,QAAS,CAAC;AAExC,+EAA+E;AAC/E,MAAM,WAAW,aAAa;IAC5B,kFAAkF;IAClF,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;IACvC,mCAAmC;IACnC,OAAO,IAAI,OAAO,CAAC;IACnB,mFAAmF;IACnF,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;CAC9B;AAUD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,CAyBzD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,CAWxD"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview The wall clock one MCP request may spend upstream, and the only
|
|
3
|
+
* thing that makes a tool's answer arrive inside a client's request timeout.
|
|
4
|
+
*
|
|
5
|
+
* A per-attempt deadline does not bound a tool call. Attempts multiply — four of
|
|
6
|
+
* them at 15s each, plus backoff, is already past a client's timeout — and so do
|
|
7
|
+
* the calls a tool makes: `regulations_get_cfr_section` reads a date, then the
|
|
8
|
+
* text, then the hierarchy, each with a retry loop of its own. Bounding those
|
|
9
|
+
* separately bounds nothing a caller can act on, so all of them draw down one
|
|
10
|
+
* clock, started at the first upstream call of a request and shared by every
|
|
11
|
+
* attempt, backoff, and service that request touches afterwards.
|
|
12
|
+
*
|
|
13
|
+
* {@link REQUEST_BUDGET_MS} sits well under the MCP TypeScript SDK's 60s default
|
|
14
|
+
* client request timeout (`DEFAULT_REQUEST_TIMEOUT_MSEC`), which neither this
|
|
15
|
+
* server nor the framework overrides — a server that reliably answers
|
|
16
|
+
* `upstream_unavailable` with the budget spent is worth more than one still
|
|
17
|
+
* retrying when the client has already given up and left the caller nothing to
|
|
18
|
+
* read.
|
|
19
|
+
*
|
|
20
|
+
* The budget belongs to a *request*. Out-of-band work — the eCFR mirror ingest,
|
|
21
|
+
* which is a background CLI/cron job pulling ~150 MB of XML per title — has no
|
|
22
|
+
* client waiting on it, so it takes {@link ingestBudget} and keeps its own long
|
|
23
|
+
* deadlines.
|
|
24
|
+
* @module services/request-budget
|
|
25
|
+
*/
|
|
26
|
+
/**
|
|
27
|
+
* Total wall clock a single MCP request may spend on upstream work.
|
|
28
|
+
*
|
|
29
|
+
* Deliberately a constant rather than an env var: the number that matters is the
|
|
30
|
+
* client's request timeout, which the server cannot see, and 45s leaves room
|
|
31
|
+
* under the only value that is actually specified anywhere (the SDK's 60s
|
|
32
|
+
* default) for the transport and the client's own overhead.
|
|
33
|
+
*/
|
|
34
|
+
export const REQUEST_BUDGET_MS = 45_000;
|
|
35
|
+
/**
|
|
36
|
+
* WeakMap rather than a field on `Context`: the budget has to be shared by every
|
|
37
|
+
* service a request calls, and the handler `Context` is the one object all of
|
|
38
|
+
* them already receive. Keyed weakly so a finished request's budget is collected
|
|
39
|
+
* with it.
|
|
40
|
+
*/
|
|
41
|
+
const budgets = new WeakMap();
|
|
42
|
+
/**
|
|
43
|
+
* The budget for `ctx`, started on first use and shared by every later call in
|
|
44
|
+
* the same request.
|
|
45
|
+
*/
|
|
46
|
+
export function requestBudget(ctx) {
|
|
47
|
+
const existing = budgets.get(ctx);
|
|
48
|
+
if (existing)
|
|
49
|
+
return existing;
|
|
50
|
+
const deadline = Date.now() + REQUEST_BUDGET_MS;
|
|
51
|
+
const controller = new AbortController();
|
|
52
|
+
const timer = setTimeout(() => {
|
|
53
|
+
ctx.signal.removeEventListener('abort', clearOnCallerAbort);
|
|
54
|
+
controller.abort(new DOMException(`Request budget of ${REQUEST_BUDGET_MS}ms spent.`, 'TimeoutError'));
|
|
55
|
+
}, REQUEST_BUDGET_MS);
|
|
56
|
+
const clearOnCallerAbort = () => clearTimeout(timer);
|
|
57
|
+
if (ctx.signal.aborted)
|
|
58
|
+
clearOnCallerAbort();
|
|
59
|
+
else
|
|
60
|
+
ctx.signal.addEventListener('abort', clearOnCallerAbort, { once: true });
|
|
61
|
+
// Never blocks an exit: the budget outlives its request only as a timer.
|
|
62
|
+
timer.unref?.();
|
|
63
|
+
const budget = {
|
|
64
|
+
attemptMs: (preferredMs) => Math.max(1, Math.min(preferredMs, deadline - Date.now())),
|
|
65
|
+
expired: () => Date.now() >= deadline,
|
|
66
|
+
signal: AbortSignal.any([controller.signal, ctx.signal]),
|
|
67
|
+
};
|
|
68
|
+
budgets.set(ctx, budget);
|
|
69
|
+
return budget;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Claim `ctx` for work no client is waiting on, and hand back the unbounded
|
|
73
|
+
* budget every later lookup on it will find.
|
|
74
|
+
*
|
|
75
|
+
* Registering rather than returning a loose object is what makes the split hold.
|
|
76
|
+
* An ingest run is one context shared across many calls, and only the bulk read
|
|
77
|
+
* asks for a long deadline outright — the titles list its title loop is built
|
|
78
|
+
* from goes through the ordinary JSON helper, which would start a 45-second
|
|
79
|
+
* clock over a job with hours of work ahead of it. Call this once where the
|
|
80
|
+
* out-of-band context is built, and every later lookup finds it. Still
|
|
81
|
+
* cancellable: the ingest's own signal (SIGINT/SIGTERM) is what stops it.
|
|
82
|
+
*/
|
|
83
|
+
export function ingestBudget(ctx) {
|
|
84
|
+
const existing = budgets.get(ctx);
|
|
85
|
+
if (existing)
|
|
86
|
+
return existing;
|
|
87
|
+
const budget = {
|
|
88
|
+
attemptMs: (preferredMs) => preferredMs,
|
|
89
|
+
expired: () => false,
|
|
90
|
+
signal: ctx.signal,
|
|
91
|
+
};
|
|
92
|
+
budgets.set(ctx, budget);
|
|
93
|
+
return budget;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=request-budget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-budget.js","sourceRoot":"","sources":["../../src/services/request-budget.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAIH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAYxC;;;;;GAKG;AACH,MAAM,OAAO,GAAG,IAAI,OAAO,EAA0B,CAAC;AAEtD;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,GAAY;IACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAE9B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,iBAAiB,CAAC;IAChD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;QAC5B,GAAG,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;QAC5D,UAAU,CAAC,KAAK,CACd,IAAI,YAAY,CAAC,qBAAqB,iBAAiB,WAAW,EAAE,cAAc,CAAC,CACpF,CAAC;IACJ,CAAC,EAAE,iBAAiB,CAAC,CAAC;IACtB,MAAM,kBAAkB,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IACrD,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO;QAAE,kBAAkB,EAAE,CAAC;;QACxC,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,kBAAkB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9E,yEAAyE;IACzE,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;IAEhB,MAAM,MAAM,GAAkB;QAC5B,SAAS,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACrF,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,QAAQ;QACrC,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;KACzD,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACzB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,YAAY,CAAC,GAAY;IACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAE9B,MAAM,MAAM,GAAkB;QAC5B,SAAS,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW;QACvC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK;QACpB,MAAM,EAAE,GAAG,CAAC,MAAM;KACnB,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACzB,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @fileoverview
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
2
|
+
* @fileoverview How every upstream call on this surface is run, and how whatever
|
|
3
|
+
* it fails with becomes `upstream_unavailable`. `runUpstream` is the one pipeline
|
|
4
|
+
* all three services fetch through — attempt deadline, retry, request budget,
|
|
5
|
+
* classification — and the rest are the pieces it composes: `fetchUpstream`
|
|
6
|
+
* raises a transport failure from a request that never produced a response,
|
|
7
|
+
* `rethrowTransportFailure` re-codes the 5xx statuses the status→code map does
|
|
8
|
+
* not call one, `retryTransportOnly` says which of them a retry can fix, and
|
|
9
|
+
* `withUpstreamReason` stamps the contract reason onto whichever transport
|
|
10
|
+
* failure reaches it.
|
|
8
11
|
*
|
|
9
12
|
* Every tool on this surface declares `upstream_unavailable`, but the failure it
|
|
10
13
|
* describes is raised below any handler: the framework's fetch pipeline
|
|
@@ -22,6 +25,8 @@
|
|
|
22
25
|
* @module services/upstream-failure
|
|
23
26
|
*/
|
|
24
27
|
import type { Context } from '@cyanheads/mcp-ts-core';
|
|
28
|
+
import { type RequestContext } from '@cyanheads/mcp-ts-core/utils';
|
|
29
|
+
import type { RequestBudget } from '../services/request-budget.js';
|
|
25
30
|
/** Identifies the request in the raised error's message and `data`. */
|
|
26
31
|
interface UpstreamRequestContext {
|
|
27
32
|
/** Service method raising the request, e.g. `RegulationsGovService.getDocket`. */
|
|
@@ -52,9 +57,9 @@ interface UpstreamRequestContext {
|
|
|
52
57
|
*
|
|
53
58
|
* An abort is the exception and re-throws untouched: the caller ending its own
|
|
54
59
|
* request is not an upstream failure, and the framework already classifies it.
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
60
|
+
* That covers an attempt deadline too — {@link runUpstream} composes it into
|
|
61
|
+
* `init.signal` and identifies its own expiry above this wrapper, so the raw
|
|
62
|
+
* rejection is exactly what it needs to see.
|
|
58
63
|
*/
|
|
59
64
|
export declare function fetchUpstream(url: string, init: RequestInit, { service, operation }: UpstreamRequestContext): Promise<Response>;
|
|
60
65
|
/**
|
|
@@ -92,19 +97,43 @@ export declare function rethrowTransportFailure(error: unknown): never;
|
|
|
92
97
|
* (a parse failure mid-pipeline) stays transient the way the default has it.
|
|
93
98
|
*/
|
|
94
99
|
export declare function retryTransportOnly(error: unknown): boolean;
|
|
100
|
+
/** What {@link runUpstream} needs to know about the leg it is running. */
|
|
101
|
+
export interface UpstreamSpec {
|
|
102
|
+
/** The leg's own per-attempt deadline, before the budget has its say. */
|
|
103
|
+
attemptMs: number;
|
|
104
|
+
/** Retry backoff base, calibrated to the upstream. */
|
|
105
|
+
baseDelayMs: number;
|
|
106
|
+
/** Correlated log bindings, shared with the fetch inside the attempt. */
|
|
107
|
+
context: RequestContext;
|
|
108
|
+
/** Retry classification, where the leg's default differs from the framework's. */
|
|
109
|
+
isTransient?: ((error: unknown) => boolean) | undefined;
|
|
110
|
+
/** Service method raising the request, e.g. `EcfrService.getSectionText`. */
|
|
111
|
+
operation: string;
|
|
112
|
+
}
|
|
95
113
|
/**
|
|
96
|
-
* Run upstream
|
|
114
|
+
* Run one upstream fetch+parse pipeline: an attempt deadline, `withRetry` around
|
|
115
|
+
* it, the request's shared wall-clock budget over both, and the classification
|
|
116
|
+
* that turns whatever comes out into a reason the caller can switch on.
|
|
97
117
|
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
*
|
|
103
|
-
*
|
|
118
|
+
* **Three deadlines, one clock.** `attempt` is handed the deadline for *this*
|
|
119
|
+
* attempt — the shorter of the leg's own and what the budget has left — and a
|
|
120
|
+
* signal that fires when it expires. The budget's signal drives `withRetry`, so
|
|
121
|
+
* a spent budget ends the loop and cuts short a backoff already sleeping rather
|
|
122
|
+
* than waiting out an attempt that cannot finish in time. Nothing here is
|
|
123
|
+
* per-call: a tool making three upstream calls draws all of them down the same
|
|
124
|
+
* budget, so the answer arrives inside the client's request timeout regardless
|
|
125
|
+
* of how the work is split.
|
|
104
126
|
*
|
|
105
|
-
*
|
|
106
|
-
*
|
|
127
|
+
* **A deadline is not a cancellation.** The attempt signal composes the caller's
|
|
128
|
+
* own, so both abort the same fetch — but the two answer differently, and have
|
|
129
|
+
* to. A deadline is the upstream failing to respond, so it leaves as a `Timeout`
|
|
130
|
+
* that {@link withUpstreamReason} stamps `upstream_unavailable`, retryable and
|
|
131
|
+
* actionable. A caller abort is the caller ending its own request, with nothing
|
|
132
|
+
* to recover and nothing to advertise, so it passes through with whatever
|
|
133
|
+
* classification the layer that caught it gave it. They are told apart by
|
|
134
|
+
* identity — this attempt's own abort reason, and the caller's `ctx.signal` —
|
|
135
|
+
* never by the rejection's text, which is a different string per runtime.
|
|
107
136
|
*/
|
|
108
|
-
export declare function
|
|
137
|
+
export declare function runUpstream<T>(ctx: Context, budget: RequestBudget, spec: UpstreamSpec, attempt: (deadlineMs: number, signal: AbortSignal) => Promise<T>): Promise<T>;
|
|
109
138
|
export {};
|
|
110
139
|
//# sourceMappingURL=upstream-failure.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upstream-failure.d.ts","sourceRoot":"","sources":["../../src/services/upstream-failure.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"upstream-failure.d.ts","sourceRoot":"","sources":["../../src/services/upstream-failure.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAOtD,OAAO,EAAE,KAAK,cAAc,EAAa,MAAM,8BAA8B,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAElE,uEAAuE;AACvE,UAAU,sBAAsB;IAC9B,kFAAkF;IAClF,SAAS,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,WAAW,EACjB,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,sBAAsB,GAC7C,OAAO,CAAC,QAAQ,CAAC,CAgBnB;AAaD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CAQ7D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAG1D;AA0BD,0EAA0E;AAC1E,MAAM,WAAW,YAAY;IAC3B,yEAAyE;IACzE,SAAS,EAAE,MAAM,CAAC;IAClB,sDAAsD;IACtD,WAAW,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,OAAO,EAAE,cAAc,CAAC;IACxB,kFAAkF;IAClF,WAAW,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;IACxD,6EAA6E;IAC7E,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAC3B,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GAC/D,OAAO,CAAC,CAAC,CAAC,CAYZ"}
|