-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathcheck.js
36 lines (33 loc) · 1.04 KB
/
check.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import debug from 'debug'
/**
* @typedef {import('./sample').Sample} Sample
* @typedef {import('./peer').PeeredSample} PeeredSample
* @typedef {import('./ipfs-check-client').IpfsCheckResult} IpfsCheckResult
* @typedef {{ result: IpfsCheckResult } & PeeredSample} CheckedSample
*/
const log = debug('checkup:check')
/**
* @param {import('./ipfs-check-client').IpfsCheckClient} checker
*/
export function checkCid (checker) {
/**
* @param {AsyncIterable<Sample|PeeredSample>} source
* @returns {AsyncIterable<Sample|CheckedSample>}
*/
return async function * (source) {
for await (const sample of source) {
// we can only check samples that have peers
if (!sample.peer) {
yield sample
continue
}
log(`checking sample ${sample.cid} @ ${sample.peer}`)
try {
const result = await checker.check(sample.cid, sample.peer)
yield /** @type {CheckedSample} */ ({ ...sample, result })
} catch (err) {
log(`failed to checkup on: ${sample.cid}`, err)
}
}
}
}