130-fix-empty-relay-issue #131
@ -20,7 +20,8 @@ import {
|
|||||||
findRelayListAndUpdateCache,
|
findRelayListAndUpdateCache,
|
||||||
findRelayListInCache,
|
findRelayListInCache,
|
||||||
getDefaultRelaySet,
|
getDefaultRelaySet,
|
||||||
getUserRelaySet
|
getUserRelaySet,
|
||||||
|
isOlderThanOneWeek
|
||||||
} from '../utils/relays.ts'
|
} from '../utils/relays.ts'
|
||||||
|
|
||||||
export class MetadataController extends EventEmitter {
|
export class MetadataController extends EventEmitter {
|
||||||
@ -133,10 +134,8 @@ export class MetadataController extends EventEmitter {
|
|||||||
|
|
||||||
// If cached metadata is found, check its validity
|
// If cached metadata is found, check its validity
|
||||||
if (cachedMetadataEvent) {
|
if (cachedMetadataEvent) {
|
||||||
const oneWeekInMS = 7 * 24 * 60 * 60 * 1000 // Number of milliseconds in one week
|
|
||||||
|
|
||||||
// Check if the cached metadata is older than one week
|
// Check if the cached metadata is older than one week
|
||||||
if (Date.now() - cachedMetadataEvent.cachedAt > oneWeekInMS) {
|
if (isOlderThanOneWeek(cachedMetadataEvent.cachedAt)) {
|
||||||
// If older than one week, find the metadata from relays in background
|
// If older than one week, find the metadata from relays in background
|
||||||
|
|
||||||
this.checkForMoreRecentMetadata(hexKey, cachedMetadataEvent.event)
|
this.checkForMoreRecentMetadata(hexKey, cachedMetadataEvent.event)
|
||||||
@ -164,13 +163,18 @@ export class MetadataController extends EventEmitter {
|
|||||||
* or a fallback RelaySet with Sigit's Relay
|
* or a fallback RelaySet with Sigit's Relay
|
||||||
*/
|
*/
|
||||||
public findRelayListMetadata = async (hexKey: string): Promise<RelaySet> => {
|
public findRelayListMetadata = async (hexKey: string): Promise<RelaySet> => {
|
||||||
const relayEvent = await findRelayListInCache(hexKey)
|
const relayEvent =
|
||||||
|| await findRelayListAndUpdateCache([this.specialMetadataRelay], hexKey)
|
(await findRelayListInCache(hexKey)) ||
|
||||||
|| await findRelayListAndUpdateCache(await this.nostrController.getMostPopularRelays(), hexKey)
|
(await findRelayListAndUpdateCache(
|
||||||
|
[this.specialMetadataRelay],
|
||||||
|
hexKey
|
||||||
|
)) ||
|
||||||
|
(await findRelayListAndUpdateCache(
|
||||||
|
await this.nostrController.getMostPopularRelays(),
|
||||||
|
hexKey
|
||||||
|
))
|
||||||
|
|
||||||
return relayEvent
|
return relayEvent ? getUserRelaySet(relayEvent.tags) : getDefaultRelaySet()
|
||||||
? getUserRelaySet(relayEvent.tags)
|
|
||||||
: getDefaultRelaySet()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public extractProfileMetadataContent = (event: Event) => {
|
public extractProfileMetadataContent = (event: Event) => {
|
||||||
|
@ -5,8 +5,8 @@ import { localCache } from '../services'
|
|||||||
import { ONE_WEEK_IN_MS, SIGIT_RELAY } from './const.ts'
|
import { ONE_WEEK_IN_MS, SIGIT_RELAY } from './const.ts'
|
||||||
import { RelayMap, RelaySet } from '../types'
|
import { RelayMap, RelaySet } from '../types'
|
||||||
|
|
||||||
const READ_MARKER = "read"
|
const READ_MARKER = 'read'
|
||||||
const WRITE_MARKET = "write"
|
const WRITE_MARKER = 'write'
|
||||||
eugene marked this conversation as resolved
Outdated
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Attempts to find a relay list from the provided lookUpRelays.
|
* Attempts to find a relay list from the provided lookUpRelays.
|
||||||
@ -15,7 +15,10 @@ const WRITE_MARKET = "write"
|
|||||||
* @param hexKey
|
* @param hexKey
|
||||||
* @return found relay list or null
|
* @return found relay list or null
|
||||||
*/
|
*/
|
||||||
const findRelayListAndUpdateCache = async (lookUpRelays: string[], hexKey: string): Promise<Event | null> => {
|
const findRelayListAndUpdateCache = async (
|
||||||
|
lookUpRelays: string[],
|
||||||
|
hexKey: string
|
||||||
|
): Promise<Event | null> => {
|
||||||
try {
|
try {
|
||||||
const eventFilter: Filter = {
|
const eventFilter: Filter = {
|
||||||
kinds: [RelayList],
|
kinds: [RelayList],
|
||||||
@ -42,10 +45,14 @@ const findRelayListAndUpdateCache = async (lookUpRelays: string[], hexKey: strin
|
|||||||
const findRelayListInCache = async (hexKey: string): Promise<Event | null> => {
|
const findRelayListInCache = async (hexKey: string): Promise<Event | null> => {
|
||||||
try {
|
try {
|
||||||
// Attempt to retrieve the metadata event from the local cache
|
// Attempt to retrieve the metadata event from the local cache
|
||||||
const cachedRelayListMetadataEvent = await localCache.getUserRelayListMetadata(hexKey)
|
const cachedRelayListMetadataEvent =
|
||||||
|
await localCache.getUserRelayListMetadata(hexKey)
|
||||||
|
|
||||||
// Check if the cached event is not older than one week
|
// Check if the cached event is not older than one week
|
||||||
if (cachedRelayListMetadataEvent && isOlderThanOneWeek(cachedRelayListMetadataEvent.cachedAt)) {
|
if (
|
||||||
|
cachedRelayListMetadataEvent &&
|
||||||
|
isOlderThanOneWeek(cachedRelayListMetadataEvent.cachedAt)
|
||||||
|
) {
|
||||||
return cachedRelayListMetadataEvent.event
|
return cachedRelayListMetadataEvent.event
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -87,7 +94,7 @@ const toRelaySet = (obj: RelaySet, tag: string[]): RelaySet => {
|
|||||||
|
|
||||||
if (marker === READ_MARKER) {
|
if (marker === READ_MARKER) {
|
||||||
obj.read.push(tag[1])
|
obj.read.push(tag[1])
|
||||||
} else if (marker === WRITE_MARKET) {
|
} else if (marker === WRITE_MARKER) {
|
||||||
obj.write.push(tag[1])
|
obj.write.push(tag[1])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -105,4 +112,5 @@ export {
|
|||||||
getUserRelaySet,
|
getUserRelaySet,
|
||||||
getDefaultRelaySet,
|
getDefaultRelaySet,
|
||||||
getDefaultRelayMap,
|
getDefaultRelayMap,
|
||||||
|
isOlderThanOneWeek
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user
small typo