@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.
- package/README.md +48 -20
- package/dist/client/EnriProxyClient.d.ts +176 -5
- package/dist/client/EnriProxyClient.d.ts.map +1 -1
- package/dist/client/EnriProxyClient.js +255 -31
- package/dist/client/EnriProxyClient.js.map +1 -1
- package/dist/index.js +65 -25
- 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 +338 -28
- 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 +41 -17
- 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 +187 -71
- package/dist/tools/WebFetchTool.d.ts.map +1 -1
- package/dist/tools/WebFetchTool.js +145 -367
- 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 +111 -6
- package/dist/tools/WebSearchRegistryVerifier.d.ts.map +1 -1
- package/dist/tools/WebSearchRegistryVerifier.js +406 -125
- package/dist/tools/WebSearchRegistryVerifier.js.map +1 -1
- package/dist/tools/WebSearchTool.d.ts +85 -2
- package/dist/tools/WebSearchTool.d.ts.map +1 -1
- package/dist/tools/WebSearchTool.js +197 -19
- 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,14 +108,35 @@ 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;
|
|
132
|
+
/**
|
|
133
|
+
* Time one cached error entity stays fresh before a retry.
|
|
134
|
+
*/
|
|
135
|
+
private static readonly ERROR_CACHE_TTL_MS;
|
|
136
|
+
/**
|
|
137
|
+
* Maximum cached verification entries (LRU eviction beyond this count).
|
|
138
|
+
*/
|
|
139
|
+
private static readonly MAX_CACHE_ENTRIES;
|
|
108
140
|
/**
|
|
109
141
|
* Dependencies.
|
|
110
142
|
*/
|
|
@@ -113,6 +145,16 @@ export declare class WebSearchRegistryVerifier {
|
|
|
113
145
|
* In-memory TTL cache.
|
|
114
146
|
*/
|
|
115
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;
|
|
116
158
|
/**
|
|
117
159
|
* Cached NuGet service index resolution.
|
|
118
160
|
*/
|
|
@@ -127,9 +169,10 @@ export declare class WebSearchRegistryVerifier {
|
|
|
127
169
|
* Attempts to verify canonical versions for registry entities found in search results.
|
|
128
170
|
*
|
|
129
171
|
* @param results - Search results
|
|
172
|
+
* @param signal - Optional caller abort signal (stops queueing new verifications)
|
|
130
173
|
* @returns Verified entities (best-effort)
|
|
131
174
|
*/
|
|
132
|
-
verifyFromSearchResults(results: WebSearchResultEntry[]): Promise<VerifiedRegistryEntity[]>;
|
|
175
|
+
verifyFromSearchResults(results: WebSearchResultEntry[], signal?: AbortSignal): Promise<VerifiedRegistryEntity[]>;
|
|
133
176
|
/**
|
|
134
177
|
* Collects registry candidates from search result URLs.
|
|
135
178
|
*
|
|
@@ -137,14 +180,40 @@ export declare class WebSearchRegistryVerifier {
|
|
|
137
180
|
* @returns Candidate list
|
|
138
181
|
*/
|
|
139
182
|
private collectCandidates;
|
|
183
|
+
/**
|
|
184
|
+
* Maximum `releases` pages followed per GitHub verification.
|
|
185
|
+
*/
|
|
186
|
+
private static readonly GITHUB_RELEASES_MAX_PAGES;
|
|
140
187
|
/**
|
|
141
188
|
* Verifies a single candidate, using cache when available.
|
|
142
189
|
*
|
|
143
190
|
* @param kind - Registry kind
|
|
144
191
|
* @param name - Candidate name
|
|
192
|
+
* @param signal - Optional caller abort signal forwarded to registry fetches
|
|
145
193
|
* @returns Verification result
|
|
146
194
|
*/
|
|
147
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;
|
|
148
217
|
/**
|
|
149
218
|
* Runs tasks with a fixed concurrency limit.
|
|
150
219
|
*
|
|
@@ -157,6 +226,7 @@ export declare class WebSearchRegistryVerifier {
|
|
|
157
226
|
* Verifies npm package versions via the npm registry.
|
|
158
227
|
*
|
|
159
228
|
* @param packageName - npm package name (may be scoped)
|
|
229
|
+
* @param signal - Optional caller abort signal
|
|
160
230
|
* @returns Verified registry entity
|
|
161
231
|
*/
|
|
162
232
|
private verifyNpm;
|
|
@@ -164,6 +234,7 @@ export declare class WebSearchRegistryVerifier {
|
|
|
164
234
|
* Verifies PyPI project versions via the PyPI JSON API.
|
|
165
235
|
*
|
|
166
236
|
* @param projectName - PyPI project name
|
|
237
|
+
* @param signal - Optional caller abort signal
|
|
167
238
|
* @returns Verified registry entity
|
|
168
239
|
*/
|
|
169
240
|
private verifyPyPi;
|
|
@@ -171,6 +242,7 @@ export declare class WebSearchRegistryVerifier {
|
|
|
171
242
|
* Verifies crates.io package versions via the crates.io API.
|
|
172
243
|
*
|
|
173
244
|
* @param crateName - Crate name
|
|
245
|
+
* @param signal - Optional caller abort signal
|
|
174
246
|
* @returns Verified registry entity
|
|
175
247
|
*/
|
|
176
248
|
private verifyCrates;
|
|
@@ -178,24 +250,32 @@ export declare class WebSearchRegistryVerifier {
|
|
|
178
250
|
* Verifies NuGet package versions via NuGet V3 endpoints.
|
|
179
251
|
*
|
|
180
252
|
* @param packageId - NuGet package ID
|
|
253
|
+
* @param signal - Optional caller abort signal
|
|
181
254
|
* @returns Verified registry entity
|
|
182
255
|
*/
|
|
183
256
|
private verifyNuGet;
|
|
184
257
|
/**
|
|
185
258
|
* Verifies GitHub repository releases via GitHub REST API.
|
|
186
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
|
+
*
|
|
187
267
|
* @param repoSlug - Repository slug in the form "owner/repo"
|
|
268
|
+
* @param signal - Optional caller abort signal
|
|
188
269
|
* @returns Verified registry entity
|
|
189
270
|
*/
|
|
190
271
|
private verifyGitHub;
|
|
191
272
|
/**
|
|
192
|
-
*
|
|
273
|
+
* Parses one GitHub release entry into a version candidate.
|
|
193
274
|
*
|
|
194
|
-
* @param
|
|
195
|
-
* @
|
|
196
|
-
* @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
|
|
197
277
|
*/
|
|
198
|
-
private
|
|
278
|
+
private tryParseGitHubReleaseCandidate;
|
|
199
279
|
/**
|
|
200
280
|
* Attempts to parse the npm package name from an npmjs.com URL.
|
|
201
281
|
*
|
|
@@ -255,6 +335,10 @@ export declare class WebSearchRegistryVerifier {
|
|
|
255
335
|
/**
|
|
256
336
|
* Best-effort prerelease detection for PyPI version strings.
|
|
257
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
|
+
*
|
|
258
342
|
* @param version - Version string
|
|
259
343
|
* @returns True when prerelease-like
|
|
260
344
|
*/
|
|
@@ -275,13 +359,32 @@ export declare class WebSearchRegistryVerifier {
|
|
|
275
359
|
* @returns Best candidate or null
|
|
276
360
|
*/
|
|
277
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;
|
|
278
369
|
/**
|
|
279
370
|
* Parses SemVer strings (best-effort).
|
|
280
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
|
+
*
|
|
281
377
|
* @param raw - Version string
|
|
282
378
|
* @returns Parsed semver or null
|
|
283
379
|
*/
|
|
284
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;
|
|
285
388
|
/**
|
|
286
389
|
* Compares two SemVer values.
|
|
287
390
|
*
|
|
@@ -307,6 +410,7 @@ export declare class WebSearchRegistryVerifier {
|
|
|
307
410
|
/**
|
|
308
411
|
* Resolves NuGet V3 endpoints from the service index, with caching.
|
|
309
412
|
*
|
|
413
|
+
* @param signal - Optional caller abort signal
|
|
310
414
|
* @returns Service index cache
|
|
311
415
|
*/
|
|
312
416
|
private getNuGetServiceIndex;
|
|
@@ -316,6 +420,7 @@ export declare class WebSearchRegistryVerifier {
|
|
|
316
420
|
* @param registrationsBaseUrl - Registrations base URL
|
|
317
421
|
* @param lowerId - Lowercase package ID
|
|
318
422
|
* @param version - Version string
|
|
423
|
+
* @param signal - Optional caller abort signal
|
|
319
424
|
* @returns Published ISO 8601 timestamp or null
|
|
320
425
|
*/
|
|
321
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":"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"}
|