@ecosyste-ms/critical 1.1.0 → 1.1.20260514
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/critical-packages.db.gz +0 -0
- package/lib/index.js +33 -16
- package/package.json +1 -1
|
Binary file
|
package/lib/index.js
CHANGED
|
@@ -21,22 +21,39 @@ if (!existsSync(databasePath) && existsSync(gzPath)) {
|
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
const API_BASE = 'https://packages.ecosyste.ms/api/v1'
|
|
24
|
-
const PER_PAGE =
|
|
24
|
+
const PER_PAGE = 100
|
|
25
25
|
const RATE_LIMIT_MS = 50
|
|
26
26
|
const CONCURRENCY = 10
|
|
27
|
+
const MAX_RETRIES = 5
|
|
28
|
+
const RETRY_BASE_MS = 1000
|
|
27
29
|
|
|
28
30
|
function sleep(ms) {
|
|
29
31
|
return new Promise(resolve => setTimeout(resolve, ms))
|
|
30
32
|
}
|
|
31
33
|
|
|
32
34
|
async function fetchJson(url) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
let lastErr
|
|
36
|
+
for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {
|
|
37
|
+
try {
|
|
38
|
+
const response = await fetch(url, {
|
|
39
|
+
headers: { 'User-Agent': USER_AGENT }
|
|
40
|
+
})
|
|
41
|
+
if (response.ok) return response.json()
|
|
42
|
+
// 4xx is a client error — don't retry. 5xx is server-side; retry.
|
|
43
|
+
if (response.status < 500) {
|
|
44
|
+
throw new Error(`HTTP ${response.status}: ${url}`)
|
|
45
|
+
}
|
|
46
|
+
lastErr = new Error(`HTTP ${response.status}: ${url}`)
|
|
47
|
+
} catch (err) {
|
|
48
|
+
// Network errors (fetch throws TypeError) are retryable.
|
|
49
|
+
if (err.message?.startsWith('HTTP ') && !err.message.match(/HTTP 5\d\d/)) throw err
|
|
50
|
+
lastErr = err
|
|
51
|
+
}
|
|
52
|
+
if (attempt < MAX_RETRIES) {
|
|
53
|
+
await sleep(RETRY_BASE_MS * Math.pow(2, attempt))
|
|
54
|
+
}
|
|
38
55
|
}
|
|
39
|
-
|
|
56
|
+
throw lastErr
|
|
40
57
|
}
|
|
41
58
|
|
|
42
59
|
async function fetchAllCriticalPackages(onProgress) {
|
|
@@ -263,14 +280,14 @@ function insertRepoMetadata(db, packageId, repoMetadata, host) {
|
|
|
263
280
|
|
|
264
281
|
stmt.run(
|
|
265
282
|
packageId,
|
|
266
|
-
repoMetadata.owner,
|
|
267
|
-
repoMetadata.name,
|
|
268
|
-
repoMetadata.full_name,
|
|
269
|
-
host?.name,
|
|
270
|
-
repoMetadata.language,
|
|
271
|
-
repoMetadata.stargazers_count,
|
|
272
|
-
repoMetadata.forks_count,
|
|
273
|
-
repoMetadata.open_issues_count,
|
|
283
|
+
repoMetadata.owner ?? null,
|
|
284
|
+
repoMetadata.name ?? null,
|
|
285
|
+
repoMetadata.full_name ?? null,
|
|
286
|
+
host?.name ?? null,
|
|
287
|
+
repoMetadata.language ?? null,
|
|
288
|
+
repoMetadata.stargazers_count ?? null,
|
|
289
|
+
repoMetadata.forks_count ?? null,
|
|
290
|
+
repoMetadata.open_issues_count ?? null,
|
|
274
291
|
repoMetadata.archived ? 1 : 0,
|
|
275
292
|
repoMetadata.fork ? 1 : 0
|
|
276
293
|
)
|
|
@@ -399,4 +416,4 @@ async function build(options = {}) {
|
|
|
399
416
|
return info
|
|
400
417
|
}
|
|
401
418
|
|
|
402
|
-
export { build, createDatabase, fetchAllCriticalPackages, fetchVersionNumbers, databasePath }
|
|
419
|
+
export { build, createDatabase, fetchAllCriticalPackages, fetchVersionNumbers, databasePath, insertRepoMetadata }
|