@bedolla/enriweb 0.1.5 → 0.1.7

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 (56) hide show
  1. package/README.md +48 -20
  2. package/dist/client/EnriProxyClient.d.ts +176 -5
  3. package/dist/client/EnriProxyClient.d.ts.map +1 -1
  4. package/dist/client/EnriProxyClient.js +255 -31
  5. package/dist/client/EnriProxyClient.js.map +1 -1
  6. package/dist/index.js +65 -25
  7. package/dist/index.js.map +1 -1
  8. package/dist/package-info.d.ts +26 -0
  9. package/dist/package-info.d.ts.map +1 -1
  10. package/dist/package-info.js +29 -2
  11. package/dist/package-info.js.map +1 -1
  12. package/dist/server/EnriWebServer.d.ts +33 -0
  13. package/dist/server/EnriWebServer.d.ts.map +1 -1
  14. package/dist/server/EnriWebServer.js +338 -28
  15. package/dist/server/EnriWebServer.js.map +1 -1
  16. package/dist/shared/Utf8SafeTextSlicer.d.ts +47 -0
  17. package/dist/shared/Utf8SafeTextSlicer.d.ts.map +1 -0
  18. package/dist/shared/Utf8SafeTextSlicer.js +97 -0
  19. package/dist/shared/Utf8SafeTextSlicer.js.map +1 -0
  20. package/dist/shared/validation.d.ts +13 -1
  21. package/dist/shared/validation.d.ts.map +1 -1
  22. package/dist/shared/validation.js +41 -17
  23. package/dist/shared/validation.js.map +1 -1
  24. package/dist/tools/WebFetchNpmProjection.d.ts +143 -0
  25. package/dist/tools/WebFetchNpmProjection.d.ts.map +1 -0
  26. package/dist/tools/WebFetchNpmProjection.js +480 -0
  27. package/dist/tools/WebFetchNpmProjection.js.map +1 -0
  28. package/dist/tools/WebFetchParamsParser.d.ts +26 -0
  29. package/dist/tools/WebFetchParamsParser.d.ts.map +1 -0
  30. package/dist/tools/WebFetchParamsParser.js +157 -0
  31. package/dist/tools/WebFetchParamsParser.js.map +1 -0
  32. package/dist/tools/WebFetchRangesExecutor.d.ts +86 -0
  33. package/dist/tools/WebFetchRangesExecutor.d.ts.map +1 -0
  34. package/dist/tools/WebFetchRangesExecutor.js +277 -0
  35. package/dist/tools/WebFetchRangesExecutor.js.map +1 -0
  36. package/dist/tools/WebFetchTool.d.ts +187 -71
  37. package/dist/tools/WebFetchTool.d.ts.map +1 -1
  38. package/dist/tools/WebFetchTool.js +145 -367
  39. package/dist/tools/WebFetchTool.js.map +1 -1
  40. package/dist/tools/WebFetchToolTextFormatter.d.ts +57 -0
  41. package/dist/tools/WebFetchToolTextFormatter.d.ts.map +1 -0
  42. package/dist/tools/WebFetchToolTextFormatter.js +135 -0
  43. package/dist/tools/WebFetchToolTextFormatter.js.map +1 -0
  44. package/dist/tools/WebSearchRegistryHttpReader.d.ts +116 -0
  45. package/dist/tools/WebSearchRegistryHttpReader.d.ts.map +1 -0
  46. package/dist/tools/WebSearchRegistryHttpReader.js +157 -0
  47. package/dist/tools/WebSearchRegistryHttpReader.js.map +1 -0
  48. package/dist/tools/WebSearchRegistryVerifier.d.ts +111 -6
  49. package/dist/tools/WebSearchRegistryVerifier.d.ts.map +1 -1
  50. package/dist/tools/WebSearchRegistryVerifier.js +406 -125
  51. package/dist/tools/WebSearchRegistryVerifier.js.map +1 -1
  52. package/dist/tools/WebSearchTool.d.ts +85 -2
  53. package/dist/tools/WebSearchTool.d.ts.map +1 -1
  54. package/dist/tools/WebSearchTool.js +197 -19
  55. package/dist/tools/WebSearchTool.js.map +1 -1
  56. package/package.json +3 -2
@@ -6,10 +6,75 @@
6
6
  * - POST /v1/tools/web_fetch
7
7
  *
8
8
  * @module client/EnriProxyClient
9
+ *
10
+ * @remarks Size note (~950 lines, documented exception to the <=700 policy):
11
+ * one file currently owns the transport (dual-timeout raw HTTP, abort
12
+ * labeling, response-size ceilings), the wire payload builders, the typed
13
+ * response contracts, and the Spanish error mapping. The planned split is a
14
+ * dedicated `EnriProxyHttpTransport` module; until that batch, moving any
15
+ * single piece would duplicate the carefully paired timeout/abort/cap
16
+ * invariants that the tests pin together.
9
17
  */
10
18
  import { request as httpRequest } from "node:http";
11
19
  import { request as httpsRequest } from "node:https";
12
20
  import { URL } from "node:url";
21
+ import { sliceUtf8Safe } from "../shared/Utf8SafeTextSlicer.js";
22
+ /**
23
+ * Default ceiling for one proxied response body.
24
+ *
25
+ * @remarks
26
+ * Generous for the default 200k-char budget; larger `max_chars` budgets
27
+ * derive a higher ceiling via {@link resolveMaxResponseBytes}.
28
+ */
29
+ const DEFAULT_MAX_RESPONSE_BYTES = 20 * 1024 * 1024;
30
+ /**
31
+ * Derives the per-request response size ceiling from the content budget.
32
+ *
33
+ * @remarks
34
+ * EnriProxy answers JSON, so every character may expand up to ~6 bytes
35
+ * (`\uXXXX` escapes, quotes, newlines). A known `maxChars` raises the
36
+ * ceiling to `6 × maxChars + 1MB` so a legitimate ~4M-char capture rich in
37
+ * escapes is not rejected mid-stream.
38
+ *
39
+ * @param maxChars - Requested content budget in characters, when known.
40
+ * @returns Maximum accepted response body in bytes.
41
+ */
42
+ export function resolveMaxResponseBytes(maxChars) {
43
+ if (maxChars === undefined) {
44
+ return DEFAULT_MAX_RESPONSE_BYTES;
45
+ }
46
+ return Math.max(DEFAULT_MAX_RESPONSE_BYTES, 6 * maxChars + 1024 * 1024);
47
+ }
48
+ /**
49
+ * Upper character budget accepted from one tool call.
50
+ *
51
+ * @remarks
52
+ * Single source of truth for the shared 4M wire ceiling: the client clamps
53
+ * every request payload with it and the tool layer imports the same constant
54
+ * so the documented ceiling cannot drift between modules.
55
+ */
56
+ export const MAX_WIRE_MAX_CHARS = 4_000_000;
57
+ /**
58
+ * Detects a delete-cursor web fetch request.
59
+ *
60
+ * @param params - Web fetch request union member
61
+ * @returns True when the request deletes a cursor.
62
+ */
63
+ function isDeleteRequest(params) {
64
+ return "action" in params && params.action === "delete";
65
+ }
66
+ /**
67
+ * Normalizes one max_chars budget to a positive integer within the ceiling.
68
+ *
69
+ * @param value - Raw budget value.
70
+ * @returns Normalized budget, or undefined when unusable.
71
+ */
72
+ function normalizeMaxChars(value) {
73
+ if (typeof value !== "number" || !Number.isFinite(value)) {
74
+ return undefined;
75
+ }
76
+ return Math.min(MAX_WIRE_MAX_CHARS, Math.max(1, Math.trunc(value)));
77
+ }
13
78
  /**
14
79
  * Error thrown when EnriProxy returns a non-2xx HTTP response.
15
80
  */
@@ -72,9 +137,10 @@ export class EnriProxyClient {
72
137
  * Executes a web search via EnriProxy.
73
138
  *
74
139
  * @param params - Search parameters
140
+ * @param signal - Optional caller abort signal
75
141
  * @returns Search response
76
142
  */
77
- async webSearch(params) {
143
+ async webSearch(params, signal, options) {
78
144
  const url = this.buildUrl("/v1/tools/web_search");
79
145
  const payload = {
80
146
  query: params.query
@@ -97,22 +163,29 @@ export class EnriProxyClient {
97
163
  if (typeof params.searchPrompt === "string" && params.searchPrompt.trim()) {
98
164
  payload["search_prompt"] = params.searchPrompt.trim();
99
165
  }
100
- const result = await this.requestJson("POST", url, payload, this.timeoutMs);
166
+ const result = await this.requestJson("POST", url, payload, this.timeoutMs, signal, options);
101
167
  if (result.status < 200 || result.status >= 300) {
102
- throw new EnriProxyHttpError(`La búsqueda web falló (HTTP ${result.status}).`, result.status, result.headers, result.body);
168
+ throw new EnriProxyHttpError(`La búsqueda web falló (HTTP ${result.status}). ${EnriProxyClient.describeHttpStatus(result.status)}`.trimEnd(), result.status, result.headers, result.body.slice(0, 4000));
169
+ }
170
+ try {
171
+ return JSON.parse(result.body);
172
+ }
173
+ catch (error) {
174
+ throw new Error(`Respuesta no JSON de EnriProxy en /v1/tools/web_search (HTTP ${String(result.status)}): ${EnriProxyClient.describeUnparseableBody(error)}`);
103
175
  }
104
- return JSON.parse(result.body);
105
176
  }
106
- /**
107
- * Executes a web fetch via EnriProxy.
108
- *
109
- * @param params - Fetch parameters
110
- * @returns Fetch response
111
- */
112
- async webFetch(params) {
177
+ async webFetch(params, signal, options) {
113
178
  const url = this.buildUrl("/v1/tools/web_fetch");
114
179
  const payload = {};
115
- if ("cursor" in params) {
180
+ if (isDeleteRequest(params)) {
181
+ const cursor = params.cursor.trim();
182
+ if (!cursor) {
183
+ throw new Error("webFetch requiere un cursor no vacío.");
184
+ }
185
+ payload["cursor"] = cursor;
186
+ payload["action"] = "delete";
187
+ }
188
+ else if ("cursor" in params) {
116
189
  const cursor = params.cursor.trim();
117
190
  if (!cursor) {
118
191
  throw new Error("webFetch requiere un cursor no vacío.");
@@ -122,10 +195,16 @@ export class EnriProxyClient {
122
195
  payload["offset_chars"] = Math.max(0, Math.trunc(params.offsetChars));
123
196
  }
124
197
  if (typeof params.limitChars === "number" && Number.isFinite(params.limitChars)) {
125
- payload["limit_chars"] = Math.max(1, Math.trunc(params.limitChars));
198
+ const limitChars = Math.trunc(params.limitChars);
199
+ // A zero limit means "no explicit limit" (tool contract); only send
200
+ // positive limits so direct callers agree with the tool layer.
201
+ if (limitChars !== 0) {
202
+ payload["limit_chars"] = Math.max(1, limitChars);
203
+ }
126
204
  }
127
- if (typeof params.maxChars === "number" && Number.isFinite(params.maxChars)) {
128
- payload["max_chars"] = Math.max(1, Math.trunc(params.maxChars));
205
+ const cursorMaxChars = normalizeMaxChars(params.maxChars);
206
+ if (cursorMaxChars !== undefined) {
207
+ payload["max_chars"] = cursorMaxChars;
129
208
  }
130
209
  }
131
210
  else {
@@ -133,8 +212,9 @@ export class EnriProxyClient {
133
212
  if (typeof params.prompt === "string" && params.prompt.trim()) {
134
213
  payload["prompt"] = params.prompt.trim();
135
214
  }
136
- if (typeof params.maxChars === "number") {
137
- payload["max_chars"] = params.maxChars;
215
+ const urlMaxChars = normalizeMaxChars(params.maxChars);
216
+ if (urlMaxChars !== undefined) {
217
+ payload["max_chars"] = urlMaxChars;
138
218
  }
139
219
  if (params.format === "markdown" || params.format === "text" || params.format === "html") {
140
220
  payload["format"] = params.format;
@@ -145,18 +225,82 @@ export class EnriProxyClient {
145
225
  if (params.includeLinks === true) {
146
226
  payload["include_links"] = true;
147
227
  }
228
+ if (params.includeLinks === false) {
229
+ payload["include_links"] = false;
230
+ }
148
231
  if (params.includeMetadata === true) {
149
232
  payload["include_metadata"] = true;
150
233
  }
234
+ if (params.includeMetadata === false) {
235
+ payload["include_metadata"] = false;
236
+ }
151
237
  if (typeof params.anchor === "string" && params.anchor.trim()) {
152
- payload["anchor"] = params.anchor.trim().replace(/^#+/, "").slice(0, 300);
238
+ const anchor = sliceUtf8Safe(params.anchor.trim().replace(/^#+/, "").trim(), 0, 300);
239
+ if (anchor) {
240
+ payload["anchor"] = anchor;
241
+ }
153
242
  }
154
243
  }
155
- const result = await this.requestJson("POST", url, payload, this.timeoutMs);
244
+ const requestMaxChars = isDeleteRequest(params)
245
+ ? undefined
246
+ : normalizeMaxChars(params.maxChars);
247
+ const transportOptions = {
248
+ ...options,
249
+ maxResponseBytes: options?.maxResponseBytes ?? resolveMaxResponseBytes(requestMaxChars)
250
+ };
251
+ const result = await this.requestJson("POST", url, payload, this.timeoutMs, signal, transportOptions);
156
252
  if (result.status < 200 || result.status >= 300) {
157
- throw new EnriProxyHttpError(`El fetch web falló (HTTP ${result.status}).`, result.status, result.headers, result.body);
253
+ throw new EnriProxyHttpError(`El fetch web falló (HTTP ${result.status}). ${EnriProxyClient.describeHttpStatus(result.status)}`.trimEnd(), result.status, result.headers, result.body.slice(0, 4000));
254
+ }
255
+ let parsed;
256
+ try {
257
+ parsed = JSON.parse(result.body);
258
+ }
259
+ catch (error) {
260
+ throw new Error(`Respuesta no JSON de EnriProxy en /v1/tools/web_fetch (HTTP ${String(result.status)}): ${EnriProxyClient.describeUnparseableBody(error)}`);
261
+ }
262
+ if (isDeleteRequest(params)) {
263
+ const record = typeof parsed === "object" && parsed !== null && !Array.isArray(parsed)
264
+ ? parsed
265
+ : {};
266
+ return {
267
+ deleted: record["deleted"] === true,
268
+ cursor: typeof record["cursor"] === "string" ? record["cursor"] : params.cursor
269
+ };
270
+ }
271
+ return parsed;
272
+ }
273
+ /**
274
+ * Summarizes a response-body parse failure as a bounded Spanish tail.
275
+ *
276
+ * @remarks
277
+ * V8's parser message ("Unexpected token …") is English jargon that would
278
+ * reach the model verbatim through the tool result; it is reduced to a
279
+ * Spanish label plus at most 80 characters of raw parser detail.
280
+ *
281
+ * @param error - Failure thrown while parsing the proxy response body.
282
+ * @returns Short Spanish summary for a model-facing error message.
283
+ */
284
+ static describeUnparseableBody(error) {
285
+ const raw = error instanceof Error ? error.message : String(error);
286
+ return `cuerpo de respuesta no parseable (${sliceUtf8Safe(raw, 0, 80)})`;
287
+ }
288
+ /**
289
+ * Summarizes one non-2xx HTTP status as bounded Spanish guidance.
290
+ *
291
+ * @remarks
292
+ * The raw HTTP client does not follow redirects: an `ENRIPROXY_URL` behind
293
+ * a 301/302/303/307/308 would otherwise surface as a bare status code with
294
+ * no hint that the server configuration (not the call) must change.
295
+ *
296
+ * @param status - HTTP status returned by the server.
297
+ * @returns Spanish guidance suffix (may be empty).
298
+ */
299
+ static describeHttpStatus(status) {
300
+ if (status === 301 || status === 302 || status === 303 || status === 307 || status === 308) {
301
+ return "El servidor respondió con una redirección que este cliente no sigue: configure ENRIPROXY_URL con la URL final (sin redirección) y reintente.";
158
302
  }
159
- return JSON.parse(result.body);
303
+ return "";
160
304
  }
161
305
  /**
162
306
  * Builds an absolute URL relative to the configured base URL.
@@ -165,7 +309,13 @@ export class EnriProxyClient {
165
309
  * @returns URL instance
166
310
  */
167
311
  buildUrl(pathname) {
168
- return new URL(pathname, this.baseUrl);
312
+ const base = new URL(this.baseUrl);
313
+ const basePath = base.pathname.replace(/\/+$/u, "");
314
+ const cleanPath = pathname.startsWith("/") ? pathname : `/${pathname}`;
315
+ base.pathname = `${basePath}${cleanPath}`.replace(/\/{2,}/gu, "/");
316
+ base.search = "";
317
+ base.hash = "";
318
+ return base;
169
319
  }
170
320
  /**
171
321
  * Sends a JSON request and returns the response.
@@ -174,15 +324,16 @@ export class EnriProxyClient {
174
324
  * @param url - Target URL
175
325
  * @param jsonBody - JSON payload
176
326
  * @param timeoutMs - Timeout in milliseconds
327
+ * @param signal - Optional caller abort signal
177
328
  * @returns HTTP result
178
329
  */
179
- async requestJson(method, url, jsonBody, timeoutMs) {
330
+ async requestJson(method, url, jsonBody, timeoutMs, signal, options) {
180
331
  const body = JSON.stringify(jsonBody);
181
332
  const headers = {
182
333
  "Content-Type": "application/json",
183
334
  "Content-Length": String(Buffer.byteLength(body))
184
335
  };
185
- return this.requestRaw(method, url, headers, Buffer.from(body, "utf8"), timeoutMs);
336
+ return this.requestRaw(method, url, headers, Buffer.from(body, "utf8"), timeoutMs, signal, options);
186
337
  }
187
338
  /**
188
339
  * Sends an HTTP request with optional headers and body.
@@ -192,43 +343,116 @@ export class EnriProxyClient {
192
343
  * @param headers - Request headers
193
344
  * @param body - Request body
194
345
  * @param timeoutMs - Timeout in milliseconds
346
+ * @param signal - Optional abort signal (destroys the request on abort)
347
+ * @param options - Optional transport options (caller signal labeling, size ceiling)
195
348
  * @returns HTTP result
196
349
  */
197
- async requestRaw(method, url, headers, body, timeoutMs) {
350
+ async requestRaw(method, url, headers, body, timeoutMs, signal, options) {
198
351
  const isHttps = url.protocol === "https:";
199
352
  const reqFn = isHttps ? httpsRequest : httpRequest;
200
353
  const requestHeaders = {
201
354
  Authorization: `Bearer ${this.apiKey}`,
202
355
  ...(headers ?? {})
203
356
  };
357
+ // When the caller wraps its signal (caller abort + subfetch timeout) it
358
+ // also passes `callerSignal`: an abort with a live caller signal means
359
+ // the subfetch timeout fired, not a client cancellation.
360
+ const callerSignal = options?.callerSignal;
361
+ const abortMessage = () => {
362
+ if (callerSignal !== undefined && !callerSignal.aborted) {
363
+ return `La petición expiró después de ${String(options?.subfetchTimeoutMs ?? timeoutMs)}ms`;
364
+ }
365
+ return "La petición fue cancelada por el cliente.";
366
+ };
204
367
  return await new Promise((resolve, reject) => {
368
+ let settled = false;
369
+ const settleResolve = (result) => {
370
+ if (!settled) {
371
+ settled = true;
372
+ resolve(result);
373
+ }
374
+ };
375
+ const settleReject = (error) => {
376
+ if (!settled) {
377
+ settled = true;
378
+ reject(error);
379
+ }
380
+ };
381
+ if (signal?.aborted) {
382
+ settleReject(new Error(abortMessage()));
383
+ return;
384
+ }
205
385
  const req = reqFn(url, {
206
386
  method,
207
387
  headers: requestHeaders
208
388
  }, (res) => {
209
389
  const chunks = [];
210
390
  let received = 0;
211
- const maxResponseBytes = 20 * 1024 * 1024;
391
+ const maxResponseBytes = options?.maxResponseBytes ?? DEFAULT_MAX_RESPONSE_BYTES;
212
392
  res.on("data", (chunk) => {
213
393
  received += chunk.length;
214
394
  if (received > maxResponseBytes) {
215
- req.destroy(new Error("La respuesta excedió el tamaño máximo permitido."));
395
+ cleanupAbort();
396
+ settleReject(new Error("La respuesta excedió el tamaño máximo permitido."));
397
+ req.destroy();
216
398
  return;
217
399
  }
218
400
  chunks.push(chunk);
219
401
  });
402
+ res.on("error", (error) => {
403
+ cleanupAbort();
404
+ req.destroy();
405
+ settleReject(error);
406
+ });
220
407
  res.on("end", () => {
221
- resolve({
408
+ cleanupAbort();
409
+ settleResolve({
222
410
  status: res.statusCode ?? 0,
223
411
  headers: res.headers,
224
412
  body: Buffer.concat(chunks).toString("utf8")
225
413
  });
226
414
  });
227
415
  });
228
- req.on("error", (error) => reject(error));
229
- req.setTimeout(timeoutMs, () => {
416
+ const cleanupAbort = () => {
417
+ try {
418
+ req.setTimeout(0);
419
+ }
420
+ catch {
421
+ // Best-effort timer disarm on finished sockets.
422
+ }
423
+ if (totalBudgetTimer !== undefined) {
424
+ clearTimeout(totalBudgetTimer);
425
+ }
426
+ if (signal !== undefined) {
427
+ signal.removeEventListener("abort", onAbort);
428
+ }
429
+ };
430
+ const onAbort = () => {
431
+ req.destroy(new Error(abortMessage()));
432
+ };
433
+ const onError = (error) => {
434
+ cleanupAbort();
435
+ settleReject(error);
436
+ };
437
+ const onTimeout = () => {
438
+ cleanupAbort();
230
439
  req.destroy(new Error(`La petición expiró después de ${timeoutMs}ms`));
231
- });
440
+ };
441
+ if (signal !== undefined) {
442
+ signal.addEventListener("abort", onAbort, { once: true });
443
+ }
444
+ req.on("error", onError);
445
+ // Socket-inactivity timeout (per-chunk deadline): a slow-drip response
446
+ // could otherwise extend the documented budget indefinitely.
447
+ req.setTimeout(timeoutMs, onTimeout);
448
+ // Total-budget timer: bounds the whole request wall-clock time so the
449
+ // documented ENRIWEB_TIMEOUT_MS / ENRIWEB_SEARCH_TIMEOUT_MS budgets
450
+ // hold even when chunks keep arriving (matching EnriCode's
451
+ // AbortSignal.timeout semantics).
452
+ const totalBudgetTimer = setTimeout(() => {
453
+ req.destroy(new Error(`La petición expiró después de ${timeoutMs}ms (presupuesto total)`));
454
+ }, timeoutMs);
455
+ totalBudgetTimer.unref?.();
232
456
  if (body && body.length > 0) {
233
457
  req.write(body);
234
458
  }
@@ -1 +1 @@
1
- {"version":3,"file":"EnriProxyClient.js","sourceRoot":"","sources":["../../src/client/EnriProxyClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EnriProxyClient.js","sourceRoot":"","sources":["../../src/client/EnriProxyClient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAyThE;;;;;;GAMG;AACH,MAAM,0BAA0B,GAAW,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAE5D;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,uBAAuB,CAAC,QAA4B;IAClE,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,0BAA0B,CAAC;IACpC,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,0BAA0B,EAAE,CAAC,GAAG,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;AAC1E,CAAC;AA8FD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,SAAS,CAAC;AAE5C;;;;;GAKG;AACH,SAAS,eAAe,CACtB,MAA+C;IAE/C,OAAO,QAAQ,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC;AAC1D,CAAC;AAED;;;;;GAKG;AACH,SAAS,iBAAiB,CAAC,KAAc;IACvC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACzD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACtE,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3C;;OAEG;IACa,MAAM,CAAS;IAE/B;;OAEG;IACa,OAAO,CAAgD;IAEvE;;OAEG;IACa,IAAI,CAAS;IAE7B;;;;;;;OAOG;IACH,YACE,OAAe,EACf,MAAc,EACd,OAAsD,EACtD,IAAY;QAEZ,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAsBD;;GAEG;AACH,MAAM,OAAO,eAAe;IAC1B;;OAEG;IACc,OAAO,CAAS;IAEjC;;OAEG;IACc,MAAM,CAAS;IAEhC;;OAEG;IACc,SAAS,CAAS;IAEnC;;;;OAIG;IACH,YAAmB,MAA6B;QAC9C,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IACpC,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,SAAS,CACpB,MAAwB,EACxB,MAAoB,EACpB,OAAiC;QAEjC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;QAClD,MAAM,OAAO,GAA4B;YACvC,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAC;QAEF,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/D,OAAO,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;QACtC,CAAC;QAED,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;YAC1C,OAAO,CAAC,aAAa,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC;QAC7C,CAAC;QACD,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YAChE,OAAO,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC7C,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7E,OAAO,CAAC,iBAAiB,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC;QACrD,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7E,OAAO,CAAC,iBAAiB,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC;QACrD,CAAC;QACD,IAAI,OAAO,MAAM,CAAC,YAAY,KAAK,QAAQ,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC;YAC1E,OAAO,CAAC,eAAe,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QACxD,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC7F,IAAI,MAAM,CAAC,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;YAChD,MAAM,IAAI,kBAAkB,CAC1B,+BAA+B,MAAM,CAAC,MAAM,MAAM,eAAe,CAAC,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,EAC/G,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAC3B,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAsB,CAAC;QACtD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,gEAAgE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,eAAe,CAAC,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAC5I,CAAC;QACJ,CAAC;IACH,CAAC;IAoBM,KAAK,CAAC,QAAQ,CACnB,MAA+C,EAC/C,MAAoB,EACpB,OAAiC;QAEjC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;QACjD,MAAM,OAAO,GAA4B,EAAE,CAAC;QAE5C,IAAI,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACpC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAC3D,CAAC;YACD,OAAO,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;YAC3B,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;QAC/B,CAAC;aAAM,IAAI,QAAQ,IAAI,MAAM,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACpC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAC3D,CAAC;YACD,OAAO,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;YAE3B,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;gBAClF,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;YACxE,CAAC;YACD,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;gBAChF,MAAM,UAAU,GAAW,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBACzD,oEAAoE;gBACpE,+DAA+D;gBAC/D,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;oBACrB,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;gBACnD,CAAC;YACH,CAAC;YACD,MAAM,cAAc,GAAuB,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC9E,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;gBACjC,OAAO,CAAC,WAAW,CAAC,GAAG,cAAc,CAAC;YACxC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC;YAE5B,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC9D,OAAO,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC3C,CAAC;YACD,MAAM,WAAW,GAAuB,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC3E,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;gBAC9B,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC;YACrC,CAAC;YACD,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBACzF,OAAO,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;YACpC,CAAC;YACD,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;gBAC3D,OAAO,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;YACtC,CAAC;YACD,IAAI,MAAM,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;gBACjC,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC;YAClC,CAAC;YACD,IAAI,MAAM,CAAC,YAAY,KAAK,KAAK,EAAE,CAAC;gBAClC,OAAO,CAAC,eAAe,CAAC,GAAG,KAAK,CAAC;YACnC,CAAC;YACD,IAAI,MAAM,CAAC,eAAe,KAAK,IAAI,EAAE,CAAC;gBACpC,OAAO,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAC;YACrC,CAAC;YACD,IAAI,MAAM,CAAC,eAAe,KAAK,KAAK,EAAE,CAAC;gBACrC,OAAO,CAAC,kBAAkB,CAAC,GAAG,KAAK,CAAC;YACtC,CAAC;YACD,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC9D,MAAM,MAAM,GAAW,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;gBAC7F,IAAI,MAAM,EAAE,CAAC;oBACX,OAAO,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;gBAC7B,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,eAAe,GAAuB,eAAe,CAAC,MAAM,CAAC;YACjE,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACvC,MAAM,gBAAgB,GAA4B;YAChD,GAAG,OAAO;YACV,gBAAgB,EAAE,OAAO,EAAE,gBAAgB,IAAI,uBAAuB,CAAC,eAAe,CAAC;SACxF,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC;QACtG,IAAI,MAAM,CAAC,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;YAChD,MAAM,IAAI,kBAAkB,CAC1B,4BAA4B,MAAM,CAAC,MAAM,MAAM,eAAe,CAAC,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,EAC5G,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAC3B,CAAC;QACJ,CAAC;QAED,IAAI,MAAe,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,+DAA+D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,eAAe,CAAC,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAC3I,CAAC;QACJ,CAAC;QAED,IAAI,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,MAAM,MAAM,GACV,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;gBACrE,CAAC,CAAE,MAAkC;gBACrC,CAAC,CAAC,EAAE,CAAC;YACT,OAAO;gBACL,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,KAAK,IAAI;gBACnC,MAAM,EAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM;aAC/C,CAAC;QACrC,CAAC;QACD,OAAO,MAA0B,CAAC;IACpC,CAAC;IAED;;;;;;;;;;OAUG;IACK,MAAM,CAAC,uBAAuB,CAAC,KAAc;QACnD,MAAM,GAAG,GAAW,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3E,OAAO,qCAAqC,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;IAC3E,CAAC;IAED;;;;;;;;;;OAUG;IACK,MAAM,CAAC,kBAAkB,CAAC,MAAc;QAC9C,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YAC3F,OAAO,8IAA8I,CAAC;QACxJ,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;;;;OAKG;IACK,QAAQ,CAAC,QAAgB;QAC/B,MAAM,IAAI,GAAQ,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAW,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC5D,MAAM,SAAS,GAAW,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC;QAC/E,IAAI,CAAC,QAAQ,GAAG,GAAG,QAAQ,GAAG,SAAS,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QACnE,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;;;OASG;IACK,KAAK,CAAC,WAAW,CACvB,MAAc,EACd,GAAQ,EACR,QAAiC,EACjC,SAAiB,EACjB,MAAoB,EACpB,OAAiC;QAEjC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,OAAO,GAA2B;YACtC,cAAc,EAAE,kBAAkB;YAClC,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;SAClD,CAAC;QACF,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACtG,CAAC;IAED;;;;;;;;;;;OAWG;IACK,KAAK,CAAC,UAAU,CACtB,MAAc,EACd,GAAQ,EACR,OAA2C,EAC3C,IAAwB,EACxB,SAAiB,EACjB,MAAoB,EACpB,OAAiC;QAEjC,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC;QAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC;QAEnD,MAAM,cAAc,GAA2B;YAC7C,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;YACtC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;SACnB,CAAC;QAEF,wEAAwE;QACxE,uEAAuE;QACvE,yDAAyD;QACzD,MAAM,YAAY,GAA4B,OAAO,EAAE,YAAY,CAAC;QACpE,MAAM,YAAY,GAAG,GAAW,EAAE;YAChC,IAAI,YAAY,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;gBACxD,OAAO,iCAAiC,MAAM,CAAC,OAAO,EAAE,iBAAiB,IAAI,SAAS,CAAC,IAAI,CAAC;YAC9F,CAAC;YACD,OAAO,2CAA2C,CAAC;QACrD,CAAC,CAAC;QAEF,OAAO,MAAM,IAAI,OAAO,CAAa,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACvD,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,MAAM,aAAa,GAAG,CAAC,MAAkB,EAAQ,EAAE;gBACjD,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,OAAO,GAAG,IAAI,CAAC;oBACf,OAAO,CAAC,MAAM,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC,CAAC;YACF,MAAM,YAAY,GAAG,CAAC,KAAY,EAAQ,EAAE;gBAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,OAAO,GAAG,IAAI,CAAC;oBACf,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChB,CAAC;YACH,CAAC,CAAC;YACF,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;gBACpB,YAAY,CAAC,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;gBACxC,OAAO;YACT,CAAC;YACD,MAAM,GAAG,GAAG,KAAK,CACf,GAAG,EACH;gBACE,MAAM;gBACN,OAAO,EAAE,cAAc;aACxB,EACD,CAAC,GAAG,EAAE,EAAE;gBACN,MAAM,MAAM,GAAa,EAAE,CAAC;gBAC5B,IAAI,QAAQ,GAAG,CAAC,CAAC;gBACjB,MAAM,gBAAgB,GAAW,OAAO,EAAE,gBAAgB,IAAI,0BAA0B,CAAC;gBAEzF,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;oBAC/B,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC;oBACzB,IAAI,QAAQ,GAAG,gBAAgB,EAAE,CAAC;wBAChC,YAAY,EAAE,CAAC;wBACf,YAAY,CAAC,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC,CAAC;wBAC5E,GAAG,CAAC,OAAO,EAAE,CAAC;wBACd,OAAO;oBACT,CAAC;oBACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACrB,CAAC,CAAC,CAAC;gBAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAY,EAAE,EAAE;oBAC/B,YAAY,EAAE,CAAC;oBACf,GAAG,CAAC,OAAO,EAAE,CAAC;oBACd,YAAY,CAAC,KAAK,CAAC,CAAC;gBACtB,CAAC,CAAC,CAAC;gBAEH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;oBACjB,YAAY,EAAE,CAAC;oBACf,aAAa,CAAC;wBACZ,MAAM,EAAE,GAAG,CAAC,UAAU,IAAI,CAAC;wBAC3B,OAAO,EAAE,GAAG,CAAC,OAAwD;wBACrE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;qBAC7C,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;YACL,CAAC,CACF,CAAC;YAEF,MAAM,YAAY,GAAG,GAAS,EAAE;gBAC9B,IAAI,CAAC;oBACH,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBACpB,CAAC;gBAAC,MAAM,CAAC;oBACP,gDAAgD;gBAClD,CAAC;gBACD,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;oBACnC,YAAY,CAAC,gBAAgB,CAAC,CAAC;gBACjC,CAAC;gBACD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;oBACzB,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC/C,CAAC;YACH,CAAC,CAAC;YACF,MAAM,OAAO,GAAG,GAAS,EAAE;gBACzB,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;YACzC,CAAC,CAAC;YACF,MAAM,OAAO,GAAG,CAAC,KAAY,EAAQ,EAAE;gBACrC,YAAY,EAAE,CAAC;gBACf,YAAY,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC,CAAC;YACF,MAAM,SAAS,GAAG,GAAS,EAAE;gBAC3B,YAAY,EAAE,CAAC;gBACf,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,iCAAiC,SAAS,IAAI,CAAC,CAAC,CAAC;YACzE,CAAC,CAAC;YACF,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5D,CAAC;YAED,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACzB,uEAAuE;YACvE,6DAA6D;YAC7D,GAAG,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACrC,sEAAsE;YACtE,oEAAoE;YACpE,2DAA2D;YAC3D,kCAAkC;YAClC,MAAM,gBAAgB,GAA8C,UAAU,CAAC,GAAS,EAAE;gBACxF,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,iCAAiC,SAAS,wBAAwB,CAAC,CAAC,CAAC;YAC7F,CAAC,EAAE,SAAS,CAAC,CAAC;YACd,gBAAgB,CAAC,KAAK,EAAE,EAAE,CAAC;YAE3B,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;YACD,GAAG,CAAC,GAAG,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
package/dist/index.js CHANGED
@@ -7,12 +7,13 @@
7
7
  * @module index
8
8
  */
9
9
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
10
- import { EnriProxyClient } from "./client/EnriProxyClient.js";
10
+ import { EnriProxyClient, MAX_WIRE_MAX_CHARS } from "./client/EnriProxyClient.js";
11
11
  import { WebSearchTool } from "./tools/WebSearchTool.js";
12
12
  import { WebFetchTool } from "./tools/WebFetchTool.js";
13
13
  import { WebSearchRegistryVerifier } from "./tools/WebSearchRegistryVerifier.js";
14
14
  import { EnriWebServer } from "./server/EnriWebServer.js";
15
15
  import { packageInfoService } from "./package-info.js";
16
+ import { assertHttpUrl } from "./shared/validation.js";
16
17
  /**
17
18
  * Environment variable for EnriProxy base URL.
18
19
  */
@@ -25,6 +26,10 @@ const ENRIPROXY_API_KEY_ENV = "ENRIPROXY_API_KEY";
25
26
  * Environment variable for default request timeout in milliseconds.
26
27
  */
27
28
  const ENRIWEB_TIMEOUT_MS_ENV = "ENRIWEB_TIMEOUT_MS";
29
+ /**
30
+ * Environment variable for the `web_search` request timeout in milliseconds.
31
+ */
32
+ const ENRIWEB_SEARCH_TIMEOUT_MS_ENV = "ENRIWEB_SEARCH_TIMEOUT_MS";
28
33
  /**
29
34
  * Environment variable for the default `web_fetch` max_chars limit.
30
35
  */
@@ -39,9 +44,23 @@ const ENRIWEB_GITHUB_TOKEN_ENV = "ENRIWEB_GITHUB_TOKEN";
39
44
  */
40
45
  const DEFAULT_ENRIPROXY_URL = "http://127.0.0.1:8787";
41
46
  /**
42
- * Default request timeout in milliseconds.
47
+ * Default `web_fetch` request timeout in milliseconds.
48
+ *
49
+ * @remarks
50
+ * Exceeds EnriProxy's total fetch budget (150 s) so slow tier chains
51
+ * (CycleTLS floor ~35 s, stealth renders, embedding-reducer cold start)
52
+ * finish before the client gives up; matches EnriCode's 180 s remote fetch
53
+ * budget.
43
54
  */
44
- const DEFAULT_TIMEOUT_MS = 60 * 1000;
55
+ const DEFAULT_FETCH_TIMEOUT_MS = 180 * 1000;
56
+ /**
57
+ * Default `web_search` request timeout in milliseconds.
58
+ *
59
+ * @remarks
60
+ * Covers the SearXNG budget plus batched queries and server-side auto-fetch,
61
+ * matching EnriCode's remote search budget.
62
+ */
63
+ const DEFAULT_SEARCH_TIMEOUT_MS = 320 * 1000;
45
64
  /**
46
65
  * Default maximum `web_fetch` content length.
47
66
  *
@@ -54,6 +73,14 @@ const DEFAULT_TIMEOUT_MS = 60 * 1000;
54
73
  * truncated by the client or written to a tool-results file for paging.
55
74
  */
56
75
  const DEFAULT_WEB_FETCH_MAX_CHARS = 200_000;
76
+ /**
77
+ * Upper character budget accepted for the `web_fetch` default.
78
+ *
79
+ * @remarks
80
+ * The shared 4M wire ceiling (single source in the client) so the
81
+ * environment cannot configure an unbounded default.
82
+ */
83
+ const MAX_DEFAULT_WEB_FETCH_MAX_CHARS = MAX_WIRE_MAX_CHARS;
57
84
  /**
58
85
  * Default timeout (ms) for registry enrichment requests.
59
86
  */
@@ -66,6 +93,21 @@ const DEFAULT_REGISTRY_CACHE_TTL_MS = 5 * 60 * 1000;
66
93
  * Default maximum entities verified per `web_search` call.
67
94
  */
68
95
  const DEFAULT_REGISTRY_MAX_ENTITIES_PER_CALL = 6;
96
+ /**
97
+ * Parses one positive-integer environment value with strict digits.
98
+ *
99
+ * @param raw - Raw environment value, if set.
100
+ * @param fallback - Default used when unset, blank, or invalid.
101
+ * @returns Parsed value or the fallback.
102
+ */
103
+ function parsePositiveIntEnv(raw, fallback) {
104
+ const trimmed = (raw ?? "").trim();
105
+ if (!/^\d+$/u.test(trimmed)) {
106
+ return fallback;
107
+ }
108
+ const parsed = Number.parseInt(trimmed, 10);
109
+ return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;
110
+ }
69
111
  /**
70
112
  * Entry point for the MCP server.
71
113
  */
@@ -74,19 +116,20 @@ async function main() {
74
116
  if (args[0] === "--help" || args[0] === "-h" || args[0] === "help") {
75
117
  console.log("EnriWeb");
76
118
  console.log("");
77
- console.log("This is an MCP server over stdio that provides web search and URL fetching via EnriProxy.");
119
+ console.log("Servidor MCP por stdio que provee búsqueda web y lectura de URLs vía EnriProxy.");
78
120
  console.log("");
79
- console.log("Usage:");
80
- console.log(" enriweb (start MCP server over stdio)");
121
+ console.log("Uso:");
122
+ console.log(" enriweb (inicia el servidor MCP por stdio)");
81
123
  console.log(" enriweb --version");
82
124
  console.log(" enriweb --help");
83
125
  console.log("");
84
- console.log("Environment variables:");
85
- console.log(" ENRIPROXY_URL (optional, default: http://127.0.0.1:8787)");
86
- console.log(" ENRIPROXY_API_KEY (required)");
87
- console.log(" ENRIWEB_TIMEOUT_MS (optional, default: 60000)");
88
- console.log(" ENRIWEB_WEB_FETCH_DEFAULT_MAX_CHARS (optional, default: 200000)");
89
- console.log(" ENRIWEB_GITHUB_TOKEN (optional, improves GitHub API rate limits)");
126
+ console.log("Variables de entorno:");
127
+ console.log(" ENRIPROXY_URL (opcional, default: http://127.0.0.1:8787)");
128
+ console.log(" ENRIPROXY_API_KEY (requerida)");
129
+ console.log(" ENRIWEB_TIMEOUT_MS (opcional, default: 180000, timeout de web_fetch)");
130
+ console.log(" ENRIWEB_SEARCH_TIMEOUT_MS (opcional, default: 320000, timeout de web_search)");
131
+ console.log(" ENRIWEB_WEB_FETCH_DEFAULT_MAX_CHARS (opcional, default: 200000, máximo 4000000)");
132
+ console.log(" ENRIWEB_GITHUB_TOKEN (opcional, mejora los límites de la API de GitHub)");
90
133
  process.exit(0);
91
134
  }
92
135
  if (args[0] === "--version" || args[0] === "-v" || args[0] === "version") {
@@ -95,27 +138,24 @@ async function main() {
95
138
  }
96
139
  const serverUrl = (process.env[ENRIPROXY_URL_ENV] ?? DEFAULT_ENRIPROXY_URL).trim();
97
140
  const apiKey = (process.env[ENRIPROXY_API_KEY_ENV] ?? "").trim();
98
- const timeoutMsRaw = (process.env[ENRIWEB_TIMEOUT_MS_ENV] ?? "").trim();
99
- const defaultWebFetchMaxCharsRaw = (process.env[ENRIWEB_WEB_FETCH_DEFAULT_MAX_CHARS_ENV] ?? "").trim();
100
- const timeoutMs = timeoutMsRaw ? Number.parseInt(timeoutMsRaw, 10) : DEFAULT_TIMEOUT_MS;
101
- const defaultWebFetchMaxChars = defaultWebFetchMaxCharsRaw
102
- ? Number.parseInt(defaultWebFetchMaxCharsRaw, 10)
103
- : DEFAULT_WEB_FETCH_MAX_CHARS;
141
+ if (!apiKey) {
142
+ throw new Error("Falta ENRIPROXY_API_KEY: configure la API key de EnriProxy antes de iniciar el MCP.");
143
+ }
144
+ assertHttpUrl(serverUrl, ENRIPROXY_URL_ENV);
145
+ const timeoutMs = parsePositiveIntEnv(process.env[ENRIWEB_TIMEOUT_MS_ENV], DEFAULT_FETCH_TIMEOUT_MS);
146
+ const searchTimeoutMs = parsePositiveIntEnv(process.env[ENRIWEB_SEARCH_TIMEOUT_MS_ENV], DEFAULT_SEARCH_TIMEOUT_MS);
147
+ const defaultWebFetchMaxChars = Math.min(parsePositiveIntEnv(process.env[ENRIWEB_WEB_FETCH_DEFAULT_MAX_CHARS_ENV], DEFAULT_WEB_FETCH_MAX_CHARS), MAX_DEFAULT_WEB_FETCH_MAX_CHARS);
104
148
  const githubToken = (process.env[ENRIWEB_GITHUB_TOKEN_ENV] ?? "").trim();
105
149
  const createClient = (baseUrl, key, timeout) => new EnriProxyClient({
106
150
  baseUrl,
107
151
  apiKey: key,
108
152
  timeoutMs: timeout
109
153
  });
110
- const resolvedTimeoutMs = Number.isFinite(timeoutMs) && timeoutMs > 0 ? timeoutMs : DEFAULT_TIMEOUT_MS;
111
- const resolvedDefaultWebFetchMaxChars = Number.isFinite(defaultWebFetchMaxChars) && defaultWebFetchMaxChars > 0
112
- ? defaultWebFetchMaxChars
113
- : DEFAULT_WEB_FETCH_MAX_CHARS;
114
154
  const webSearchTool = new WebSearchTool({
115
155
  createClient,
116
156
  defaultServerUrl: serverUrl,
117
157
  defaultApiKey: apiKey,
118
- defaultTimeoutMs: resolvedTimeoutMs,
158
+ defaultTimeoutMs: searchTimeoutMs,
119
159
  registryVerifier: new WebSearchRegistryVerifier({
120
160
  fetchImpl: fetch,
121
161
  timeoutMs: DEFAULT_REGISTRY_TIMEOUT_MS,
@@ -128,8 +168,8 @@ async function main() {
128
168
  createClient,
129
169
  defaultServerUrl: serverUrl,
130
170
  defaultApiKey: apiKey,
131
- defaultTimeoutMs: resolvedTimeoutMs,
132
- defaultMaxChars: resolvedDefaultWebFetchMaxChars
171
+ defaultTimeoutMs: timeoutMs,
172
+ defaultMaxChars: defaultWebFetchMaxChars
133
173
  });
134
174
  const server = new EnriWebServer({
135
175
  name: "EnriWeb",
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;GAMG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;GAEG;AACH,MAAM,iBAAiB,GAAG,eAAe,CAAC;AAE1C;;GAEG;AACH,MAAM,qBAAqB,GAAG,mBAAmB,CAAC;AAElD;;GAEG;AACH,MAAM,sBAAsB,GAAG,oBAAoB,CAAC;AAEpD;;GAEG;AACH,MAAM,uCAAuC,GAC3C,qCAAqC,CAAC;AAExC;;;GAGG;AACH,MAAM,wBAAwB,GAAG,sBAAsB,CAAC;AAExD;;GAEG;AACH,MAAM,qBAAqB,GAAG,uBAAuB,CAAC;AAEtD;;GAEG;AACH,MAAM,kBAAkB,GAAG,EAAE,GAAG,IAAI,CAAC;AAErC;;;;;;;;;;GAUG;AACH,MAAM,2BAA2B,GAAG,OAAO,CAAC;AAE5C;;GAEG;AACH,MAAM,2BAA2B,GAAG,MAAM,CAAC;AAE3C;;GAEG;AACH,MAAM,6BAA6B,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAEpD;;GAEG;AACH,MAAM,sCAAsC,GAAG,CAAC,CAAC;AAEjD;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,2FAA2F,CAAC,CAAC;QACzG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAC;QACjF,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;QAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,UAAU,EAAE,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,SAAS,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,qBAAqB,CAAC,CAAC,IAAI,EAAE,CAAC;IACnF,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACjE,MAAM,YAAY,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACxE,MAAM,0BAA0B,GAAG,CACjC,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,IAAI,EAAE,CAC3D,CAAC,IAAI,EAAE,CAAC;IACT,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC;IACxF,MAAM,uBAAuB,GAAG,0BAA0B;QACxD,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,0BAA0B,EAAE,EAAE,CAAC;QACjD,CAAC,CAAC,2BAA2B,CAAC;IAChC,MAAM,WAAW,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAEzE,MAAM,YAAY,GAAG,CAAC,OAAe,EAAE,GAAW,EAAE,OAAe,EAAmB,EAAE,CACtF,IAAI,eAAe,CAAC;QAClB,OAAO;QACP,MAAM,EAAE,GAAG;QACX,SAAS,EAAE,OAAO;KACnB,CAAC,CAAC;IAEL,MAAM,iBAAiB,GACrB,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC;IAC/E,MAAM,+BAA+B,GACnC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAAC,IAAI,uBAAuB,GAAG,CAAC;QACrE,CAAC,CAAC,uBAAuB;QACzB,CAAC,CAAC,2BAA2B,CAAC;IAElC,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC;QACtC,YAAY;QACZ,gBAAgB,EAAE,SAAS;QAC3B,aAAa,EAAE,MAAM;QACrB,gBAAgB,EAAE,iBAAiB;QACnC,gBAAgB,EAAE,IAAI,yBAAyB,CAAC;YAC9C,SAAS,EAAE,KAAK;YAChB,SAAS,EAAE,2BAA2B;YACtC,UAAU,EAAE,6BAA6B;YACzC,kBAAkB,EAAE,sCAAsC;YAC1D,WAAW,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;SAC9D,CAAC;KACH,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC;QACpC,YAAY;QACZ,gBAAgB,EAAE,SAAS;QAC3B,aAAa,EAAE,MAAM;QACrB,gBAAgB,EAAE,iBAAiB;QACnC,eAAe,EAAE,+BAA+B;KACjD,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC;QAC/B,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,kBAAkB,CAAC,UAAU,EAAE;QACxC,aAAa;QACb,YAAY;KACb,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;AACzD,CAAC;AAED,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IACnC,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}