mirror of
https://github.com/dergigi/boris.git
synced 2026-01-15 21:04:24 +01:00
- Remove unused imports (useRef, faExclamationCircle, getProfileUrl, Observable, UserSettings) - Remove unused error state and setError calls in Explore and Me components - Remove unused 'events' variable from exploreService and nostrverseService - Remove unused '_relays' parameter from saveSettings - Remove unused '_settings' parameter from publishEvent - Update all callers of publishEvent and saveSettings to match new signatures - Add eslint-disable comment for intentional dependency omission in Explore - Update BookmarkList to use new pull-to-refresh library and RefreshIndicator - All type checks and linting now pass
58 lines
1.9 KiB
TypeScript
58 lines
1.9 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> {
|
|
// Store the event in the local EventStore FIRST for immediate UI display
|
|
eventStore.add(event)
|
|
console.log('💾 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('📍 Event relay status:', {
|
|
targetRelays: RELAYS.length,
|
|
expectedSuccessRelays: expectedSuccessRelays.length,
|
|
isLocalOnly,
|
|
hasRemoteConnection,
|
|
eventId: event.id.slice(0, 8)
|
|
})
|
|
|
|
// 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)
|
|
relayPool.publish(RELAYS, event)
|
|
.then(() => {
|
|
console.log('✅ Event published to', RELAYS.length, 'relay(s):', event.id.slice(0, 8))
|
|
})
|
|
.catch((error) => {
|
|
console.warn('⚠️ Failed to publish event to relays (event still saved locally):', error)
|
|
})
|
|
}
|
|
|