Enhance authentication handling and error logging in ChatService and NostrmarketService

- Introduce a flag in ChatService to track initialization status and improve message handling.
- Enhance error handling and logging for API responses in ChatService, including warnings for invalid data formats.
- Update NostrmarketService to utilize global authentication checks, improving user authentication flow.
- Refactor CheckoutPage to streamline pubkey retrieval and enhance error messages related to Nostr identity configuration.

These changes improve the robustness of authentication processes and provide clearer feedback to users during interactions.
This commit is contained in:
padreug 2025-09-06 23:46:23 +02:00
commit d3ee19f56f
3 changed files with 65 additions and 23 deletions

View file

@ -127,6 +127,8 @@ export class ChatService extends BaseService {
this.debug('Chat service fully initialized and ready!')
}
private isFullyInitialized = false
// Initialize message handling (subscription + history loading)
async initializeMessageHandling(): Promise<void> {
// Set up real-time subscription
@ -381,10 +383,13 @@ export class ChatService extends BaseService {
try {
const authToken = getAuthToken()
if (!authToken) {
console.warn('💬 No authentication token found for loading peers from API')
throw new Error('No authentication token found')
}
const API_BASE_URL = config.api.baseUrl || 'http://localhost:5006'
console.log('💬 Loading peers from API:', `${API_BASE_URL}/api/v1/auth/nostr/pubkeys`)
const response = await fetch(`${API_BASE_URL}/api/v1/auth/nostr/pubkeys`, {
headers: {
'Authorization': `Bearer ${authToken}`,
@ -393,15 +398,26 @@ export class ChatService extends BaseService {
})
if (!response.ok) {
throw new Error(`Failed to load peers: ${response.status}`)
const errorText = await response.text()
console.error('💬 API response error:', response.status, errorText)
throw new Error(`Failed to load peers: ${response.status} - ${errorText}`)
}
const data = await response.json()
console.log('💬 API returned', data?.length || 0, 'peers')
// Clear existing peers and load from API
this.peers.value.clear()
if (!Array.isArray(data)) {
console.warn('💬 Invalid API response format - expected array, got:', typeof data)
return
}
// Don't clear existing peers - merge instead
data.forEach((peer: any) => {
if (!peer.pubkey) {
console.warn('💬 Skipping peer without pubkey:', peer)
return
}
const chatPeer: ChatPeer = {
pubkey: peer.pubkey,
name: peer.username || `User ${peer.pubkey.slice(0, 8)}`,
@ -414,25 +430,31 @@ export class ChatService extends BaseService {
// Save to storage
this.savePeersToStorage()
console.log(`Loaded ${data.length} peers from API`)
console.log(`Loaded ${data.length} peers from API, total peers now: ${this.peers.value.size}`)
} catch (error) {
console.error('Failed to load peers from API:', error)
throw error
console.error('Failed to load peers from API:', error)
// Don't re-throw - peers from storage are still available
}
}
private loadPeersFromStorage(): void {
// Skip loading peers in constructor as StorageService may not be available yet
// This will be called later during initialization when dependencies are ready
if (!this.isInitialized.value) {
if (!this.isInitialized.value || !this.storageService) {
this.debug('Skipping peer loading from storage - not initialized or storage unavailable')
return
}
const peersArray = this.storageService.getUserData('chat-peers', []) as ChatPeer[]
peersArray.forEach(peer => {
this.peers.value.set(peer.pubkey, peer)
})
try {
const peersArray = this.storageService.getUserData('chat-peers', []) as ChatPeer[]
console.log('💬 Loading', peersArray.length, 'peers from storage')
peersArray.forEach(peer => {
this.peers.value.set(peer.pubkey, peer)
})
} catch (error) {
console.warn('💬 Failed to load peers from storage:', error)
}
}
private savePeersToStorage(): void {
@ -743,7 +765,6 @@ export class ChatService extends BaseService {
const hasGlobalAuth = auth.currentUser.value?.pubkey
const userPubkey = hasAuthService ? this.authService.user.value.pubkey : auth.currentUser.value?.pubkey
if (!userPubkey || !this.relayHub) return
try {