fix: improve nostr message subscription reliability
- Add limit parameter to ensure historical messages are retrieved - Remove premature subscription timeouts - Add EOSE (End of Stored Events) handlers for better message tracking - Keep subscriptions open even when no initial messages received - Simplify subscription success logic - Improve debug logging for subscription statesThis change helps ensure messages persist across page refreshes andimproves the reliability of message retrieval, particularly on mobiledevices.
This commit is contained in:
parent
d27f66e95d
commit
be93965e13
1 changed files with 25 additions and 29 deletions
|
|
@ -248,13 +248,12 @@ export const useNostrStore = defineStore('nostr', () => {
|
|||
|
||||
// Get timestamp from 24 hours ago
|
||||
const since = Math.floor(Date.now() / 1000) - (24 * 60 * 60)
|
||||
let hasReceivedMessages = false
|
||||
|
||||
try {
|
||||
const subscribeToRelay = (relay: any) => {
|
||||
return new Promise((resolve) => {
|
||||
const subs: any[] = []
|
||||
let messageReceived = false
|
||||
let isResolved = false
|
||||
|
||||
try {
|
||||
console.log('Setting up subscriptions for relay...')
|
||||
|
|
@ -264,6 +263,7 @@ export const useNostrStore = defineStore('nostr', () => {
|
|||
kinds: [4],
|
||||
'#p': [account.value!.pubkey],
|
||||
since,
|
||||
limit: 100 // Add limit to ensure we get historical messages
|
||||
}])
|
||||
subs.push(receivedSub)
|
||||
|
||||
|
|
@ -272,13 +272,13 @@ export const useNostrStore = defineStore('nostr', () => {
|
|||
kinds: [4],
|
||||
authors: [account.value!.pubkey],
|
||||
since,
|
||||
limit: 100 // Add limit to ensure we get historical messages
|
||||
}])
|
||||
subs.push(sentSub)
|
||||
|
||||
// Handle received messages
|
||||
receivedSub.on('event', async (event: NostrEvent) => {
|
||||
messageReceived = true
|
||||
if (isResolved) return // Don't process events after resolution
|
||||
hasReceivedMessages = true
|
||||
try {
|
||||
if (processedMessageIds.value.has(event.id)) return
|
||||
|
||||
|
|
@ -305,8 +305,7 @@ export const useNostrStore = defineStore('nostr', () => {
|
|||
|
||||
// Handle sent messages
|
||||
sentSub.on('event', async (event: NostrEvent) => {
|
||||
messageReceived = true
|
||||
if (isResolved) return // Don't process events after resolution
|
||||
hasReceivedMessages = true
|
||||
try {
|
||||
if (processedMessageIds.value.has(event.id)) return
|
||||
|
||||
|
|
@ -334,6 +333,21 @@ export const useNostrStore = defineStore('nostr', () => {
|
|||
}
|
||||
})
|
||||
|
||||
// Handle EOSE (End of Stored Events)
|
||||
receivedSub.on('eose', () => {
|
||||
console.log('Received EOSE for received messages')
|
||||
if (!hasReceivedMessages) {
|
||||
console.log('No messages received yet, keeping subscription open')
|
||||
}
|
||||
})
|
||||
|
||||
sentSub.on('eose', () => {
|
||||
console.log('Received EOSE for sent messages')
|
||||
if (!hasReceivedMessages) {
|
||||
console.log('No messages received yet, keeping subscription open')
|
||||
}
|
||||
})
|
||||
|
||||
// Store subscriptions for cleanup
|
||||
currentSubscription.value = {
|
||||
unsub: () => {
|
||||
|
|
@ -349,24 +363,12 @@ export const useNostrStore = defineStore('nostr', () => {
|
|||
}
|
||||
}
|
||||
|
||||
// Consider subscription successful after a short delay
|
||||
setTimeout(() => {
|
||||
if (!isResolved) {
|
||||
isResolved = true
|
||||
console.debug(messageReceived ?
|
||||
'Subscription successful with messages' :
|
||||
'Subscription successful, no messages yet'
|
||||
)
|
||||
resolve(true)
|
||||
}
|
||||
}, 3000)
|
||||
// Keep subscription open
|
||||
resolve(true)
|
||||
|
||||
} catch (err) {
|
||||
console.debug('Error in subscription setup:', err)
|
||||
if (!isResolved) {
|
||||
isResolved = true
|
||||
resolve(false)
|
||||
}
|
||||
resolve(false)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
@ -377,16 +379,10 @@ export const useNostrStore = defineStore('nostr', () => {
|
|||
)
|
||||
|
||||
// Consider success if at least one relay worked
|
||||
const success = results.some(result => result)
|
||||
if (!success) {
|
||||
console.debug('No relays successfully subscribed')
|
||||
return false // Return false instead of throwing
|
||||
}
|
||||
|
||||
return true
|
||||
return results.some(result => result)
|
||||
} catch (err) {
|
||||
console.debug('Subscription process failed:', err)
|
||||
return false // Return false instead of throwing
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue