@4da/mcp-server 4.3.0 → 4.6.0
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 +61 -81
- package/dist/db.d.ts +12 -1
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +71 -8
- package/dist/db.js.map +1 -1
- package/dist/index.d.ts +9 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -17
- package/dist/index.js.map +1 -1
- package/dist/live/crates-registry.d.ts +18 -0
- package/dist/live/crates-registry.d.ts.map +1 -0
- package/dist/live/crates-registry.js +133 -0
- package/dist/live/crates-registry.js.map +1 -0
- package/dist/live/go-registry.d.ts +19 -0
- package/dist/live/go-registry.d.ts.map +1 -0
- package/dist/live/go-registry.js +127 -0
- package/dist/live/go-registry.js.map +1 -0
- package/dist/live/http-utils.d.ts +3 -0
- package/dist/live/http-utils.d.ts.map +1 -0
- package/dist/live/http-utils.js +20 -0
- package/dist/live/http-utils.js.map +1 -0
- package/dist/live/index.d.ts +7 -2
- package/dist/live/index.d.ts.map +1 -1
- package/dist/live/index.js +71 -0
- package/dist/live/index.js.map +1 -1
- package/dist/live/npm-registry.d.ts +19 -0
- package/dist/live/npm-registry.d.ts.map +1 -0
- package/dist/live/npm-registry.js +132 -0
- package/dist/live/npm-registry.js.map +1 -0
- package/dist/live/osv-scanner.d.ts.map +1 -1
- package/dist/live/osv-scanner.js +1 -10
- package/dist/live/osv-scanner.js.map +1 -1
- package/dist/live/pypi-registry.d.ts +18 -0
- package/dist/live/pypi-registry.d.ts.map +1 -0
- package/dist/live/pypi-registry.js +142 -0
- package/dist/live/pypi-registry.js.map +1 -0
- package/dist/live/rate-limiter.d.ts +12 -0
- package/dist/live/rate-limiter.d.ts.map +1 -1
- package/dist/live/rate-limiter.js +4 -0
- package/dist/live/rate-limiter.js.map +1 -1
- package/dist/live/semver-utils.d.ts +5 -0
- package/dist/live/semver-utils.d.ts.map +1 -0
- package/dist/live/semver-utils.js +28 -0
- package/dist/live/semver-utils.js.map +1 -0
- package/dist/live/types.d.ts +41 -0
- package/dist/live/types.d.ts.map +1 -1
- package/dist/schema-registry.d.ts +4 -2
- package/dist/schema-registry.d.ts.map +1 -1
- package/dist/schema-registry.js +55 -221
- package/dist/schema-registry.js.map +1 -1
- package/dist/schemas/dependency-health.json +27 -0
- package/dist/schemas/upgrade-planner.json +22 -0
- package/dist/tool-dispatch.d.ts +1 -7
- package/dist/tool-dispatch.d.ts.map +1 -1
- package/dist/tool-dispatch.js +14 -46
- package/dist/tool-dispatch.js.map +1 -1
- package/dist/tools/dependency-health.d.ts +45 -0
- package/dist/tools/dependency-health.d.ts.map +1 -0
- package/dist/tools/dependency-health.js +152 -0
- package/dist/tools/dependency-health.js.map +1 -0
- package/dist/tools/index.d.ts +13 -40
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +18 -52
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/upgrade-planner.d.ts +59 -0
- package/dist/tools/upgrade-planner.d.ts.map +1 -0
- package/dist/tools/upgrade-planner.js +167 -0
- package/dist/tools/upgrade-planner.js.map +1 -0
- package/dist/tools/what-should-i-know.d.ts +4 -12
- package/dist/tools/what-should-i-know.d.ts.map +1 -1
- package/dist/tools/what-should-i-know.js +11 -102
- package/dist/tools/what-should-i-know.js.map +1 -1
- package/package.json +2 -2
- package/dist/schemas/agent-feedback-stats.json +0 -14
- package/dist/schemas/agent-session-brief.json +0 -25
- package/dist/schemas/attention-report.json +0 -13
- package/dist/schemas/autophagy-status.json +0 -13
- package/dist/schemas/compound-advantage.json +0 -14
- package/dist/schemas/config-validator.json +0 -18
- package/dist/schemas/context-analysis.json +0 -25
- package/dist/schemas/daily-briefing.json +0 -34
- package/dist/schemas/decision-windows.json +0 -22
- package/dist/schemas/delegation-score.json +0 -18
- package/dist/schemas/explain-relevance.json +0 -19
- package/dist/schemas/export-context.json +0 -17
- package/dist/schemas/llm-status.json +0 -13
- package/dist/schemas/preemption-feed.json +0 -18
- package/dist/schemas/project-health.json +0 -13
- package/dist/schemas/record-agent-feedback.json +0 -28
- package/dist/schemas/reverse-mentions.json +0 -13
- package/dist/schemas/score-autopsy.json +0 -30
- package/dist/schemas/semantic-shifts.json +0 -17
- package/dist/schemas/signal-chains.json +0 -19
- package/dist/schemas/source-health.json +0 -17
- package/dist/schemas/tech-radar.json +0 -23
- package/dist/schemas/topic-connections.json +0 -34
- package/dist/schemas/trend-analysis.json +0 -29
- package/dist/schemas/trust-summary.json +0 -13
- package/dist/tools/agent-feedback-stats.d.ts +0 -30
- package/dist/tools/agent-feedback-stats.d.ts.map +0 -1
- package/dist/tools/agent-feedback-stats.js +0 -41
- package/dist/tools/agent-feedback-stats.js.map +0 -1
- package/dist/tools/agent-session-brief.d.ts +0 -44
- package/dist/tools/agent-session-brief.d.ts.map +0 -1
- package/dist/tools/agent-session-brief.js +0 -179
- package/dist/tools/agent-session-brief.js.map +0 -1
- package/dist/tools/attention-report.d.ts +0 -40
- package/dist/tools/attention-report.d.ts.map +0 -1
- package/dist/tools/attention-report.js +0 -73
- package/dist/tools/attention-report.js.map +0 -1
- package/dist/tools/autophagy-status.d.ts +0 -25
- package/dist/tools/autophagy-status.d.ts.map +0 -1
- package/dist/tools/autophagy-status.js +0 -56
- package/dist/tools/autophagy-status.js.map +0 -1
- package/dist/tools/compound-advantage.d.ts +0 -30
- package/dist/tools/compound-advantage.d.ts.map +0 -1
- package/dist/tools/compound-advantage.js +0 -133
- package/dist/tools/compound-advantage.js.map +0 -1
- package/dist/tools/config-validator.d.ts +0 -59
- package/dist/tools/config-validator.d.ts.map +0 -1
- package/dist/tools/config-validator.js +0 -417
- package/dist/tools/config-validator.js.map +0 -1
- package/dist/tools/context-analysis.d.ts +0 -108
- package/dist/tools/context-analysis.d.ts.map +0 -1
- package/dist/tools/context-analysis.js +0 -301
- package/dist/tools/context-analysis.js.map +0 -1
- package/dist/tools/daily-briefing.d.ts +0 -103
- package/dist/tools/daily-briefing.d.ts.map +0 -1
- package/dist/tools/daily-briefing.js +0 -294
- package/dist/tools/daily-briefing.js.map +0 -1
- package/dist/tools/decision-windows.d.ts +0 -37
- package/dist/tools/decision-windows.d.ts.map +0 -1
- package/dist/tools/decision-windows.js +0 -67
- package/dist/tools/decision-windows.js.map +0 -1
- package/dist/tools/delegation-score.d.ts +0 -34
- package/dist/tools/delegation-score.d.ts.map +0 -1
- package/dist/tools/delegation-score.js +0 -260
- package/dist/tools/delegation-score.js.map +0 -1
- package/dist/tools/explain-relevance.d.ts +0 -36
- package/dist/tools/explain-relevance.d.ts.map +0 -1
- package/dist/tools/explain-relevance.js +0 -51
- package/dist/tools/explain-relevance.js.map +0 -1
- package/dist/tools/export-context.d.ts +0 -60
- package/dist/tools/export-context.d.ts.map +0 -1
- package/dist/tools/export-context.js +0 -179
- package/dist/tools/export-context.js.map +0 -1
- package/dist/tools/llm-status.d.ts +0 -45
- package/dist/tools/llm-status.d.ts.map +0 -1
- package/dist/tools/llm-status.js +0 -93
- package/dist/tools/llm-status.js.map +0 -1
- package/dist/tools/muse-context.d.ts +0 -195
- package/dist/tools/muse-context.d.ts.map +0 -1
- package/dist/tools/muse-context.js +0 -284
- package/dist/tools/muse-context.js.map +0 -1
- package/dist/tools/preemption-feed.d.ts +0 -55
- package/dist/tools/preemption-feed.d.ts.map +0 -1
- package/dist/tools/preemption-feed.js +0 -124
- package/dist/tools/preemption-feed.js.map +0 -1
- package/dist/tools/project-health.d.ts +0 -53
- package/dist/tools/project-health.d.ts.map +0 -1
- package/dist/tools/project-health.js +0 -122
- package/dist/tools/project-health.js.map +0 -1
- package/dist/tools/record-agent-feedback.d.ts +0 -46
- package/dist/tools/record-agent-feedback.d.ts.map +0 -1
- package/dist/tools/record-agent-feedback.js +0 -71
- package/dist/tools/record-agent-feedback.js.map +0 -1
- package/dist/tools/reverse-mentions.d.ts +0 -38
- package/dist/tools/reverse-mentions.d.ts.map +0 -1
- package/dist/tools/reverse-mentions.js +0 -75
- package/dist/tools/reverse-mentions.js.map +0 -1
- package/dist/tools/score-autopsy.d.ts +0 -93
- package/dist/tools/score-autopsy.d.ts.map +0 -1
- package/dist/tools/score-autopsy.js +0 -295
- package/dist/tools/score-autopsy.js.map +0 -1
- package/dist/tools/semantic-shifts.d.ts +0 -53
- package/dist/tools/semantic-shifts.d.ts.map +0 -1
- package/dist/tools/semantic-shifts.js +0 -74
- package/dist/tools/semantic-shifts.js.map +0 -1
- package/dist/tools/signal-chains.d.ts +0 -52
- package/dist/tools/signal-chains.d.ts.map +0 -1
- package/dist/tools/signal-chains.js +0 -63
- package/dist/tools/signal-chains.js.map +0 -1
- package/dist/tools/source-health.d.ts +0 -64
- package/dist/tools/source-health.d.ts.map +0 -1
- package/dist/tools/source-health.js +0 -205
- package/dist/tools/source-health.js.map +0 -1
- package/dist/tools/tech-radar.d.ts +0 -38
- package/dist/tools/tech-radar.d.ts.map +0 -1
- package/dist/tools/tech-radar.js +0 -249
- package/dist/tools/tech-radar.js.map +0 -1
- package/dist/tools/topic-connections.d.ts +0 -112
- package/dist/tools/topic-connections.d.ts.map +0 -1
- package/dist/tools/topic-connections.js +0 -319
- package/dist/tools/topic-connections.js.map +0 -1
- package/dist/tools/trend-analysis.d.ts +0 -105
- package/dist/tools/trend-analysis.d.ts.map +0 -1
- package/dist/tools/trend-analysis.js +0 -296
- package/dist/tools/trend-analysis.js.map +0 -1
- package/dist/tools/trust-summary.d.ts +0 -38
- package/dist/tools/trust-summary.d.ts.map +0 -1
- package/dist/tools/trust-summary.js +0 -89
- package/dist/tools/trust-summary.js.map +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,8CAA8C;AAC9C;;;;;;;;;;;GAWG;AACH
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* crates.io Registry Fetcher
|
|
3
|
+
*
|
|
4
|
+
* Queries the crates.io sparse index (CDN, no rate limit) for package version
|
|
5
|
+
* data. Avoids the main crates.io API which has a strict 1 req/s rate limit.
|
|
6
|
+
*
|
|
7
|
+
* Privacy: sends only crate names — public manifest data.
|
|
8
|
+
*/
|
|
9
|
+
import type { LiveCache } from "./cache.js";
|
|
10
|
+
import type { RateLimiter } from "./rate-limiter.js";
|
|
11
|
+
import type { RegistryPackageInfo } from "./types.js";
|
|
12
|
+
export declare class CratesRegistry {
|
|
13
|
+
private cache;
|
|
14
|
+
private rateLimiter;
|
|
15
|
+
constructor(cache: LiveCache, rateLimiter: RateLimiter);
|
|
16
|
+
getPackageInfo(name: string, currentVersion: string | null, isDev: boolean): Promise<RegistryPackageInfo>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=crates-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crates-registry.d.ts","sourceRoot":"","sources":["../../src/live/crates-registry.ts"],"names":[],"mappings":"AACA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,KAAK,EAAE,mBAAmB,EAAkB,MAAM,YAAY,CAAC;AAYtE,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAAY;IACzB,OAAO,CAAC,WAAW,CAAc;gBAErB,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW;IAKhD,cAAc,CAClB,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,GAAG,IAAI,EAC7B,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,mBAAmB,CAAC;CAsEhC"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
// SPDX-License-Identifier: FSL-1.1-Apache-2.0
|
|
2
|
+
/**
|
|
3
|
+
* crates.io Registry Fetcher
|
|
4
|
+
*
|
|
5
|
+
* Queries the crates.io sparse index (CDN, no rate limit) for package version
|
|
6
|
+
* data. Avoids the main crates.io API which has a strict 1 req/s rate limit.
|
|
7
|
+
*
|
|
8
|
+
* Privacy: sends only crate names — public manifest data.
|
|
9
|
+
*/
|
|
10
|
+
import { fetchWithTimeout } from "./http-utils.js";
|
|
11
|
+
import { computeSemverDistance, isPreRelease } from "./semver-utils.js";
|
|
12
|
+
const CRATES_TIMEOUT_MS = 8_000;
|
|
13
|
+
const CRATES_CACHE_TTL = 86_400; // 24 hours
|
|
14
|
+
export class CratesRegistry {
|
|
15
|
+
cache;
|
|
16
|
+
rateLimiter;
|
|
17
|
+
constructor(cache, rateLimiter) {
|
|
18
|
+
this.cache = cache;
|
|
19
|
+
this.rateLimiter = rateLimiter;
|
|
20
|
+
}
|
|
21
|
+
async getPackageInfo(name, currentVersion, isDev) {
|
|
22
|
+
const cacheKey = `crates-reg:${name}`;
|
|
23
|
+
const cached = this.cache.get(cacheKey);
|
|
24
|
+
if (cached !== null)
|
|
25
|
+
return cached;
|
|
26
|
+
if (!this.rateLimiter.canProceed("crates")) {
|
|
27
|
+
const stale = this.cache.getStale(cacheKey);
|
|
28
|
+
if (stale)
|
|
29
|
+
return stale.data;
|
|
30
|
+
return errorResult(name, currentVersion, isDev, "Rate limited");
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
this.rateLimiter.consume("crates");
|
|
34
|
+
const url = sparseIndexUrl(name);
|
|
35
|
+
const response = await fetchWithTimeout(url, { headers: { Accept: "application/json" } }, CRATES_TIMEOUT_MS);
|
|
36
|
+
if (!response.ok) {
|
|
37
|
+
throw new Error(`Sparse index HTTP ${response.status}: ${url}`);
|
|
38
|
+
}
|
|
39
|
+
const text = await response.text();
|
|
40
|
+
const entries = parseIndexLines(text);
|
|
41
|
+
if (entries.length === 0) {
|
|
42
|
+
throw new Error(`No versions found for crate: ${name}`);
|
|
43
|
+
}
|
|
44
|
+
// Latest = last entry overall (may be yanked or prerelease)
|
|
45
|
+
const latestEntry = entries[entries.length - 1];
|
|
46
|
+
const latestVersion = latestEntry.vers;
|
|
47
|
+
// Latest stable = last non-yanked, non-prerelease entry
|
|
48
|
+
const latestStable = findLatestStable(entries);
|
|
49
|
+
// Semver distance between current and latest stable (or latest)
|
|
50
|
+
let versionsBehind = null;
|
|
51
|
+
if (currentVersion && (latestStable || latestVersion)) {
|
|
52
|
+
versionsBehind = computeSemverDistance(currentVersion, latestStable || latestVersion);
|
|
53
|
+
}
|
|
54
|
+
const result = {
|
|
55
|
+
name,
|
|
56
|
+
ecosystem: "crates.io",
|
|
57
|
+
currentVersion,
|
|
58
|
+
latestVersion,
|
|
59
|
+
latestStableVersion: latestStable,
|
|
60
|
+
versionsBehind,
|
|
61
|
+
deprecated: false, // sparse index does not carry deprecation info
|
|
62
|
+
deprecationMessage: null,
|
|
63
|
+
lastPublished: null, // sparse index does not carry dates
|
|
64
|
+
license: null, // sparse index does not carry license
|
|
65
|
+
weeklyDownloads: null, // sparse index does not carry downloads
|
|
66
|
+
isDev,
|
|
67
|
+
fetchError: null,
|
|
68
|
+
};
|
|
69
|
+
this.cache.set(cacheKey, result, "crates", CRATES_CACHE_TTL);
|
|
70
|
+
return result;
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
const stale = this.cache.getStale(cacheKey);
|
|
74
|
+
if (stale)
|
|
75
|
+
return stale.data;
|
|
76
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
77
|
+
return errorResult(name, currentVersion, isDev, message);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
function sparseIndexUrl(name) {
|
|
82
|
+
const n = name.toLowerCase();
|
|
83
|
+
switch (n.length) {
|
|
84
|
+
case 1: return `https://index.crates.io/1/${n}`;
|
|
85
|
+
case 2: return `https://index.crates.io/2/${n}`;
|
|
86
|
+
case 3: return `https://index.crates.io/3/${n[0]}/${n}`;
|
|
87
|
+
default: return `https://index.crates.io/${n.slice(0, 2)}/${n.slice(2, 4)}/${n}`;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function parseIndexLines(text) {
|
|
91
|
+
const entries = [];
|
|
92
|
+
for (const line of text.split("\n")) {
|
|
93
|
+
const trimmed = line.trim();
|
|
94
|
+
if (trimmed.length === 0)
|
|
95
|
+
continue;
|
|
96
|
+
try {
|
|
97
|
+
const entry = JSON.parse(trimmed);
|
|
98
|
+
if (entry.name && entry.vers) {
|
|
99
|
+
entries.push(entry);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
// Skip malformed lines
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return entries;
|
|
107
|
+
}
|
|
108
|
+
function findLatestStable(entries) {
|
|
109
|
+
for (let i = entries.length - 1; i >= 0; i--) {
|
|
110
|
+
if (!entries[i].yanked && !isPreRelease(entries[i].vers)) {
|
|
111
|
+
return entries[i].vers;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
function errorResult(name, currentVersion, isDev, fetchError) {
|
|
117
|
+
return {
|
|
118
|
+
name,
|
|
119
|
+
ecosystem: "crates.io",
|
|
120
|
+
currentVersion,
|
|
121
|
+
latestVersion: null,
|
|
122
|
+
latestStableVersion: null,
|
|
123
|
+
versionsBehind: null,
|
|
124
|
+
deprecated: false,
|
|
125
|
+
deprecationMessage: null,
|
|
126
|
+
lastPublished: null,
|
|
127
|
+
license: null,
|
|
128
|
+
weeklyDownloads: null,
|
|
129
|
+
isDev,
|
|
130
|
+
fetchError,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=crates-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crates-registry.js","sourceRoot":"","sources":["../../src/live/crates-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Go Module Proxy Registry Fetcher
|
|
3
|
+
*
|
|
4
|
+
* Queries the Go module proxy for package metadata (latest version, version
|
|
5
|
+
* list, semver distance). The proxy does not expose deprecation, license, or
|
|
6
|
+
* download data.
|
|
7
|
+
*
|
|
8
|
+
* Privacy: sends only module paths -- public manifest data.
|
|
9
|
+
*/
|
|
10
|
+
import type { LiveCache } from "./cache.js";
|
|
11
|
+
import type { RateLimiter } from "./rate-limiter.js";
|
|
12
|
+
import type { RegistryPackageInfo } from "./types.js";
|
|
13
|
+
export declare class GoRegistry {
|
|
14
|
+
private cache;
|
|
15
|
+
private rateLimiter;
|
|
16
|
+
constructor(cache: LiveCache, rateLimiter: RateLimiter);
|
|
17
|
+
getPackageInfo(name: string, currentVersion: string | null, isDev: boolean): Promise<RegistryPackageInfo>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=go-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"go-registry.d.ts","sourceRoot":"","sources":["../../src/live/go-registry.ts"],"names":[],"mappings":"AACA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAWtD,qBAAa,UAAU;IACrB,OAAO,CAAC,KAAK,CAAY;IACzB,OAAO,CAAC,WAAW,CAAc;gBAErB,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW;IAKhD,cAAc,CAClB,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,GAAG,IAAI,EAC7B,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,mBAAmB,CAAC;CAiFhC"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
// SPDX-License-Identifier: FSL-1.1-Apache-2.0
|
|
2
|
+
/**
|
|
3
|
+
* Go Module Proxy Registry Fetcher
|
|
4
|
+
*
|
|
5
|
+
* Queries the Go module proxy for package metadata (latest version, version
|
|
6
|
+
* list, semver distance). The proxy does not expose deprecation, license, or
|
|
7
|
+
* download data.
|
|
8
|
+
*
|
|
9
|
+
* Privacy: sends only module paths -- public manifest data.
|
|
10
|
+
*/
|
|
11
|
+
import { fetchJson, fetchWithTimeout } from "./http-utils.js";
|
|
12
|
+
import { computeSemverDistance, isPreRelease } from "./semver-utils.js";
|
|
13
|
+
const GO_PROXY_URL = "https://proxy.golang.org";
|
|
14
|
+
const GO_TIMEOUT_MS = 8_000;
|
|
15
|
+
const GO_CACHE_TTL = 86_400; // 24 hours
|
|
16
|
+
export class GoRegistry {
|
|
17
|
+
cache;
|
|
18
|
+
rateLimiter;
|
|
19
|
+
constructor(cache, rateLimiter) {
|
|
20
|
+
this.cache = cache;
|
|
21
|
+
this.rateLimiter = rateLimiter;
|
|
22
|
+
}
|
|
23
|
+
async getPackageInfo(name, currentVersion, isDev) {
|
|
24
|
+
const cacheKey = `go-reg:${name}`;
|
|
25
|
+
const cached = this.cache.get(cacheKey);
|
|
26
|
+
if (cached !== null)
|
|
27
|
+
return cached;
|
|
28
|
+
if (!this.rateLimiter.canProceed("go")) {
|
|
29
|
+
const stale = this.cache.getStale(cacheKey);
|
|
30
|
+
if (stale)
|
|
31
|
+
return stale.data;
|
|
32
|
+
return errorResult(name, currentVersion, isDev, "Rate limited");
|
|
33
|
+
}
|
|
34
|
+
try {
|
|
35
|
+
this.rateLimiter.consume("go");
|
|
36
|
+
const escaped = escapeModulePath(name);
|
|
37
|
+
// Fetch @latest for latest version and timestamp
|
|
38
|
+
const latest = await fetchJson(`${GO_PROXY_URL}/${escaped}/@latest`, {}, GO_TIMEOUT_MS);
|
|
39
|
+
const latestVersion = latest.Version ?? null;
|
|
40
|
+
const lastPublished = latest.Time ?? null;
|
|
41
|
+
// Fetch @v/list for all versions to find latest stable
|
|
42
|
+
let latestStable = null;
|
|
43
|
+
try {
|
|
44
|
+
const listResponse = await fetchWithTimeout(`${GO_PROXY_URL}/${escaped}/@v/list`, {}, GO_TIMEOUT_MS);
|
|
45
|
+
if (listResponse.ok) {
|
|
46
|
+
const text = await listResponse.text();
|
|
47
|
+
const versions = text.trim().split("\n").filter(Boolean);
|
|
48
|
+
latestStable = findLatestStable(versions);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// Version list unavailable -- fall back to @latest if it's stable
|
|
53
|
+
if (latestVersion && !isPreRelease(latestVersion.replace(/^v/, ""))) {
|
|
54
|
+
latestStable = latestVersion;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Semver distance: strip v prefix for comparison
|
|
58
|
+
let versionsBehind = null;
|
|
59
|
+
const compareTarget = latestStable || latestVersion;
|
|
60
|
+
if (currentVersion && compareTarget) {
|
|
61
|
+
versionsBehind = computeSemverDistance(currentVersion.replace(/^v/, ""), compareTarget.replace(/^v/, ""));
|
|
62
|
+
}
|
|
63
|
+
const result = {
|
|
64
|
+
name,
|
|
65
|
+
ecosystem: "Go",
|
|
66
|
+
currentVersion,
|
|
67
|
+
latestVersion,
|
|
68
|
+
latestStableVersion: latestStable,
|
|
69
|
+
versionsBehind,
|
|
70
|
+
deprecated: false,
|
|
71
|
+
deprecationMessage: null,
|
|
72
|
+
lastPublished,
|
|
73
|
+
license: null, // Go proxy does not expose license info
|
|
74
|
+
weeklyDownloads: null, // Go proxy does not expose download counts
|
|
75
|
+
isDev,
|
|
76
|
+
fetchError: null,
|
|
77
|
+
};
|
|
78
|
+
this.cache.set(cacheKey, result, "go", GO_CACHE_TTL);
|
|
79
|
+
return result;
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
const stale = this.cache.getStale(cacheKey);
|
|
83
|
+
if (stale)
|
|
84
|
+
return stale.data;
|
|
85
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
86
|
+
return errorResult(name, currentVersion, isDev, message);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Escape uppercase letters in Go module paths for the proxy URL.
|
|
92
|
+
* Go proxy convention: uppercase 'X' becomes '!x'.
|
|
93
|
+
*/
|
|
94
|
+
function escapeModulePath(mod) {
|
|
95
|
+
return mod.replace(/[A-Z]/g, (c) => "!" + c.toLowerCase());
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Find the latest stable version from a list of Go module versions.
|
|
99
|
+
* Versions use "v" prefix (v1.2.3) -- strip for prerelease check.
|
|
100
|
+
*/
|
|
101
|
+
function findLatestStable(versions) {
|
|
102
|
+
for (let i = versions.length - 1; i >= 0; i--) {
|
|
103
|
+
const v = versions[i];
|
|
104
|
+
if (!isPreRelease(v.replace(/^v/, ""))) {
|
|
105
|
+
return v;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
function errorResult(name, currentVersion, isDev, fetchError) {
|
|
111
|
+
return {
|
|
112
|
+
name,
|
|
113
|
+
ecosystem: "Go",
|
|
114
|
+
currentVersion,
|
|
115
|
+
latestVersion: null,
|
|
116
|
+
latestStableVersion: null,
|
|
117
|
+
versionsBehind: null,
|
|
118
|
+
deprecated: false,
|
|
119
|
+
deprecationMessage: null,
|
|
120
|
+
lastPublished: null,
|
|
121
|
+
license: null,
|
|
122
|
+
weeklyDownloads: null,
|
|
123
|
+
isDev,
|
|
124
|
+
fetchError,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=go-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"go-registry.js","sourceRoot":"","sources":["../../src/live/go-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-utils.d.ts","sourceRoot":"","sources":["../../src/live/http-utils.ts"],"names":[],"mappings":"AAIA,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,WAAgB,EACzB,SAAS,GAAE,MAA2B,GACrC,OAAO,CAAC,QAAQ,CAAC,CAQnB;AAED,wBAAsB,SAAS,CAAC,CAAC,EAC/B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,WAAgB,EACzB,SAAS,GAAE,MAA2B,GACrC,OAAO,CAAC,CAAC,CAAC,CAMZ"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// SPDX-License-Identifier: FSL-1.1-Apache-2.0
|
|
2
|
+
const DEFAULT_TIMEOUT_MS = 10_000;
|
|
3
|
+
export async function fetchWithTimeout(url, options = {}, timeoutMs = DEFAULT_TIMEOUT_MS) {
|
|
4
|
+
const controller = new AbortController();
|
|
5
|
+
const timeout = setTimeout(() => controller.abort(), timeoutMs);
|
|
6
|
+
try {
|
|
7
|
+
return await fetch(url, { ...options, signal: controller.signal });
|
|
8
|
+
}
|
|
9
|
+
finally {
|
|
10
|
+
clearTimeout(timeout);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export async function fetchJson(url, options = {}, timeoutMs = DEFAULT_TIMEOUT_MS) {
|
|
14
|
+
const response = await fetchWithTimeout(url, options, timeoutMs);
|
|
15
|
+
if (!response.ok) {
|
|
16
|
+
throw new Error(`HTTP ${response.status}: ${url}`);
|
|
17
|
+
}
|
|
18
|
+
return (await response.json());
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=http-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-utils.js","sourceRoot":"","sources":["../../src/live/http-utils.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAE9C,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,GAAW,EACX,UAAuB,EAAE,EACzB,YAAoB,kBAAkB;IAEtC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;IAChE,IAAI,CAAC;QACH,OAAO,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IACrE,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,GAAW,EACX,UAAuB,EAAE,EACzB,YAAoB,kBAAkB;IAEtC,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IACjE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,QAAQ,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAM,CAAC;AACtC,CAAC"}
|
package/dist/live/index.d.ts
CHANGED
|
@@ -8,13 +8,17 @@
|
|
|
8
8
|
* Set FOURDA_OFFLINE=true to disable all network calls.
|
|
9
9
|
*/
|
|
10
10
|
import type Database from "better-sqlite3";
|
|
11
|
-
import type { ResolvedDependency, VulnerabilityScanResult, LiveHeadline, LiveIntelligenceStatus } from "./types.js";
|
|
12
|
-
export type { VulnerabilityScanResult, VulnerabilityEntry, LiveHeadline, LiveIntelligenceStatus } from "./types.js";
|
|
11
|
+
import type { ResolvedDependency, RegistryPackageInfo, VulnerabilityScanResult, LiveHeadline, LiveIntelligenceStatus } from "./types.js";
|
|
12
|
+
export type { VulnerabilityScanResult, VulnerabilityEntry, LiveHeadline, LiveIntelligenceStatus, RegistryPackageInfo, DependencyHealthResult } from "./types.js";
|
|
13
13
|
export declare class LiveIntelligence {
|
|
14
14
|
private cache;
|
|
15
15
|
private rateLimiter;
|
|
16
16
|
private osvScanner;
|
|
17
17
|
private hnFetcher;
|
|
18
|
+
private npmRegistry;
|
|
19
|
+
private cratesRegistry;
|
|
20
|
+
private pypiRegistry;
|
|
21
|
+
private goRegistry;
|
|
18
22
|
private enabled;
|
|
19
23
|
private lastVulnScan;
|
|
20
24
|
private lastHeadlines;
|
|
@@ -50,6 +54,7 @@ export declare class LiveIntelligence {
|
|
|
50
54
|
getResolvedDeps(): ResolvedDependency[];
|
|
51
55
|
isEnabled(): boolean;
|
|
52
56
|
isInitialized(): boolean;
|
|
57
|
+
fetchRegistryHealth(deps: ResolvedDependency[]): Promise<RegistryPackageInfo[]>;
|
|
53
58
|
getStatus(): LiveIntelligenceStatus;
|
|
54
59
|
}
|
|
55
60
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/live/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/live/index.ts"],"names":[],"mappings":"AACA;;;;;;;;GAQG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/live/index.ts"],"names":[],"mappings":"AACA;;;;;;;;GAQG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAU3C,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,uBAAuB,EACvB,YAAY,EACZ,sBAAsB,EACvB,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,YAAY,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEjK,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAAY;IACzB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,OAAO,CAAU;IAEzB,OAAO,CAAC,YAAY,CAAwC;IAC5D,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,WAAW,CAAS;gBAEhB,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAYjC;;OAEG;IACH,eAAe,CACb,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,MAAM,EAAE,EACjB,QAAQ,EAAE,MAAM,GACf,IAAI;IAKP;;OAEG;IACG,mBAAmB,CACvB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,GACzD,OAAO,CAAC,uBAAuB,CAAC;IA2BnC;;OAEG;IACG,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAWlE;;OAEG;IACH,kBAAkB,IAAI,uBAAuB,GAAG,IAAI;IAIpD;;OAEG;IACH,YAAY,IAAI,YAAY,EAAE;IAI9B;;OAEG;IACH,eAAe,IAAI,kBAAkB,EAAE;IAIvC,SAAS,IAAI,OAAO;IAIpB,aAAa,IAAI,OAAO;IAIlB,mBAAmB,CAAC,IAAI,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAgErF,SAAS,IAAI,sBAAsB;CAUpC"}
|
package/dist/live/index.js
CHANGED
|
@@ -13,11 +13,19 @@ import { RateLimiter, DEFAULT_RATE_LIMITS } from "./rate-limiter.js";
|
|
|
13
13
|
import { OsvScanner } from "./osv-scanner.js";
|
|
14
14
|
import { HNFetcher } from "./hn-fetcher.js";
|
|
15
15
|
import { resolveVersions } from "./version-resolver.js";
|
|
16
|
+
import { NpmRegistry } from "./npm-registry.js";
|
|
17
|
+
import { CratesRegistry } from "./crates-registry.js";
|
|
18
|
+
import { PyPIRegistry } from "./pypi-registry.js";
|
|
19
|
+
import { GoRegistry } from "./go-registry.js";
|
|
16
20
|
export class LiveIntelligence {
|
|
17
21
|
cache;
|
|
18
22
|
rateLimiter;
|
|
19
23
|
osvScanner;
|
|
20
24
|
hnFetcher;
|
|
25
|
+
npmRegistry;
|
|
26
|
+
cratesRegistry;
|
|
27
|
+
pypiRegistry;
|
|
28
|
+
goRegistry;
|
|
21
29
|
enabled;
|
|
22
30
|
lastVulnScan = null;
|
|
23
31
|
lastHeadlines = [];
|
|
@@ -29,6 +37,10 @@ export class LiveIntelligence {
|
|
|
29
37
|
this.rateLimiter = new RateLimiter(DEFAULT_RATE_LIMITS);
|
|
30
38
|
this.osvScanner = new OsvScanner(this.cache, this.rateLimiter);
|
|
31
39
|
this.hnFetcher = new HNFetcher(this.cache, this.rateLimiter);
|
|
40
|
+
this.npmRegistry = new NpmRegistry(this.cache, this.rateLimiter);
|
|
41
|
+
this.cratesRegistry = new CratesRegistry(this.cache, this.rateLimiter);
|
|
42
|
+
this.pypiRegistry = new PyPIRegistry(this.cache, this.rateLimiter);
|
|
43
|
+
this.goRegistry = new GoRegistry(this.cache, this.rateLimiter);
|
|
32
44
|
}
|
|
33
45
|
/**
|
|
34
46
|
* Initialize with project data. Call once after project scan.
|
|
@@ -102,6 +114,65 @@ export class LiveIntelligence {
|
|
|
102
114
|
isInitialized() {
|
|
103
115
|
return this.initialized;
|
|
104
116
|
}
|
|
117
|
+
async fetchRegistryHealth(deps) {
|
|
118
|
+
if (!this.enabled) {
|
|
119
|
+
return deps.map((d) => ({
|
|
120
|
+
name: d.name, ecosystem: d.ecosystem, currentVersion: d.version,
|
|
121
|
+
latestVersion: null, latestStableVersion: null, versionsBehind: null,
|
|
122
|
+
deprecated: false, deprecationMessage: null, lastPublished: null,
|
|
123
|
+
license: null, weeklyDownloads: null, isDev: d.isDev, fetchError: "Offline mode",
|
|
124
|
+
}));
|
|
125
|
+
}
|
|
126
|
+
const registryForEcosystem = (eco) => {
|
|
127
|
+
switch (eco) {
|
|
128
|
+
case "npm": return this.npmRegistry;
|
|
129
|
+
case "crates.io": return this.cratesRegistry;
|
|
130
|
+
case "PyPI": return this.pypiRegistry;
|
|
131
|
+
case "Go": return this.goRegistry;
|
|
132
|
+
default: return null;
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
const results = await Promise.all(deps.map(async (dep) => {
|
|
136
|
+
const registry = registryForEcosystem(dep.ecosystem);
|
|
137
|
+
if (!registry) {
|
|
138
|
+
return {
|
|
139
|
+
name: dep.name, ecosystem: dep.ecosystem, currentVersion: dep.version,
|
|
140
|
+
latestVersion: null, latestStableVersion: null, versionsBehind: null,
|
|
141
|
+
deprecated: false, deprecationMessage: null, lastPublished: null,
|
|
142
|
+
license: null, weeklyDownloads: null, isDev: dep.isDev,
|
|
143
|
+
fetchError: `No registry fetcher for ${dep.ecosystem}`,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
try {
|
|
147
|
+
return await registry.getPackageInfo(dep.name, dep.version, dep.isDev);
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
return {
|
|
151
|
+
name: dep.name, ecosystem: dep.ecosystem, currentVersion: dep.version,
|
|
152
|
+
latestVersion: null, latestStableVersion: null, versionsBehind: null,
|
|
153
|
+
deprecated: false, deprecationMessage: null, lastPublished: null,
|
|
154
|
+
license: null, weeklyDownloads: null, isDev: dep.isDev,
|
|
155
|
+
fetchError: "Registry fetch failed",
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
}));
|
|
159
|
+
// Bulk fetch npm downloads for npm deps
|
|
160
|
+
const npmDeps = deps.filter((d) => d.ecosystem === "npm");
|
|
161
|
+
if (npmDeps.length > 0) {
|
|
162
|
+
try {
|
|
163
|
+
const downloads = await this.npmRegistry.getBulkDownloads(npmDeps.map((d) => d.name));
|
|
164
|
+
for (const result of results) {
|
|
165
|
+
if (result.ecosystem === "npm" && downloads.has(result.name)) {
|
|
166
|
+
result.weeklyDownloads = downloads.get(result.name) || null;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
// Downloads are nice-to-have, not critical
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return results;
|
|
175
|
+
}
|
|
105
176
|
getStatus() {
|
|
106
177
|
return {
|
|
107
178
|
enabled: this.enabled,
|
package/dist/live/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/live/index.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C;;;;;;;;GAQG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAgB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/live/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* npm Registry Fetcher
|
|
3
|
+
*
|
|
4
|
+
* Queries the npm registry for package metadata (latest version, deprecation
|
|
5
|
+
* status, semver distance) and the npm downloads API for weekly download counts.
|
|
6
|
+
*
|
|
7
|
+
* Privacy: sends only package names — public manifest data.
|
|
8
|
+
*/
|
|
9
|
+
import type { LiveCache } from "./cache.js";
|
|
10
|
+
import type { RateLimiter } from "./rate-limiter.js";
|
|
11
|
+
import type { RegistryPackageInfo } from "./types.js";
|
|
12
|
+
export declare class NpmRegistry {
|
|
13
|
+
private cache;
|
|
14
|
+
private rateLimiter;
|
|
15
|
+
constructor(cache: LiveCache, rateLimiter: RateLimiter);
|
|
16
|
+
getPackageInfo(name: string, currentVersion: string | null, isDev: boolean): Promise<RegistryPackageInfo>;
|
|
17
|
+
getBulkDownloads(names: string[]): Promise<Map<string, number>>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=npm-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"npm-registry.d.ts","sourceRoot":"","sources":["../../src/live/npm-registry.ts"],"names":[],"mappings":"AACA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,KAAK,EAAE,mBAAmB,EAAkB,MAAM,YAAY,CAAC;AAmBtE,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAAY;IACzB,OAAO,CAAC,WAAW,CAAc;gBAErB,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW;IAKhD,cAAc,CAClB,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,GAAG,IAAI,EAC7B,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,mBAAmB,CAAC;IA+DzB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAiCtE"}
|