From 131db9c569c3c6a46313e6244e879d7fc4346208 Mon Sep 17 00:00:00 2001 From: jack Date: Mon, 25 Aug 2025 19:50:45 +0200 Subject: [PATCH] chore(NostrTransport): factor recipient npub resolution into helper; reduce duplication --- bitchat/Services/BLEService.swift | 4 ++- bitchat/Services/NostrTransport.swift | 46 +++++++++++---------------- 2 files changed, 21 insertions(+), 29 deletions(-) diff --git a/bitchat/Services/BLEService.swift b/bitchat/Services/BLEService.swift index 01f0bb3a..7c8370b1 100644 --- a/bitchat/Services/BLEService.swift +++ b/bitchat/Services/BLEService.swift @@ -2368,7 +2368,9 @@ extension BLEService: CBPeripheralDelegate { // Process directly on main thread to avoid deadlocks (matches original implementation) guard let packet = BinaryProtocol.decode(data) else { - SecureLogger.log("❌ Failed to decode notification packet, full data: \(data.map { String(format: "%02x", $0) }.joined(separator: " "))", + // Avoid dumping entire payload; log size and short prefix for diagnostics + let prefix = data.prefix(16).map { String(format: "%02x", $0) }.joined(separator: " ") + SecureLogger.log("❌ Failed to decode notification packet (len=\(data.count), prefix=\(prefix))", category: SecureLogger.session, level: .error) return } diff --git a/bitchat/Services/NostrTransport.swift b/bitchat/Services/NostrTransport.swift index 7e42886d..77eee1ef 100644 --- a/bitchat/Services/NostrTransport.swift +++ b/bitchat/Services/NostrTransport.swift @@ -48,16 +48,7 @@ final class NostrTransport: Transport { func sendPrivateMessage(_ content: String, to peerID: String, recipientNickname: String, messageID: String) { Task { @MainActor in - // Resolve favorite by full noise key or by short peerID fallback - var recipientNostrPubkey: String? - if let noiseKey = Data(hexString: peerID), - let fav = FavoritesPersistenceService.shared.getFavoriteStatus(for: noiseKey) { - recipientNostrPubkey = fav.peerNostrPublicKey - } - if recipientNostrPubkey == nil, peerID.count == 16 { - recipientNostrPubkey = FavoritesPersistenceService.shared.getFavoriteStatus(forPeerID: peerID)?.peerNostrPublicKey - } - guard let recipientNpub = recipientNostrPubkey else { return } + guard let recipientNpub = resolveRecipientNpub(for: peerID) else { return } guard let senderIdentity = try? NostrIdentityBridge.getCurrentNostrIdentity() else { return } SecureLogger.log("NostrTransport: preparing PM to \(recipientNpub.prefix(16))… for peerID \(peerID.prefix(8))… id=\(messageID.prefix(8))…", category: SecureLogger.session, level: .debug) @@ -105,15 +96,7 @@ final class NostrTransport: Transport { guard !readQueue.isEmpty else { isSendingReadAcks = false; return } let item = readQueue.removeFirst() Task { @MainActor in - var recipientNostrPubkey: String? - if let noiseKey = Data(hexString: item.peerID), - let fav = FavoritesPersistenceService.shared.getFavoriteStatus(for: noiseKey) { - recipientNostrPubkey = fav.peerNostrPublicKey - } - if recipientNostrPubkey == nil, item.peerID.count == 16 { - recipientNostrPubkey = FavoritesPersistenceService.shared.getFavoriteStatus(forPeerID: item.peerID)?.peerNostrPublicKey - } - guard let recipientNpub = recipientNostrPubkey else { scheduleNextReadAck(); return } + guard let recipientNpub = resolveRecipientNpub(for: item.peerID) else { scheduleNextReadAck(); return } guard let senderIdentity = try? NostrIdentityBridge.getCurrentNostrIdentity() else { scheduleNextReadAck(); return } SecureLogger.log("NostrTransport: preparing READ ack for id=\(item.receipt.originalMessageID.prefix(8))… to \(recipientNpub.prefix(16))…", category: SecureLogger.session, level: .debug) @@ -149,15 +132,7 @@ final class NostrTransport: Transport { func sendFavoriteNotification(to peerID: String, isFavorite: Bool) { Task { @MainActor in - var recipientNostrPubkey: String? - if let noiseKey = Data(hexString: peerID), - let fav = FavoritesPersistenceService.shared.getFavoriteStatus(for: noiseKey) { - recipientNostrPubkey = fav.peerNostrPublicKey - } - if recipientNostrPubkey == nil, peerID.count == 16 { - recipientNostrPubkey = FavoritesPersistenceService.shared.getFavoriteStatus(forPeerID: peerID)?.peerNostrPublicKey - } - guard let recipientNpub = recipientNostrPubkey else { return } + guard let recipientNpub = resolveRecipientNpub(for: peerID) else { return } guard let senderIdentity = try? NostrIdentityBridge.getCurrentNostrIdentity() else { return } let content = isFavorite ? "[FAVORITED]:\(senderIdentity.npub)" : "[UNFAVORITED]:\(senderIdentity.npub)" SecureLogger.log("NostrTransport: preparing FAVORITE(\(isFavorite)) to \(recipientNpub.prefix(16))…", @@ -183,6 +158,21 @@ final class NostrTransport: Transport { } } + // MARK: - Helpers + private func resolveRecipientNpub(for peerID: String) -> String? { + if let noiseKey = Data(hexString: peerID), + let fav = FavoritesPersistenceService.shared.getFavoriteStatus(for: noiseKey), + let npub = fav.peerNostrPublicKey { + return npub + } + if peerID.count == 16, + let fav = FavoritesPersistenceService.shared.getFavoriteStatus(forPeerID: peerID), + let npub = fav.peerNostrPublicKey { + return npub + } + return nil + } + func sendBroadcastAnnounce() { /* no-op for Nostr */ } func sendDeliveryAck(for messageID: String, to peerID: String) { Task { @MainActor in