@bedolla/enriweb 0.1.6 → 0.1.8
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/README.md +48 -20
- package/dist/client/EnriProxyClient.d.ts +143 -6
- package/dist/client/EnriProxyClient.d.ts.map +1 -1
- package/dist/client/EnriProxyClient.js +208 -33
- package/dist/client/EnriProxyClient.js.map +1 -1
- package/dist/index.js +58 -18
- package/dist/index.js.map +1 -1
- package/dist/package-info.d.ts +26 -0
- package/dist/package-info.d.ts.map +1 -1
- package/dist/package-info.js +29 -2
- package/dist/package-info.js.map +1 -1
- package/dist/server/EnriWebServer.d.ts +33 -0
- package/dist/server/EnriWebServer.d.ts.map +1 -1
- package/dist/server/EnriWebServer.js +322 -23
- package/dist/server/EnriWebServer.js.map +1 -1
- package/dist/shared/Utf8SafeTextSlicer.d.ts +47 -0
- package/dist/shared/Utf8SafeTextSlicer.d.ts.map +1 -0
- package/dist/shared/Utf8SafeTextSlicer.js +97 -0
- package/dist/shared/Utf8SafeTextSlicer.js.map +1 -0
- package/dist/shared/validation.d.ts +13 -1
- package/dist/shared/validation.d.ts.map +1 -1
- package/dist/shared/validation.js +27 -14
- package/dist/shared/validation.js.map +1 -1
- package/dist/tools/WebFetchNpmProjection.d.ts +143 -0
- package/dist/tools/WebFetchNpmProjection.d.ts.map +1 -0
- package/dist/tools/WebFetchNpmProjection.js +480 -0
- package/dist/tools/WebFetchNpmProjection.js.map +1 -0
- package/dist/tools/WebFetchParamsParser.d.ts +26 -0
- package/dist/tools/WebFetchParamsParser.d.ts.map +1 -0
- package/dist/tools/WebFetchParamsParser.js +157 -0
- package/dist/tools/WebFetchParamsParser.js.map +1 -0
- package/dist/tools/WebFetchRangesExecutor.d.ts +86 -0
- package/dist/tools/WebFetchRangesExecutor.d.ts.map +1 -0
- package/dist/tools/WebFetchRangesExecutor.js +277 -0
- package/dist/tools/WebFetchRangesExecutor.js.map +1 -0
- package/dist/tools/WebFetchTool.d.ts +186 -81
- package/dist/tools/WebFetchTool.d.ts.map +1 -1
- package/dist/tools/WebFetchTool.js +142 -425
- package/dist/tools/WebFetchTool.js.map +1 -1
- package/dist/tools/WebFetchToolTextFormatter.d.ts +57 -0
- package/dist/tools/WebFetchToolTextFormatter.d.ts.map +1 -0
- package/dist/tools/WebFetchToolTextFormatter.js +135 -0
- package/dist/tools/WebFetchToolTextFormatter.js.map +1 -0
- package/dist/tools/WebSearchRegistryHttpReader.d.ts +116 -0
- package/dist/tools/WebSearchRegistryHttpReader.d.ts.map +1 -0
- package/dist/tools/WebSearchRegistryHttpReader.js +157 -0
- package/dist/tools/WebSearchRegistryHttpReader.js.map +1 -0
- package/dist/tools/WebSearchRegistryVerifier.d.ts +103 -7
- package/dist/tools/WebSearchRegistryVerifier.d.ts.map +1 -1
- package/dist/tools/WebSearchRegistryVerifier.js +375 -135
- package/dist/tools/WebSearchRegistryVerifier.js.map +1 -1
- package/dist/tools/WebSearchTool.d.ts +78 -0
- package/dist/tools/WebSearchTool.d.ts.map +1 -1
- package/dist/tools/WebSearchTool.js +191 -21
- package/dist/tools/WebSearchTool.js.map +1 -1
- package/package.json +3 -2
|
@@ -12,6 +12,17 @@
|
|
|
12
12
|
* - GitHub releases (api.github.com)
|
|
13
13
|
*
|
|
14
14
|
* @module tools/WebSearchRegistryVerifier
|
|
15
|
+
*
|
|
16
|
+
* @remarks Size note (~1470 lines, documented exception to the <=700
|
|
17
|
+
* policy): the verifier intentionally keeps one module per concern-free
|
|
18
|
+
* boundary — URL candidate detection, the five ecosystem adapters (npm,
|
|
19
|
+
* PyPI, crates.io, NuGet, GitHub), semantic-version ranking, and the
|
|
20
|
+
* TTL/LRU caches — because the adapters share the failure-normalization
|
|
21
|
+
* and cache-key invariants that a split would otherwise duplicate. The
|
|
22
|
+
* bounded JSON transport (capped streaming, timeouts, Link pagination)
|
|
23
|
+
* was extracted to {@link WebSearchRegistryHttpReader} per the AR-9
|
|
24
|
+
* touch-extraction rule; a per-ecosystem file split remains the documented
|
|
25
|
+
* follow-up for the adapters themselves.
|
|
15
26
|
*/
|
|
16
27
|
import type { WebSearchResultEntry } from "../client/EnriProxyClient.js";
|
|
17
28
|
/**
|
|
@@ -97,18 +108,31 @@ export interface WebSearchRegistryVerifierDeps {
|
|
|
97
108
|
* Enriches web search results with registry version verification.
|
|
98
109
|
*/
|
|
99
110
|
export declare class WebSearchRegistryVerifier {
|
|
111
|
+
/**
|
|
112
|
+
* Capped JSON HTTP reader owning the registry transport concerns.
|
|
113
|
+
*/
|
|
114
|
+
private readonly httpReader;
|
|
100
115
|
/**
|
|
101
116
|
* NuGet V3 service index endpoint.
|
|
102
117
|
*/
|
|
103
118
|
private static readonly NUGET_SERVICE_INDEX_URL;
|
|
119
|
+
/**
|
|
120
|
+
* Maximum bytes read from one npm packument (full-version manifest).
|
|
121
|
+
*
|
|
122
|
+
* @remarks
|
|
123
|
+
* Popular packages legitimately exceed the shared 5 MB registry cap
|
|
124
|
+
* (thousands of versions with full metadata); parity with the EnriCode
|
|
125
|
+
* client plane's 16 MiB download budget for the same endpoint.
|
|
126
|
+
*/
|
|
127
|
+
private static readonly NPM_PACKUMENT_MAX_BYTES;
|
|
104
128
|
/**
|
|
105
129
|
* Default concurrency for registry verification.
|
|
106
130
|
*/
|
|
107
131
|
private static readonly DEFAULT_CONCURRENCY;
|
|
108
132
|
/**
|
|
109
|
-
*
|
|
133
|
+
* Time one cached error entity stays fresh before a retry.
|
|
110
134
|
*/
|
|
111
|
-
private static readonly
|
|
135
|
+
private static readonly ERROR_CACHE_TTL_MS;
|
|
112
136
|
/**
|
|
113
137
|
* Maximum cached verification entries (LRU eviction beyond this count).
|
|
114
138
|
*/
|
|
@@ -121,6 +145,16 @@ export declare class WebSearchRegistryVerifier {
|
|
|
121
145
|
* In-memory TTL cache.
|
|
122
146
|
*/
|
|
123
147
|
private readonly cache;
|
|
148
|
+
/**
|
|
149
|
+
* In-flight verification promises keyed by cache key.
|
|
150
|
+
*
|
|
151
|
+
* @remarks
|
|
152
|
+
* Single-flight coalescing: concurrent MCP requests verifying the same
|
|
153
|
+
* entity join one registry fetch instead of racing duplicates. Entries
|
|
154
|
+
* are removed when the verification settles (success, error or caller
|
|
155
|
+
* abort), so the map never outlives its requests.
|
|
156
|
+
*/
|
|
157
|
+
private readonly inFlight;
|
|
124
158
|
/**
|
|
125
159
|
* Cached NuGet service index resolution.
|
|
126
160
|
*/
|
|
@@ -146,14 +180,40 @@ export declare class WebSearchRegistryVerifier {
|
|
|
146
180
|
* @returns Candidate list
|
|
147
181
|
*/
|
|
148
182
|
private collectCandidates;
|
|
183
|
+
/**
|
|
184
|
+
* Maximum `releases` pages followed per GitHub verification.
|
|
185
|
+
*/
|
|
186
|
+
private static readonly GITHUB_RELEASES_MAX_PAGES;
|
|
149
187
|
/**
|
|
150
188
|
* Verifies a single candidate, using cache when available.
|
|
151
189
|
*
|
|
152
190
|
* @param kind - Registry kind
|
|
153
191
|
* @param name - Candidate name
|
|
192
|
+
* @param signal - Optional caller abort signal forwarded to registry fetches
|
|
154
193
|
* @returns Verification result
|
|
155
194
|
*/
|
|
156
195
|
private verifyCandidate;
|
|
196
|
+
/**
|
|
197
|
+
* Reports whether one failure is a caller cancellation.
|
|
198
|
+
*
|
|
199
|
+
* @remarks
|
|
200
|
+
* Internal subfetch timeouts are reclassified as `TimeoutError` upstream
|
|
201
|
+
* and stay cacheable like any transient error; only genuine caller aborts
|
|
202
|
+
* (or errors shaped like one, e.g. a Spanish "cancelada" message) skip
|
|
203
|
+
* the error cache.
|
|
204
|
+
*
|
|
205
|
+
* @param error - Failure from a registry fetch.
|
|
206
|
+
* @param signal - Caller abort signal threaded into the verification.
|
|
207
|
+
* @returns True for caller cancellations.
|
|
208
|
+
*/
|
|
209
|
+
private static isCallerCancellation;
|
|
210
|
+
/**
|
|
211
|
+
* Maps transport failures to stable Spanish text.
|
|
212
|
+
*
|
|
213
|
+
* @param error - Failure from a registry fetch.
|
|
214
|
+
* @returns Spanish description for the cached error entity.
|
|
215
|
+
*/
|
|
216
|
+
private static describeFetchError;
|
|
157
217
|
/**
|
|
158
218
|
* Runs tasks with a fixed concurrency limit.
|
|
159
219
|
*
|
|
@@ -166,6 +226,7 @@ export declare class WebSearchRegistryVerifier {
|
|
|
166
226
|
* Verifies npm package versions via the npm registry.
|
|
167
227
|
*
|
|
168
228
|
* @param packageName - npm package name (may be scoped)
|
|
229
|
+
* @param signal - Optional caller abort signal
|
|
169
230
|
* @returns Verified registry entity
|
|
170
231
|
*/
|
|
171
232
|
private verifyNpm;
|
|
@@ -173,6 +234,7 @@ export declare class WebSearchRegistryVerifier {
|
|
|
173
234
|
* Verifies PyPI project versions via the PyPI JSON API.
|
|
174
235
|
*
|
|
175
236
|
* @param projectName - PyPI project name
|
|
237
|
+
* @param signal - Optional caller abort signal
|
|
176
238
|
* @returns Verified registry entity
|
|
177
239
|
*/
|
|
178
240
|
private verifyPyPi;
|
|
@@ -180,6 +242,7 @@ export declare class WebSearchRegistryVerifier {
|
|
|
180
242
|
* Verifies crates.io package versions via the crates.io API.
|
|
181
243
|
*
|
|
182
244
|
* @param crateName - Crate name
|
|
245
|
+
* @param signal - Optional caller abort signal
|
|
183
246
|
* @returns Verified registry entity
|
|
184
247
|
*/
|
|
185
248
|
private verifyCrates;
|
|
@@ -187,24 +250,32 @@ export declare class WebSearchRegistryVerifier {
|
|
|
187
250
|
* Verifies NuGet package versions via NuGet V3 endpoints.
|
|
188
251
|
*
|
|
189
252
|
* @param packageId - NuGet package ID
|
|
253
|
+
* @param signal - Optional caller abort signal
|
|
190
254
|
* @returns Verified registry entity
|
|
191
255
|
*/
|
|
192
256
|
private verifyNuGet;
|
|
193
257
|
/**
|
|
194
258
|
* Verifies GitHub repository releases via GitHub REST API.
|
|
195
259
|
*
|
|
260
|
+
* @remarks
|
|
261
|
+
* `latest_stable` comes from `/releases/latest` (GitHub's own newest
|
|
262
|
+
* non-prerelease, non-draft pick, immune to first-page truncation);
|
|
263
|
+
* prerelease candidates page through `/releases?per_page=100` following
|
|
264
|
+
* the `Link` header (up to {@link GITHUB_RELEASES_MAX_PAGES} pages, i.e.
|
|
265
|
+
* 300 newest releases — beyond that the first pages are what we keep).
|
|
266
|
+
*
|
|
196
267
|
* @param repoSlug - Repository slug in the form "owner/repo"
|
|
268
|
+
* @param signal - Optional caller abort signal
|
|
197
269
|
* @returns Verified registry entity
|
|
198
270
|
*/
|
|
199
271
|
private verifyGitHub;
|
|
200
272
|
/**
|
|
201
|
-
*
|
|
273
|
+
* Parses one GitHub release entry into a version candidate.
|
|
202
274
|
*
|
|
203
|
-
* @param
|
|
204
|
-
* @
|
|
205
|
-
* @returns Parsed JSON object/array
|
|
275
|
+
* @param raw - Release entry from the GitHub API
|
|
276
|
+
* @returns Candidate, or null for drafts/entries without a tag
|
|
206
277
|
*/
|
|
207
|
-
private
|
|
278
|
+
private tryParseGitHubReleaseCandidate;
|
|
208
279
|
/**
|
|
209
280
|
* Attempts to parse the npm package name from an npmjs.com URL.
|
|
210
281
|
*
|
|
@@ -264,6 +335,10 @@ export declare class WebSearchRegistryVerifier {
|
|
|
264
335
|
/**
|
|
265
336
|
* Best-effort prerelease detection for PyPI version strings.
|
|
266
337
|
*
|
|
338
|
+
* @remarks
|
|
339
|
+
* Covers PEP 440 separators and attached suffixes (`1.0b1`, `2.0beta1`)
|
|
340
|
+
* where the marker follows digits without a delimiter.
|
|
341
|
+
*
|
|
267
342
|
* @param version - Version string
|
|
268
343
|
* @returns True when prerelease-like
|
|
269
344
|
*/
|
|
@@ -284,13 +359,32 @@ export declare class WebSearchRegistryVerifier {
|
|
|
284
359
|
* @returns Best candidate or null
|
|
285
360
|
*/
|
|
286
361
|
private pickBestVersionCandidate;
|
|
362
|
+
/**
|
|
363
|
+
* Parses one ISO timestamp to epoch milliseconds.
|
|
364
|
+
*
|
|
365
|
+
* @param value - Timestamp string, if present.
|
|
366
|
+
* @returns Epoch milliseconds, or null when missing or unparsable.
|
|
367
|
+
*/
|
|
368
|
+
private tryParseTimeMs;
|
|
287
369
|
/**
|
|
288
370
|
* Parses SemVer strings (best-effort).
|
|
289
371
|
*
|
|
372
|
+
* @remarks
|
|
373
|
+
* Accepts two to four numeric components (`1.2` → `1.2.0`, `1.2.3.4`
|
|
374
|
+
* keeps the fourth as a build tiebreak) so partial registry versions
|
|
375
|
+
* still rank instead of dropping out.
|
|
376
|
+
*
|
|
290
377
|
* @param raw - Version string
|
|
291
378
|
* @returns Parsed semver or null
|
|
292
379
|
*/
|
|
293
380
|
private tryParseSemVer;
|
|
381
|
+
/**
|
|
382
|
+
* Parses versions with attached prerelease suffixes (`2024.1b1`, `2.0rc2`).
|
|
383
|
+
*
|
|
384
|
+
* @param normalized - Version string without a leading "v".
|
|
385
|
+
* @returns Parsed semver or null.
|
|
386
|
+
*/
|
|
387
|
+
private tryParseAttachedPrerelease;
|
|
294
388
|
/**
|
|
295
389
|
* Compares two SemVer values.
|
|
296
390
|
*
|
|
@@ -316,6 +410,7 @@ export declare class WebSearchRegistryVerifier {
|
|
|
316
410
|
/**
|
|
317
411
|
* Resolves NuGet V3 endpoints from the service index, with caching.
|
|
318
412
|
*
|
|
413
|
+
* @param signal - Optional caller abort signal
|
|
319
414
|
* @returns Service index cache
|
|
320
415
|
*/
|
|
321
416
|
private getNuGetServiceIndex;
|
|
@@ -325,6 +420,7 @@ export declare class WebSearchRegistryVerifier {
|
|
|
325
420
|
* @param registrationsBaseUrl - Registrations base URL
|
|
326
421
|
* @param lowerId - Lowercase package ID
|
|
327
422
|
* @param version - Version string
|
|
423
|
+
* @param signal - Optional caller abort signal
|
|
328
424
|
* @returns Published ISO 8601 timestamp or null
|
|
329
425
|
*/
|
|
330
426
|
private tryFetchNuGetLeafPublishedAt;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebSearchRegistryVerifier.d.ts","sourceRoot":"","sources":["../../src/tools/WebSearchRegistryVerifier.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"WebSearchRegistryVerifier.d.ts","sourceRoot":"","sources":["../../src/tools/WebSearchRegistryVerifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAIzE;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAC5B,KAAK,GACL,MAAM,GACN,QAAQ,GACR,OAAO,GACP,QAAQ,CAAC;AAEb;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAE/B;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IAEpC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,uBAAuB,CAAC;IAEjD;;OAEG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,uBAAuB,CAAC;IAErD;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC;IAEhC;;OAEG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,OAAO,KAAK,CAAC;IAEjC;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B;;;;;;OAMG;IACH,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IAEpC;;OAEG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAwED;;GAEG;AACH,qBAAa,yBAAyB;IACpC;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA8B;IAEzD;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CACP;IAExC;;;;;;;OAOG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAAsB;IAErE;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAa;IAExD;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAqB;IAE/D;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAe;IAExD;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAgC;IAErD;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA0B;IAEhD;;;;;;;;OAQG;IACH,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2D;IAEpF;;OAEG;IACH,OAAO,CAAC,sBAAsB,CAAgC;IAE9D;;;;OAIG;gBACgB,IAAI,EAAE,6BAA6B;IAUtD;;;;;;OAMG;IACU,uBAAuB,CAClC,OAAO,EAAE,oBAAoB,EAAE,EAC/B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAqCpC;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IA2EzB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAa;IAE9D;;;;;;;OAOG;YACW,eAAe;IA+E7B;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAenC;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAsBjC;;;;;;OAMG;YACW,uBAAuB;IA4BrC;;;;;;OAMG;YACW,SAAS;IAuDvB;;;;;;OAMG;YACW,UAAU;IAsCxB;;;;;;OAMG;YACW,YAAY;IA6D1B;;;;;;OAMG;YACW,WAAW;IAiDzB;;;;;;;;;;;;;OAaG;YACW,YAAY;IAkF1B;;;;;OAKG;IACH,OAAO,CAAC,8BAA8B;IAsBtC;;;;;OAKG;IACH,OAAO,CAAC,sBAAsB;IA4C9B;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB;IAe/B;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAe1B;;;;;OAKG;IACH,OAAO,CAAC,sBAAsB;IAe9B;;;;;OAKG;IACH,OAAO,CAAC,sBAAsB;IAqB9B;;;;;OAKG;IACH,OAAO,CAAC,YAAY;IAOpB;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAQ5B;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAI3B;;;;;;;;;OASG;IACH,OAAO,CAAC,sBAAsB;IAc9B;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;IAqBtB;;;;;;OAMG;IACH,OAAO,CAAC,wBAAwB;IA4ChC;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAQtB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,cAAc;IAyBtB;;;;;OAKG;IACH,OAAO,CAAC,0BAA0B;IA2BlC;;;;;;OAMG;IACH,OAAO,CAAC,aAAa;IAyDrB;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAQnB;;;;;OAKG;IACH,OAAO,CAAC,yBAAyB;IA4BjC;;;;;OAKG;YACW,oBAAoB;IAyDlC;;;;;;;;OAQG;YACW,4BAA4B;CAsB3C"}
|