-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfinder.js
More file actions
86 lines (77 loc) · 2.71 KB
/
Copy pathfinder.js
File metadata and controls
86 lines (77 loc) · 2.71 KB
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import {LotusRPC} from '@filecoin-shipyard/lotus-client-rpc'
import {mainnet} from '@filecoin-shipyard/lotus-client-schema'
import {NodejsProvider} from '@filecoin-shipyard/lotus-client-provider-nodejs'
const endpointUrl = 'wss://api.chain.love/rpc/v0'
const provider = new NodejsProvider(endpointUrl)
let client
export async function prepareProvidersInfo() {
client = new LotusRPC(provider, {schema: mainnet.fullNode})
try {
await getMinersList()
} finally {
client.destroy()
}
}
async function getMinerPeerId(minerId) {
const minerInfo = await client.stateMinerInfo(minerId, [])
console.log('PeerID=', minerInfo['PeerId'])
return minerInfo['PeerId']
}
const WEB3_STORAGE_TOKEN = process.env.WEB3_STORAGE_TOKEN
const providersPeers = {}
const getMinersList = async () => {
let response = await fetch("https://api.web3.storage/user/uploads?size=1000", {
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${WEB3_STORAGE_TOKEN}`
}
})
let uploads = await response.json()
let providers = new Set()
uploads.forEach(upload => {
upload.deals.forEach(deal => {
const minerId = deal['storageProvider']
providers.add(minerId)
})
})
for (const minerId of providers) {
const peerId = await getMinerPeerId(minerId)
providersPeers[peerId] = minerId
}
console.log(providers)
console.log(providersPeers)
}
const getProvidersViaCidContact = async (ipfsCid) => {
let providers = []
let response = await fetch("https://cid.contact/cid/" + ipfsCid)
let uploadInfo = await response.json()
let providerResults = uploadInfo.MultihashResults[0].ProviderResults
for (let providerResult of providerResults) {
let providerId = providerResult.Provider.ID
if (providerId.startsWith('12')) {
if (providersPeers[providerId]) {
providers.push(providersPeers[providerId])
}
}
}
return providers
}
const getProvidersViaWeb3Storage = async (ipfsCid) => {
let response = await fetch("https://api.web3.storage/status/" + ipfsCid)
let uploadInfo = await response.json()
let providers = []
let dealsList = uploadInfo['deals']
dealsList.forEach(deal => {
providers.push(deal['storageProvider'])
})
return providers
}
export const getProvidersList = async (ipfsCid) => {
let providers = await getProvidersViaCidContact(ipfsCid)
console.log(`Providers from cid.contact ${providers}`)
if (providers.length === 0) {
console.log("Getting providers list from web3.storage")
providers = await getProvidersViaWeb3Storage(ipfsCid)
}
return providers
}