mirror of
https://github.com/Permissionless-Software-Foundation/bch-dex-taker-v2.git
synced 2026-09-21 16:52:01 -07:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a7c3fc243b | ||
|
|
173cda717e | ||
|
|
e46068165f | ||
|
|
086deb4904 |
@@ -31,9 +31,12 @@ function ContentCreators (props) {
|
||||
|
||||
const [followList, setFollowList] = useState([])
|
||||
|
||||
// Get the list of profiles followed by the user.
|
||||
// It aggregates all the followers from all the relays.
|
||||
const getFollowList = useCallback(async () => {
|
||||
const list = await new Promise((resolve, reject) => {
|
||||
let list = []
|
||||
let closedRelays = 0
|
||||
const { nostrKeyPair } = appData.bchWalletState
|
||||
|
||||
const pool = RelayPool(config.nostrRelays)
|
||||
@@ -43,49 +46,62 @@ function ContentCreators (props) {
|
||||
})
|
||||
|
||||
pool.on('eose', relay => {
|
||||
console.log('Closing Relay')
|
||||
relay.close()
|
||||
/** This ensures to return an empty array if no records are found!
|
||||
* Applies for new users that don't have a follow list
|
||||
*/
|
||||
resolve(list)
|
||||
closedRelays++
|
||||
// Resolve list if all relays are closed
|
||||
if (closedRelays === config.nostrRelays.length) {
|
||||
resolve(list)
|
||||
}
|
||||
})
|
||||
|
||||
pool.on('event', (relay, subId, ev) => {
|
||||
console.log('Received event:', ev)
|
||||
list = ev.tags
|
||||
resolve(list)
|
||||
// console.log('Received event:', ev)
|
||||
// Merge list received from all relays
|
||||
list = [...list, ...ev.tags]
|
||||
})
|
||||
})
|
||||
|
||||
console.log('Follow List', list)
|
||||
// console.log('Follow List', list)
|
||||
setFollowList(list)
|
||||
}, [appData])
|
||||
|
||||
// Load profile from nostr relays
|
||||
// It uses multiple relays. It will exit after the first successful retrieval
|
||||
// from any relay. If one relay fails, it will move on to the next one.
|
||||
const loadProfile = useCallback(async (pubKey) => {
|
||||
return new Promise((resolve) => {
|
||||
// const pool = RelayPool(config.nostrRelays)
|
||||
const pool = RelayPool([config.nostrRelay])
|
||||
pool.on('open', relay => {
|
||||
relay.subscribe('subid', { limit: 5, kinds: [0], authors: [pubKey] })
|
||||
})
|
||||
// Looking for the profile in each relay sequentially
|
||||
for (let i = 0; i < config.nostrRelays.length; i++) {
|
||||
const profile = await new Promise((resolve) => {
|
||||
const relay = config.nostrRelays[i]
|
||||
// const pool = RelayPool(config.nostrRelays)
|
||||
const pool = RelayPool([relay])
|
||||
pool.on('open', relay => {
|
||||
relay.subscribe('subid', { limit: 5, kinds: [0], authors: [pubKey] })
|
||||
})
|
||||
|
||||
pool.on('eose', relay => {
|
||||
console.log('Closing Relay')
|
||||
relay.close()
|
||||
resolve(false)
|
||||
})
|
||||
|
||||
pool.on('event', (relay, subId, ev) => {
|
||||
try {
|
||||
const profile = JSON.parse(ev.content)
|
||||
// console.log('profile', profile)
|
||||
resolve(profile)
|
||||
} catch (error) {
|
||||
pool.on('eose', relay => {
|
||||
console.log('Closing Relay')
|
||||
relay.close()
|
||||
resolve(false)
|
||||
}
|
||||
})
|
||||
|
||||
pool.on('event', (relay, subId, ev) => {
|
||||
try {
|
||||
const profile = JSON.parse(ev.content)
|
||||
// console.log('profile', profile)
|
||||
console.log(`Profile found for ${pubKey} at ${relay.url}`)
|
||||
resolve(profile)
|
||||
} catch (error) {
|
||||
resolve(false)
|
||||
}
|
||||
relay.close()
|
||||
})
|
||||
})
|
||||
})
|
||||
// Stop looking for profile if found
|
||||
if (profile) {
|
||||
return profile
|
||||
}
|
||||
}
|
||||
}, [])
|
||||
|
||||
useEffect(() => {
|
||||
|
||||
Reference in New Issue
Block a user