mirror of
https://github.com/dergigi/boris.git
synced 2026-01-18 22:34:34 +01:00
- Add logs in useReadingPosition: scroll position calculation (throttled to 5% changes) - Add logs for scheduling and triggering auto-save - Add detailed logs in ContentPanel handleSavePosition - Add logs in saveReadingPosition: event creation, signing, publishing - Add logs in publishEvent: event store addition, relay status, publishing - All logs prefixed with [progress] for easy filtering - Shows complete flow from scroll → calculate → save → create event → publish to relays
68 lines
2.5 KiB
TypeScript
68 lines
2.5 KiB
TypeScript
import { RelayPool } from 'applesauce-relay'
|
|
import { NostrEvent } from 'nostr-tools'
|
|
import { IEventStore } from 'applesauce-core'
|
|
import { RELAYS } from '../config/relays'
|
|
import { isLocalRelay, areAllRelaysLocal } from '../utils/helpers'
|
|
import { markEventAsOfflineCreated } from './offlineSyncService'
|
|
|
|
/**
|
|
* Unified write helper: add event to EventStore, detect connectivity,
|
|
* mark for offline sync if needed, and publish in background.
|
|
*/
|
|
export async function publishEvent(
|
|
relayPool: RelayPool,
|
|
eventStore: IEventStore,
|
|
event: NostrEvent
|
|
): Promise<void> {
|
|
const isProgressEvent = event.kind === 39802
|
|
const logPrefix = isProgressEvent ? '[progress]' : ''
|
|
|
|
// Store the event in the local EventStore FIRST for immediate UI display
|
|
eventStore.add(event)
|
|
console.log(`${logPrefix} 💾 Stored event in EventStore:`, event.id.slice(0, 8), `(kind ${event.kind})`)
|
|
|
|
// Check current connection status - are we online or in flight mode?
|
|
const connectedRelays = Array.from(relayPool.relays.values())
|
|
.filter(relay => relay.connected)
|
|
.map(relay => relay.url)
|
|
|
|
const hasRemoteConnection = connectedRelays.some(url => !isLocalRelay(url))
|
|
|
|
// Determine which relays we expect to succeed
|
|
const expectedSuccessRelays = hasRemoteConnection
|
|
? RELAYS
|
|
: RELAYS.filter(isLocalRelay)
|
|
|
|
const isLocalOnly = areAllRelaysLocal(expectedSuccessRelays)
|
|
|
|
console.log(`${logPrefix} 📍 Event relay status:`, {
|
|
targetRelays: RELAYS.length,
|
|
expectedSuccessRelays: expectedSuccessRelays.length,
|
|
isLocalOnly,
|
|
hasRemoteConnection,
|
|
eventId: event.id.slice(0, 8),
|
|
connectedRelays: connectedRelays.length
|
|
})
|
|
|
|
// If we're in local-only mode, mark this event for later sync
|
|
if (isLocalOnly) {
|
|
markEventAsOfflineCreated(event.id)
|
|
}
|
|
|
|
// Publish to all configured relays in the background (non-blocking)
|
|
console.log(`${logPrefix} 📤 Publishing to relays:`, RELAYS)
|
|
relayPool.publish(RELAYS, event)
|
|
.then(() => {
|
|
console.log(`${logPrefix} ✅ Event published to`, RELAYS.length, 'relay(s):', event.id.slice(0, 8))
|
|
})
|
|
.catch((error) => {
|
|
console.warn(`${logPrefix} ⚠️ Failed to publish event to relays (event still saved locally):`, error)
|
|
|
|
// Surface common bunker signing errors for debugging
|
|
if (error instanceof Error && error.message.includes('permission')) {
|
|
console.warn('💡 Hint: This may be a bunker permission issue. Ensure your bunker connection has signing permissions.')
|
|
}
|
|
})
|
|
}
|
|
|