upstream-radar 0.32.0 → 0.33.1
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 +616 -43
- package/cordis.patch.yml +1 -0
- package/dist/src/cli.js +1123 -34
- package/dist/src/cli.js.map +1 -1
- package/dist/src/compatibility.d.ts +3 -1
- package/dist/src/compatibility.d.ts.map +1 -1
- package/dist/src/compatibility.js +146 -12
- package/dist/src/compatibility.js.map +1 -1
- package/dist/src/demo.d.ts +13 -0
- package/dist/src/demo.d.ts.map +1 -0
- package/dist/src/demo.js +85 -0
- package/dist/src/demo.js.map +1 -0
- package/dist/src/doctor.d.ts.map +1 -1
- package/dist/src/doctor.js +62 -0
- package/dist/src/doctor.js.map +1 -1
- package/dist/src/dsh-analysis.d.ts.map +1 -1
- package/dist/src/dsh-analysis.js +2 -1
- package/dist/src/dsh-analysis.js.map +1 -1
- package/dist/src/dsh-plugin.d.ts +9 -3
- package/dist/src/dsh-plugin.d.ts.map +1 -1
- package/dist/src/dsh-plugin.js +87 -11
- package/dist/src/dsh-plugin.js.map +1 -1
- package/dist/src/dsh-profile-check.d.ts +79 -0
- package/dist/src/dsh-profile-check.d.ts.map +1 -0
- package/dist/src/dsh-profile-check.js +600 -0
- package/dist/src/dsh-profile-check.js.map +1 -0
- package/dist/src/dsh-runtime.d.ts +7 -0
- package/dist/src/dsh-runtime.d.ts.map +1 -1
- package/dist/src/dsh-runtime.js +21 -0
- package/dist/src/dsh-runtime.js.map +1 -1
- package/dist/src/github-advisory.d.ts +25 -0
- package/dist/src/github-advisory.d.ts.map +1 -0
- package/dist/src/github-advisory.js +340 -0
- package/dist/src/github-advisory.js.map +1 -0
- package/dist/src/graph.d.ts +2 -0
- package/dist/src/graph.d.ts.map +1 -1
- package/dist/src/graph.js +600 -4
- package/dist/src/graph.js.map +1 -1
- package/dist/src/index.d.ts +16 -6
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +15 -5
- package/dist/src/index.js.map +1 -1
- package/dist/src/init.d.ts +44 -2
- package/dist/src/init.d.ts.map +1 -1
- package/dist/src/init.js +62 -5
- package/dist/src/init.js.map +1 -1
- package/dist/src/installed-graph.d.ts +3 -1
- package/dist/src/installed-graph.d.ts.map +1 -1
- package/dist/src/installed-graph.js +101 -2
- package/dist/src/installed-graph.js.map +1 -1
- package/dist/src/inventory.d.ts.map +1 -1
- package/dist/src/inventory.js +76 -2
- package/dist/src/inventory.js.map +1 -1
- package/dist/src/notification-policy.d.ts +20 -0
- package/dist/src/notification-policy.d.ts.map +1 -0
- package/dist/src/notification-policy.js +87 -0
- package/dist/src/notification-policy.js.map +1 -0
- package/dist/src/npm-release.d.ts.map +1 -1
- package/dist/src/npm-release.js +18 -7
- package/dist/src/npm-release.js.map +1 -1
- package/dist/src/npm.d.ts.map +1 -1
- package/dist/src/npm.js +9 -1
- package/dist/src/npm.js.map +1 -1
- package/dist/src/osv.d.ts.map +1 -1
- package/dist/src/osv.js +1 -0
- package/dist/src/osv.js.map +1 -1
- package/dist/src/quickstart.d.ts +31 -0
- package/dist/src/quickstart.d.ts.map +1 -0
- package/dist/src/quickstart.js +266 -0
- package/dist/src/quickstart.js.map +1 -0
- package/dist/src/radar-history.d.ts +22 -0
- package/dist/src/radar-history.d.ts.map +1 -0
- package/dist/src/radar-history.js +80 -0
- package/dist/src/radar-history.js.map +1 -0
- package/dist/src/radar-render.d.ts.map +1 -1
- package/dist/src/radar-render.js +106 -1
- package/dist/src/radar-render.js.map +1 -1
- package/dist/src/radar-state.d.ts.map +1 -1
- package/dist/src/radar-state.js +264 -6
- package/dist/src/radar-state.js.map +1 -1
- package/dist/src/radar-status.d.ts +36 -1
- package/dist/src/radar-status.d.ts.map +1 -1
- package/dist/src/radar-status.js +199 -16
- package/dist/src/radar-status.js.map +1 -1
- package/dist/src/radar-types.d.ts +128 -3
- package/dist/src/radar-types.d.ts.map +1 -1
- package/dist/src/radar-types.js +4 -0
- package/dist/src/radar-types.js.map +1 -1
- package/dist/src/radar.d.ts +7 -1
- package/dist/src/radar.d.ts.map +1 -1
- package/dist/src/radar.js +432 -70
- package/dist/src/radar.js.map +1 -1
- package/dist/src/render.d.ts.map +1 -1
- package/dist/src/render.js +27 -2
- package/dist/src/render.js.map +1 -1
- package/dist/src/scan.d.ts.map +1 -1
- package/dist/src/scan.js +39 -0
- package/dist/src/scan.js.map +1 -1
- package/dist/src/threat-intel.d.ts +46 -0
- package/dist/src/threat-intel.d.ts.map +1 -0
- package/dist/src/threat-intel.js +243 -0
- package/dist/src/threat-intel.js.map +1 -0
- package/dist/src/upstream-observer.d.ts +224 -0
- package/dist/src/upstream-observer.d.ts.map +1 -0
- package/dist/src/upstream-observer.js +1342 -0
- package/dist/src/upstream-observer.js.map +1 -0
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/vulnerability-priority.d.ts +16 -0
- package/dist/src/vulnerability-priority.d.ts.map +1 -0
- package/dist/src/vulnerability-priority.js +20 -0
- package/dist/src/vulnerability-priority.js.map +1 -0
- package/dist/src/webhook.d.ts +84 -0
- package/dist/src/webhook.d.ts.map +1 -0
- package/dist/src/webhook.js +432 -0
- package/dist/src/webhook.js.map +1 -0
- package/docs/README.zh-CN.md +593 -40
- package/package.json +30 -3
- package/schemas/quickstart.schema.json +56 -0
- package/schemas/webhook.schema.json +53 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dsh-runtime.d.ts","sourceRoot":"","sources":["../../src/dsh-runtime.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dsh-runtime.d.ts","sourceRoot":"","sources":["../../src/dsh-runtime.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AA8EzD;;;GAGG;AACH,wBAAgB,sCAAsC,CACpD,UAAU,qBAAkB,GAC3B,MAAM,GAAG,SAAS,CAKpB;AAED,gFAAgF;AAChF,wBAAgB,yBAAyB,CACvC,UAAU,qBAAkB,GAC3B,iBAAiB,GAAG,SAAS,CAG/B;AAED,2EAA2E;AAC3E,wBAAgB,kCAAkC,CAChD,UAAU,qBAAkB,GAC3B,MAAM,GAAG,SAAS,CAGpB;AAED,4EAA4E;AAC5E,wBAAgB,iDAAiD,CAC/D,oBAAoB,EAAE,MAAM,GAC3B,iBAAiB,GAAG,SAAS,CAG/B"}
|
package/dist/src/dsh-runtime.js
CHANGED
|
@@ -47,6 +47,10 @@ function packageRoot(entrypoint) {
|
|
|
47
47
|
}
|
|
48
48
|
return undefined;
|
|
49
49
|
}
|
|
50
|
+
function runtimePackage(root) {
|
|
51
|
+
const manifest = packageManifest(join(root, 'package.json'));
|
|
52
|
+
return manifest === undefined ? undefined : { ecosystem: 'npm', ...manifest };
|
|
53
|
+
}
|
|
50
54
|
function usableNodeModulesDirectory(path) {
|
|
51
55
|
try {
|
|
52
56
|
const resolved = realpathSync(path);
|
|
@@ -89,4 +93,21 @@ export function discoverDshRuntimeNodeModulesDirectory(entrypoint = process.argv
|
|
|
89
93
|
return undefined;
|
|
90
94
|
return runtimeNodeModulesDirectory(root);
|
|
91
95
|
}
|
|
96
|
+
/** Read the exact DSH executable package without importing or executing DSH. */
|
|
97
|
+
export function discoverDshRuntimePackage(entrypoint = process.argv[1]) {
|
|
98
|
+
const root = discoverDshRuntimePackageDirectory(entrypoint);
|
|
99
|
+
return root === undefined ? undefined : runtimePackage(root);
|
|
100
|
+
}
|
|
101
|
+
/** Locate the exact DSH package root without importing or executing it. */
|
|
102
|
+
export function discoverDshRuntimePackageDirectory(entrypoint = process.argv[1]) {
|
|
103
|
+
if (typeof entrypoint !== 'string' || entrypoint.trim() === '')
|
|
104
|
+
return undefined;
|
|
105
|
+
return packageRoot(entrypoint);
|
|
106
|
+
}
|
|
107
|
+
/** Read the exact DSH executable package from a known shared host plane. */
|
|
108
|
+
export function discoverDshRuntimePackageFromNodeModulesDirectory(nodeModulesDirectory) {
|
|
109
|
+
if (typeof nodeModulesDirectory !== 'string' || nodeModulesDirectory.trim() === '')
|
|
110
|
+
return undefined;
|
|
111
|
+
return runtimePackage(join(resolve(nodeModulesDirectory), '@deepseek-ai', 'dsh'));
|
|
112
|
+
}
|
|
92
113
|
//# sourceMappingURL=dsh-runtime.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dsh-runtime.js","sourceRoot":"","sources":["../../src/dsh-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAC3E,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"dsh-runtime.js","sourceRoot":"","sources":["../../src/dsh-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { AdvisoryMatch, PackageCoordinate } from './radar-types.js';
|
|
2
|
+
type FetchLike = (input: string | URL, init?: RequestInit) => Promise<Response>;
|
|
3
|
+
export interface GitHubAdvisoryClientOptions {
|
|
4
|
+
/** GitHub API base URL; useful for GitHub Enterprise or a deterministic test server. */
|
|
5
|
+
baseUrl?: string;
|
|
6
|
+
/** An optional token read from the caller's environment; never persisted by the client. */
|
|
7
|
+
token?: string;
|
|
8
|
+
fetch?: FetchLike;
|
|
9
|
+
timeoutMs?: number;
|
|
10
|
+
/** Query unreviewed advisories in addition to GitHub-reviewed advisories. */
|
|
11
|
+
includeUnreviewed?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare class GitHubAdvisoryClient {
|
|
14
|
+
private readonly baseUrl;
|
|
15
|
+
private readonly token;
|
|
16
|
+
private readonly fetcher;
|
|
17
|
+
private readonly timeoutMs;
|
|
18
|
+
private readonly types;
|
|
19
|
+
constructor(options?: GitHubAdvisoryClientOptions);
|
|
20
|
+
private fetchPage;
|
|
21
|
+
private fetchAdvisories;
|
|
22
|
+
query(input: readonly PackageCoordinate[]): Promise<Map<string, AdvisoryMatch[]>>;
|
|
23
|
+
}
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=github-advisory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-advisory.d.ts","sourceRoot":"","sources":["../../src/github-advisory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EAGlB,MAAM,kBAAkB,CAAA;AAiBzB,KAAK,SAAS,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;AAE/E,MAAM,WAAW,2BAA2B;IAC1C,wFAAwF;IACxF,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,2FAA2F;IAC3F,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,6EAA6E;IAC7E,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAC5B;AAyOD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoB;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAW;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;IAEzC,YAAY,OAAO,GAAE,2BAAgC,EAUpD;YAEa,SAAS;YA2BT,eAAe;IAyBvB,KAAK,CAAC,KAAK,EAAE,SAAS,iBAAiB,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC,CAsBtF;CACF"}
|
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
import { packageKey } from './osv.js';
|
|
2
|
+
import { compareSemverValues, satisfiesSemverRange } from './semver.js';
|
|
3
|
+
import { TOOL_VERSION } from './version.js';
|
|
4
|
+
const DEFAULT_GITHUB_API_BASE_URL = 'https://api.github.com/';
|
|
5
|
+
const GITHUB_API_VERSION = '2022-11-28';
|
|
6
|
+
const MAX_RESPONSE_BYTES = 16 * 1024 * 1024;
|
|
7
|
+
const MAX_PACKAGES = 10_000;
|
|
8
|
+
const MAX_AFFECTS_PER_REQUEST = 100;
|
|
9
|
+
const MAX_URL_LENGTH = 6_000;
|
|
10
|
+
const MAX_PAGES_PER_QUERY = 20;
|
|
11
|
+
const MAX_ADVISORIES = 10_000;
|
|
12
|
+
const MAX_FETCH_ATTEMPTS = 2;
|
|
13
|
+
const TRANSIENT_RETRY_DELAY_MS = 250;
|
|
14
|
+
const ADVISORY_TYPES = ['reviewed', 'unreviewed'];
|
|
15
|
+
function asRecord(value) {
|
|
16
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value))
|
|
17
|
+
return undefined;
|
|
18
|
+
return value;
|
|
19
|
+
}
|
|
20
|
+
function asString(value, maxLength) {
|
|
21
|
+
if (typeof value !== 'string' || value.length === 0 || value.length > maxLength)
|
|
22
|
+
return undefined;
|
|
23
|
+
return value;
|
|
24
|
+
}
|
|
25
|
+
function normalizeBaseUrl(input) {
|
|
26
|
+
const url = new URL(input);
|
|
27
|
+
if (url.protocol !== 'https:')
|
|
28
|
+
throw new Error('GitHub advisory base URL must use HTTPS');
|
|
29
|
+
if (url.username !== '' || url.password !== '' || url.search !== '' || url.hash !== '') {
|
|
30
|
+
throw new Error('GitHub advisory base URL must not contain credentials, a query string or a fragment');
|
|
31
|
+
}
|
|
32
|
+
if (!url.pathname.endsWith('/'))
|
|
33
|
+
url.pathname += '/';
|
|
34
|
+
return url.toString();
|
|
35
|
+
}
|
|
36
|
+
function severity(value) {
|
|
37
|
+
if (typeof value !== 'string')
|
|
38
|
+
return 'unknown';
|
|
39
|
+
switch (value.toLowerCase()) {
|
|
40
|
+
case 'low': return 'low';
|
|
41
|
+
case 'moderate':
|
|
42
|
+
case 'medium': return 'medium';
|
|
43
|
+
case 'high': return 'high';
|
|
44
|
+
case 'critical': return 'critical';
|
|
45
|
+
default: return 'unknown';
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
function safeUrl(value) {
|
|
49
|
+
if (typeof value !== 'string')
|
|
50
|
+
return undefined;
|
|
51
|
+
try {
|
|
52
|
+
const url = new URL(value);
|
|
53
|
+
if (url.protocol !== 'https:' && url.protocol !== 'http:')
|
|
54
|
+
return undefined;
|
|
55
|
+
if (url.username !== '' || url.password !== '')
|
|
56
|
+
return undefined;
|
|
57
|
+
return url.toString();
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
async function boundedJson(response) {
|
|
64
|
+
if (!response.ok)
|
|
65
|
+
throw new Error(`GitHub advisories returned HTTP ${response.status}`);
|
|
66
|
+
const declared = response.headers.get('content-length');
|
|
67
|
+
if (declared !== null && Number(declared) > MAX_RESPONSE_BYTES) {
|
|
68
|
+
throw new Error('GitHub advisories response exceeds the byte limit');
|
|
69
|
+
}
|
|
70
|
+
if (response.body === null)
|
|
71
|
+
throw new Error('GitHub advisories returned an empty response');
|
|
72
|
+
const reader = response.body.getReader();
|
|
73
|
+
const chunks = [];
|
|
74
|
+
let total = 0;
|
|
75
|
+
while (true) {
|
|
76
|
+
const next = await reader.read();
|
|
77
|
+
if (next.done)
|
|
78
|
+
break;
|
|
79
|
+
const chunk = Buffer.from(next.value);
|
|
80
|
+
total += chunk.length;
|
|
81
|
+
if (total > MAX_RESPONSE_BYTES) {
|
|
82
|
+
await reader.cancel('GitHub advisories response exceeded byte limit');
|
|
83
|
+
throw new Error('GitHub advisories response exceeds the byte limit');
|
|
84
|
+
}
|
|
85
|
+
chunks.push(chunk);
|
|
86
|
+
}
|
|
87
|
+
try {
|
|
88
|
+
return JSON.parse(Buffer.concat(chunks, total).toString('utf8'));
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
throw new Error('GitHub advisories returned invalid JSON');
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
function nextLink(response) {
|
|
95
|
+
const link = response.headers.get('link');
|
|
96
|
+
if (link === null)
|
|
97
|
+
return undefined;
|
|
98
|
+
const match = /<([^>]+)>\s*;\s*rel="next"/.exec(link);
|
|
99
|
+
return match?.[1];
|
|
100
|
+
}
|
|
101
|
+
function parsePatchedVersion(value) {
|
|
102
|
+
if (typeof value === 'string')
|
|
103
|
+
return asString(value, 256);
|
|
104
|
+
return asString(asRecord(value)?.identifier, 256);
|
|
105
|
+
}
|
|
106
|
+
function parseVulnerabilities(value) {
|
|
107
|
+
if (!Array.isArray(value))
|
|
108
|
+
throw new Error('GitHub advisory is missing its vulnerabilities list');
|
|
109
|
+
return value.slice(0, MAX_ADVISORIES).flatMap((raw) => {
|
|
110
|
+
const item = asRecord(raw);
|
|
111
|
+
const packageName = asString(asRecord(item?.package)?.name, 512);
|
|
112
|
+
if (packageName === undefined)
|
|
113
|
+
return [];
|
|
114
|
+
const vulnerableRange = asString(item?.vulnerable_version_range, 2_048);
|
|
115
|
+
const firstPatchedVersion = parsePatchedVersion(item?.first_patched_version);
|
|
116
|
+
return [{
|
|
117
|
+
packageName,
|
|
118
|
+
...(vulnerableRange === undefined ? {} : { vulnerableRange }),
|
|
119
|
+
...(firstPatchedVersion === undefined ? {} : { firstPatchedVersion }),
|
|
120
|
+
}];
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
function parseAdvisory(value) {
|
|
124
|
+
const root = asRecord(value);
|
|
125
|
+
if (root === undefined)
|
|
126
|
+
throw new Error('GitHub advisory is not an object');
|
|
127
|
+
const id = asString(root.ghsa_id, 512);
|
|
128
|
+
if (id === undefined || !/^GHSA-[A-Za-z0-9-]+$/.test(id))
|
|
129
|
+
throw new Error('GitHub advisory has an invalid ghsa_id');
|
|
130
|
+
const summary = asString(root.summary, 8_192) ?? '(no summary supplied)';
|
|
131
|
+
const details = asString(root.description, 64 * 1_024) ?? '';
|
|
132
|
+
const published = asString(root.published_at, 256);
|
|
133
|
+
const modified = asString(root.updated_at, 256) ?? published;
|
|
134
|
+
if (modified === undefined)
|
|
135
|
+
throw new Error(`GitHub advisory ${id} is missing updated_at/published_at`);
|
|
136
|
+
const withdrawn = root.withdrawn_at === null ? undefined : asString(root.withdrawn_at, 256);
|
|
137
|
+
const aliases = new Set();
|
|
138
|
+
const cve = asString(root.cve_id, 256);
|
|
139
|
+
if (cve !== undefined && cve !== id)
|
|
140
|
+
aliases.add(cve);
|
|
141
|
+
if (Array.isArray(root.identifiers)) {
|
|
142
|
+
for (const rawIdentifier of root.identifiers) {
|
|
143
|
+
const identifier = asString(asRecord(rawIdentifier)?.value, 256);
|
|
144
|
+
if (identifier !== undefined && identifier !== id)
|
|
145
|
+
aliases.add(identifier);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
const references = new Set();
|
|
149
|
+
const htmlUrl = safeUrl(root.html_url);
|
|
150
|
+
if (htmlUrl !== undefined)
|
|
151
|
+
references.add(htmlUrl);
|
|
152
|
+
if (Array.isArray(root.references)) {
|
|
153
|
+
for (const rawReference of root.references) {
|
|
154
|
+
const reference = safeUrl(rawReference);
|
|
155
|
+
if (reference !== undefined)
|
|
156
|
+
references.add(reference);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return {
|
|
160
|
+
id,
|
|
161
|
+
aliases: [...aliases].sort(),
|
|
162
|
+
summary,
|
|
163
|
+
details,
|
|
164
|
+
severity: severity(root.severity),
|
|
165
|
+
...(published === undefined ? {} : { published }),
|
|
166
|
+
modified,
|
|
167
|
+
...(withdrawn === undefined ? {} : { withdrawn }),
|
|
168
|
+
references: [...references].slice(0, 100),
|
|
169
|
+
vulnerabilities: parseVulnerabilities(root.vulnerabilities),
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
function advisoryForPackage(advisory, coordinate) {
|
|
173
|
+
const vulnerabilities = advisory.vulnerabilities.filter(item => {
|
|
174
|
+
if (item.packageName !== coordinate.name)
|
|
175
|
+
return false;
|
|
176
|
+
if (item.vulnerableRange !== undefined && satisfiesSemverRange(coordinate.version, item.vulnerableRange) === false)
|
|
177
|
+
return false;
|
|
178
|
+
if (item.firstPatchedVersion !== undefined) {
|
|
179
|
+
const comparison = compareSemverValues(coordinate.version, item.firstPatchedVersion);
|
|
180
|
+
if (comparison !== undefined && comparison >= 0)
|
|
181
|
+
return false;
|
|
182
|
+
}
|
|
183
|
+
return true;
|
|
184
|
+
});
|
|
185
|
+
if (vulnerabilities.length === 0)
|
|
186
|
+
return undefined;
|
|
187
|
+
return {
|
|
188
|
+
id: advisory.id,
|
|
189
|
+
aliases: [...advisory.aliases],
|
|
190
|
+
summary: advisory.summary,
|
|
191
|
+
details: advisory.details,
|
|
192
|
+
severity: advisory.severity,
|
|
193
|
+
...(advisory.published === undefined ? {} : { published: advisory.published }),
|
|
194
|
+
modified: advisory.modified,
|
|
195
|
+
...(advisory.withdrawn === undefined ? {} : { withdrawn: advisory.withdrawn }),
|
|
196
|
+
fixedVersions: [...new Set(vulnerabilities
|
|
197
|
+
.flatMap(item => item.firstPatchedVersion === undefined ? [] : [item.firstPatchedVersion]))].sort(),
|
|
198
|
+
references: [...advisory.references],
|
|
199
|
+
sources: ['github-advisories'],
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
function packageChunks(packages, baseUrl, type) {
|
|
203
|
+
const chunks = [];
|
|
204
|
+
let current = [];
|
|
205
|
+
for (const item of packages) {
|
|
206
|
+
const candidate = [...current, item];
|
|
207
|
+
const url = new URL('advisories', baseUrl);
|
|
208
|
+
url.searchParams.set('ecosystem', 'npm');
|
|
209
|
+
url.searchParams.set('type', type);
|
|
210
|
+
url.searchParams.set('per_page', '100');
|
|
211
|
+
url.searchParams.set('affects', candidate.map(packageKeyCoordinate).join(','));
|
|
212
|
+
if (current.length > 0 && (candidate.length > MAX_AFFECTS_PER_REQUEST || url.toString().length > MAX_URL_LENGTH)) {
|
|
213
|
+
chunks.push(current);
|
|
214
|
+
current = [item];
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
current = candidate;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
if (current.length > 0)
|
|
221
|
+
chunks.push(current);
|
|
222
|
+
return chunks;
|
|
223
|
+
}
|
|
224
|
+
function packageKeyCoordinate(item) {
|
|
225
|
+
return `${item.name}@${item.version}`;
|
|
226
|
+
}
|
|
227
|
+
function sameOrigin(value, baseUrl) {
|
|
228
|
+
try {
|
|
229
|
+
return new URL(value).origin === new URL(baseUrl).origin;
|
|
230
|
+
}
|
|
231
|
+
catch {
|
|
232
|
+
return false;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
function retryableFetchError(error) {
|
|
236
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
237
|
+
return message === 'fetch failed'
|
|
238
|
+
|| /^GitHub advisories returned HTTP (408|425|429|500|502|503|504)$/u.test(message);
|
|
239
|
+
}
|
|
240
|
+
export class GitHubAdvisoryClient {
|
|
241
|
+
baseUrl;
|
|
242
|
+
token;
|
|
243
|
+
fetcher;
|
|
244
|
+
timeoutMs;
|
|
245
|
+
types;
|
|
246
|
+
constructor(options = {}) {
|
|
247
|
+
this.baseUrl = normalizeBaseUrl(options.baseUrl ?? DEFAULT_GITHUB_API_BASE_URL);
|
|
248
|
+
const token = options.token?.trim();
|
|
249
|
+
this.token = token === undefined || token.length === 0 ? undefined : token;
|
|
250
|
+
this.fetcher = options.fetch ?? fetch;
|
|
251
|
+
this.timeoutMs = options.timeoutMs ?? 20_000;
|
|
252
|
+
if (!Number.isSafeInteger(this.timeoutMs) || this.timeoutMs < 1_000 || this.timeoutMs > 120_000) {
|
|
253
|
+
throw new Error('GitHub advisory timeout must be between 1000 and 120000 milliseconds');
|
|
254
|
+
}
|
|
255
|
+
this.types = options.includeUnreviewed === false ? ['reviewed'] : [...ADVISORY_TYPES];
|
|
256
|
+
}
|
|
257
|
+
async fetchPage(url) {
|
|
258
|
+
for (let attempt = 1; attempt <= MAX_FETCH_ATTEMPTS; attempt += 1) {
|
|
259
|
+
try {
|
|
260
|
+
const response = await this.fetcher(url, {
|
|
261
|
+
headers: {
|
|
262
|
+
accept: 'application/vnd.github+json',
|
|
263
|
+
'user-agent': `upstream-radar/${TOOL_VERSION}`,
|
|
264
|
+
'x-github-api-version': GITHUB_API_VERSION,
|
|
265
|
+
...(this.token === undefined ? {} : { authorization: `Bearer ${this.token}` }),
|
|
266
|
+
},
|
|
267
|
+
redirect: 'error',
|
|
268
|
+
signal: AbortSignal.timeout(this.timeoutMs),
|
|
269
|
+
});
|
|
270
|
+
const value = await boundedJson(response);
|
|
271
|
+
const next = nextLink(response);
|
|
272
|
+
if (next !== undefined && !sameOrigin(next, this.baseUrl)) {
|
|
273
|
+
throw new Error('GitHub advisory pagination escaped the configured API origin');
|
|
274
|
+
}
|
|
275
|
+
return { value, ...(next === undefined ? {} : { next }) };
|
|
276
|
+
}
|
|
277
|
+
catch (error) {
|
|
278
|
+
if (attempt >= MAX_FETCH_ATTEMPTS || !retryableFetchError(error))
|
|
279
|
+
throw error;
|
|
280
|
+
await new Promise(resolve => setTimeout(resolve, TRANSIENT_RETRY_DELAY_MS * attempt));
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
throw new Error('GitHub advisory request did not complete');
|
|
284
|
+
}
|
|
285
|
+
async fetchAdvisories(packages, type) {
|
|
286
|
+
const records = [];
|
|
287
|
+
for (const chunk of packageChunks(packages, this.baseUrl, type)) {
|
|
288
|
+
const url = new URL('advisories', this.baseUrl);
|
|
289
|
+
url.searchParams.set('ecosystem', 'npm');
|
|
290
|
+
url.searchParams.set('type', type);
|
|
291
|
+
url.searchParams.set('per_page', '100');
|
|
292
|
+
url.searchParams.set('affects', chunk.map(packageKeyCoordinate).join(','));
|
|
293
|
+
let next = url.toString();
|
|
294
|
+
let pages = 0;
|
|
295
|
+
while (next !== undefined) {
|
|
296
|
+
const page = await this.fetchPage(next);
|
|
297
|
+
if (!Array.isArray(page.value))
|
|
298
|
+
throw new Error('GitHub advisory response is not an array');
|
|
299
|
+
for (const raw of page.value)
|
|
300
|
+
records.push(parseAdvisory(raw));
|
|
301
|
+
next = page.next;
|
|
302
|
+
pages += 1;
|
|
303
|
+
if (pages >= MAX_PAGES_PER_QUERY && next !== undefined) {
|
|
304
|
+
throw new Error('GitHub advisory pagination exceeds the page limit');
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
if (records.length > MAX_ADVISORIES)
|
|
309
|
+
throw new Error(`GitHub advisory query exceeds the ${MAX_ADVISORIES} advisory limit`);
|
|
310
|
+
return records;
|
|
311
|
+
}
|
|
312
|
+
async query(input) {
|
|
313
|
+
const unique = [...new Map(input.map(item => [packageKey(item), item])).values()];
|
|
314
|
+
if (unique.length > MAX_PACKAGES)
|
|
315
|
+
throw new Error(`GitHub advisory query exceeds the ${MAX_PACKAGES} package limit`);
|
|
316
|
+
for (const item of unique) {
|
|
317
|
+
if (item.ecosystem !== 'npm' || item.name.length === 0 || item.version.length === 0) {
|
|
318
|
+
throw new Error('GitHub advisory queries require exact npm package names and versions');
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
const records = [];
|
|
322
|
+
for (const type of this.types)
|
|
323
|
+
records.push(...await this.fetchAdvisories(unique, type));
|
|
324
|
+
const result = new Map();
|
|
325
|
+
for (const coordinate of unique) {
|
|
326
|
+
const matches = new Map();
|
|
327
|
+
for (const advisory of records) {
|
|
328
|
+
if (advisory.withdrawn !== undefined)
|
|
329
|
+
continue;
|
|
330
|
+
const parsed = advisoryForPackage(advisory, coordinate);
|
|
331
|
+
if (parsed === undefined)
|
|
332
|
+
continue;
|
|
333
|
+
matches.set(parsed.id, { package: { ...coordinate }, advisory: parsed });
|
|
334
|
+
}
|
|
335
|
+
result.set(packageKey(coordinate), [...matches.values()].sort((left, right) => left.advisory.id.localeCompare(right.advisory.id)));
|
|
336
|
+
}
|
|
337
|
+
return result;
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
//# sourceMappingURL=github-advisory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-advisory.js","sourceRoot":"","sources":["../../src/github-advisory.ts"],"names":[],"mappings":"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"}
|
package/dist/src/graph.d.ts
CHANGED
|
@@ -6,6 +6,8 @@ interface RootPackage {
|
|
|
6
6
|
export declare function dependencyGraphDigest(nodes: readonly DependencyNode[], edges: readonly DependencyEdge[]): string;
|
|
7
7
|
/** Parse the exact package tree produced by npm package-lock v2/v3 without executing package code. */
|
|
8
8
|
export declare function parseNpmLockGraph(lockfile: unknown, rootPackage: RootPackage): DependencyGraph;
|
|
9
|
+
/** Parse pnpm lockfile v6/v9 package snapshots without installing or executing package code. */
|
|
10
|
+
export declare function parsePnpmLockGraph(text: string, rootPackage: RootPackage): DependencyGraph;
|
|
9
11
|
/** Return bounded, cycle-safe root-to-node paths for an alert. */
|
|
10
12
|
export declare function findDependencyPaths(graph: DependencyGraph, targetNodeId: string, options?: {
|
|
11
13
|
maxPaths?: number;
|
package/dist/src/graph.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/graph.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,eAAe,EAEpB,KAAK,cAAc,EACpB,MAAM,kBAAkB,CAAA;AAEzB,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAiED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,EAAE,KAAK,EAAE,SAAS,cAAc,EAAE,GAAG,MAAM,CAWhH;AAED,sGAAsG;AACtG,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,GAAG,eAAe,CA+
|
|
1
|
+
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/graph.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,eAAe,EAEpB,KAAK,cAAc,EACpB,MAAM,kBAAkB,CAAA;AAEzB,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAiED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,EAAE,KAAK,EAAE,SAAS,cAAc,EAAE,GAAG,MAAM,CAWhH;AAED,sGAAsG;AACtG,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,GAAG,eAAe,CA0F9F;AA2aD,gGAAgG;AAChG,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,GAAG,eAAe,CA+H1F;AAED,kEAAkE;AAClE,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,eAAe,EACtB,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GACrD,cAAc,EAAE,EAAE,CA0CpB"}
|