init to refresh messages
This commit is contained in:
parent
231658b980
commit
c7aa88bec6
1 changed files with 90 additions and 58 deletions
|
|
@ -99,6 +99,12 @@ export const useNostrStore = defineStore('nostr', () => {
|
||||||
}
|
}
|
||||||
}, { deep: true })
|
}, { deep: true })
|
||||||
|
|
||||||
|
// Initialize store if account exists in localStorage
|
||||||
|
if (account.value) {
|
||||||
|
console.log('Found existing account, initializing connection...')
|
||||||
|
init()
|
||||||
|
}
|
||||||
|
|
||||||
// Computed
|
// Computed
|
||||||
const isLoggedIn = computed(() => !!account.value)
|
const isLoggedIn = computed(() => !!account.value)
|
||||||
const currentMessages = computed(() =>
|
const currentMessages = computed(() =>
|
||||||
|
|
@ -252,72 +258,98 @@ export const useNostrStore = defineStore('nostr', () => {
|
||||||
since: 0 // Get all historical messages
|
since: 0 // Get all historical messages
|
||||||
}
|
}
|
||||||
|
|
||||||
relayPool.value.forEach(relay => {
|
const subscribeToRelay = (relay: any) => {
|
||||||
// Subscribe to received messages
|
return new Promise((resolve) => {
|
||||||
const receivedSub = relay.sub([receivedFilter])
|
let receivedCount = 0
|
||||||
|
let sentCount = 0
|
||||||
|
let eoseCount = 0
|
||||||
|
|
||||||
receivedSub.on('event', async (event: NostrEvent) => {
|
// Subscribe to received messages
|
||||||
try {
|
const receivedSub = relay.sub([receivedFilter])
|
||||||
// Skip if we've already processed this message
|
|
||||||
if (processedMessageIds.value.has(event.id)) {
|
receivedSub.on('event', async (event: NostrEvent) => {
|
||||||
return
|
try {
|
||||||
|
// Skip if we've already processed this message
|
||||||
|
if (processedMessageIds.value.has(event.id)) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
receivedCount++
|
||||||
|
const decrypted = await window.NostrTools.nip04.decrypt(
|
||||||
|
account.value!.privkey,
|
||||||
|
event.pubkey,
|
||||||
|
event.content
|
||||||
|
)
|
||||||
|
|
||||||
|
const dm: DirectMessage = {
|
||||||
|
id: event.id,
|
||||||
|
pubkey: event.pubkey,
|
||||||
|
content: decrypted,
|
||||||
|
created_at: event.created_at,
|
||||||
|
sent: false
|
||||||
|
}
|
||||||
|
|
||||||
|
await addMessage(event.pubkey, dm)
|
||||||
|
|
||||||
|
// Load profile if not already loaded
|
||||||
|
if (!profiles.value.has(event.pubkey)) {
|
||||||
|
await loadProfiles()
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Failed to decrypt received message:', err)
|
||||||
}
|
}
|
||||||
|
})
|
||||||
|
|
||||||
const decrypted = await window.NostrTools.nip04.decrypt(
|
// Subscribe to sent messages
|
||||||
account.value!.privkey,
|
const sentSub = relay.sub([sentFilter])
|
||||||
event.pubkey,
|
|
||||||
event.content
|
|
||||||
)
|
|
||||||
|
|
||||||
const dm: DirectMessage = {
|
sentSub.on('event', async (event: NostrEvent) => {
|
||||||
id: event.id,
|
try {
|
||||||
pubkey: event.pubkey,
|
// Skip if we've already processed this message
|
||||||
content: decrypted,
|
if (processedMessageIds.value.has(event.id)) {
|
||||||
created_at: event.created_at,
|
return
|
||||||
sent: false
|
}
|
||||||
|
|
||||||
|
sentCount++
|
||||||
|
const decrypted = await window.NostrTools.nip04.decrypt(
|
||||||
|
account.value!.privkey,
|
||||||
|
SUPPORT_NPUB,
|
||||||
|
event.content
|
||||||
|
)
|
||||||
|
|
||||||
|
const dm: DirectMessage = {
|
||||||
|
id: event.id,
|
||||||
|
pubkey: SUPPORT_NPUB,
|
||||||
|
content: decrypted,
|
||||||
|
created_at: event.created_at,
|
||||||
|
sent: true
|
||||||
|
}
|
||||||
|
|
||||||
|
await addMessage(SUPPORT_NPUB, dm)
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Failed to decrypt sent message:', err)
|
||||||
}
|
}
|
||||||
|
})
|
||||||
|
|
||||||
await addMessage(event.pubkey, dm)
|
// Listen for end of stored events
|
||||||
|
receivedSub.on('eose', () => {
|
||||||
// Load profile if not already loaded
|
eoseCount++
|
||||||
if (!profiles.value.has(event.pubkey)) {
|
if (eoseCount >= 2) { // Both subscriptions have finished
|
||||||
await loadProfiles()
|
resolve(true)
|
||||||
}
|
}
|
||||||
} catch (err) {
|
})
|
||||||
console.error('Failed to decrypt received message:', err)
|
|
||||||
}
|
sentSub.on('eose', () => {
|
||||||
|
eoseCount++
|
||||||
|
if (eoseCount >= 2) { // Both subscriptions have finished
|
||||||
|
resolve(true)
|
||||||
|
}
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// Subscribe to sent messages
|
// Wait for all relays to load their historical messages
|
||||||
const sentSub = relay.sub([sentFilter])
|
await Promise.all(relayPool.value.map(relay => subscribeToRelay(relay)))
|
||||||
|
|
||||||
sentSub.on('event', async (event: NostrEvent) => {
|
|
||||||
try {
|
|
||||||
// Skip if we've already processed this message
|
|
||||||
if (processedMessageIds.value.has(event.id)) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
const decrypted = await window.NostrTools.nip04.decrypt(
|
|
||||||
account.value!.privkey,
|
|
||||||
SUPPORT_NPUB,
|
|
||||||
event.content
|
|
||||||
)
|
|
||||||
|
|
||||||
const dm: DirectMessage = {
|
|
||||||
id: event.id,
|
|
||||||
pubkey: SUPPORT_NPUB,
|
|
||||||
content: decrypted,
|
|
||||||
created_at: event.created_at,
|
|
||||||
sent: true
|
|
||||||
}
|
|
||||||
|
|
||||||
await addMessage(SUPPORT_NPUB, dm)
|
|
||||||
} catch (err) {
|
|
||||||
console.error('Failed to decrypt sent message:', err)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue